首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 2.7 - statsmodels格式化和编写摘要输出

Python 2.7 - statsmodels格式化和编写摘要输出
EN

Stack Overflow用户
提问于 2013-05-23 12:19:17
回答 3查看 21.5K关注 0票数 11

我在Mac上使用pandas 0.11.0(数据处理)和statsmodels 0.4.3进行逻辑回归,以进行实际的回归。

我将运行大约2900个不同的逻辑回归模型,需要将结果输出到csv文件,并以特定的方式格式化。

目前,我只知道使用print result.summary()将结果(如下所示)打印到外壳:

 Logit Regression Results                           
  ==============================================================================
 Dep. Variable:            death_death   No. Observations:                 9752
 Model:                          Logit   Df Residuals:                     9747
 Method:                           MLE   Df Model:                            4
 Date:                Wed, 22 May 2013   Pseudo R-squ.:                -0.02672
 Time:                        22:15:05   Log-Likelihood:                -5806.9
 converged:                       True   LL-Null:                       -5655.8
                                         LLR p-value:                     1.000
 ===============================================================================
                   coef    std err          z      P>|z|      [95.0% Conf. Int.]
 -------------------------------------------------------------------------------
 age_age5064    -0.1999      0.055     -3.619      0.000        -0.308    -0.092
 age_age6574    -0.2553      0.053     -4.847      0.000        -0.359    -0.152
 sex_female     -0.2515      0.044     -5.765      0.000        -0.337    -0.166
 stage_early    -0.1838      0.041     -4.528      0.000        -0.263    -0.104
 access         -0.0102      0.001    -16.381      0.000        -0.011    -0.009
 ===============================================================================

我还需要赔率比,它是由print np.exp(result.params)计算的,并打印在外壳中:

age_age5064    0.818842
age_age6574    0.774648
sex_female     0.777667
stage_early    0.832098
access         0.989859
dtype: float64

我需要的是将它们分别以非常长的行的形式写入到csv文件中(在这一点上,我不确定我是否需要像Log-Likelihood这样的东西,但为了彻底起见,我已经将其包括在内):

`Log-Likelihood, age_age5064_coef, age_age5064_std_err, age_age5064_z, age_age5064_p>|z|,...age_age6574_coef, age_age6574_std_err, ......access_coef, access_std_err, ....age_age5064_odds_ratio, age_age6574_odds_ratio, ...sex_female_odds_ratio,.....access_odds_ratio`

我想你会看到这样的画面--一个非常长的行,包含所有这些实际值,还有一个标题,其中包含所有类似格式的列名称。

我熟悉Python语言中的csv module,对pandas也越来越熟悉。不确定这些信息是否可以格式化并存储在pandas dataframe中,然后在所有大约2,900个逻辑回归模型完成后使用to_csv写入文件;这当然可以。此外,在每个模型完成时编写它们也很好(使用csv module)。

更新:

因此,我更多地关注了statsmodels站点,特别是试图弄清楚模型的结果是如何存储在类中的。看起来有一个叫做'Results‘的类,需要使用它。我认为使用这个类的继承来创建另一个类,其中一些方法/操作符被更改可能是可行的,以便获得我需要的格式。我在这方面的经验很少,需要花相当多的时间弄清楚(这很好)。如果有人能帮上忙/有更多的经验,那就太棒了!

下面是这些类的布局站点:statsmodels results class

EN

回答 3

Stack Overflow用户

发布于 2018-04-25 22:01:54

write_path = '/my/path/here/output.csv'
with open(write_path, 'w') as f:
    f.write(result.summary().as_csv())
票数 3
EN

Stack Overflow用户

发布于 2016-04-21 09:06:02

我发现这个公式更简单一些。您可以通过遵循示例中的语法来添加/减去列(pvals、coeff、conf_lower、conf_higher)。

import pandas as pd     #This can be left out if already present...

def results_summary_to_dataframe(results):
    '''This takes the result of an statsmodel results table and transforms it into a dataframe'''
    pvals = results.pvalues
    coeff = results.params
    conf_lower = results.conf_int()[0]
    conf_higher = results.conf_int()[1]

    results_df = pd.DataFrame({"pvals":pvals,
                               "coeff":coeff,
                               "conf_lower":conf_lower,
                               "conf_higher":conf_higher
                                })

    #Reordering...
    results_df = results_df[["coeff","pvals","conf_lower","conf_higher"]]
    return results_df
票数 2
EN

Stack Overflow用户

发布于 2018-07-27 06:14:23

documentation here中实际上记录了一个内置方法:

f = open('csvfile.csv','w')
f.write(result.summary().as_csv())
f.close()

我相信这是一种将摘要输出到csv文件的更简单(也更干净)的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16705598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档