【发布时间】:2020-02-01 20:36:52
【问题描述】:
我有一个如下所示的数据框:
print(df.head(10))
day CO2
1 549.500000
2 663.541667
3 830.416667
4 799.695652
5 813.850000
6 769.583333
7 681.941176
8 653.333333
9 845.666667
10 436.086957
然后我使用以下函数和代码行从 CO2 列中获取 ouliers:
def estimate_gaussian(dataset):
mu = np.mean(dataset)#moyenne cf mu
sigma = np.std(dataset)#écart_type/standard deviation
limit = sigma * 1.5
min_threshold = mu - limit
max_threshold = mu + limit
return mu, sigma, min_threshold, max_threshold
mu, sigma, min_threshold, max_threshold = estimate_gaussian(df['CO2'].values)
condition1 = (dataset < min_threshold)
condition2 = (dataset > max_threshold)
outliers1 = np.extract(condition1, dataset)
outliers2 = np.extract(condition2, dataset)
outliers = np.concatenate((outliers1, outliers2), axis=0)
这给了我以下结果:
print(outliers)
[830.41666667 799.69565217 813.85 769.58333333 845.66666667]
现在我想在散点图上用红色标记那些异常值。
您可以在下面找到到目前为止我用来在散点图上用红色标记单个异常值的代码,但我找不到为异常值列表的每个元素(即 numpy.ndarray)执行此操作的方法:
y = df['CO2']
x = df['day']
col = np.where(x<0,'k',np.where(y<845.66666667,'b','r'))
plt.scatter(x, y, c=col, s=5, linewidth=3)
plt.show()
这是我得到的,但我想要所有 ouliers 的相同结果。你能帮帮我吗?
【问题讨论】:
标签: python matplotlib plot scatter-plot outliers