numpy.average()有一个权重选项,但numpy.std()没有.有没有人有解决方法的建议?
我们正在努力摆脱SAS和Python/Pandas.但是,我们遇到麻烦的一件事是创建具有SAS例程灵活性的PROC SUMMARY(AKA PROC MEANS)替代品.对于非SAS用户:PROC SUMMARY只是一个例程,用于生成一个表,其中包含数据集中"所有观察或观察组内变量的描述性统计",以解释SAS文档.我们的要求只是完整功能的一小部分 - 输出我们拥有的表格:
我们不会尝试做任何其他事情(任何图形化等)
这是我们迄今为止所拥有的:
def wmean_ungrouped (d,w):
return (d.dot(w)).sum() / w.sum()
def wmean_grouped (group, var_name_in, var_name_weight):
d = group[var_name_in]
w = group[var_name_weight]
return (d * w).sum() / w.sum()
FUNCS = {
"mean" : np.mean ,
"sum" : np.sum ,
"count" : np.count_nonzero
}
def my_summary (
data ,
var_names_in ,
var_names_out ,
var_functions ,
var_name_weight = None ,
var_names_group = None
):
result = DataFrame()
if var_names_group …Run Code Online (Sandbox Code Playgroud) 我有一个测试分数的频率表:
score count
----- -----
77 1105
78 940
79 1222
80 4339
etc
Run Code Online (Sandbox Code Playgroud)
我想显示由频率表总结的样本的基本统计数据和箱线图。(例如,上例的平均值为 79.16,中位数为 80。)
有没有办法在 Pandas 中做到这一点?我见过的所有例子都假设有一个个案表。
我想我可以生成一个个人分数列表,就像这样——
In [2]: s = pd.Series([77] * 1105 + [78] * 940 + [79] * 1222 + [80] * 4339)
In [3]: s.describe()
Out[3]:
count 7606.000000
mean 79.156324
std 1.118439
min 77.000000
25% 78.000000
50% 80.000000
75% 80.000000
max 80.000000
dtype: float64
Run Code Online (Sandbox Code Playgroud)
——但我希望避免这种情况;真实非玩具数据集中的总频率高达数十亿。
任何帮助表示赞赏。
(我认为这是一个与使用describe()与加权数据不同的问题,后者是关于将权重应用于个别情况。)
我有一个元组列表[(val1,freq1),(val2,freq2)....(valn,freqn)].我需要测量上述数据的中心趋势(平均值,中位数)和偏差度量(方差,均值).我还想绘制值的箱线图.
我看到numpy数组有直接的方法来从值列表中获得均值/中值和标准差(或方差).
numpy(或任何其他知名图书馆)是否有直接的手段在这样的频率分配表上运行?
另外,将上面的元组列表以编程方式扩展到一个列表的最佳方法是什么?(例如,如果freq dist是[(1,3),(50,2)],最好的方法是获得列表[1,1,1,50,50]来使用np.mean([1,1,1, 50,50]))
我在这里看到了一个自定义函数,但是如果可能的话我想使用标准实现