根据一份正态分布数据绘制正态分布概率图及异常值检测-python代码实现
当我们拿到一份数据时,想要检测数据概率分布是不是正太分布,一个好的方法是绘制其概率图
这里我们根据自制的数据首先生成一份正太分布数据
import numpy as np
p=np.random.randn(10000)
此时我们可以查看其方差,标准差,和均值
print(p.mean())
print(p.var())#方差
print(p.std())#标准差
正太分分布,均值为0,方差和标准差都为1,如果输出家、结果不符合上述条件我们要对其进行标准化,本博客是生成的数据不需要标准化,如果读者碰到不符合条件的情况,可以进行如下操作
p=(p-p.mean())/(p.std())
之后我们可以绘制对其进行变换,绘制其数据分布概率图
import matplotlib.pyplot as plt
plt.style.use("ggplot")
p.sort()
a=(p-p.mean())**2
b=2*p.var()
c=np.exp(-a/b)
p_nd=1/(np.sqrt(2*np.pi*p.var()))*c
# print(p_nd)
# print(np.exp(-a/b))
plt.plot(p,p_nd)
plt.show()
绘图如下所示
数据分布显然符合正太分布的
此时我们可以进行3
σ
\sigma
σ异常值检验,如果对于数据大于3
σ
\sigma
σ或者小于-3
σ
\sigma
σ,我们可以认为他们为异常值
可使用费、如下代码进行异常值检测
Outlier_value=p[(p>p.std()*3) | (p<-p.std()*3)]
print(Outlier_value)
print(len(Outlier_value))
博主运行结果如下
实验的全部代码如下
import os
import pandas
import matplotlib.pyplot as plt
import numpy as np
plt.style.use("ggplot")
#
#
# y=np.random.random(100)
# x=list(range(len(y)))
# plt.plot(x,y)
# #plt.show()
# print(np.zeros(25))
p=np.random.randn(10000)
print(p)
print(p.mean())
# print(p.mudian())
print(p.var())#方差
print(p.std())#标准差
#p.sort()
#plt.hist(p,bins=1000)
p.sort()
a=(p-p.mean())**2
b=2*p.var()
c=np.exp(-a/b)
p_nd=1/(np.sqrt(2*np.pi*p.var()))*c
# print(p_nd)
# print(np.exp(-a/b))
plt.plot(p,p_nd)
#plt.show()
print("dffa")
#
Outlier_value=p[(p>p.std()*3) | (p<-p.std()*3)]
print(Outlier_value)
print(len(Outlier_value))
#print("dkohsfiomsa")