大数据复习笔记
第一章
1. 什么是数据分析?
广义数据分析,指用适当的分析方法对收集来的大量数据进 行分析,提取有用信息,形成结论,是对数据加以详细研究 和概括总结的过程。
2. 数据分析方法分类
包括狭义数据分析和数据挖掘。
前者得到特征统计量结果。
后者得到特征模型或规则。
3. 数据分析的流程
虽然每个公司都会根据自身需求创建最适 合的数据分析流程,但是数据分析的核心 步骤是一致的。
![[Pasted image 20230604101046.png]]
4. 数据的预处理
指对数据进行数据合并、数据清洗、数据标准化和 数据变换,并直接用于分析建模的过程。
- 数据合并:将多源相关数据合并在一起;
- 数据清洗:去除重复、缺失、异常、不一致数据;
- 数据标准化:去除特征间的量纲差异;
- 数据变换:离散化、哑变量处理等满足后期数据要求。
在数据分析的过程中,数据预处理的各个过程互相 交叉,并没有明确的先后顺序。
5. 什么是模型优化
指模型性能在经过模型评价后已经达到了要求, 但在实际生产环境应用过程中,发现模型的性能并不理想, 继而对模型进行重构与优化的过程。
6. 数据分析基本要求
- 有效的数据质量
- 优秀的分析引擎
- 合适的分析算法
- 对未来合理预测
- 数据结果可视化
7. Python基础语法:数据类型(列表、字典、元组)、函数的使用?
- 列表
8. 大数据定义?
大数据是指无法在一定时间内用常规软件工具对其内 容进行抓取、管理和处理的数据集合。
- 四V特征
- Volume规模性
- Variety多样性
- Velocity高速性
- Value价值密度低
9. 大数据思维
- 全样而非抽样
- 效率而非精确
- 相关而非因果
10. MLlib库中的两类库函数?
- spark.mllib 包含基于RDD的原始算法API。库内所有算 法实现都是基于RDD实现;
- spark.ml 提供了基于DataFrame高层次的API,可以用 来构建机器学习工作流(PipeLine)。Pipeline 弥补了 原始spark.mllib库的不足,向用户提供了一个基于 DataFrame 的机器学习工作流式 API
11. PipeLine工作流水线概念?
- 在MLlib中,通过一系列有序的、可重复执行操作组 成的机器学习流程。
- PipeLine的重点是提高效率。
第二章
12. numpy数组的创建
- numpy本质上来说是一个数组,可以是一维的、二维的甚至是任意高维的数组。
- numpy使用array([...])建立数组,其中[...]是数组 的数据。
- numpy一维数组创建:
- a=np.array([1,2,3])
- numpy二维数组创建
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
for i in range(len(a)):
print(a[i])
print()
13. numpy数组维数、大小、数据类型?
- 使用**ndim获取数组的维数**
- 使用**shape获取维度的大小**,shape是一个元祖
- 使用**dtype获取数组数据类型**
14 . numpy序列数组的使用?
- 创建一个形状为shape,值为(0,1)范围均匀分布随 机值的数组;
- np.random.random(shape)
- 创建一个形状为shape,值为{a,b)整数范围的随机 值的数组;
- numpy.random.randint(a,b,shape)
- 创建一个形状为shape,平均值为mu,均方差为std 的正态分布数组;
- np.random.normal(mu,std,shape)
- 创建一个arange(start🔚step)序列值的一维数 组,dtype是元素类型。
- numpy.arange(start, end,step)
- 对(start,end)区间平分n等分,默认endpoint=True 表示包含end值,endpoint=False不包含end值。
- np.linspace(start,end,n,endpoint)
15 . numpy改变数组形状?
- 改变形状
- np.reshape(m,n,...)
- m,n等参数规定了数组新的形状维数值;
- 注意:改变形状时要保证原来的数组的总数组元素不改变。
- 拉伸数组
- 在改变形状时有时候需要拉伸数组使得它成为一个一维的 数组,可以使用
- np.ravel()
- 例子
# 1
import numpy as np
a=np.arange(12)
print("a=",a)
b=a.reshape(3,4)
print("b=",b)
c=b.reshape(4,3)
print("c=",c)
d=c.reshape(2,3,2)
print("d=",d)
# 2
import numpy as np
a=np.arange(6)
print("a=",a)
b=a.reshape(2,3)
print("b=",b)
c=b.ravel()
print("c=",c)
16. numpy数组切片P28-34
- 一维数组切片
- 一维数组切片与字符串切片非常相似。
- 二维数组切片
- 数组切片一般表示成a[sliceX,sliceY],其中 sliceX、sliceY分别是行列切片
sliceX或者sliceY是单一数值,那么取数组 的一个元素。
- 数组切片一般表示成a[sliceX,sliceY],其中 sliceX、sliceY分别是行列切片
- a[0,2]是2,取第一行第三列元素。
sliceX或者sliceY如果为":"的格式,那么是 指整行或者整列。 - a[:,1]是第一列全部[1,5,9]
- a[2,:]是第三行全部[8,9,10,11]
- a[:,:]就是a自己
sliceX或者sliceY为start🔚step的序列 格式,那么就是按这个序列取指定的行或 者列。 - a[1:3,2]是第一、二行与第3列的元素,即 a[1,2]=6,a[2,2]=10两个元素。
sliceX或者sliceY有一个是列表,那么取列 表中规定的行或者列。 - a[[0,2],1]是元素a[0,1]=1,a[2,1]=9两个元素
- a[[0,2],:]是第一行[0,1,2,3]与最后一行 [8,9,10,11]。
如果sliceX与sliceY都是列表,那么要求它 们两个长度要一样,取两个列表对应元素 确定的数组元素。 - a{[0,2],[1,3]}是元素a[0,1]与a[2,3]两个元素。
- 注意不是a[0,1]、a[0,3]、a[2,1]、a[2,3]的四个 元素。
#lianxi1
import numpy as np
a=np.arange(12).reshape(3,4)
print(a)
print("a[0,2]=",a[0,2])
print("a[:,1]=",a[:,1])
print("a[2,:]=",a[2,:])
print("a[1:3,2]=",a[1:3,2])
print("a[[0,2],1]=",a[[0,2],1])
print("a[[0,2],:]=",a[[0,2],:])
print("a[[0,2],[1,3]]=",a[[0,2],[1,3]])
#lianxi2
import numpy as np
a=np.arange(12).reshape(3,4)
print(a) b=a[[0,2],:] b=b[:,[1,3]]
print(b) b=a[:,[1,3]] b=b[[0,2],:]
print(b)
17. numpy数组增加、删除?P37-39
- a是shape(m,n)数组:
- 如果b是shape(k,n)形状,那么c=np.append(a,b,axis=0)表 示在行方向追加,b的k行追加到a的行后面,c是一个 shape(m+k,n)的数组。
- 如果b是shape(m,k)形状,那么c=np.append(a,b,axis=1)表 示在列方向追加,b的k列追加到a的列后面,c是一个 shape(m,n+k)的数组。
import numpy as np
a=np.arange(6).reshape(2,3) b=np.arange(-1,-10,-1).reshape(3,3) c=np.arange(-1,-5,-1).reshape(2,2)
print("a=",a) print("b=",b) print("c=",c)
d=np.append(a,b,axis=0) print("d=",d)
e=np.append(a,c,axis=1) print("e=",e)
- np.delete(a,slice,axis=0)按行删除slice切片出的元素;
- np.delete(a,slice,axis=1)按列删除slice切片出的元素;
import numpy as np
a=np.arange(12).reshape(3,4) print("a=",a)
b=np.delete(a,[0,2],axis=0) print("b=",b)
c=np.delete(a,2,axis=1) print("c=",c)
18. numpy数组四则运算?P41-42
- 一个常数与数组进行四则运算,结果是数组每个元素与 该常数进行四则运算。
- 两个相同形状的数组a与b四则运算,结果是数组每个元 素与对应元素四则运算。
import numpy as np
=np.arange(6).reshape(2,3)
print("a=",a) print("a+2=",a+2) print("a-2=",a-2) print("a*2=",a*2) print("a/2=",a/2)
import numpy as np
a=np.arange(1,7).reshape(2,3) b=np.arange(-1,-7,-1).reshape(2,3)
print("a=",a) print("b=",b) print("a+b=",a+b) print("a-b=",a-b) print("a*b=",a*b) print("a/b=",a/b)
19.numpy数组比较运算?P44-45
数组的比较运算返回一个相同形状的bool值数组
import numpy as np
a=np.arange(6).reshape(2,3) print("a=",a)
b=(a>3) print("b=",b)
20. 数组nan,inf值处理?P46-48
替换数组的np.nan值
import numpy as np
a=np.arange(6).reshape(2,3)
a=a.astype(np.float32) a[0,0]=np.nan
a[1,1]=np.nan print(a)
b=np.isnan(a)
print("b=",b) a[b]=0 print("a=",a)
替换数组的np.inf值
import numpy as np
a=np.arange(6).reshape(2,3)
a=a.astype(np.float32) print(a)
b=3/a print(b)
c=np.isinf(b) b[c]=0 print(b)
21.numpy计算与存储?P50-53
- numpy定义了对数组的最大值max、最小值min、 平均值mean、总和值sum等的统计计算。
- 如果a是一个shape(m,n)的二维数组,以平均值 mean为例,规则如下:
- numpy.mean(a,axis=0)是对所有的行的元素进行平均值 计算,结果是一个n个元素的数组,每个元素对应一列 的平均值。
- numpy.mean(a,axis=1)是对所有的列的元素进行平均值 计算,结果是一个m个元素的数组,每个元素对应一行 的平均值。
import numpy as np #数组数据计算
a=np.arange(6).reshape(2,3)
print(a)
print("axis=0,max=",np.max(a,axis=0)) print("axis=1,max=",np.max(a,axis=1)) print("axis=0,min=",np.min(a,axis=0)) print("axis=1,min=",np.min(a,axis=1)) print("axis=0,mean=",np.mean(a,axis=0)) print("axis=1,mean=",np.mean(a,axis=1)) print("axis=0,sum=",np.sum(a,axis=0)) print("axis=1,sum=",np.sum(a,axis=1))
- 如果a是一个shape(m,n)二维数组,排序规则如下:
- numpy.sort(a,axis=0)是固定列,对所有行元素进行排序;
- numpy.sort(a,axis=1)是固定行,对所有列元素进行排序;
import numpy as np #数组数据排序
a=np.array([[1,-1,1,0],[0,1,5,2],[2,5,-1,-3]]) print(a)
b=np.sort(a,axis=0) print("axis=0 sort") print(b)
b=np.sort(a,axis=1) print("axis=1 sort") print(b)
- 使用numpy.loadtext函数读取这些数据
- 使用numpy.savetxt保存数据
import numpy as np #数组CSV存储
a=np.arange(6).reshape(2,3) print("a=",a) np.savetxt("data.csv",a,delimiter=",") b=np.loadtxt("data.csv",delimiter=",",dtype=np.int32) print("b=",b)
第三章
DataFrame基本操作?P24-40
- DataFrame是一张二维的数据表,非常类似数据库 中的数据表,由行、列组成,每列有一个名称 column,每行一个序号或者index。
- 例如学生名单就是一张典型的二维数据表:
- 行数据创建
d=pd.DataFrame([ {"Name":"A","Sex":"M","Age":20}, {"Name":"B","Sex":"F","Age":21}, {"Name":"C","Sex":"F","Age":22}, {"Name": "D", "Sex": "F", "Age": 23} ])
- 列数据创建
d=pd.DataFrame( {"Name":["A","B","C","D"], "Sex":["M","F","F","M"], "Age":[20,21,22,23] })
- 创建并设置index
d=pd.DataFrame( [ {"Name":"A","Sex":"M","Age":20}, {"Name":"B","Sex":"F","Age":21}, {"Name":"C","Sex":"F","Age":22}, {"Name": "D", "Sex": "F", "Age": 23}], index=['a','b','c','d'] )
- 创建并设置Columns
d=pd.DataFrame( [["A","M",20], ["B","F",21], ["C","F",22], ["D","M",23] ], columns=["Name","Sex","Age"] )
- 使用默认Columns
d=pd.DataFrame([["A","M",20],["B","F",21],["C","F",22],["D","M",23]])
DataFrame数据操作?P42-52
- 使用d.values可以获得DataFrame数据,不包含 index与columns的二维的numpy数组。
import pandas as pd
import numpy as np
d=pd.DataFrame([["A","M",20],["B","F",21],["C","F",22],["D","M",23]], columns=["Name","Sex","Age"],index=['a','b','c','d'])
print(d) v=d.values print(type(v)) print(v)
#例:numpy数组创建DataFrame
import numpy as np
a=pd.DataFrame(np.arange(12).reshape(4,3)) print(a) b=pd.DataFrame(np.arange(12).reshape(4,3), columns=["Name","Sex","Age"],index=['a','b','c','d']) print(b)
- DataFrame按index或columns大小排序,规则是:
- (1) d.sort_index(axis=0),数据行按index进行排序;
- (2) d.sort_index(axis=1),数据列按columns进行排序;
import pandas as pd
import numpy as np
d=pd.DataFrame(np.random.randint(0,5,(3,4),dtype=np.int8), columns=["B","A","C","D"],index=['a','c','b'])
print("原始数据") print(d) print("按index排序") print(d.sort_index(axis=0)) print("按columns排序") print(d.sort_index(axis=1)) print("按index,columns排序") print(d.sort_index(axis=1).sort_index(axis=0))
- DataFrame按数据的大小进行排序,规则是:
- (1) d.sort_values(by=colunm,axis=0),数据行按column 列排序
- (2) d.sort_values(by=index,axis=1),数据列按index行进 行排序;\
import pandas as pd
import numpy as np
d=pd.DataFrame(np.random.randint(0,10,(3,4),dtype=np.int8), columns=["B","A","C","D"],index=['a','c','b'])
print("原始数据") print(d) print("按column=A列排序") print(d.sort_values(by="A",axis=0)) print("按index=a行排序") print(d.sort_values(by="a",axis=1))
- DataFrame数学运算
- 如果a、b是两个有相同index与cloumns的DataFrame数 据表,那么在保证它们的数据可以进行算术运算的前提 下,可以把a与b进行四则混合运算。
import pandas as pd
import numpy as np
a=pd.DataFrame(np.random.randint(0,10,(2,3),dtype=np.int8), columns=["B","A","C"],index=['a','b'])
b=pd.DataFrame(np.random.randint(1,10,(2,3),dtype=np.int8), columns=["B","A","C"],index=['a','b'])
print("a=\n",a) print("b=\n",b) print("a+b=\n",a+b) print("a-b=\n",a-b) print("a*b=\n",a*b) print("a/b=\n",a/b)
- DataFrame比较运算
- 如果a、b是两个有相同index与cloumns的DataFrame数 据表,那么在保证它们的数据可以进行比较运算的前提 下,可以把a与b进行比较运算,结果是一个相同结构的 bool类型的DataFrame。
import numpy as np
a=pd.DataFrame(np.random.randint(0,10,(2,3),dtype=np.int8), columns=["B","A","C"],index=['a','b'])
b=pd.DataFrame(np.random.randint(1,10,(2,3),dtype=np.int8), columns=["B","A","C"],index=['a','b'])
print("a=\n",a) print("b=\n",b) print("a>b=\n",a>b)
- DataFrame统计运算
- (1) d.sum(axis=0)是固定各个列,所有行数据累加;
- (2) d.sum(axis=1)是固定各个行,所有列数据累加;
- (3)其它统计函数mean、max、min的规则类似。
import pandas as pd
import numpy as np
d=pd.DataFrame(np.random.randint(0,10,(2,3),dtype=np.int8), columns=["B","A","C"],index=['a','b'])
print(d) print("sum(axis=0)") print(d.sum(axis=0)) print("sum(axis=1)") print(d.sum(axis=1)) print("max(axis=0)") print(d.max(axis=0)) print("max(axis=1)") print(d.max(axis=1))
- DataFramequery查询
- DataFrame的query查询是一个功能很强大的查询函数,它类似 SQL中的select语句,一般规则是 query(exp)
- 其中exp是一个由列名称组成的逻辑表达式,在多个条件时可以使 用"and"、"or"、”not"完成and、or、not的复杂运算。
# 例:查询Sex是"M"的学生
import pandas as pd
d=pd.DataFrame([["A","M",20],["B","F",21],["C","F",22],["D","M",23]], columns=["Name","Sex","Age"],index=['a','b','c','d'])
print(d) print(d.query("Sex=='M'"))
- DataFramequery查询练习
- ![[Pasted image 20230605210646.png]]
- ![[Pasted image 20230605210703.png]]
DataFrame数据存储?P54-57
- (1) 保存数据到文件中
- d.to_csv("data.csv",index=False)
- (2) 把数据读出到内存
- d=pd.read_csv("data.csv)
# 例:存储数据到CSV文件
import pandas as pd
d=pd.DataFrame([["A","M",20],["B","F",21],["C","F",22],["D","M",23]], columns=["Name","Sex","Age"], index=['a','b','c','d'])
d.to_csv("data.csv",index=False) e=pd.read_csv("data.csv") print(e)
- (1) 如果要把DataFrame的index存储到CSV文件, 那么需要使用
- d.to_csv("data.csv",index=True,index_label="ID")
- 其中index=True表示存储index ,同时设置index_label="ID"即把 index当成名称为ID的一列。
- (2) 读取带index的DataFrame
- d=pd.read_csv("data.csv",index_col="ID")
# 例:存储数据及index到CSV文件
import pandas as pd
d=pd.DataFrame([["A","M",20],["B","F",21],["C","F",22],["D","M",23]], columns=["Name","Sex","Age"],index=['a','b','c','d']) d.to_csv("data.csv",index=True,index_label="ID") e=pd.read_csv("data.csv",index_col="ID")
print(e) print(e.index)
pandas分组聚合计算?P15-20
- groupby()方法提供的是分组聚合步骤中的拆分功 能,能够根据索引或特征对数据进行分组。
- DataFrame.groupby(by=None, …)
函数名称 | 参数说明 |
---|---|
by | 接收list、str、mapping、function或generator。表示用于确定进行分组的依据,若传 入的是一个函数,则对索引进行计算并分组;若传入的是一个字典或Series,则字 典或Series的值用于作为分组依据;若传入一个NumPy数组,则数据的元素作为分 组依据;若传入的是字符串或字符串列表,则使用这些字符串所代表的特征作为分 组依据。默认为None |
axis | 接收0或1。表示操作的轴向。默认为0 |
- groupby()方法示例
import pandas as pd
import numpy as np
employees = ["小明","小周","小孙"] # 3位员工
df=pd.DataFrame({ "employees":[employees[x] for x in np.random.randint(0,len(employees),9)], "salary":np.random.randint(800,1000,9), "score":np.random.randint(6,11,9) })
groupbying1 = df.groupby(by="employees")
groupbying2 = df.groupby(by=["employees“,” salary”])
list(groupbying1) list(groupbying1)[0] list(list(groupbying1)[0])[0]
- groupby对象常用的描述性统计方法及说明如下表。
方法名称 | 方法说明 | 方法名称 | 方法说明 |
---|---|---|---|
count | 返回各组的计数值,不包括缺失 值 | cumcount | 对每个分组中的组员进行标 记,0~n-1 |
head | 返回每组的前n个值 | size | 返回每组的大小 |
max | 返回每组最大值 | min | 返回每组最小值 |
mean | 返回每组的均值 | std | 返回每组的标准差 |
median | 返回每组的中位数 | sum | 返回每组的和 |
groupbying = df.groupby(by="employees")
groupbying["employees"].min()
- agg()方法支持对每个分组应用某函数,包括 Python内置函数或自定义函数。
- 针对DataFrame的agg()方法基本使用格式如下:
DataFrame.agg(func, axis=0, *args, **kwargs)
函数名称 | 参数说明 |
---|---|
func | 接收list、dict、function或str。表示用于聚合数据 的函数。无默认值 |
axis | 接收0或1。代表操作的轴向。默认为0 |
- agg()方法示例
employees = ["小明","小周","小孙","小王","小张"] # 5位员工
time = ["上半年", "下半年"] df=pd.DataFrame({ "employees":np.random.choice(employees,10), # 在员工中重复 选择10次
"time":np.random.choice(time,10), "salary":np.random.randint(800,1000,10), # 800-1000之间的薪 资选择10个数值
"score":np.random.randint(6,12,10) # 6-11的分数选择10个 })
df.groupby("employees").agg({"salary":"sum"}) df.groupby("employees").agg({"salary":["sum","min"]}) df.groupby("employees").agg({"salary":np.sum}) df.groupby("employees").agg({"salary":[np.min],"score":[np.sum]})
pandas数据预处理(非常重要)?P25-64
合并数据:
- 所谓的合并数据是将多个Pandas对象 (DataFrame/Series)合并成一个,具体包 括:
- 堆叠合并
- 主键合并
- 重叠合并
- 堆叠合并函数concat
pandas. concat(objs, axis=0, join=‘outer’, ignore_index=False)
- concat函数的常用参数及其说明如下:
- objs:一个列表,内容可以是DataFrame或者Series
- axis:默认是0代表按行合并,1代表按列合并
- join:合并的时候索引的对齐方式,默认是outer,也 可以是inner
- ignore_index:是否忽略掉原来的数据索引
- axis=0时为纵向堆叠合并
第四章
Matplotlib绘图的4层结构?P5
- canvas(画板):位于最底层,导入Matplotlib库时自动存在。
- figure(画布):在canvas之上,从这一层开始设置其参数。
- axes(子图):将figure分成不同块,实现分面绘图。
- 图形信息:添加或修改axes上的图形信息,优化图表显示效果。
Matplotlib通过rcParams设置可视化参数?P15
- 例题2:画出y=sin(x)的图像
- 通过rcParams设置可视化参数
rc参数设置 | 解释 | 取值 |
---|---|---|
lines.linewidth | 线条宽度 | 取0~10之间的数值,默认为1.5 |
lines.linestyle | 线条样式 | 可取“-” “--” “-.” “ :”4种。默认为“-” |
lines.marker | 线条上点的形状 | 可取“o” “D” “h” “.” “,” “S”等20种,默认为 None |
lines.markersize | 点的大小 | 取0~10之间的数值,默认为1 |
Matplotlib饼图、柱状图、直方图?P27-38
- 饼图是将各项的大小与各项总和的比例显示在一张 “饼”中。
- pyplot中绘制饼图函数为pie,基本使用格式如下。
plt.pie(x, labels=None, colors=None, autopct=None, radius=1,…)
#列题一
import matplotlib.pyplot as plt plt.figure(figsize=(4,3)) plt.pie([1,2],labels=['A','B'],autopct="%.1f%%") plt.show()
#例题2
import matplotlib.pyplot as plt plt.figure(figsize=(4,3)) plt.pie([1,2],labels=['A','B'],autopct="%.1f%%") plt.show()
#练习题
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
labels = ['娱乐','育儿','饮食','房贷','交通','其它'] sizes = [2,5,12,70,2,9] plt.figure(figsize=(4,3)) plt.pie(sizes,labels=labels,autopct='%1.1f%%') plt.title("饼图示例-8月份家庭支出") plt.show()
参数名称 | 参数说明 |
---|---|
x | 接收array。表示用于绘制饼图的数据。无默认值 |
labels | 接收list。表示指定每一项的标签名称。默认为None |
color | 接收特定str或包含颜色字符串的array。表示饼图颜色。默认为None |
autopct | 接收特定str。表示指定数值的显示方式。默认为None |
radius | 接收float。表示饼图的半径。默认为1 |
- 柱状图经常显示一些离散数据,使用bar函数画柱 状图
plt.bar(x, height, width,…)
#例题1
import matplotlib.pyplot as plt
c=["2016","2017","2018","2019"] n=[5100,4500,4200,5500] x=range(len(c)) plt.figure(figsize=(4,3)) plt.bar(x,n,width=0.3,color=["b","r","g","y"]) plt.xticks(x,c) plt.xlabel("Year") plt.ylabel("Profit") plt.show()
#例题2
import matplotlib.pyplot as plt c=["2016","2017","2018","2019"] n=[5100,4500,4200,5500] x=range(len(c)) plt.figure(figsize=(4,3)) plt.bar(x,n,width=0.3,color=["b","r","g","y"]) plt.xticks(x,c) plt.xlabel("Year") plt.ylabel("Profit") plt.show()
#练习题
import matplotlib.pyplot as plt import numpy as np size = 10 y1 = [6, 5, 8, 5, 6, 6, 8, 9, 8, 10] y2 = [5, 3, 6, 4, 3, 4, 7, 4, 4, 6] y3 = [4, 1, 2, 1, 2, 1, 6, 2, 3, 2] x = np.arange(size) total_width = 0.8 width = total_width / 3 x = x - (total_width - width) / 2 plt.figure(figsize=(4,3)) plt.bar(x, y1, width=width, label='label1',color='red') plt.bar(x + width, y2, width=width, label='label2',color='deepskyblue') plt.bar(x + 2 * width, y3, width=width, label='label3', color='green') plt.xticks() plt.legend(loc="upper left") # 防止label和图像重合显示不出来
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.ylabel('value') plt.xlabel('line') plt.title("title") plt.show()
参数名称 | 参数说明 |
---|---|
x | 接收array或float。表示x轴数据。无默认值 |
height | 接收array或float。表示指定柱形图的高度。无默认值 |
width | 接收array或float。表示指定柱形图的宽度。默认为0.8 |
align | 接收str。表示整个柱形图与x轴的对齐方式,可选center和edge。默认为center |
color | 接收特定str或包含颜色字符串的list。表示柱形图颜色。默认为None |
- 直方图经常显示一些数据的分布,把一维数据data 划分成bins个等分,看看每个等分的区间内数据数量。
plt.hist(data,bins,…)
#例题1
import numpy as np import matplotlib.pyplot as plt data=np.random.random(10) plt.figure(figsize=(4,3)) plt.hist(data,bins=10,facecolor="blue") plt.show()
#例题2
import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.sans-serif']=['SimHei'] matplotlib.rcParams['axes.unicode_minus']=False data=np.random.normal(0,1,1000) plt.figure(figsize=(4,3)) plt.hist(data,bins=10,label="(0,1)正态分布") plt.legend() plt.show()
#练习题
p38
Matplotlib子图?P46-49
- 通过调用:
plt.subplot(nrows,ncols,current)
- 其中nrows,ncols,current都是整数,表示规划一 个nrows行,ncols列的子图矩阵,并选取序号为 current的子图为当前活动的图像
#例题1:使用子图画出y=sin(x)与y=cos(x)的图像
import numpy as np import matplotlib.pyplot as plt # 画第1个图:折线图
x=np.arange(1,100) plt.figure(figsize=(4,3)) plt.subplot(221) plt.plot(x,x*x) # 画第2个图:散点图
plt.subplot(222) plt.scatter(np.arange(0,10), np.random.rand(10)) # 画第3个图:饼图
plt.subplot(223) plt.pie(x=[15,30,45,10],labels=list('ABCD'),autopct='%.0f',explode=[0,0.05,0, 0]) # 画第4个图:条形图
plt.subplot(224) plt.bar([20,10,30,25,15],[25,15,35,30,20],color='b') plt.show()
例题2:使用子图画出y=sin(x)与y=cos(x)的图像
import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,2*np.pi,100) plt.subplot(1,2,1) plt.plot(x,np.sin(x),label="y=sin(x)") plt.plot(x,x*0) plt.legend() plt.subplot(1,2,2) plt.plot(x,np.cos(x),label="y=cos(x)") plt.plot(x,x*0) plt.legend() plt.show()
#练习题:使用子图画出y=sin(x)、y=cos(x)、 y=x*x、y=x*x*x的图像
----------
pyecharts全局配置项(有哪些,能区分)?P14
- 全局配置项可通过set_global_opts方法设置
![[Pasted image 20230608135029.png]]
pyecharts formatter {a}…{d}含义?P25
- 折线(区域)图、柱状(条形)图、K线图 : {a}(系列名称),{b}(类目值),{c}(数值), {d}(无)
- 散点图(气泡)图 : {a}(系列名称),{b}(数据名称),{c}(数值数组), {d}(无)
- 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值), {d}(无)
- 饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比) formatter: Optional[str] = None
pyecharts 折线图练习题?P31
pyecharts 散点图练习题?P37
---------
pyecharts如何导入测试数据FakerP4-5
- 导入测试数据Faker
from pyecharts.faker import Faker
- Faker.choose()在以下随机选取一个结果:
- Faker.clothes
- Faker.drinks
- Faker.phones
- Faker.fruits
- Faker.animal
- Faker.dogs
- Faker.week
- Faker.values()随机生成7个随机数
pyecharts漏斗图练习题?P11
pyecharts仪表盘练习题?P16
pyecharts雷达图练习题?P19
pyecharts Map地图练习题?P27
第五章
什么是网络爬虫?P6
网络爬虫(Web Spider) :又称为网络机器人、网络蜘蛛,是一种通过既定规则,自动获取网页数据的技 术工具。
爬虫的基本原理?P9
基本原理:通过向目标服务器发起HTTP请求,得到响应结果,从响应结果中完成数据的提取,清洗和存储的过程。
爬虫的类型?P10
- 按照系统结构和实现技术,网络爬虫的类型可以分为:
- 通用网络爬虫
- 聚焦网络爬虫
- 增量式网络爬虫
- 深层网络爬虫
通用网络爬虫原理?P11
- 原理:爬行对象从一些种子URL扩充到整个Web,主 要为门户搜索引擎和大型Web服务提供商采集数据。
- 为提高工作效率,采取一定的爬行策略。常用的爬行 策略有:深度优先策略、广度优先策略。
聚焦网络爬虫原理?P12
原理:又称主题网络爬虫,是指选择性地爬行那些与 预先定义好的主题相关页面的网络爬虫。
增量式网络爬虫原理及目标?P13
- 原理:是指对已下载网页采取增量式更新和只爬行新 产生的或者已经发生变化网页的爬虫,它能够在一定 程度上保证所爬行的页面是尽可能新的页面。
- 两个目标:
- 保持本地页面集中存储的页面为最新页面
- 提高本地页面集中页面的质量
为什么会有反爬机制?P15
- 在大数据时代,数据价值大,很多网站不愿意自己的数据 被免费获取;
- 简单低级的网络爬虫,数据采集速度快,HTTP请求过多, 造成网络服务器不能正常工作,影响网站运营管理。
超文本与HTML?P17
超文本(Hypertext)是指使用超链接的方法,把文字 和图片信息相互联结,形成具有相关信息的体系。
常用实现HTTP请求的模块有哪些?P21
- urllib模块
- urllib3模块
- requests模块
requests生成Get、POST请求?P32
- 以GET请求方式:
- 以POST请求方式:
#GET
import requests response = requests.get('http://www.baidu.com') #对需要爬取的网页发送请求
print('状态码:',response.status_code) #打印状态码
print('url:',response.url) #打印请求url
print('header:',response.headers) #打印头部信息
print('cookie:',response.cookies) #打印cookie信息
print('text:',response.text) #以文本形式打印网页源码
print('content:',response.content) #以字节流形式打印网页源码
#POST
import requests #表单参数
data = {'kw':'苹果',} #对需要爬取的网页发送请求
response = requests.post('https://fanyi.baidu.com/sug',data=data) #以字节流形式打印网页源码
print(response.content)
BeautifulSoup输入输出文档转换?P36
- BeautifulSoup提供一些简单的、Python式的函数来 解析文档,为用户提供需要的数据。
- BeautifulSoup自动将输入文档转换为Unicode编码, 输出文档转换为UTF-8编码。
- 目前推荐使用BeautifulSoup4
- pip install bs4
BeautifulSoup四大对象?P39
- Tag
- 就是HTML中的标签
- NavigableString
- 在网页解析时,已经得到了标签的内容以后,如果我们想获取标签 内部的文字,则可以使用.string方法,其返回值就是一个 NavigableString对象。
- BeautifulSoup
- BeautifulSoup对象表示的是一个文档的全部内容,是一个特殊 的Tag。例如,可以分别获取它的类型、名称以及属性:
- Comment
- BeautifulSoup库中将文档的注释部分识别为Comment类型,是 一种特殊类型的NavigableString对象,输出的内容不包括注释符号。
BeautifulSoup遍历文档树、搜索文档树、CSS选择器P44-53
BeautifulSoup综合实例?P55
--------------------
BeautifulSoup高级查找?P5-24
BeautifulSoup课堂练习?P25
第六章
sklearn库中的标准数据集?P13
- 加载后的数据集可以视为一个字典,几乎所有的 sklearn数据集均可以使用如下属性分别获取数据集 的数据、标签、特征名称和描述信息。
- data 获取数据集的数据
- target 获取数据集的标签
- feature_names 获取数据集的特征名
- DESCR 获取数据集的描述信息
sklearn数据集划分?P27
- 为了保证模型在实际系统中能够起到预期作用, 一般需要将总样本划分成独立3部分:
- 训练集(train set) 用于估计模型
- 验证集(validation set) 用于确定网络结构或模型复杂程度的参数
- 测试集(test set) 用于检验最优模型的性能
- 典型的划分方式:
- 训练集数量,占总样本数量的50%。
- 验证集数量,占总样本数量的25%。
- 测试集数量,占总样本数量的25%。
如何解决总样本数据较少训练集、测试集划分难的问题及 步骤?P38
sklearn数据预处理函数?P33
- sklearn提供了一系列数据预处理函数。
函数名称 | 函数说明 |
---|---|
MinMaxScaler | 离差标准化函数 |
StandardScaler | 对特征进行标准差标准化 |
Normalizer | 对特征进行归一化 |
Binarizer | 对定量特征进行二值化处理 |
OneHotEncoder | 对定性特征进行独热编码处理 |
FunctionTransformer | 对特征进行自定义函数变换 |
sklearn常用评价指标有哪些,如何计算?P46
- sklearn.metrics指标
![[Pasted image 20230608140850.png]]
----------------
sklearn数据建模步骤?P8
- 读取数据
- 数据预处理
- 数据划分
- 模型建模
- 模型评估
精确率、召回率、F1值和Cohen’s Kappa系数等指标理解 (最佳值)?P14
- 分类模型对测试集进行预测而得出的准确率并不能 很好地反映模型的性能,为了有效判断一个预测模 型的性能表现,需要结合真实值计算出精确率、召 回率、F1值和Cohen’s Kappa系数等指标来衡量。
- 常规分类模型的评价方法如下表所示。
![[Pasted image 20230608141037.png]]
K近邻算法优缺点?P43-44
- 算法优点:
- 算法思路简单,易于实现;
- 重新训练的代价低,当有新样本要加入训练集中时, 无需重新训练;
- 计算复杂度线性增长,复杂性与训练集的规模呈线 性增长。
- 算法缺点:
- 分类速度慢,待分样本须与所有训练集计算相似度;
- 各属性权重相同影响准确率,如训练样本数量不均 衡,可能出现错分;
- 样本库容量依赖性较强,训练样本越多精度越高;
- K值不好确定,不同的K值可能分类结果不同。
sklern K近邻 练习题?P46
- 课堂练习题:
- 导入鸢尾花数据集,将其80%的数据作为训练样本,另 外20%作为测试样本,分别选取n_neighbors=3,5,10,建立对应 k近邻模型,并计算不同n_neighbors值下的准确率?
--------------------
支持向量机的基本思想、适用数据场景?P9
- 基本思想:通过构造一个分类函数(或分类器), 把数据项映射到给定类别中的某一个,从而预测未 知数据类别;
- 适用数据场景:线性可分 & 线性不可分
支持向量机 -线性不可分 利用核函数…P18
- 变换难确定,计算开销大
- 利用核函数可以进行有效的计算
- 核函数:核函数是一个对所有的xi , xj∈X,满足:
- K(xi ,xj ) = <φ(xi ), φ(xj )>
- 常用核函数:
- 多项式核函数:
- 高斯核函数:
- Sigmoid核函数:
支持向量机 -课堂练习?P23
- 导入乳腺癌数据集,建立相应的SVM模型,
- 训练集、测试集之比为8:2
- 指定惩罚系数为1.0,使用线性核函数
- 计算在训练集、测试集上的准确率
- 预测在测试集上的分类结果
决策树模型简介、定义、学习过程?P24-26
- 决策树是一种基于树形结构的非线性分类模型;
- 决策树可以用来处理分类特征和数值特征;
- 决策树无需对特征做归一化或标准化处理;
- 定义:是一个类似于流程图的树形结构,树内部的每 一个节点代表的是对一个特征的测试,树的分支代表该 特征的每一个测试结果,树的每一个叶子节点代表一个 类别。树内部节点用矩形表示,叶子节点用椭圆表示。
- 学习过程
- 特征选择:从训练数据中众多特征中选择一个特征作为当 前节点的分裂标准,如何选择特征是关键;(1,信息增益,2.基尼系数)
- 决策树生成: 根据选择的特征评估标准,从上至下递归地 生成子节点,直到数据集不可分则停止决策树停止生长;
- 剪枝:决策树容易过拟合,一般来需要剪枝,缩小树结构 规模、缓解过拟合。
什么是信息熵(或熵)?P27
- 信息熵
- 香农理论的重要特征是熵(entropy)的概念,他证明熵 值与信息内容的不确定程度有等价关系。
- 熵指的是对事件中不确定的信息的度量。一个事件中, 熵越大,其含有的不确定信息越大
什么是信息增益及值大小的意义?P32
- 信息增益
- 信息增益指的是在决策树的生成过程中,属性选择划分 前和划分后不同的信息熵差值。
- $\operatorname{Gain}(O, v)=E(O)-\sum_{v=1}^{V} p_{v} \cdot \log p_{v}$
结论:信息增益越大,说明在知道属性v的取值后样 本集的不确定性减小的程度越大,因此,我们可以根 据信息增益进行划分属性的选择
基尼系数大小含义?P36
- 基尼系数
- 公式如下:
- 按照属性v划分后的基尼系数
结论:基尼系数越大,说明在知道属性v的取值后样 本集的不确定性减小的程度越大,因此,我们可以根 据基尼系数进行划分属性的选择
利用Sklearn决策树构建是否发放贷款决策树模型?P43
随机森林的优势和不足?P47
- 优势
- 不需要过于在意参数的调节
- 不要求对数据进行预处理
- 集成了决策树的所有优点,而且能够弥补决策树的不足
- 支持并行处理
- 不足
- 对于超高维数据集、稀疏数据集等,随机森林模型拟合优度不 佳,线性模型要比随机森林的表现更好一些
- 随机森林相对更消耗内存,速度也比线性模型要慢
---------------
回归模型和分类模型区别?P5
都是根据输入变量预测输出变量,区别在于输出变量的 类型,回归模型输出变量是连续值,分类模型输出变量 是离散值;
常用的回归模型评价指标及理解?P7
![[Pasted image 20230608142913.png]]
决策回归树模型?P39
- CART算法(classification and regression tree)是一种应用 广泛的决策树方法,既可以用于分类还可以用于回归。
- CART 全部是二叉树,其结点只有两种选择,‘是’和 ‘否’,通过不断的划分,将特征空间划分为有限个单 元,并在这些单元上确定预测的概率分布。
- 当CART作为分类树时,采用GINI系数作为分裂节点的 依据,当CART作为回归树时,使用样本最小方差作为 分裂节点的依据。
CART算法终止条件?P42
- 特征用尽无法再结点分裂:没有可供使用的特征再进行分裂,则树 停止分裂;
- 子结点中的样本已经都是同一类:此时,样本已经全部被划分出来 了,不用再进行区分;
- 子结点中没有样本可分裂:此时该结点已经没有样本可供划分,该 结点停止分裂。
第七章
MLlib特征工程?P16
- 特征抽取:从原始数据抽取特征
- 特征转换:放缩、变换或修改特征
- 特征选择:选择特征子集
TF-IDF?P18-20
- 词频-逆向文件频率(TF-IDF)是一种在文本挖掘 中广泛使用的特征向量化方法。
- 词语由t表示,文档由d表示,语料库由D表示。
- 词频TF(t,d)是词语t在文档d中出现的次数。
- 文件频率DF(t,D)是包含词语t的文档的个数。
常见的特征转换的作用?P27
- Tokenizer
- 将文本 拆分成单词的函数。
- StopWordsRemover
- 将文本 拆分成单词的函数。
- 停用字表由stopWords参数指定,使用Python列表结构。
- StringIndexer/IndexToString
- StringIndexer:给每个词按照出现频率安排一个编号索引,索引范围是 {0,vocab_size), vocab_size为词表的大小。
- IndexToString ◦ 把标签索引的一列重新映射回原有的字符型标签。
- StandardScaler/MinMaxScaler/MaxAbsScaler
- StandardScaler ◦ 对所有数据减去均值除以标准差,变为均值为0,方差为1 的正态分布数据
- MinMaxScaler ◦ 将每个特征调整到一个特定范围。
- MaxAbsScaler ◦ 将每个特征调整到[-1,+1]。
- Binarizer
- 通过setThreshold设置阈值,大于该阈值的设置为1,否则设 置为0。
- Normalizer
- 特征值/特征向量的p-范数
课堂练习题?P35
- 通过setThreshold设置阈值,大于该阈值的设置为1,否则设 置为0。
- 编写单词统计算法,在统计中去除停用词,停用词表保存 在tingyongci.txt中
- 编程实现计算文档的TF-IDF度量值
皮尔逊相关性、斯皮卡曼相关性适用性问题?P38
- 计算数据间相关系数,绝对值越大越相关,当取值为0 表示不相关,取值为(0~-1]表示负相关,取值为(0, 1] 表示正相关。
- MLlib中提供计算多个数据集相关性方法
- 皮尔逊相关性:适用于符合正态分布的数据
- 斯皮卡曼相关性:适用于不符合正态分布的数据
-----
Spark Logistic回归示例?P7-16
Spark决策树分类器示例?P17-24
Spark课内实践(去掉SVM)?P26
--------
Spark 线性回归示例?P6-11
广义线性回归基本原理?P12
- 线性回归模型适用于自变量X和因变量Y为线性关系, 随机误差项在正态分布假设下进行回归;
- 广义线性回归模型是线性回归模型的推广,随机误差 项是在指数分布的假设下进行回归;
- 广义线性回归模型支持设置一个链接函数来指定线性预测器和分布函数的平均值之间的关系。
Spark 课堂练习题1(去掉广义线性回归)?P20
Spark 决策树回归示例?P21-25
什么是保序回归模型及适用场景?P26-27
Spark 课堂练习题2?P32
--------
聚类概述?P5-6
- 聚类是一种无监督学习方法,在事先不知道分类的 情况下,根据数据间的相似度进行划分。
- 聚类目的:分析数据特性,将具有相同特性的数据 放在一个类别当中。
- 与分类的区别:
- 聚类是无监督的
- 分类是有监督的
- 常见聚类算法:
- 基于距离方法:KMeans
- 基于密度方法:DBSCAN
- 基于层次方法:BIRCH
- 基于网格方法:STING
- 基于模型方法:LDA模型、混合高斯模型
Kmeans算法步骤、优缺点?P8-9
- 算法步骤:
- 选择k个初始种子点作为形心;
- 重复第3步和第4步,直到第5步满足;
- 将每个点指派到最近的簇形心,形成k个簇;
- 重新计算每个簇的形心;
- 直到形心不再变化。
- 优点:
- 算法简单,复杂度与样本数量线性相关,非常适合大 规模数据的聚类分析。
- 缺点:
- 需要事先指定K值,K值设定好坏对聚类结果影响很大;
- 对初始种子的选择敏感;
- 无法发现非球形簇、聚类效果容易受噪声影响
概率密度函数?P18-19
- 概率密度函数
- u决定了分布的位置
- ![[Pasted image 20230608201403.png]]
- 标准差 决定了分布的幅度
- ![[Pasted image 20230608201416.png]]
单高斯分布聚类原理?P20
- 分类原理:利用已有样本数据建立一个单高斯分布模型, 对于一个待归类样本,计算其与构建模型的匹配程度。 ◦ 具体来讲,当一个样本带入建立好的高斯分布模型,计 算结果是否在一个确定阈值以内,如果是则认为它属于 此模型的聚类,否则不属于此模型的聚类。
混合高斯分布聚类原理?P22
- 为了解决这个问题,引入了混合高斯模型。
- 混合高斯模型假设:每个簇的数据都是符合高斯分布的, 输入数据的整体分布是各个簇的高斯分布线性组合。
课堂练习1、2?P25-26
主题聚类概述?P29-33
- 主题定义:是一篇文章词汇表上词语的条件概率分布 。 与主题关系越密切的词语,它的条件概率越大,反之则 越小。
- 举例:一篇文章如果涉及“百度”主题,那么“搜索”、 “李彦宏”等词语就会以较高的频率出现,如果涉及 “IBM”主题,那么“笔记本”会频繁出现
- 主题作用:文档之间是否相关往往不只决定于字面上的词 语重复,还取决于文字背后的语义关联。对语义关联的挖 掘,可以让我们的搜索更加智能化。
- 主题模型:是在得到文档隐含主题的同时,能够把具有相 同主题含义的文档聚到同一个簇内的方法。
- 主题聚类基础---词袋模型:
- 一种简单的文档表示方法。一篇文档可以通过统计所有单词的数目 来表示,这种方法不考虑语法和单词出现的先后顺序。
- 例如:如两篇文档:
- Jane wants to go to Shenzhen.
- Bob wants to go to Shanghai.
- 构建字典:
- 例句1:[1,1,2,1,1,0,0]
- 例句2:[0,1,2,1,0,1,1]
- LDA主题聚类:
- LDA是无监督算法,采用词袋模型表达文档,词袋模型 把每篇文档,都转换成一个词频向量
- LDA是一种主题模型,能够发现文档-词语之间所蕴含的 潜在语义关系,即主题。
- 将文档看成一组主题的混合分布,而主题又是词语的 概率分布
- 将高维度的“文档-词语”向量映射为低维度的“文 档-主题”及“主题-词语”向量空间。
- LDA主题聚类假设
- 文档集合中的所有文本均共享一定数量的隐含主题,它 将整个文档集视为隐含主题的集合,可以将文档集中每 篇文档的主题按照概率分布的形式给出。
Spark主题聚类示例?P37-42
Spark 课堂练习3?P42
------------
关联规则概述?P4-9
- 属于无监督学习方法
- 用来发现隐藏在大型数据集中的有意义的 联系
- 主要应用于商品摆放、交叉销售、医疗诊 断、气象预测、金融分析、网页挖掘等
- 在进行关联规则分析时,大型数据集中很 多规则可能只是偶然发生的,不具有指导 意义,为了从中寻找强度更高的关联,需 要给定一定的选择标准,该标准主要有2个, 分别是支持度和置信度
- 支持度:一条规则发生的可能性大小,如 果一个规则的支持度很小,表明他在事务 集合中的覆盖范围很小,可能是偶发的;
- 置信度:表示一条规则的准确性,置信度 越低,表明很难根据一个事务推出另一个 事务。
- 项与项集(I):项是关联规则中的基本元素,项集 是项的集合,例如I={i1,i2,…in},ij为项,I为项 集;
- 交易(T)与交易数据库(D):交易是项集的子集,记 为T,且T⊆I;交易数据库是交易的集合,记为D。
- 关联规则:蕴涵式X=>Y,其中X,Y⊂I,且X∩Y=∅。 表示某项X出现时另一项Y也出现
- 支持度(S):交易数据库D中包含X,Y的交易数与所 有交易数之比,记为S:
- $$S=\frac{|{T: X \cup Y}|}{|D|}$$
- 最小支持度(minS):0%---100%之间
- 置信度(C):交易数据库D中包含X,Y的交易数与包 含X的交易数之比:
- $$C=\frac{|{T: X \cup Y}|}{|{T: X}|}$$
- 最小置信度(minC): 0%---100%之间
- 关联规则是指在给定项集I与交易数据库D上满足如 下条件的X=>Y :S ≥ minS,C≥minC。
Apriori中的频繁项集?P15
- 频繁项集:所有支持度≥最小支持度的项集,这些项集 称为频繁项集。
- 频繁项集性质:
- 性质1:频繁项集的子集必为频繁项集;
- 性质2:非频繁项集的超集必不为频繁项集。
Apriori生成关联规则?P30
- 对于每个频繁项集L,产生L的所有非空子集S;
- 对于L的每个非空子集S,如果:𝐿的交易数/𝑆的交易数 ≥ minC,则输 出规则“𝑆 ⇒ (𝐿 − 𝑆)”
Apriori算法局限性?P33
- 问题1:Apriori会产生较多的小频繁项,小频繁项集过 多使得数据在进行计算处理时效率降低,降低了 Apriori整体效率。
- 问题2:由于频繁项集的处理需要多次扫描原样本数据 库,I/O处理消耗大量处理时间,算法在计算的过程中 消耗大量的资源在数据的读取上。
FP-growth算法改进思想及步骤?P34-35
- FP-growth算法改进思想
- 减少扫描数据库的次数
- 减少候选项集的数量
- 简化候选项集的支持度计算
- FPGrowth只需要对数据库扫描2次
- 第1次扫描数据库获得频繁1项集。
- 第2次扫描建立一颗FP树。
- FP树算法主要有两大步骤
- 利用数据库中的已有样本数据构建FP树;
- 建立频繁项集规则。
----------
协同过滤概述?P4-6
- 随着互联网内容增多,每天接收到的信息 量远超出人类信息处理能力;
- 信息过滤两种方法:协同过滤和搜索引擎;
- 搜索引擎是针对关键词过滤掉不想看的内容;
- 协同过滤是基于历史数据分析用户的兴趣点。
- 与搜索引擎过滤相比,协同过滤具有:
- 能够过滤难以基于内容的自动分析的信息,如 音乐;
- 能够基于复杂的、难以表达的概念进行过滤
- 具有推荐信息的能力,可以发现用户潜在兴趣;
- 推荐个性化、自动化程度高,能够有效利用其 他相似用户的回馈信息
- 关联规则与协同过滤的差别:
- 算法原理不同:前者挖掘物品间关联,后者根据用户/ 物品相似性进行推荐;
- 个性化程度不同:前者非个性化,与用户兴趣无关, 后者个性化,与用户兴趣有关;
- 使用场景不同:前者适用于物品较少场景,后者适用 于物品较多场景;
- 推荐倾向不同:前者为长尾,后者为热门。
矩阵分解算法?P13-14
- 基于矩阵分解的推荐算法在近些年的推荐大赛中 战绩颇丰,获奖队伍基本都使用了矩阵分解算法
- 与基于用户/物品的协同过滤算法相比,矩阵分解 算法计算的是用户与物品之间的隐语义模型;
- 缺点:矩阵分解算法的可解释性较差,不能很好 的为推荐结果做出解释
- 基本原理:将“用户-项目”评分矩阵R分解成用 户因子U矩阵和项目因子V矩阵,即R=UV;
- 理解:用户对项目的打分评价是有内在原因的, 矩阵分解就是捕捉在打分矩阵背后隐藏下来的信 息。
- 分解算法的选择:在分解算法中,奇异值分解 (SVD)对稀疏矩阵效果不好,在MLlib推荐系统 中使用交叉最小二乘法(ALS)进行近似计算z`
ALS示例?P21-26
评估标准?P29-33
- 准确率是协同过滤的核心评价指标;
- 该指标用于对物品的感兴趣程度或用户对 物品评分的推荐场景,使用评分的误差来 估算算法效果;
- RMSE计算公式:
- gs
- 推荐系统展示给用户的是一个推荐列表, 对于这N个推荐列表:
- gs
- 覆盖率描述了对物品长尾的发掘能力
- 定义为推荐系统能够推荐出来的物品占总 物品集合的比例;
- gs
- 热门排行榜的推荐覆盖率很低,这些物品 在总物品中占的比例很小;
- 一个好的推荐系统不仅满足用户的需求, 也会考虑供应商的需求;
- 因此,推荐系统既要有高准确率,也要有 高的覆盖率
- 为了满足用户广泛的兴趣,推荐列表需要 能够覆盖用户不同的兴趣领域,即推荐结 果需要具备多样性。
- gs
- s(i,j)表示物品i和j的相似度,𝑅(𝑢):在训练集上 给用户u做出的推荐列表
第八章
大数据安全特征?P11
- 大数据成为网络攻击的显著目标
- 大数据加大隐私泄露风险
- 大数据技术被应用到攻击手段中
- 大数据成为可持续攻击的载体
大数据安全问题?P12
- 隐私和个人信息安全问题
- 国家安全问题
大数据保护的基本原则?P38
- 数据主权原则
- 数据保护原则
- 数据自由流通原则
- 数据安全原则
数据治理的必要性?55
- 缺少统一的数据建设规划,导致存在数据孤岛问题,无法实现有序集中整合,无法保证业务数据的完整性和正确性
- 缺乏统一的数据建模标准,导致组织内对数据的描述和理解存在不一致的情况
- 缺少完备的数据管理职能体系,对于一些重点领域的管理(比如元数据、主数据、数据质等), 没有明确职责
如何理解“数据治理”?P58-61
- 明确数据治理的目标
- 确保数据的相关决策始终是正确、及时、有效和有前 瞻性的
- 确保数据管理活动始终处于规范、有序和可控的状态
- 确保数据资产得到正确有效的管理,并最终实现数据 资产价值的最大化
- 理解数据治理的职能
- 数据治理的职能是“评估、指导和监督”
- 设定数据管理职能的发展方向
- 监督数据资产的绩效。
- 把握数据治理的核心
- 数据治理关注的焦点问题是通过何种机制才能确保所 做决策的正确性。
- 决策权分配和职责分工是确保做出正确有效决策的核 心
- 抓住数据治理的本质
- 本质是对机构的数据管理和利用进行评估、指导和 监督,通过提供不断创新的数据服务,为其创造价 值
数据治理与数据管理的关系?P62
- 数 据 治 理
- 治理的重点在于设计一种制度架构,以达到相关利益主体之间的 权利、责任和利益的相互制衡,实现效率和公平的合理统一,因 此,理性的治理主体通常追求治理效率
- 数 据 管 理
- 管理关注经营权的分配,强调的是在治理架构下,通过计划组织、 控制、指挥和协同等职能来实现目标,理性的管理主体追求经营 效率。
大数据治理的重要意义?P67
- ✓促进服务创新和价值创造
- ✓提升数据管理和决策水平
- ✓提高数据质量,增强数据可信度,降低成本
- ✓提高合规监管和安全控制,降低风险
大数据治理组织包括?P75
- 制度组织负责数据治理和数据管理制 度。完成整体数据战略、数据政策、 数据管理度量指标等数据治理规程制 定。
- 服务组织是由数据管理专业人员组成, 包括数据质量分析师、数据架构师、 元数据管理员等,主要负责实施数据 治理各个领域的具体工作
第九章
新冠肺炎疫情分析案例
全球地震数据处理与分析案例
信用卡逾期数据分析案例
租房信息分析案例
音乐专辑数据分析展示案例
文本数据处理与分析案例
补充重点
数据特征提取后面临的问题?P5
- 维数灾难:变量维数较多,增加了分析问题复杂性;]
- 数据冗余:实际问题中,变量之间可能存在一定相关性, 因此,多变量中可能存在信息的重叠;
- 数据噪声:数据采集中存在噪声,影响后续挖掘准确度
降维的好处是什么?P9
- 数据压缩,减少数据存储空间及计算时间;
- 消除数据间的冗余,简化数据,提高计算效率;
- 去除噪声,提高数据挖掘模型性能;
- 更好的认识和理解数据,提高学习算法精度;
- 便于可视化展示,将数据维度减少到2维或3维进行可视化。
降维方法分类?P10-11
- 分类1-特征选择:选择有效的特征,去掉不相关或冗余的特 征,特征选择后留下的特征的数值没有变化,即是原特征集 合的一个子集。
- 分类2-特征抽取:改变原有的特征空间,将其映射到一个新 的特征空间,即特征抽取后的新特征是原来特征的一个映射。
主成分分析(PCA)?P14
主成份分析(Principal Component Analysis, PCA )是 一种利用线性映射来进行数据降维的方法,并去除数据的相 关性; 且最大限度保持原始数据的方差信息。
PCA两个贡献率?P24
- 贡献率:第i个主成份所占比重 gs 称为贡献率 ,反映 了原来i个特征向量的信息,有多大的提取信息能力 。
- 累积贡献率:前k个主成份所占比重 gs
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)