Python list 和 numpy 实现 3-sigma 异常值剔除和异常值替换实例

实例:异常值直接剔除

import numpy as np
data_list = [1,2,3,4,5,5,4,3,2,1,1,2,3,4,5,5,4,3,2,1,10000,-10000]
data_array = np.asarray(data_list)

mean = np.mean(data_array , axis=0)
std = np.std(data_array , axis=0)

preprocessed_data_array = [x for x in data_array if (x > mean - 3 * std)]
preprocessed_data_array = [x for x in preprocessed_data_array if (x < mean + 3 * std)]
print(preprocessed_data_array )
  • 输出:
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1]

实例:异常值替换为均值

import numpy as np

data_list = [1,2,3,4,5,5,4,3,2,1,1,2,3,4,5,5,4,3,2,1,10000,-10000]
# print(sum(data_list)/len(data_list))

data_array = np.asarray(data_list, dtype=float)	# 注意:这里要指定 dtype 的类型,否则下面替换时可能会因数据类型不同而导致替换的均值的精度不同

mean = np.mean(data_array, axis=0)
std = np.std(data_array, axis=0)
print(mean)

floor = mean - 3*std
upper = mean + 3*std

for i, val in enumerate(data_array):
    data_array[i] = float(np.where(((val<floor)|(val>upper)), mean, val))
print(data_array)
  • 输出:
2.727272727272727
[1.         2.         3.         4.         5.         5.
 4.         3.         2.         1.         1.         2.
 3.         4.         5.         5.         4.         3.
 2.         1.         2.72727273 2.72727273]
  • 注意:如果 data_array = np.asarray(data_list, dtype=float) 没有指定 dtype=float,则默认取 mean 的下整数值替换异常值,输出如下:
2.727272727272727
[1 2 3 4 5 5 4 3 2 1 1 2 3 4 5 5 4 3 2 1 2 2]

参考

  • https://www.kdnuggets.com/2017/02/removing-outliers-standard-deviation-python.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn-WJW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值