Python 查找dict值是否不成比例
我有一个类似这样的python dict:Python 查找dict值是否不成比例,python,Python,我有一个类似这样的python dict: {'0': 25, '1': 35, '10': 29, '11': 28} 键是ID,值是计数 如果这本字典有不成比例的值,我该如何查找? 由于id29的计数为186,远远大于dict中的所有其他值,因此此dict将不相称 我想找到平均值并将每个值与该平均值进行比较,但有没有更有效、更强大的方法呢?我就是这么做的 values = d.values() avg = sum(values)/len(values) disproportionate_k
{'0': 25, '1': 35, '10': 29, '11': 28}
键是ID,值是计数
如果这本字典有不成比例的值,我该如何查找?
由于id29
的计数为186
,远远大于dict中的所有其他值,因此此dict将不相称
我想找到平均值并将每个值与该平均值进行比较,但有没有更有效、更强大的方法呢?我就是这么做的
values = d.values()
avg = sum(values)/len(values)
disproportionate_keys = [k for k, v in d.items() if abs(v - avg) > some_threshold]
代码本身很简单;唯一真正的问题是你所说的“不成比例”到底是什么意思;在这里,我做了一个简单的检查,它与平均值有一定的距离
data = {'0': 25, '1': 35, '10': 29, '11': 28,
'12': 17, '13': 33, '14': 31, '15': 25,
'16': 30, '17': 38, '18': 26, '19': 26,
'2': 20, '20': 31, '21': 29, '22': 22,
'23': 32, '24': 32, '25': 27, '26': 27,
'27': 28, '28': 23, '29': 186, '3': 26,
'4': 30, '5': 27, '6': 28, '7': 34,
'8': 32, '9': 38}
values = data.values()
avg = sum(values)/len(values)
disproportionate_data = {key:val for key,val in data.iteritems() if val > threshold+avg}
对于阈值=20:{'29':186}
您可以设置任何正阈值。它将为您提供那些属于异常值的键:值对。我希望这就是你需要的 什么才算“不成比例”?这不是一个真正的Python问题,而是一个数学或统计问题。本课题是异常检测。一种简单的方法是计算z分数,只保留z分数为负值或正值较大的值。这对于熊猫来说很容易,我不会停留在纯Python中。事实上,这并不是一个定义好的问题。什么更重要?考虑它的一种方法是,如果这些值或多或少是正态分布的,那么看看你的值中是否有任何一个与值的平均值相差超过2或3个标准差。。。