天天看點

什麼是髒資料?怎樣用箱形圖分析異常值?終于有人講明白了

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

導讀:資料品質分析是資料挖掘中資料準備過程的重要一環,是資料預處理的前提,也是資料挖掘分析結論有效性和準确性的基礎。沒有可信的資料,資料挖掘建構的模型将是空中樓閣。

資料品質分析的主要任務是檢查原始資料中是否存在髒資料。髒資料一般是指不符合要求以及不能直接進行相應分析的資料。在常見的資料挖掘工作中,髒資料包括:缺失值、異常值、不一緻的值、重複資料及含有特殊符号(如#、¥、*)的資料。

本文将主要對資料中的缺失值、異常值和一緻性進行分析。

什麼是髒資料?怎樣用箱形圖分析異常值?終于有人講明白了

01 缺失值分析

資料的缺失主要包括記錄的缺失和記錄中某個字段資訊的缺失,兩者都會造成分析結果不準确。下面從缺失值産生的原因及影響等方面展開分析。

1. 缺失值産生的原因

缺失值産生的原因主要有以下3點:

有些資訊暫時無法擷取,或者擷取資訊的代價太大。

有些資訊是被遺漏的。可能是因為輸入時認為該資訊不重要、忘記填寫或對資料了解錯誤等一些人為因素而遺漏,也可能是由于資料采集裝置故障、存儲媒體故障、傳輸媒體故障等非人為原因而丢失。

屬性值不存在。在某些情況下,缺失值并不意味着資料有錯誤。對一些對象來說某些屬性值是不存在的,如一個未婚者的配偶姓名、一個兒童的固定收入等。

2. 缺失值的影響

缺失值會産生以下的影響:

資料挖掘模組化将丢失大量的有用資訊。

資料挖掘模型所表現出的不确定性更加顯著,模型中蘊含的規律更難把握。

包含空值的資料會使模組化過程陷入混亂,導緻不可靠的輸出。

3. 缺失值的分析

對缺失值的分析主要從以下兩方面進行:

使用簡單的統計分析,可以得到含有缺失值的屬性的個數以及每個屬性的未缺失數、缺失數與缺失率等。

對于缺失值的處理,從總體上來說分為删除存在缺失值的記錄、對可能值進行插補和不處理3種情況。

什麼是髒資料?怎樣用箱形圖分析異常值?終于有人講明白了

02 異常值分析

異常值分析是檢驗資料是否有錄入錯誤,是否含有不合常理的資料。忽視異常值的存在是十分危險的,不加剔除地将異常值放入資料的計算分析過程中,會對結果造成不良影響;重視異常值的出現,分析其産生的原因,常常成為發現問題進而改進決策的契機。

異常值是指樣本中的個别值,其數值明顯偏離其他的觀測值。異常值也稱為離群點,異常值分析也稱為離群點分析。

  1. 簡單統計量分析

在進行異常值分析時,可以先對變量做一個描述性統計,進而檢視哪些資料是不合理的。最常用的統計量是最大值和最小值,用來判斷這個變量的取值是否超出了合理範圍。如客戶年齡的最大值為199歲,則判斷該變量的取值存在異常。

  1. 3σ原則

如果資料服從正态分布,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過3倍标準差的值。在正态分布的假設下,距離平均值3σ之外的值出現的機率為P(|x-μ|>3σ)≤0.003,屬于極個别的小機率事件。

如果資料不服從正态分布,也可以用遠離平均值的标準差倍數來描述。

  1. 箱型圖分析

箱型圖提供了識别異常值的一個标準:異常值通常被定義為小于QL -1.5IQR或大于QU +1.5IQR的值。

QL稱為下四分位數,表示全部觀察值中有四分之一的資料取值比它小;

QU稱為上四分位數,表示全部觀察值中有四分之一的資料取值比它大;

IQR稱為四分位數間距,是上四分位數QU與下四分位數QL之差,其間包含了全部觀察值的一半。

箱型圖依據實際資料繪制,對資料沒有任何限制性要求,如服從某種特定的分布形式,它隻是真實直覺地表現資料分布的本來面貌;另一方面,箱型圖判斷異常值的标準以四分位數和四分位距為基礎,四分位數具有一定的魯棒性:多達25%的資料可以變得任意遠而不會嚴重擾動四分位數,是以異常值不能對這個标準施加影響。

由此可見,箱型圖識别異常值的結果比較客觀,在識别異常值方面有一定的優越性,如圖3-1所示。

什麼是髒資料?怎樣用箱形圖分析異常值?終于有人講明白了
什麼是髒資料?怎樣用箱形圖分析異常值?終于有人講明白了
import pandas as pd
catering_sale = '../data/catering_sale.xls'  # 餐飲資料
data = pd.read_excel(catering_sale, index_col='日期')
# 讀取資料,指定“日期”列為索引列
print(data.describe())           

代碼清單3-1的運作結果如下:

銷量
count   200.000000
mean   2755.214700
std     751.029772
min      22.000000
25%    2451.975000
50%    2655.850000
75%    3026.125000
max    9106.440000           

其中count是非空值數,通過len(data)可以知道資料記錄為201條,是以缺失值數為1。另外,提供的基本參數還有平均值(mean)、标準差(std)、最小值(min)、最大值(max)以及1/4、1/2、3/4分位數(25%、50%、75%)。

更直覺地展示這些資料并且可以檢測異常值的方法是使用箱型圖。其Python檢測代碼如代碼清單3-2所示。

代碼清單3-2 餐飲日銷額資料異常值檢測

import matplotlib.pyplot as plt# 導入圖像庫
plt.rcParams['font.sans-serif'] = ['SimHei']# 用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False  # 用來正常顯示負号

plt.figure()  # 建立圖像
p = data.boxplot(return_type='dict')  # 畫箱型圖,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata()  # 'flies'即為異常值的标簽
y = p['fliers'][0].get_ydata()
y.sort()  # 從小到大排序,該方法直接改變原對象
'''
用annotate添加注釋
其中有些相近的點,注釋會出現重疊,難以看清,需要一些技巧來控制
以下參數都是經過調試的,需要具體問題具體調試
'''
for i in range(len(x)):
    if i>0:
        plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]), y[i]))
    else:
        plt.annotate(y[i], xy=(x[i],y[i]), xytext=(x[i]+0.08,y[i]))

plt.show()  # 展示箱型圖           
什麼是髒資料?怎樣用箱形圖分析異常值?終于有人講明白了

從圖3-2可以看出,箱型圖中超過上下界的7個日銷售額資料可能為異常值。結合具體業務可以把865.0、4060.3、4065.2歸為正常值,将22.0、51.0、60.0、6607.4、9106.44歸為異常值。最後确定過濾規則為日銷額在400元以下或5000元以上則屬于異常資料,編寫過濾程式,進行後續處理。

03 一緻性分析

資料不一緻性是指資料的沖突性、不相容性。直接對不一緻的資料進行挖掘,可能會産生與實際相違背的挖掘結果。

在資料挖掘過程中,不一緻資料的産生主要發生在資料內建的過程中,可能是由于被挖掘資料來自于不同的資料源、對于重複存放的資料未能進行一緻性更新造成的。

例如,兩張表中都存儲了使用者的電話号碼,但在使用者的電話号碼發生改變時隻更新了一張表中的資料,那麼這兩張表中就有了不一緻的資料。

關于作者:張良均,資深大資料挖掘與分析專家、模式識别專家、AI技術專家。有10餘年大資料挖掘與分析經驗,擅長Python、R、Hadoop、Matlab等技術實作的資料挖掘與分析,對機器學習等AI技術驅動的資料分析也有深入研究。

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/zhibo

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-05-29

本文作者: 張良均 譚立雲

本文來自:“

大資料DT 微信公衆号

”,了解相關資訊可以關注“

大資料DT