专栏首页毛利学Python数据科学篇| statsmodels库的使用(六)

数据科学篇| statsmodels库的使用(六)

statsmodels

官网:http://www.statsmodels.org

statsmodels是一个Python模块,它提供对许多不同统计模型估计的类和函数,并且可以进行统计测试和统计数据的探索。

说实话,statsmodels这个词我总是记不住,但是国宝“熊猫”这个单词pandas我还是记得住的,它提供用于估计许多不同统计模型的类和函数,以及用于进行统计测试和统计数据探索。

在statsmodels模块中主要有这么几个重要点

  • 线性模型
  • 方差分析
  • 时间序列

线性模型

#  线性模型
import statsmodels.api as sm
import numpy as np
x = np.linspace(0,10,100)
y = 3*x + np.random.randn()+ 10
# Fit and summarize OLS model
X = sm.add_constant(x)
mod = sm.OLS(y,X)
result = mod.fit()
print(result.params)
print(result.summary())
[9.65615842 3.        ]
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 7.546e+31
Date:                Thu, 25 Jul 2019   Prob (F-statistic):               0.00
Time:                        21:10:18   Log-Likelihood:                 3082.0
No. Observations:                 100   AIC:                            -6160.
Df Residuals:                      98   BIC:                            -6155.
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          9.6562      2e-15   4.83e+15      0.000       9.656       9.656
x1             3.0000   3.45e-16   8.69e+15      0.000       3.000       3.000
==============================================================================
Omnibus:                        4.067   Durbin-Watson:                   0.161
Prob(Omnibus):                  0.131   Jarque-Bera (JB):                4.001
Skew:                           0.446   Prob(JB):                        0.135
Kurtosis:                       2.593   Cond. No.                         11.7
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
print(y[:5])
# 预测数据
print(result.predict(X[:5]))
[ 9.65615842  9.95918872 10.26221902 10.56524933 10.86827963]
[ 9.65615842  9.95918872 10.26221902 10.56524933 10.86827963]

方差分析

方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”,为数据分析中常见的统计模型,主要为探讨连续型(Continuous)因变量(Dependent variable)与类别型自变量(Independent variable)的关系。当自变量的因子等于或超过三个类别时,检验各类别平均值是否相等,采用方差分析。 anova_lm的方差模型,用于使用线性OLSModel进行ANOVA分析。

import statsmodels.api as sm
from statsmodels.formula.api import ols
moore = sm.datasets.get_rdataset("Moore", "car",
                                 cache=True) # load data
data = moore.data
data = data.rename(columns={"partner.status":
                            "partner_status"}) # make name pythonic
moore_lm = ols('conformity ~ C(fcategory, Sum)*C(partner_status, Sum)',
                data=data).fit()
table = sm.stats.anova_lm(moore_lm, typ=2) # Type 2 ANOVA DataFrame
print(table)
                                              sum_sq    df          F    PR(>F)
C(fcategory, Sum)                          11.614700   2.0   0.276958  0.759564
C(partner_status, Sum)                    212.213778   1.0  10.120692  0.002874
C(fcategory, Sum):C(partner_status, Sum)  175.488928   2.0   4.184623  0.022572
Residual                                  817.763961  39.0        NaN       NaN

时间序列

时间序列,就是按时间顺序排列的,随时间变化的数据序列。 生活中各领域各行业太多时间序列的数据了,销售额,顾客数,访问量,股价,油价,GDP,气温。

# 回归移动平均线(ARMA)
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.arima_model import ARMA
import matplotlib.pyplot as plt
import warnings
%matplotlib inline
# 过滤warning
warnings.filterwarnings('ignore')

# 创建数据,每一个数据对应到一个年份
data = [5922, 5308, 5546, 5975, 2704, 1767, 4111, 5542, 4726, 5866, 6183, 3199, 1471, 1325, 6618, 6644, 5337, 7064, 2912, 1456, 4705, 4579, 4990, 4331, 4481, 1813, 1258, 4383, 5451, 5169, 5362, 6259, 3743, 2268, 5397, 5821, 6115, 6631, 6474, 4134, 2728, 5753, 7130, 7860, 6991, 7499, 5301, 2808, 6755, 6658, 7644, 6472, 8680, 6366, 5252, 8223, 8181, 10548, 11823, 14640, 9873, 6613, 14415, 13204, 14982, 9690, 10693, 8276, 4519, 7865, 8137, 10022, 7646, 8749, 5246, 4736, 9705, 7501, 9587, 10078, 9732, 6986, 4385, 8451, 9815, 10894, 10287, 9666, 6072, 5418]

# 转化成series格式 index values
data=pd.Series(data)

# sm.tsa.datetools.dates_from_range 转换日期字符串序列并返回日期时间列表(返回格式为列表)。参数 开始(str:1901) 结束(str:1990) 长度(None)
data_index=sm.tsa.datetools.dates_from_range('1901','1990')
# 返回的 datetime.datetime(1901, 12, 31, 0, 0) 表示1901年12月31号0点0分
# print(data_index)

# 从series对象中找到某元素(行)对应的索引,将pd.Index(data_index)设置为data的index
# print(pd.Index(data_index))
data.index=pd.Index(data_index)
# print(data)

# 绘制数据图
data.plot(figsize=(12,8))
plt.show()

# 创建ARMA模型,(7,0) 代表 (p,q) 的阶数。
arma=ARMA(data,(7,0)).fit()
# AIC 准则,也叫作赤池消息准则,它是衡量统计模型拟合好坏的一个标准,数值越小代表模型拟合得越好。
# print('AIC: %0.4lf'%arma.aic)

# 模型预测,预测1990-2000年的走势
predicted=arma.predict('1990','2000')

# 预测结果绘图
fig, ax = plt.subplots(figsize=(12, 8))
# ax = ax表示在ax这个子图上画图形
ax = data.ix['1901':].plot(ax=ax)
# 同理在ax这个子图上画图
predicted.plot(ax=ax)
plt.show()

# 还不清楚的话可以借鉴这段被注释的代码
# fig,(ax1,ax2)=plt.subplots(2,1,figsize=(12,9))
# ax1=data.ix['1901':].plot(ax=ax1)
# predicted.plot(ax=ax1)
# plt.show()

本文分享自微信公众号 - Python之王(gh_70a22bfa8e3a),作者:小sen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python北京空气质量数据处理

    这是我接单的一个单,看了数据源,马发现很有印象,马上就知道来源kaggle中国北京上海广州成都,沈阳的Pm2.5数据集,对应的链接:https://www.ka...

    润森
  • 机器学习认识聚类(KMeans算法)

    导读:机器是怎样学习的,都学到了什么?人类又是怎样教会机器学习的?本文通过案例给你讲清楚各类算法的原理和应用。

    润森
  • 自从我会了Python中的PIL,发现了其实超级简单

    PIL全称是Python Image Library,顾名思义,是用来做图像处理的。

    润森
  • :before 和 :after的多用途实践 — 特效篇(1)

    讲了一些,:before和:after的知识,但是用他们去做页面内容的美化并没有太多,我们知道CSS控制网页内容的外观,CSS的意义就是实现将内容与表现形式...

    FEWY
  • 手把手搭建一个聊天机器人(二)

          这里,我们要去网上申请一个API,我们使用的是图灵聊天机器人。,网址是:http://www.tuling123.com/申请步骤就不说了,如果不会...

    钱塘小甲子
  • 关于laravel后台模板laravel-admin select框的使用详解

    以上这篇关于laravel后台模板laravel-admin select框的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考。

    砸漏
  • ptb_reader源码解析

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    ke1th
  • [Python3 开发技巧]·如何打乱字典中多个对应数组

    当我们把数个对应数组保存到字典中,在我们读取的时候这些数据会按照我们保存的顺序读取出来。如果我们需要打乱顺序,但不改变对应数组的关系时,例如原先位置0对应的各个...

    小宋是呢
  • py-ops面向编程的关键字测试框架

    这是一款基于pytest封装,同时支持关键字和BDD,测试数据分离,面向编程,轻量级的,对上层自动化应用友好的基础测试框架。

    上帝De助手
  • TP数据避免重复和去重处理

    alter table gift_doc add unique index(num_id);

    php007

扫码关注云+社区

领取腾讯云代金券