gpt4 book ai didi

python - 将 describe() 与加权数据一起使用——均值、标准差、中位数、分位数

转载 作者:太空狗 更新时间:2023-10-29 21:55:22 24 4
gpt4 key购买 nike

我是 python 和 pandas 的新手(从使用 SAS 作为我的主力分析平台),所以如果已经有人问过/回答过这个问题,我提前道歉。 (我已经搜索了文档以及此站点以寻找答案,但还没有找到任何东西。)

我有一个包含受访者级别调查数据的数据框(称为 resp)。我想对其中一个字段(称为 anninc [年收入的缩写])执行一些基本的描述性统计。

resp["anninc"].describe()

这给了我基本的统计数据:

count     76310.000000
mean 43455.874862
std 33154.848314
min 0.000000
25% 20140.000000
50% 34980.000000
75% 56710.000000
max 152884.330000
dtype: float64

但是有一个问题。鉴于样本的构建方式,需要对受访者数据进行加权调整,以便在执行分析时并非每个人都被视为“平等”。我在数据框中还有另一列(称为 tufnwgrp),它表示在分析过程中应应用于每条记录的权重。

在我以前的 SAS 生活中,大多数过程都可以选择使用这样的权重来处理数据。例如,给出相同结果的标准过程单变量看起来像这样:

proc univariate data=resp;
var anninc;
output out=resp_univars mean=mean median=50pct q1=25pct q3=75pct min=min max=max n=count;
run;

使用加权数据的相同分析看起来像这样:

proc univariate data=resp;
var anninc;
weight tufnwgrp;
output out=resp_univars mean=mean median=50pct q1=25pct q3=75pct min=min max=max n=count
run;

对于 describe() 等方法,pandas 中是否有类似的加权选项可用?

最佳答案

统计和计量经济学库 (statsmodels) 似乎可以处理此问题。这是一个扩展@MSeifert 的答案 here 的示例关于类似的问题。

df=pd.DataFrame({ 'x':range(1,101), 'wt':range(1,101) })

from statsmodels.stats.weightstats import DescrStatsW
wdf = DescrStatsW(df.x, weights=df.wt, ddof=1)

print( wdf.mean )
print( wdf.std )
print( wdf.quantile([0.25,0.50,0.75]) )

67.0
23.6877840059
p
0.25 50
0.50 71
0.75 87

我不使用 SAS,但这给出了与 stata 命令相同的答案:

sum x [fw=wt], detail

Stata 实际上有几个权重选项,在这种情况下,如果您指定 aw(分析权重)而不是 fw(频率权重),则会给出稍微不同的答案。此外,stata 要求 fw 为整数,而 DescrStatsW 允许非整数权重。权重比你想象的要复杂......这开始变得杂草丛生,但是有一个关于计算标准偏差的权重问题的很好的讨论here .

另请注意,DescrStatsW 似乎不包含最小值和最大值函数,但只要您的权重不为零,这应该不是问题,因为权重不会影响最小值和最大。但是,如果您确实有一些零权重,那么加权最小值和最大值可能会很好,但在 pandas 中也很容易计算:

df.x[ df.wt > 0 ].min()
df.x[ df.wt > 0 ].max()

关于python - 将 describe() 与加权数据一起使用——均值、标准差、中位数、分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com