我试图收集汇总统计数据来生成一个箱线图。
我有一个字典,其中键是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}
最佳答案
这是一个主意。我并没有处理所有的情况(例如,当中值索引不是一个整数时),但是由于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}
关于python - 来自counts字典的Python摘要统计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49008278/