【发布时间】:2022-01-15 08:08:54
【问题描述】:
我知道网上有大量资源可用于去除异常值,但我还没有设法获得我真正想要的东西,所以在这里发帖,我有一个 4 列的数组(或 DF)。现在我想根据列的异常值从 DF 中删除行。以下是我尝试过的,但它们并不完美。
def outliers2(data2, m = 4.5):
c=[]
data = data2[:,1] # Choosing the column
d = np.abs(data - np.median(data)) # deviation comoutation
mdev = np.median(d) # mean deviation
for i in range(len(data)):
if (abs(data[i] - mdev) < m * np.std(data)):
c.append(data2[i])
return c
x = pd.DataFrame(outliers2(np.array(b)))
column = ['t','orig_w','filt_w','smt_w']
x.columns = column
#Plot
plt.rcParams['figure.figsize'] = [10,8]
plt.plot(b.t,b.orig_w,'o',label='Original',alpha=0.8) # Original
plt.plot(x.t,x.orig_w,'.',c='r',label='Outlier removed',alpha=0.8) # After outlier removal
plt.legend()
该图说明了结果的外观,蓝色原始点上的异常值处理后的红色点。我真的很想摆脱 x~0 标记周围的那些垂直点组。怎么办?
此处提供了指向数据文件的链接:Full data 绿色圆圈通常显示我想摆脱的点
【问题讨论】:
-
你能再发一张包围异常值的图片吗?
标签: python pandas numpy scipy outliers