Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找dict值是否不成比例_Python - Fatal编程技术网

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

我有一个类似这样的python dict:

{'0': 25, '1': 35, '10': 29, '11': 28}
键是ID,值是计数

如果这本字典有不成比例的值,我该如何查找? 由于id
29
的计数为
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个标准差。。。