来自count字典的Python汇总统计信息

时间:2018-02-27 12:04:31

标签: python dictionary statistics

我正在尝试收集摘要统计信息以生成箱线图 我有一个字典,其中键是要在y轴上绘制的变量,值是它们在数据中的计数。

d = {16: 5, 
     21: 9, 
     44: 2, 
      2: 1}

我想知道是否有办法从计数中生成中位数,Q1,Q3等统计数据 - 我不想把它变成像[16, 16, 16, 16, 16, 21, 21, ...]这样的列表并计算从那以后。这是因为我试图节省大量内存而不必将各个观察结果存储在内存中。

修改
更具体。给出一个输入

d = {4: 2, 10: 1, 3: 2, 11: 1, 18: 1, 12: 1, 14: 1, 16: 2, 7: 1}

我想要一些输出

{'q1': 4, 'q2': 10.5, 'q3', 15, 'max': 18, 'min': 3}

1 个答案:

答案 0 :(得分:2)

这是一个想法。我没有处理所有情况(例如,当中间索引不是整数时),但由于get_val返回生成器的结果,它应该是内存有效的。

from collections import OrderedDict
from itertools import accumulate

d = {16: 5, 
     21: 9, 
     44: 4, 
      2: 2}

d = OrderedDict(sorted(d.items()))
size = sum(d.values())
idx = {'q1': size/4,
       'q2': size/2,
       'q3': size*3/4}

# {'q1': 5.0, 'q2': 10.0, 'q3': 15.0}

def get_val(d, i):
    return next(k for k, x in zip(d, accumulate(d.values())) if i < x)

res = {k: get_val(d, v) for k, v in idx.items()}

# {'q1': 16, 'q2': 21, 'q3': 21}