|
上文介绍了数据清洗的方法,箱线图分析,本文继续介绍另一种数据清洗的方法:Z-Score。Z-Score方法就是一种常用的基于标准差来识别异常值的技术。什么是Z-Score?Z-Score,又称为标准分数,是统计学中用于表示一个值与数据集均值之间的偏差程度的一种度量。具体而言,Z-Score是一个观测值减去均值后,再除以标准差的结果。Z-Score可以告诉我们这个观测值在标准正态分布中处于什么位置。数学表达式如下:[Z=\frac{(X-\mu)}{\sigma}]其中:(X)表示单个观测值,(\mu)表示观测值所在样本的均值,(\sigma)表示样本的标准差。如何使用Z-Score识别异常值?Z-Score方法通常用来识别那些距离均值太远的点,即那些在正态分布中属于尾部的观测值。一般认为,如果一个数据点的Z-Score超过一定的阈值(通常是3或-3),则可以将其视为异常值。这是因为,在标准正态分布中,大约99.7%的数据点会落在均值加减3个标准差的范围内。例如,如果一个数据点的Z-Score是4,这意味着这个点比均值高出了4个标准差,这在正态分布中是非常罕见的事件,因此这个数据点很可能是一个异常值。应用示例假设我们有一个数据集,我们首先计算数据集的均值和标准差。然后,我们对数据集中的每一个观测值计算其Z-Score。接下来,我们将Z-Score的绝对值与一个预设的阈值进行比较,比如3,如果Z-Score的绝对值大于3,则将该观测值标记为异常值。在Python中,可以使用Pandas和SciPy库来执行Z-Score方法:importpandasaspdimportnumpyasnpfromscipyimportstatsimportmatplotlib.pyplotasplt#创建一个示例数据集np.random.seed(0)#设置随机种子以获得可重复的结果sales_data=np.random.normal(loc=100,scale=20,size=1000)#生成1000个服从正态分布的销售数据点sales_data=np.append(sales_data,[1000,-200])#添加两个异常值#将数据转换为DataFramedf_sales=pd.DataFrame(sales_data,columns=['Sales'])#计算Z-Scorez_scores=stats.zscore(df_sales['Sales'])#设定阈值,通常情况下,|Z|>3表示异常值threshold=3#标记异常值outliers=np.where(np.abs(z_scores)>threshold)#打印异常值print("Originaloutliers:")print(df_sales.iloc[outliers])#删除异常值df_cleaned=df_sales[(np.abs(z_scores)
|
|