我试图收集汇总统计数据来生成一个箱线图。
我有一个字典,其中键是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/

10-11 19:37
查看更多