【python数据分析】:数据预处理之异常值分析

异常值是指样本中的个别值,其数值明显偏离其余的观测值。

异常值也称离群点,异常值的分析也称为离群点的分析。

异常值处理方法:删除 / 修正填补。

本文主要是介绍如何找到异常值并将其可视化【异常值分析】

3σ原则:如果数据服从正态分布,异常值被定义为一组测定值中与平均值的偏差超过3倍的值 → p(|x - μ| > 3σ) ≤ 0.003

data = pd.Series(np.random.randn(10000)*100)
# 正态性检验u = data.mean()  # 计算均值std = data.std()  # 计算标准差stats.kstest(data, 'norm', (u, std))print('均值为:%.3f,标准差为:%.3f' % (u,std))print('------')
# 绘制数据密度曲线fig = plt.figure(figsize = (10,6))data.plot(kind = 'kde',grid = True,style = '-k',title = '密度曲线')plt.axvline(3*std,color='r',linestyle="--",alpha=0.8) plt.axvline(-3*std,color='r',linestyle="--",alpha=0.8) 

均值为:0.403,标准差为:99.757
------

【python数据分析】:数据预处理之异常值分析_第1张图片

# 筛选出异常值error、剔除异常值之后的数据data_c# ax2 = fig.add_subplot(2,1,2)error = data[np.abs(data - u) > 3*std]# print(error)data_c = data[np.abs(data - u) <= 3*std]print('异常值共%i条' % len(error))
# 图表表达fig = plt.figure(figsize = (10,3))plt.scatter(data_c.index,data_c,color = 'k',marker='.',alpha = 0.3)plt.scatter(error.index,error,color = 'r',marker='.',alpha = 0.5)plt.xlim([-10,10010])plt.grid()

异常值共31条

【python数据分析】:数据预处理之异常值分析_第2张图片

箱型图分析:箱型图看数据分布情况,以内限为界

# 箱型图fig = plt.figure(figsize = (10,6))ax1 = fig.add_subplot(2,1,1)color = dict(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')data.plot.box(vert=False, grid = True,color = color,ax = ax1,label = '样本数据')
# 基本统计量查看s = data.describe()print(s)print('------')
# 计算分位差q1 = s['25%']q3 = s['75%']iqr = q3 - q1mi = q1 - 1.5*iqrma = q3 + 1.5*iqrprint('分位差为:%.3f,下限为:%.3f,上限为:%.3f' % (iqr,mi,ma))print('------')
# 筛选出异常值error、剔除异常值之后的数据data_cax2 = fig.add_subplot(2,1,2)error = data[(data < mi) | (data > ma)]data_c = data[(data >= mi) & (data <= ma)]print('异常值共%i条' % len(error))
# 图表表达plt.scatter(data_c.index,data_c,color = 'k',marker='.',alpha = 0.3)plt.scatter(error.index,error,color = 'r',marker='.',alpha = 0.5)plt.xlim([-10,10010])plt.grid()
count    10000.000000
mean        -0.278002
std        101.261805
min       -480.038002
25%        -67.920937
50%          0.192581
75%         67.157743
max        417.616893
dtype: float64
------
分位差为:135.079,下限为:-270.539,上限为:269.776
------
异常值共68条

【python数据分析】:数据预处理之异常值分析_第3张图片

你可能感兴趣的:(python,python,数据分析,机器学习)