Ste*_*ter 7 python csv linear-regression pandas statsmodels
我pandas.stats.api.ols使用groupby带有以下代码的运行OLS回归:
from pandas.stats.api import ols
df=pd.read_csv(r'F:\file.csv')
result=df.groupby(['FID']).apply(lambda d: ols(y=d.loc[:, 'MEAN'], x=d.loc[:, ['Accum_Prcp', 'Accum_HDD']]))
for i in result:
x=pd.DataFrame({'FID':i.index, 'delete':i.values})
frame = pd.concat([x,DataFrame(x['delete'].tolist())], axis=1, join='outer')
del frame['delete']
print frame
Run Code Online (Sandbox Code Playgroud)
但是这会返回错误:
AttributeError: 'OLS' object has no attribute 'index'
Run Code Online (Sandbox Code Playgroud)
我的组中有大约2,000个项目,当我打印出每个项目时,它们看起来像这样:
-
------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <Accum_Prcp> + <Accum_HDD> + <intercept>
Number of Observations: 79
Number of Degrees of Freedom: 3
R-squared: 0.1242
Adj R-squared: 0.1012
Rmse: 0.1929
F-stat (2, 76): 5.3890, p-value: 0.0065
Degrees of Freedom: model 2, resid 76
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
Accum_Prcp 0.0009 0.0003 3.28 0.0016 0.0004 0.0015
Accum_HDD 0.0000 0.0000 1.98 0.0516 0.0000 0.0000
intercept 0.4750 0.0811 5.86 0.0000 0.3161 0.6340
---------------------------------End of Summary---------------------------------
Run Code Online (Sandbox Code Playgroud)
我希望能够将每个导出到csv,以便我可以单独查看它们.
截至statsmodels 0.9,Summary该类支持导出为多种格式,包括 CSV 和文本:
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()
with open('summary.txt', 'w') as fh:
fh.write(results.summary().as_text())
with open('summary.csv', 'w') as fh:
fh.write(results.summary().as_csv())
Run Code Online (Sandbox Code Playgroud)
的输出as_csv()不是机器可读的。转储results参数repr()会是。
为了写出resultof pandas.stats.api.ols,请使用文本文件来匹配输出格式,例如:
from pandas.stats.api import ols
grps = df.groupby(['FID'])
for fid, grp in grps:
result = ols(y=grp.loc[:, 'MEAN'], x=grp.loc[:, ['Accum_Prcp', 'Accum_HDD']])
text_file = open("Output {}.txt".format(fid), "w")
text_file.write(result.summary)
text_file.close()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8343 次 |
| 最近记录: |