我正在尝试收集摘要统计信息以生成箱线图 我有一个字典,其中键是要在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}
答案 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}