python数据分析汇总
- 前言
- 一、对比分析
- 概念
- 特征
- 类型
- 案例
- Matplotlib的颜色字母对照表
- 解决遇到未知函数
- 二、相关性分析
- 概念
- 类型
- 案例一
- 案例二
- 三、时间序列分析
- 概念
- 类型
- 案例
- 四、回归分析
- 概念
- 类型
- 案例一
- 案例二
- 案例三
- 五、决策树
- 概念
- 计算过程
- 案例
- 六、主成分分析
- 概念
- 计算过程
- 案例
- 七、聚类分析
- 概念
- 计算过程
- 案例:
前言
Python数据分析是指使用Python编程语言对数据进行收集、处理、分析和可视化的过程。Python是一种非常流行的编程语言,具有简单易学、代码可读性高、生态系统强大的特点,因此在数据科学领域得到广泛应用。
一、对比分析
概念
对比分析
将两个及两个以上的数据进行比较,分析它们的差异,从而揭示这些数据所代表的事物发展变化情况和规律性。
特征
对比分析的特征
可以非常直观看出事物某方面的变化或者差距,并且可以准确、量化地表示出这种变化或差距是多少。
因此,特别适用于指标间的横纵向比较、时间序列的比较分析,选择合适的对比标准十分关键。
注意几点:
- 对比的对象要有可比性;
- 对比的指标类型必须一致;
- 指标的口径范围、计算方法、计量单位必须一致。
类型
对比分析大致可以分为横向比较(横比)、纵向比较(纵比)、与标准对比(如目标值、计划数)。
- 横比是同一时间条件下,对不同空间数据的比较。
- 纵比是同一空间条件下,对不同时期数据的比较,包括同比、环比、定比等。
其中,同比是历史同期数据对比,如2020年7月与2021年7月对比;
环比是与上期数据对比,如2020年7月与2020年6月对比;
定比是与特定时间数据对比。
案例
【例1】不同品牌汽车销量TOP10对比分析
【关键技术】
Pandas
是Python的扩展程序库,用于数据分析。Matplotlib
是Python的2D绘图库,用于数据可视化。- 读取Excel文件数据,调用
pandas
库的函数read_excel();
- 绘制水平条形柱状图,调用
matplotlib.pyplot
库的函数bar()
。
输入数据表部分内容展示如下:
Matplotlib的颜色字母对照表
解决遇到未知函数
二、相关性分析
概念
相关性分析:对两个变量或多个变量之间相关关系的分析。事物之间通常都存在一定的联系。
相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。
如客户满意度与投诉率的相关性,工作压力与心理健康的相关性等。
相关性分析是研究现象之间是否存在某种依存关系,对具体有依存关系的现象探讨相关方向及相关程度,是一种简单易行的测量定量数据之间关系情
况的分析方法,可以应用到所有数据的分析过程中。
为了更准确地描述变量间的相关程度,最直观的是绘制散点图,并计算相关系数短阵,常用的有Pearson
相关系数、Spearman
秩相关系数。
类型
相关关系按不同标志可以分为不同类别:
- 按相关程度,分为完全相关、不完全相关、不相关;
- 按相关方向,分为正相关、负相关;
- 按相关形式,分为线性相关、非线性相关;
- 按相关影响因素,分为单相关、复相关。
案例一
【例2】广告展现量与费用成本相关性分析
电商营销中广告展现量与费用成本的相关性分析是非常重要的。
人们通常认为,费用高则广告效果好,两者之间必然存在联系;但是仅仅通过主观判断没有说服力,无法证明数据之间关系的真实存在,更无法度量关系的强弱。因此,需要通过相关性分析进行数据关系的分析。
【关键技术】
- 时间数据格式转换,调用
pandas
库的函数to_datetime();
- 数据合并,调用
pandas
库的函数merge();
- 绘制散点图,调用
matplotlib.pyplot
库的函数scatter();
- 计算相关系数矩阵,调用函数
corr()
。
要计算相关系数矩阵,可以使用Python中的pandas
库的corr()
函数。corr()
函数可以计算DataFrame
中所有数值列之间的相关系数。
首先,导入pandas
库,并创建一个DataFrame
对象,其中包含要计算相关系数的数值列。例如:
import pandas as pd# 创建DataFrame对象
data = {'A': [1, 2, 3, 4, 5],'B': [2, 4, 6, 8, 10],'C': [3, 6, 9, 12, 15]}
df = pd.DataFrame(data)
接下来,调用corr()
函数计算相关系数矩阵。例如:
# 计算相关系数矩阵
correlation_matrix = df.corr()
这样就可以得到一个相关系数矩阵。你可以打印相关系数矩阵来查看结果。例如:
print(correlation_matrix)
输出结果将是一个矩阵,其中每个元素代表对应位置的两个数值列之间的相关系数。
散点图主要用于查看数据的分布情况或大致趋势。相关系数反映现象的相关程度,用小写字母r
表示。
通过散点图及相关系数结果可以发现,广告展现量与费用成本是正相关性,费用成本与广告展现量、点击量的相关系数分别为0.856013、0.858597,广告展现量与点击量的相关系数为0.938554,相关性很强。
案例二
【例3】学生性别、身高、体重的相关性分析
【关键技术】
- 读取
csv
文件数据,调用pandas
库的函数read_csv();
- 绘制热力图,调用
seaborn
库的函数heatmap()
。
通过绘制相关系数热力图,更直观说明数据间的相关性和密切程度。
三、时间序列分析
概念
时间序列分析,就是对按时间顺序排列的、随时间变化且相互关联的数据,找出数据变化发展的规律,从而评估和预测未来的走势。
时间序列分析,主要目的是根据已有的历史数据对未来进行预测,主要的内容有趋势分析、序列分解、序列预测。
类型
时间序列分析有以下几种表现形式,并产生与之相适应的分析方法:
- 长期趋势变化:受某种基本因素的影响,数据依时间变化,表现为一种确定倾向,按某种规则稳步地增长或下降。使用的分析方法有:移动平均法、指数平滑法等。
- 季节性周期变化:受季节更替等因素影响,数据依据固定周期规则性的变化。不局限于自然季节,还包括月、周等短期周期。使用的分析方法为季节指数。
- 循环变化:指一种较长时间的上、下起伏周期性波动,一般以若干年为周期呈现出的波浪起伏形态的有规律的变动。
- 随机性变化:由许多不确定因素引起的序列变化,是一种无规律可循的变动,包括严格的随机变动和不规则的突发性影响很大的变动两种类型。
案例
【例4】淘宝店铺三年的增长趋势和季节波动分析
【关键技术】
- 数据重采样,调用函数
resample()
,常用的时间序列频率是:W—每周;M—月末;Q—季末;A—年末;AS—年初等等。 - 绘制子图,调用函数
subplots()
;子图布局,调用函数subplots_adjust()
。
输入数据表部分内容展示如下:
四、回归分析
概念
回归分析是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
回归分析是一种预测性的建模技术,使用数据统计的基本原理,对大量统计数据进行数学推理,确定因变量(目标)与自变量的相关关系,建立一个相关性较好的回归方程(函数表达式),预测未来因变量的变化。
类型
- 按变量多少,分为一元回归、多元回归;
- 按因变量多少,分为简单回归、多重回归;
- 按自变量和因变量的关系,分为线性回归、非线性回归。
线性回归函数的表达式
案例一
【例5】身高与体重的一元线性回归分析
一元回归分析,即给定一组自变量x和对应的因变量y数据,x和y呈线性相关关系,需要使用回归分析,近似找出满足这个线性关系的直线。
【关键技术】
- 机器学习库
sklearn.linear_model
的LinearRegression
模型,执行线性回归训练模型,调用函数fit();
- 测试模型,调用函数
predict();
- 确定系数或拟合优度,调用函数
score()
。
计算公式为: R2=SSR/SST = 1 -SSE/SST
其中,SST=SSR+SSE 为总平方和,SSR为回归平方和,SSE为残差平方和。
第一步,训练数据可视化。
参考: https://scikit-learn.org.cn/
读入数据,自定义画图函数runplt()
,观察数据之间的线性关系是否存在,再进行模型构建和分析。
输出身高与体重一元关系:
根据输出结果图可以发现,身高与体重大致呈正相关,存在线性关系。
身高与体重一元关系
第二步,构建回归模型,训练模型、分析模型参数,预测值输出。
使用sklearn.linear_model
的LinearRegression
模型训练模型使用fit()
方法给定x值,预测y值,使用模型的predict()
方法。
第三步,使用测试数据对该回归模型进行预测,将预测值与真实值对比计算误差,从而评估模型对真实数据的拟合程度。
测试及计算确定系数程序代码:
案例二
【例6】产品销量与广告的多元线性回归分析
一元回归分析的自变量只有一个,而如果有两个或两个以上自变量,就成为多元回归。
通过多个自变量的最优组合共同预测因变量,更有效,更有实际意义。
【关键技术】
- 分割训练集和测试集,
sklearn.model_selection
的train_test_split()
函数; - 均方根误差RMSE (Root Mean Square Error),是预测值与真实值偏差的平方与观测次数n比值的平方根,调用函数
sqrt()
。
可以发现,模型预测值与实际真实值之间的吻合度较高,符合多元线性关系。
案例三
【例7】 Iris鸢尾花数据集的逻辑回归分析
逻辑回归分析(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,是一种广义的线性回归分析模型。
逻辑回归的原理是在线性回归的基础上加了一个Sigmoid
函数(非线性)映射,即把线性回归函数的结果y,放到Sigmod
函数中去。逻辑回归解决分类问题,输出离散值,而线性回归解决回归问题,输出连续值。
逻辑函数(Sigmoid)的表达式:
逻辑回归解决分类问题,输出离散值,而线性回归解决回归问题,输出连续值。
【关键技术】
- 逻辑回归,调用
sklearn.linear_model
模块的LogisticRegression
模型;
生成二维或三维网格矩阵,调用函数meshgrid();
- 绘制具有非规则矩形网格的伪彩色图,调用函数
pcolormesh()
。
鸢尾花数据集共收集了三类鸢尾花,即Setosa鸢尾花、Versicolour鸢尾花、Virginica鸢尾花,每一类鸢尾花收集50条样本记录,共150条。
数据表中,前四列为花萼长度,花萼宽度,花瓣长度,花瓣宽度等4个用于识别鸢尾花的属性,第5列为鸢尾花的类别。
五、决策树
概念
决策树(Decision Tree)又称为判定树,是一种用于分类和回归任务的非参数的监督式学习方法,采用树形结构,使用层层推理实现决策。
决策树由根节点、分支、内部节点和叶节点组成。根节点包含样本的全集,。
每个内部节点都对应一次决策过程或者说一次属性测试,每个叶节点都对应一个决策结果(注意,不同的叶节点可能对应同一个决策结果)。在信息论与概率论中,信息熵是一种随机变量不确定性的度量。熵值越大不确定性越大,信息量越大。
表示随机事件的概率,公式:
信息增益指信息划分前后熵的变化,即信息增益=划分前熵-划分后熵。
信息增益代表了在一个条件下,信息不确定性减少的程度。信息增益越大,则意味着使用属性a进行划分所获得的纯度提升越大。
计算过程
决策树是数据挖掘中的经典方法,包括三个步骤:
- 特征选择:从训练数据的特征中选择一个特征作为当前节点的分裂标准,通常筛选跟分类结果相关性较高(分类能力较强)的特征。特征选择的标准不同会产生不同的特征决策树算法。
- 决策树生成:根据所选特征的评估标准,从上至下递归地生成子节点,直到数据集不可分停止。
- 决策树剪枝:剪枝的主要目的是对抗过拟合,通过主动去掉部分分支来缩小树的结构和规模,降低过拟合的风险。
决策树的生成就是不断的选择最优的特征对训练集进行划分,是一个由根到叶的递归过程,在每一个中间结点寻找划分属性,停止条件:
- 当前节点包含的样本属于同一类别,无需划分;
- 当前属性集为空或所有样本在属性集上取值相同,无法划分;
- 当前节点包含样本集合为空,无法划分。
决策树可视化方法:
- 使用
sklearn.tree
自带的plot_tree()
方法; - 使用
Graphviz
; - 使用
pydotplus
模块。
逻辑回归模型对数据整体结构的分析优于决策树模型,决策树模型对数据局部结构的分析优于逻辑回归模型。决策树易于实现,可解释性强,有着广泛的应用。
最常用的经典决策树算法是ID3、C4.5、CART算法,关于算法的具体细节这里不做详细介绍,感兴趣的读者可以参考相关专业书籍。
案例
【例8】身高与体重数据的分类
输入数据集包含10个样本,每个样本两个属性:身高、体重,类别标签是thin、 fat。
【关键技术】
- 机器学习库决策树模块
sklearn.tree
的DecisionTreeClassifier
模型; - 文本文档
txt
数据读入操作; - 可视化并保存决策树结构图。
第一步,导入模块,数据预处理,划分训练数据与测试数据。
读入txt文档数据及分割数据程序代码:
第二步,建立决策树模型(使用信息熵),并进行训练与预测。参数feature_importances_
是每个特征的影响力或作用。
程序代码:
六、主成分分析
概念
主成分分析(Principal Component Analysis, PCA)是一种广泛应用的数据降维方法,是非监督学习任务。数据降维,即降低数据的维度,将原始高维特征空间中的点向一个低维空间投影,保留最重要的一些特征,去除噪声和不重要的特征,提升数据处理速度目的。
PCA的本质就是发现一些投影方向,使得数据在这些投影方向上的方差最大,投影方向之间相互正交。
从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。
第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1、2个轴正交的平面中方差最大的,依次类推。
计算过程
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,新特征是原特征的线性组合。
具体计算过程如下:
- 计算整个样本的协方差矩阵;
- 计算协方差的特征值和特征向量;
- 将特征值从大到小排序,选择其中较大的k个,将对应的k个特征向量分别作为列向量组成特征向量矩阵;
- 将样本点投影到选取的特征向量上。
案例
【例9】主成分分析案例
输入数据集共10000个样本,每个样本3个特征,共4个簇,中心坐标为[0,0,0]、[1,1,1]、[2,2,2]、[3,3,3]。 X为样本特征,y为样本簇类别。
【关键技术】
- 主成分分析,调用机器学习库
sklearn.decomposition
的PCA模型; - 生成数据集,调用
sklearn.datasets
库的make_blobs()
函数; - 训练之后进行标准化、降维、归一化等操作,调用
transform()
函数; - 画3D图,调用
mpl_toolkits.mplot3d
的Axes3D()
函数。
第二步,主成分分析,调用函数PCA()。投影后的方差比例和方差值分别用参数explained_variance_ratio_
和explained_variance_
表示。
程序代码:
可见,投影后三个特征维度的方差比例大约为98.3%:0.8%:0.8%,方差分别为3.78521638、 0.03272613、0.03202212,投影后第一个特征占了绝大多数的主成分比例。
第三步,降维。根据第二步的结果,若投影到二维空间,则必然选择前两个特征,摒弃第三个特征。
程序代码:
根据输出结果,降维后的数据依然可以很清楚的看到之前三维图中的4个簇。
七、聚类分析
概念
聚类(Clustering)分析,就是给定一个元素集合D,每个元素具有n个观测属性,基于这些属性使用某种算法将D划分成k个子集,要求子集内部元素之间相似度尽可能高,而不同子集的元素相似度尽可能低。
组内相似性越大,组间差距越大,说明聚类效果越好。
聚类分析依赖于对观测对象的相似程度的理解,不同的距离度量和相似性度量,会产生不同的聚类结果,属于非监督学习任务。
计算过程
聚类分析可以分为两大类:基于概率密度函数估计的直接方法和基于样本间相似性度量的间接方法。具体计算过程包括:
- 数据预处理及特征选择:选择重要的最有效的特征;
- 特征提取:对所选择的特征进行转换形成新的显著特征;
- 相似度计算:选择相应的距离函数(或构造新的距离函数)和相似度方法,计算变量之间的距离及类间距离;
- 聚类(或分组):根据具体问题选择聚类方法,确定分类数量;
- 聚类结果评估:是指对聚类结果进行评估,外部有效性评估、内部有效性评估和相关性测试评估。
案例:
【例10】 K-means聚类分析
K-means聚类算法是以空间中K个点为中心进行聚类,对最靠近它们的对象归类,通过迭代逐次更新各聚类中心的值,直至得到最好的聚类结果。该方法实现简单,计算速度快。
输入数据集共1000个样本,每个样本2个特征,共4个簇,中心坐标为[-1,-1]、[0,0]、[1,1]、[2,2]。
K-means聚类分析,调用机器学习库sklearn.cluster
的KMeans
模型;
聚类结果采用Calinski-Harabasz
指数(也称为方差比准则)来评估,得分越高,聚类模型越好,调用函数metrics.calinski_harabasz_score()
。
第二步,基于数据集,分别设置聚类数k=2、3、4,进行K-means聚类分析,聚类结果用散点图绘制。
聚类结果采用Calinski-Harabasz
指数来评估,通过评估类之间方差和类内方差来计算得分,得分越高,聚类模型越好。
可以发现:
- k=2,分数为3116;
- k=3,分数为2931;
- k=4,分数为5924。
- k=4的聚类分数最高,该数据集共4个簇,与数据集的分布一致,是最佳聚类数。