社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python数据科学实践 | 统计建模4

狗熊会 • 5 年前 • 841 次点击  
大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由春艳与政委联合推出。

探索分析




通过前面的介绍,相信大家对于如何应用statsmodels拟合统计模型得到参数估计以及进行假设检验已经有了一定的了解。接下来就进入statsmodels第三个功能的介绍——进行探索性数据分析。

statsmodels的数据探索功能主要体现在其可视化上,但其可视化功能并不仅仅只能用于进行数据探索,还可以用于模型结果的测试。在第四章中,本书已经介绍了Python中绘图的探索性数据分析的工具。本节的介绍将会是对上一章的一个补充,特别是对于模型结果的可视化诊断。



1 箱线图

statsmodels的箱线图主要有两种类型:小提琴图和豆形图。

这里以西安和郑州两座城市团购的购买人数为例,绘制小提琴图进行相应的数据探索和描述。

例1 绘制小提琴图

import statsmodels.graphics.api as smg

city = ['xa''zz']          #创建城市列表

buyer = [np.log(model_data['购买人数'][model_data.城市 == c] + 1for c in city]                     #生成两座城市购买人数列表

labels = ['xa' 'zz']        #设定标签

fig = plt.figure()           #创建画布

smg.violinplot(buyer, labels = labels)  #绘制小提琴对比图

plt.xlabel("城市")            #设置x轴标签

plt.ylabel("log_购买人数")    #设置y轴标签

plt.title('西安和郑州购买人数的小提琴图对比')    #设置标题

plt.show()                   #输出图像

图1 绘制小提琴图

通过小提琴图的对比我们可以得到以下的结论:

  • 通常来说,郑州的火锅团购购买人数比西安的更大;

  • 西安火锅团购购买人数相对郑州来说更分散,团购“爆款”更多且“爆款”团购的销量更大;

  • 西安火锅团购购买人数对数化后在2.5-5的区间最为集中,郑州则是在5-7.5最集中。


2 相关图

通过statsmodels的相关图可以快速直观地探索和描述多个变量之间的相关性。

我们以火锅团购的数值变量为例,进行各数值变量之间相关性的探索和描述。

例2  绘制数值变量的相关图

num_cols = ['评分''评价数''人均''购买人数''团购价']    #定义数值变量所在列

corr_matrix = np.corrcoef(model_data.loc[:, num_cols].T)    #计算数值变量之间的相关系数

smg.plot_corr(corr_matrix, xnames = num_cols)    #绘制数值变量之间的相关图

plt.show()    #输出图像

图2  数值变量相关图

从相关图中可以看出:除了评价数与购买人数之间的相关性略强之外,其他各变量之间的相关性都比较弱。


3 拟合图

statsmodels可以绘制QQ图来对模型的拟合结果进行诊断。Q-Q图(Q代表分位数)在统计学里是一个概率图,用图形的方式比较两个概率分布,把他们的两个分位数放在一起比较。

QQ图主要用于检验数据分布的相似性。例如利用Q-Q图来对数据进行正态分布的检验,则可以令x轴为正态分布的分位数,y轴为样本分位数。如果这两者构成的点分布在一条直线上,就证明样本数据与正态分布存在线性相关性,即服从正态分布。

这里我们可以针对模型的拟合结果,针对模型的残差来进行正态分布的检验,以此来对模型的拟合情况进行评估。

例3  绘制模型拟合参数的QQ图

import scipy.stats as stats

res = results.resid    #获取最小二乘回归拟合模型的残差数据

sm.qqplot(res, stats.t, fit = True, line = '45')    #绘制模型残差的qq图,自动确定t分布的参数,包括均值和标准差

图3  模型残差正态分布检验的QQ图

从图中可以看出:模型残差与正态分布所构成的点几乎除了在两端有些许的异常点之外,几乎都分布在一条直线上,因此认为模型残差通过了正态分布检验,模型满足正态性要求。


4 回归图

利用回归图可以通过偏差图看到在拟合模型下自变量与因变量之间的关系。

这里我们针对前面的最小二乘回归模型,为每个自变量创建一个子图。偏差图中会显示模型中每个变量在去掉其他解释变量的影响后,与对数购买人数的关系。

例4  绘制模型的回归图

fig = plt.figure(figsize=(8, 12))    #设定画布大小

smg.plot_partregress_grid(results_f, fig = fig)    #绘制模型中每个自变量与对数购买人数的回归图

图4  模型回归图

除了以上介绍的四种可视化图形之外,statsmodels还可以提供函数图、时序图、因子水平交互图等多种数据探索以及模型检验的可视化图表,这里就不一一介绍了,如果想要了解更多的话,大家可以去官方文档进行进一步的学习和挖掘。

好了,今天就讲到这里。


往期精彩回顾
初步搭建数据科学工作环境

Conda的使用

Spyder入门

Jupyter入门

Markdown

简单读写数据

数据类型

数据结构

控制流

函数与模块

Numpy

pandas1

pandas2

pandas3

pandas4

绘图模块1

绘图模块2

绘图模块3

绘图模块4

统计建模1

统计建模2

统计建模3





Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52550
 
841 次点击