目录
第一章 数据分析是什么
1、数据分析,机器学习,数据挖掘三者的概念,联系与区别:
2、数据分析的步骤:
第二章 了解Python
1、Python的历史:
2、Python的特性:
3、Python与数据分析的关系:
第三章 数据预处理
1、数据的分类:
2、数据的特征:
3、数据质量:
4、数据清洗:
5、特征选择:
6、特征提取:
第四章 数据分析工具Numpy
Numpy介绍:
第五章 Pandas——处理结构化数据
1、Pandas的概念:
2、Pandas的窗口函数:
3、Pandas的统计和计算工具
第六章 数据分析的方法
1、分类的概念:
2、分类的方法:
3、关联分析的概念:
4、关联分析的方法:
5、聚类分析的概念:
6、聚类分析的方法:
7、回归分析的概念:
第七章 数据分析方法的应用
1、分类方法的应用:
第八章 matplotlib——交互式图表的绘制
1、matplotlib的基本布局对象:
2、matplotlib基础图表的绘制:
数据分析:识别出巨量数据中有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程,即从海量数据中找到有用的知识
机器学习:利用经验来改善计算机系统自身的性能
数据挖掘:在数据分析得到信息的基础上进一步获得认知,转为有效的预测和决策
机器学习与数据分析的关系:
“经验”在计算机系统中主要以数据形式存在,因此机器学习需要对数据进行分析,
数据分析过程主要利用机器学习界提供的技术来分析海量数据。
数据分析与数据挖掘的关系:
数据分析=统计分析+数据挖掘
统计分析:数据预处理阶段
数据挖掘:知识发现阶段
数据通过统计分析变成信息,信息通过数据挖掘变成知识
图 1
① Python 是面向生产的:
大部分数据分析过程需要首先进行实验性研究和原型构建,再移植到生产系统中;
Python 适用于原型构建,且能够直接将分析程序运用到生产系统中;
其他语言无法直接用于生产,需要使用 C/C++等语言对算法再次进行实现。
② 拥有强大的第三方库支持:
Python 的强大功能依赖于第三方库实现;
常用数据分析库包括 Numpy 、Scipy 、Pandas 、Scikit-learn 、Matplotlib 等 。
③ 胶水语言特性:
Python 语言的底层可以用C 语言实现,使用C 语言实现的算法性能很高 Numpy 的底层使用C 实现,其效率比 R 语言更高;
④ 模块化的系统:Python拥有功能丰富的标准库和强大的第三方库支持。
⑤ 缩进很重要。
Python是一个强大的通用编程语言,但在数据分析方面,它特别有价值。数据分析是从数据中提取有用信息和见解的过程。这通常涉及数据清洗、转换、模型创建和结果解释。以下是Python在数据分析中的主要应用:
前面讲过了,注意数据的完整性、一致性、准确性、及时性。完整性就是数据是否缺失;一致性是指数据是否合乎规范,数据集合内的数据是否保持了统一的格式;数据质量的一致性主要体现在数据记录的规范和数据是否符合逻辑;准确性是指数据记录的信息是否存在异常或错误;及时性是指数据从产生到可以查看的时间间隔,也叫数据的延时时长。及时性对于数据分析本身要求并不高,但如果数据分析周期加上数据建立的时间过长,就可能导致分析得出的结论失去了借鉴意义。
数据清洗的主要目的是对缺失值、噪声数据、不一致数据、异常数据进行处理,是对上述数据质量分析时发现的问题进行处理,使得清理后的数据格式符合标准,不存在异常数据等。
【缺失值处理】:忽略或者进行数据填充(平均值,或利用决策树、回归分析进行最有可能值确认)
【噪声数据处理】:分箱技术(箱的深度表示箱中所含数据记录条数,宽度则是对应属性值的取值范围),聚类技术,回归技术。
【不一致数据的处理】:
对于数据质量中提到的数据不一致性问题,则需要根据实际情况来给出处理方案。
可以使用相关材料来人工修复,违反给定规则的数据可以用知识工程的工具进行修改。
对于多个数据源集成处理时,不同数据源对某些含义相同的字段的编码规则会存在差异,此时则需要对不同数据源的数据进行数据转化。
【异常数据的处理】:分为不可还原异常和可还原异常。
【特征选择的原则】
特征是否发散:
如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
特征是否与分析结果相关:
相关特征是指其取值能够改变分析结果。显然,与目标相关性高的特征,应当优选选择。
特征信息是否冗余:
特征中可能存在一些冗余特征,即两个特征本质上相同,也可以表示为两个特征的相关性比较高。
【特征选择的方法】
Filter (过滤法):
按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
Wrapper (包装法):
根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
Embedded (集成法):
先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
特征提取是在原始特征的基础上,自动构建新的特征,将原始特征转换为一组更具物理意义、统计意义或者核的特征。方法包括主成分分析、独立成分分析和线性判别分析。
PCA (Principal Component Analysis,主成分分析):
PCA 的思想是通过坐标轴转换,寻找数据分布的最优子空间,从而达到降维、去除数据间相关性的目的。
ICA (Independent Component Analysis,独立成分分析):
PCA特征转换降维,提取的是不相关的部分,ICA独立成分分析,获得的是相互独立的属性
LDA (Linear Discriminant Analysis,线性判别分析):
LDA 的原理是将带上标签的数据(点),通过投影的方法,投影到维度更低的空间,使得投影后的点,会形成按类别区分,相同类别的点,将会在投影后更接近,不同类别的点距离越远。
Pandas是Python的一个开源工具包,为Python提供了高性能、简单易用的数据结构和数据分析工具。Pandas提供了方便的类表格的统计操作和类SQL操作,使之可以方便的做一些数据预处理工作。同时提供了强大的缺失值处理等,使预处理工作更加便捷。
了解Pandas可以完成什么事情:
在移动窗口上计算统计函数对于处理时序数据也是十分常见的, 为此,Pandas 提供了一系列窗口函数,其中包括计数、求和、求平均、中位数、相关 系数、方差、协方差、标准差、偏斜度和峰度。
窗口本身 Pandas 提供了三种对象:Rolling ,Expanding 和 EWM:
Rolling 对象:
定长的窗口,需要通过参数 window 指定窗口大小
Expanding 对象:
扩展窗口,第 i 个窗口的大小为 i,可以将其看作特殊的 windows 为数据长度、min_periods 为 1 的 Rolling 对象
EWM 对象:
指数加权窗口,其中需要定义衰减因子α,定义有很多种方式,包括时间间隔 Span、质心 Center of mass 、Half-life (指数权重减少到一半需要的时间) 或者直接定义 Alpha。
统计函数:协方差、相关系数、排序。
Pandas提供了一系列统计函数接口,方便用户直接进行统计运算。包括协方差、相关系数、排序等。Pandas提供了两个Series对象之间的协方差,以及一个DataFrame的协方差矩阵的计算接口
窗口函数。
分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。
分类学习是一类监督学习的问题,训练数据会包含其分类结果,根据分类结果可以分为:
二分类问题:是与非的判断,分类结果为两类,从中选择一个作为预测结果;
多分类问题:分类结果为多个类别,从中选择一个作为预测结果;
多标签分类问题:不同于前两者,多标签分类问题一个样本的预测结果可能是多个,或者有多个标签。多标签分类问题很常见,比如一部电影可以同时被分为动作片和犯罪片,一则新闻可以同时属于政治和法律等 。
逻辑回归;
线性判别分析:使得同类样本点尽量近,异类样本点尽量远离);
支持向量机:是去找位于两类训练样本“正中间”的划分超平面,即图中黑色最粗的那个,因为该划分超平面对训练样本局部扰动的“容忍性“最好,鲁棒性最强,泛化能力最强。距离超平面最近的这几个训练样本对分类的贡献最大,我们称为支持向量。两个异类支持向量到超平面的距离之和称为间隔,我们需要找到最大间隔距离;
决策树:模仿人类做决策时的处理机制,基于树的结果进行决策;
K近邻:定测试集合,基于某种距离度量计算训练集中与其最接近的k个训练样本,基于这k个样本的信息对测试样本的类别进行预测(懒惰学习,无需在训练阶段进行处理);
朴素贝叶斯:不同于决策树、逻辑回归等方法,朴素贝叶斯是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
图 3
关联规则是描述数据库中数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。
关联规则的学习属于无监督学习过程,实际生活中的应用很多,例如分析顾客超市购物记录,可以发现很多隐含的关联规则,例如经典的啤酒尿布问题。
Apriori算法:
图 4
图 6
聚类分析是典型的无监督学习任务,训练样本的标签信息未知,通过对无标签样本的学习揭示数据内在性质及规律,这个规律通常是样本间相似性的规律。
聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。
聚类试图将数据集样本划分若干个不相交子集,这样划分出的子集可能有一些潜在规律和语义信息,但是其规律是事先未知的,概念语义和潜在规律是得到类别后分析得到的 。
K-means:
步骤:
缺点:
K-means算法的过程,为了尽量不用数学符号,所以描述的不是很严谨,大概就是这个意思,“物以类聚、人以群分”:
1. 首先输入k的值,即我们希望将数据集经过聚类得到k个分组。
2. 从数据集中随机选择k个数据点作为初始大哥(质心,Centroid)
3. 对集合中每一个小弟,计算与每一个大哥的距离(距离的含义后面会讲),离哪个大哥距离近,就跟定哪个大哥。
4. 这时每一个大哥手下都聚集了一票小弟,这时候召开人民代表大会,每一群选出新的大哥(其实是通过算法选出新的质心)。
5. 如果新大哥和老大哥之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。
6. 如果新大哥和老大哥距离变化很大,需要迭代3~5步骤。
DBSCAN:
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是1996年提出的一种基于密度的空间的数据聚类算法。
该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。
该算法将具有足够密度的点作为聚类中心,即核心点,不断对区域进行扩展。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。
优点:
聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类;
与K-MEANS比较起来,不需要输入要划分的聚类个数;
聚类簇的形状没有偏倚;
可以在需要时输入过滤噪声的参数。
缺点:
当数据量增大时,要求较大的内存支持I/O消耗也很大;
当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难。
算法聚类效果依赖于距离公式的选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
在DBSCAN算法中,还定义了如下一些概念:
图 7
密度直达(directly density-reachable):我们称样本点 p 是由样本点 q 对于参数 {Eps,MinPts} 密度直达的,如果它们满足 p∈NEps(q) 且 |NEps(q)|≥MinPts (即样本点 q 是核心点)
密度可达(density-reachable):我们称样本点 p 是由样本点 q 对于参数{Eps,MinPts}密度可达的,如果存在一系列的样本点 p1,…,pn(其中 p1=q,pn=p)使得对于i=1,…,n−1,样本点 pi+1 可由样本点 pi 密度可达
密度相连(density-connected):我们称样本点 p 与样本点 q 对于参数 {Eps,MinPts} 是密度相连的,如果存在一个样本点 o,使得 p 和 q 均由样本点 o 密度可达。
回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。
回归分析的目的在于了解变数间是否相关、相关方向和强度,并建立数学模型来进行预测。
与分类问题相似,典型的监督学习问题,分类问题预测的目标是离散变量,而回归问题预测的目标是连续变量。
由于回归分析与线性分析之间有着很多的相似性,所以用于分类的经典算法经过一些改动即可以应用于回归分析。
典型的回归分析模型包括:
线性回归分析
支持向量机(回归)
K邻近(回归)
线性回归分析:
回归分析,数理统计学中,回归分析着重在寻求变量之间近似的函数关系。线性回归分析,就是寻求变量之间近似的线性函数关系。线性回归就是回归函数为线性函数的情形。
平均绝对误差(MAE)是一种线性分数,所有个体差异在平均值上的权重都相等。表示预测值和观测值之间绝对误差的平均值。
图 10
均方误差(MSE)即方差,MSE表示预测数据和原始数据对应点误差的平方和的均值。
MSE(L2损失)计算简便,但MAE(L1损失)对异常点有更好的鲁棒性。当预测值和真实值接近时,误差的方差较小;反之误差方差非常大,相比于MAE,使用MSE会导致异常点有更大的权重,因此数据有异常点时,使用MAE损失函数更好。
现实生活中很多场景的训练数据是没有标注的,如果数据没有标注,想要分类,怎么办?
法一:人工标注,适合于人能分辨出的分类
法二:先通过聚类对无标注数据进行标注,再把标注后的数据当作训练样本集,训练出分类器,然后对测试数据进行分类,适合于人无法分辨出的分类
解决多类分类问题的最简单方法是将多类(c 类)问题转化为多个两类问题来处理,常用的处理手段有:
“一对多”方法 (One vs. Rest, 简称OvR):“一对多”方法设计 c 个两类分类器,其中第 i 个分类器将第 i 类样本(正侧)与非第 i 类样本(负侧)分开,这样我们可以得到 c 个判别函数。
“一对一”方法 (One vs. One, 简称OvO) :“一对一” 方法设计 c(c-1)/2 个两类分类器(判别函数),其中一个分类器将第 i 类与第 j 类样本分开。对于三类问题,需要设计三个分类器,四类问题需要六个分类器
决策规则(投票法):
对于某一个模式向量 x ,可以代入每一个判别函数,相应地得到其所属的类别, 所有的c(c-1)/2 个判别函数可以得到c(c-1)/2 判别结果,如果判给第 i 类的结果最多,则 x 属于第 i 类
“逐步一对多”方法:将 c 类问题逐步转化为 c-1 个两类问题,相应地设计 c-1 个两类分类器。第一个分类器将其中一个类样本与其余各个类的样本分开,在其余各类中设计第二个分类器,依次类推,直到剩下两个类为止。
图 11
三种方法的特点:
(1)从每一个两类问题的规模来看,“一对一”最小,“逐步一对多”次之,“一对多”最大
(2) “逐步一对多”的分解过程需要人来干预,并具有决策树的思想
(3) 常用的方法是“一对多”和“一对一”
Figure(图形):所有绘图的基础;使用matplotlib.pyplot.figure()创建。
Subplot(子图):构建于Figure之上,将Figure切分为多个子部分;
使用matplotlib.figure.Figure.add_subplot()创建。
Axe(轴域):构建于Figure之上,将Figure切分为多个子部分;
使用matplotlib.figure.Figure.add_axes()创建。
Subplot 是 Axes 的子类;Axes 提供了丰富的方法,修改图表装饰项,例如将坐标轴向上平移,为图像 添加标题等等。
直方图(histogram):是一种直观描述数据集中每一个区间内数据值出现频数的统计图
通过直方图可以大致了解数据集的分布情况,并判断数据集中的区间。
直方图的绘制(matplotlib.axes.Axes.hist())
散点图(scatter plot):将样本数据绘制在二维平面上,直观的显示这些点的分布情况,以便于判断两个变量之间的关系
散点图的绘制(matplotlib.axes.Axes.scatter())
饼图(pie charts):可以直观的显示某一类数据在全部样本数据中的百分比;通过将某一类数据出现的频数转换为百分比,可以清晰的体现出该类数据在全部样本数据中的重要程度、影响力等指标。
axe.pie(sizes, explode=explode, labels=labels, autopct=‘%1.1f%%’, shadow=True, startangle=90)
explode:此参数是len(x)数组,它指定偏移每个楔形的半径的分数。
autopct:此参数是一个字符串或函数,用于用楔形数值标记楔形。
startangle:此参数用于将饼图的起点从x轴逆时针旋转角度。
柱状图(bar charts):可以直观的反应不同类别数据之间分布情况的数量差异
axe.bar(index, data_m, width, color='c', label='men')
axe.bar(index+width, data_f, width, color='b', label='women')
折线图:
axe.plot(x, y1, '-o', color='c')
axe.plot(x, y2, '--o', color='b')
极坐标系下绘制双扭线:
axe = plt.subplot(projection='polar')
当你往前走的时候,要一路撒下花朵,因为同样的道路你决不会走第二遍。