Python数据清洗(三):离群值的识别与处理本节将分享离群值的判断与处理方法。离群点,也称为离群点,是远离绝大多数样本点的特殊群体。通常,此类数据点在数据集中表现出不合理的特征。如果忽略这些异常值,在某些建模场景(如线性回归模型、K均值聚类等)中会导致错误的结论,因此在数据探索过程中,需要识别这些异常值并进行处理他们很好他们。异常值的识别通常,异常值可以通过图形方法(如箱线图、正态分布图)和建模方法(如线性回归、聚类算法、K-最近邻算法)来识别。本期将分享两种图形化方法,下期将分享一种基于模型识别异常值的方法。箱线图方法箱线图技术实际上使用数据的分位数来识别异常值。该图是典型的统计图,在学术界和工业界都得到了广泛的应用。箱线图的形状特征如下图所示:图中下四分位数是指数据的25%分位数点对应的值(Q1);中位数是数据的50%分位数点对应的值(Q2);上四分位数是数据(Q3)的75%分位数点对应的值;上晶须计算公式为Q3+1.5(Q3-Q1);下晶须的计算公式为Q1-1.5(Q3-Q1)。其中,Q3-Q1代表四分位距。如果使用箱线图来识别异常值,判断标准是当变量的数据值大于箱线图的上须线或小于箱线图的下须线时,这样的数据点可以认为是异常值。因此,基于上述箱线图,可以定义某个数值变量中的异常点和极值异常点。它们的判断表达式如下表所示:在Python中,可以使用matplotlib模块实现数据可视化,其中boxplot函数是用来绘制箱线图的。以1700年到1988年的太阳黑子数数据为例,利用箱线图方法识别数据中的异常点和极值异常点。具体代码如下:#导入第三方模块importpandasaspdimportmatplotlib.pyplotasplt#导入数据sunspots=pd.read_csv(r'C:\Users\Administrator\Desktop\sunspots.csv')#画一个箱线图(1.5倍四分位差,如果需要画3倍四分位差,调整whis参数即可)pl??t.boxplot(x=sunspots.counts,#指定绘制箱线图的数据whis=1.5,#指定1.5Doubleinterquartilewidths=0.7,#指定boxplot的宽度为0.8patch_artist=True,#指定要填充的框的颜色showmeans=True,#指定要显示的均值boxprops={'facecolor':'steelblue'},#指定框的填充颜色为铁蓝色#指定异常点的填充颜色、边框颜色和大小flierprops={'markerfacecolor':'red','markeredgecolor':'red','markersize':4},#指定标记符号(菱形)、填充颜色和均值点大小meanprops={'marker':'D','markerfacecolor':'black','markersize':4},medianprops={'linestyle':'--','color':'orange'},#指定中值的标记符号(虚线)和颜色labels=['']#去除箱线图的x轴刻度值)#显示图形plt.show()如上图所示,使用matplotlib子模块pyplot中的boxplot函数可以非常方便的绘制箱线图。左图上下必须设置为1.5倍四分位差,右图上下必须设置为3倍四分位差。从左图可以看出,数据集中至少有5个异常值,都在上须线以上;右图中没有显示极端异常值。从上图可以直观地发现数据中是否存在异常点或极度异常点,但无法知道哪些观测值是异常点以及这些异常点的具体值。为了解决这个问题,读者可以通过以下代码实现查询:#计算上下四分位数Q1=sunspots.counts.quantile(q=0.25)Q3=sunspots.counts.quantile(q=0.75)#计算值根据1.5倍四分位差对应上下须low_whisker=Q1-1.5*(Q3-Q1)up_whisker=Q3+1.5*(Q3-Q1)#找出异常值sunspots.counts[(sunspots.counts>up_whisker)|(sunspots.counts
