在数据集中查找“边缘情况”

时间:2012-01-26 14:52:49

标签: python statistics matplotlib

我提前道歉并不是非常精确,因为我不知道我想要的数学表达式。

我正在使用matplotlib来分析大型数据集。我现在拥有的是x,y点的分布。我想找出我的函数的x值相同但y的差异最大的情况。因此,如果我绘制它,案例的一部分位于我的图的顶部,另一部分是图的底部。

那我怎么得到点(x,y),(x,y')其中f(x)= y和f(x)= y'和y-y'= max?

欢呼声

2 个答案:

答案 0 :(得分:1)

我认为你想要的是一个方差图。为不同的x值创建字典。将每个不同的y值放在与每个x关联的列表中。找到与每个x相关的列表的stdev(np.std)说“s”。绘制s与x的对比。

答案 1 :(得分:1)

不确定我是否理解正确,但这是一个可以适应的原始解决方案:

from collections import defaultdict

input = [(1.2,2), (1.2, 6), (1.2, -2), (2,8), (2,7), (2,18)]

indices_dict = defaultdict(lambda: list([[], []]))

for idx, val in enumerate(input):
    indices_dict[val[0]][0].append(idx)
    indices_dict[val[0]][1].append(val[1])

for key in indices_dict:
    y_values = indices_dict[key][1]
    idx_values =  indices_dict[key][0]
    max_idx = idx_values[y_values.index(max(y_values))]
    min_idx = idx_values[y_values.index(min(y_values))]
    print 'Max diff for x=%s is found between points %s and %s' %(key, input[min_idx], input[max_idx])

这应该为每个不同的x打印y上具有最大差异的点。您可以根据自己的要求进行调整。