Numpy 从statsmodels加载数据到pandas对象

Statsmodels的发行版中有很多的范例数据集。可以在https://github.com/statsmodels/statsmodels/tree/master/statsmodels/datasets找到这些数据集的完整列表。

本章我们将聚焦copper数据集,其中包含的信息有:铜价、全球铜消费量和其他参数。

准备工作

你可能需要先安装patsy。判断是否需要安装patsy很容易,只需运行一下本攻略的完整代码。如果得到的运行结果是和pasty有关的错误信息,则需要执行如下两条命令之一。

sudo easy_install patsy
pip install --upgrade patsy

具体步骤

在本节中,你将看到怎样从statsmodels加载数据集到Pandas的DataFrame对象或Series对象。

  1. 加载数据。

需要调用的函数是load_pandas。用如下语句加载数据。

data = statsmodels.api.datasets.copper.load_pandas()

这将生成一个DataSet对象,数据被加载到了该对象包含的pandas对象中。

  1. 拟合数据。

对于数据以pandas对象加载的情况,使用Dataset对象的exog属性,可以获得一个多列的DataFrame对象。此外对于本例的情况,DataSet对象的endog属性包含了全球铜消费量的数据。

采用最小二乘拟合,创建一个OLS(ordinary least squares)对象,并调用其fit方法。

x, y = data.exog, data.endog

fit = statsmodels.api.OLS(y, x).fit()
print "Fit params", fit.params

打印出拟合的参数,如下所示。

Fit params COPPERPRICE 14.222028
INCOMEINDEX            1693.166242
ALUMPRICE             -60.638117
INVENTORYINDEX         2515.374903
TIME                   183.193035

  1. 汇总结果。

使用summary方法,对最小二乘拟合的结果进行汇总,如下所示。

print fit.summary()

打印出回归分析的结果。

OLS Regression Results
==============================================================================
Dep. Variable:       WORLDCONSUMPTION   R-squared:                       0.978
Model:                            OLS   Adj. R-squared:                  0.974
Method:                 Least Squares   F-statistic:                     224.9
Date:                Thu, 18 Jul 2013   Prob (F-statistic):           2.55e-16
Time:                        15:36:44   Log-Likelihood:                -172.62
No. Observations:                  25   AIC:                             355.2
Df Residuals:                      20   BIC:                             361.3
Df Model:                           4
==================================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
----------------------------------------------------------------------------------
COPPERPRICE       14.2220     12.090      1.176      0.253       -10.998    39.442
INCOMEINDEX     1693.1662   1970.555      0.859      0.400     -2417.339  5803.671
ALUMPRICE        -60.6381     32.023     -1.894      0.073      -127.437     6.161
INVENTORYINDEX  2515.3749   1670.948      1.505      0.148      -970.162  6000.912
TIME             183.1930     36.879      4.967      0.000       106.264   260.122
==============================================================================
Omnibus:                        8.007   Durbin-Watson:                   1.316
Prob(Omnibus):                  0.018   Jarque-Bera (JB):                6.014
Skew:                          -0.936   Prob(JB):                       0.0494
Kurtosis:                       4.506   Cond. No.                     2.20e+03
==============================================================================

The condition number is large, 2.2e+03. This might indicate that there are
strong multicollinearity or other numerical problems.

加载copper数据集的完整代码如下。

import statsmodels.api

# 请见https://github.com/statsmodels/statsmodels/tree/master/statsmodels/datasets
data = statsmodels.api.datasets.copper.load_pandas()

x, y = data.exog, data.endog

fit = statsmodels.api.OLS(y, x).fit()
print "Fit params", fit.params
print
print "Summary"
print
print fit.summary()

攻略小结

statsmodels中的Dataset类采用了特殊的数据存储格式,这其中就包括了endogexog属性。statsmodels中有一个load函数,用来把数据加载到NumPy数组中。而本攻略选用的load_pandas方法,则是用来把数据加载到pandas对象中。我们对这些数据做了最小二乘拟合,得到了铜价和消费量之间关系的统计模型。

赞(3)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

Numpy 科学计算