我一直在寻找通过Python或R的方法,在我拥有的csv文件中,脚本应该遍历每一行,并尝试根据其中一列的数组值检测异常值或异常情况。
在我看来,这个问题相当复杂,我已经用尽了所有方法去尝试检测异常或异常值。
对于这样的问题,我应该考虑使用机器学习吗?
已经有一个类似的问题被发布,但我觉得它没有得到正确的回答,那里给出的数据图像可以用来描述任何可能的答案。
谢谢
我想在“Values”列中找出异常值,例如,在第一行中,142与单元格中的其他值相比将是一个异常值,我想要一个能够按ID(逐行)进行,并将异常值写入一个新文件中的解决方案,同时保留所有这些列
回答:
以下是一些可以帮助你开始的内容。假设我们定义异常值为超过均值2个标准差的东西,我们可以做以下操作。在你继续阅读之前,请记住,在有限的数据点上做这样的操作是有风险的,因为你没有观察到足够的数据来确定它是否是异常值!
我们可以查看df:
id lat lon values0 1 43 16 [171, 172, 142, 169, 178, 180]1 2 44 5 [27, 150, 151, 162, 159, 165]2 3 45 12 [151, 153, 152, 37]3 4 47 13 [171.222, 127, 180, 172.56]4 5 48 17 [nan]
我们定义一个函数,返回那些超过均值2个标准差的数据点:
def func(x): x = np.array(x) x_mean = np.mean(x) x_sd = np.std(x) return(x[abs(x - x_mean)>2*x_sd])
现在我们创建一个新的数据框:
newdf =df.copy()newdf['outlier_values'] = newdf['values'].apply(func)newdf
结果看起来像这样:
id lat lon values outlier_values0 1 43 16 [171, 172, 142, 169, 178, 180] [142]1 2 44 5 [27, 150, 151, 162, 159, 165] [27]2 3 45 12 [151, 153, 152, 37] []3 4 47 13 [171.222, 127, 180, 172.56] []4 5 48 17 [nan] []