雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
導讀:資料品質分析是資料挖掘中資料準備過程的重要一環,是資料預處理的前提,也是資料挖掘分析結論有效性和準确性的基礎。沒有可信的資料,資料挖掘建構的模型将是空中樓閣。
資料品質分析的主要任務是檢查原始資料中是否存在髒資料。髒資料一般是指不符合要求以及不能直接進行相應分析的資料。在常見的資料挖掘工作中,髒資料包括:缺失值、異常值、不一緻的值、重複資料及含有特殊符号(如#、¥、*)的資料。
本文将主要對資料中的缺失值、異常值和一緻性進行分析。

01 缺失值分析
資料的缺失主要包括記錄的缺失和記錄中某個字段資訊的缺失,兩者都會造成分析結果不準确。下面從缺失值産生的原因及影響等方面展開分析。
1. 缺失值産生的原因
缺失值産生的原因主要有以下3點:
有些資訊暫時無法擷取,或者擷取資訊的代價太大。
有些資訊是被遺漏的。可能是因為輸入時認為該資訊不重要、忘記填寫或對資料了解錯誤等一些人為因素而遺漏,也可能是由于資料采集裝置故障、存儲媒體故障、傳輸媒體故障等非人為原因而丢失。
屬性值不存在。在某些情況下,缺失值并不意味着資料有錯誤。對一些對象來說某些屬性值是不存在的,如一個未婚者的配偶姓名、一個兒童的固定收入等。
2. 缺失值的影響
缺失值會産生以下的影響:
資料挖掘模組化将丢失大量的有用資訊。
資料挖掘模型所表現出的不确定性更加顯著,模型中蘊含的規律更難把握。
包含空值的資料會使模組化過程陷入混亂,導緻不可靠的輸出。
3. 缺失值的分析
對缺失值的分析主要從以下兩方面進行:
使用簡單的統計分析,可以得到含有缺失值的屬性的個數以及每個屬性的未缺失數、缺失數與缺失率等。
對于缺失值的處理,從總體上來說分為删除存在缺失值的記錄、對可能值進行插補和不處理3種情況。
02 異常值分析
異常值分析是檢驗資料是否有錄入錯誤,是否含有不合常理的資料。忽視異常值的存在是十分危險的,不加剔除地将異常值放入資料的計算分析過程中,會對結果造成不良影響;重視異常值的出現,分析其産生的原因,常常成為發現問題進而改進決策的契機。
異常值是指樣本中的個别值,其數值明顯偏離其他的觀測值。異常值也稱為離群點,異常值分析也稱為離群點分析。
- 簡單統計量分析
在進行異常值分析時,可以先對變量做一個描述性統計,進而檢視哪些資料是不合理的。最常用的統計量是最大值和最小值,用來判斷這個變量的取值是否超出了合理範圍。如客戶年齡的最大值為199歲,則判斷該變量的取值存在異常。
- 3σ原則
如果資料服從正态分布,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過3倍标準差的值。在正态分布的假設下,距離平均值3σ之外的值出現的機率為P(|x-μ|>3σ)≤0.003,屬于極個别的小機率事件。
如果資料不服從正态分布,也可以用遠離平均值的标準差倍數來描述。
- 箱型圖分析
箱型圖提供了識别異常值的一個标準:異常值通常被定義為小于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”