对于正态分布的随机变量而言,其概率密度满足
μ是随机变量的均值,σ是随机变量的标准差。 对于正态分布的曲线,一般大家都很熟悉,由于概率密度函数关于x=μ对称,在样本个数较多的情况下,有以下三个概率成立
即绝大多数样本分布在[μ-3σ,μ+3σ]闭区间之内,只有极少数的样本可能分布在该区间之外,概率不到0.003,几乎不可能发生,是小概率事件,这即为3σ原则。 我们通常把这些极少数分布在[μ-3σ,μ+3σ]区间之外的样本称之为“坏值”。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler
def three_sigma(y):
#数据标准化处理
yStd = StandardScaler().fit_transform(y)
result = []
for index, value in enumerate(yStd):
if abs(value - np.mean(yStd)) > 3 * np.std(yStd):
result.append(index)
return result
if __name__=="__main__":
dataframe = pd.read_csv("32_finaldata_lowfreq_magn.csv").head(5000)["average"]
y = dataframe.values
X = np.arange(0, len(y), 1)
train_data = np.vstack((X, y)).T #X,y按列合并
y_Hdim = y.reshape((len(y), 1))
dirty_data = three_sigma(y_Hdim)
plt.plot(train_data[:, 0], train_data[:, 1], color="c")
for i in range(len(dirty_data)):
plt.text(dirty_data[i], y[dirty_data[i]], "("+str(dirty_data[i])+","+str(y[dirty_data[i]])+")")
plt.show()