statsmodels
官网:http://HdhCmsTeststatsmodels.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()
■ Over?■
最后,祝有所学习,有所成长
回复【 1024 】获取学习资料
转发,好看支持一下,感谢
你的转发,就是对我最大的支持
查看更多关于数据科学篇| statsmodels库的使用(六)的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did163288