數據分析之數據質量分析和數據特征分析
1.數據質量分析
數據質量分析是數據挖掘中數據準備過程的重要一環,是數據預處理的前提,也是數據挖掘分析結論有效性和準確性的基礎,沒有可信的數據,數據挖掘構建的模型將是空中樓閣。
數據質量分析的主要任務是檢查原始數據中是否存在臟數據,臟數據一般是指不符合要求,以及不能直接進行相應分析的數據。在常見的數據挖掘工作中,臟數據包括:
(1)缺失值;
(2)異常值;
(3)不一致的值;
(4)重復數據及含有特殊符號(如#、¥、*)的數據。
1.1缺失值分析
數據的缺失主要包括記錄的缺失和記錄中某個字段信息的缺失,兩者都會造成分析結果的不準確,以下從缺失值產生的原因及影響等方面展開分析。
(1)缺失值產生的原因
1)有些信息暫時無法獲取,或者獲取信息的代價太大。
2)有些信息是被遺漏的。可能是因為輸入時認為不重要、忘記填寫或對數據理解錯誤等一些人為因素而遺漏,也可能是由於數據采集設備的故障、存儲介質的故障、傳輸媒體的故障等非人為原因而丟失。
3)屬性值不存在。在某些情況下,缺失值並不意味著數據有錯誤。對一些對象來說某些屬性值是不存在的,如一個未婚者的配偶姓名、一個兒童的固定收入等。
(2)缺失值的影響
1)數據挖掘建模將丟失大量的有用信息。
2)數據挖掘模型所表現出的不確定性更加顯著,模型中蘊含的規律更難把握。
3)包含空值的數據會使建模過程陷入混亂,導致不可靠的輸出。
(3)缺失值的分析
使用簡單的統計分析,可以得到含有缺失值的屬性的個數,以及每個屬性的未缺失數、缺失數與缺失率等。
1.2異常值分析
異常值分析是檢驗數據是否有錄入錯誤以及含有不合常理的數據。忽視異常值的存在是十分危險的,不加剔除地把異常值包括進數據的計算分析過程中,會給結果帶來不良影響;重視異常值的出現,分析其產生的原因,常常成為發現問題進而改進決策的契機。異常值是指樣本中的個別值,其數值明顯偏離其余的觀測值。異常值也稱為離群點,異常值的分析也稱為離群點分析。
(1)簡單統計量分析
可以先對變量做一個描述性統計,進而查看哪些數據是不合理的。最常用的統計量是最大值和最小值,用來判斷這個變量的取值是否超出了合理的範圍。例如,客戶年齡的最大值為199歲,則該變量的取值存在異常。
(2)3σ原則
如果數據服從正態分布,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過三倍標準差的值。在正態分布的假設下,距離平均值3σ之外的值出現的概率為P(|x-μ|>3σ)≤0.003,屬於極個別的小概率事件。如果數據不服從正態分布,也可以用遠離平均值的多少倍標準差來描述。
(3)箱形圖分析
箱形圖提供了識別異常值的一個標準:異常值通常被定義為小於QL-1.5IQR或大於QU+1.5IQR的值。QL稱為下四分位數,表示全部觀察值中有四分之一的數據取值比它小;QU稱為上四分位數,表示全部觀察值中有四分之一的數據取值比它大;IQR稱為四分位數間距,是上四分位數QU與下四分位數QL之差,其間包含了全部觀察值的一半。箱形圖判斷異常值的標準以四分位數和四分位距為基礎,四分位數具有一定的魯棒性:多達25%的數據可以變得任意遠而不會很大地擾動四分位數,所以異常值不能對這個標準施加影響。由此可見,箱形圖識別異常值的結果比較客觀,在識別異常值方面有一定的優越性,如圖所示。
在平常的數據分析過程中可以發現,可能其中有部分數據是缺失的,但是如果數據記錄和屬性較多,使用人工分辨的方法就很不切合實際,所以這裏需要編寫程序來檢測出含有缺失值的記錄和屬性以及缺失率個數和缺失率等。同時,也可使用箱形圖來檢測異常值。R語言檢測代碼如下所示。
# 設置工作空間 # 把“數據及程序”文件夾拷貝到F盤下,再用setwd設置工作空間 setwd("F:/數據及程序/chapter3/示例程序") # 讀入數據 saledata <- read.csv(file = "./data/catering_sale.csv", header = TRUE) # 缺失值檢測 並打印結果,由於R把TRUE和FALSE分別當作1、0,可以用sum()和mean()函數來分別獲取缺失樣本數、缺失比例 sum(complete.cases(saledata)) sum(!complete.cases(saledata)) mean(!complete.cases(saledata)) saledata[!complete.cases(saledata), ] # 異常值檢測箱線圖 sp <- boxplot(saledata$"銷量", boxwex = 0.7) title("銷量異常值檢測箱線圖") xi <- 1.1 sd.s <- sd(saledata[complete.cases(saledata), ]$"銷量") mn.s <- mean(saledata[complete.cases(saledata), ]$"銷量") points(xi, mn.s, col = "red", pch = 18) arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1) text(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)), labels = sp$out[order(sp$out)], sp$out[order(sp$out)] + rep(c(150, -150, 150, -150), length = length(sp$out)), col = "red")
該代碼以某餐廳的日銷量額數據作為樣本數據,數據示例如下:
運行上面的程序,得到以下結果:
可以看到缺失值個數輸出結果為“1”,占樣本總量的0.497%,缺失值位於第15行,2015年2月14日銷量缺失。分析箱形圖可以看出,箭頭所示的是一個標準差的區間。可以看出箱形圖中超過上下界的8個銷售額數據可能為異常值。結合具體業務可以把865、4060.3、4065.2歸為正常值,將60、22、51、6607.4、9106.44歸為異常值。
1.3一致性分析
數據不一致性是指數據的矛盾性、不相容性。直接對不一致的數據進行挖掘,可能會產生與實際相違背的挖掘結果。在數據挖掘過程中,不一致數據的產生主要發生在數據集成的過程中,可能是由被挖掘數據來自於不同的數據源、對於重復存放的數據未能進行一致性更新造成的。例如,兩張表中都存儲了用戶的電話號碼,但在用戶的電話號碼發生改變時只更新了一張表中的數據,那麽這兩張表中就有了不一致的數據。
2.數據特征分析
對數據進行質量分析以後,接下來可通過繪制圖表、計算某些特征量等手段進行數據的特征分析。
2.1分布分析
分布分析能揭示數據的分布特征和分布類型。對於定量數據,欲了解其分布形式是對稱的還是非對稱的、發現某些特大或特小的可疑值,可做出頻率分布表、繪制頻率分布直方圖、繪制莖葉圖進行直觀地分析;對於定性數據,可用餅形圖和條形圖直觀地顯示分布情況。
2.1.1.定量數據的分布分析
對於定量變量,選擇“組數”和“組寬”是做頻率分布分析時最主要的問題,一般按照以下步驟:
1)求極差;
2)決定組距與組數;
3)決定分點;
4)列出頻率分布表;
5)繪制頻率分布直方圖。
遵循的主要原則有:
1)各組之間必須是相互排斥的;
2)各組必須將所有的數據包含在內;
3)各組的組寬最好相等。
下面結合具體實例運用分布分析對定量數據進行特征分析:
下表是描述菜品撈起生魚片在2014年第二個季度的銷售數據,繪制銷售量的頻率分布表、頻率分布圖,對該定量數據做出相應的分析。
(1)求極差
極差=最大值-最小值=3960-45=3915(元)
(2)決定組距與組數
這裏根據業務數據的含義,可取組距為500。
組數=極差/組距=3915/500=7.83=>8
(3)決定分點
分布區間如下表所示。
(4)列出頻率分布表
根據分組區間得到如下表所示的頻率分布表。其中,第1列將數據所在的範圍分成若幹組段,其中第1個組段要包括最小值,最後一個組段要包括最大值。習慣上將各組段設為左閉右開的半開區間,如第1個分組為[0,500)。第2列組中值是各組段的代表值,由本組段的上、下限相加除以2得到。第3列和第4列分別為頻數和頻率。第5列是累計頻率,是否需要計算該列視情況而定。
(5)繪制頻率分布直方圖
若以2014年第二季度撈起生魚片每天的銷售額為橫軸,以各組段的頻率密度(頻率與組距之比)為縱軸,上表的數據可繪制成頻率分布直方圖,如圖所示。
2.1.2.定性數據的分布分析
對於定性變量,常常根據變量的分類類型來分組,可以采用餅形圖和條形圖來描述定性變量的分布。餅形圖的每一個扇形部分代表每一類型的百分比或頻數,根據定性變量的類型數目將餅形圖分成幾個部分,每一部分的大小與每一類型的頻數成正比;條形圖的高度代表每一類型的百分比或頻數,條形圖的寬度沒有意義。
圖1和圖2是菜品A、B、C在某段時間的銷售量分布圖。
圖1 菜品銷售量分布(餅形圖)
圖2 菜品銷售量分布(條形圖)
2.2對比分析
對比分析是指把兩個相互聯系的指標進行比較,從數量上展示和說明研究對象規模的大小,水平的高低,速度的快慢,以及各種關系是否協調。特別適用於指標間的橫縱向比較、時間序列的比較分析。在對比分析中,選擇合適的對比標準是十分關鍵的步驟,選擇合適,才能做出客觀的評價,選擇不合適,評價可能得出錯誤的結論。
對比分析主要有以下兩種形式:
(1)絕對數比較
它是利用絕對數進行對比,從而尋找差異的一種方法。
(2)相對數比較
它是由兩個有聯系的指標對比計算的,用以反映客觀現象之間數量聯系程度的綜合指標,其數值表現為相對數。由於研究目的和對比基礎不同,相對數可以分為以下幾種:
1)結構相對數:將同一總體內的部分數值與全部數值對比求得比重,用以說明事物的性質、結構或質量。例如,居民食品支出額占消費支出總額比重、產品合格率等。
2)比例相對數:將同一總體內不同部分的數值對比,表明總體內各部分的比例關系,如人口性別比例、投資與消費比例等。
3)比較相對數:將同一時期兩個性質相同的指標數值對比,說明同類現象在不同空間條件下的數量對比關系。例如,不同地區商品價格對比,不同行業、不同企業間某項指標對比等。
4)強度相對數:將兩個性質不同但有一定聯系的總量指標對比,用以說明現象的強度、密度和普遍程度。例如,人均國內生產總值用“元/人”表示,人口密度用“人/平方公裏”表示,也有用百分數或千分數表示的,如人口出生率用‰表示。
5)計劃完成程度相對數:是某一時期實際完成數與計劃數對比,用以說明計劃完成程度。
6)動態相對數:將同一現象在不同時期的指標數值對比,用以說明發展方向和變化的速度,如發展速度、增長速度等。
2.3統計量分析
用統計指標對定量數據進行統計描述,常從集中趨勢和離中趨勢兩個方面進行分析。平均水平的指標是對個體集中趨勢的度量,使用最廣泛的是均值和中位數;反映變異程度的指標則是對個體離開平均水平的度量,使用較廣泛的是標準差(方差)、四分位數間距。
1.集中趨勢度量
(1)均值
均值是所有數據的平均值。如果求n個原始觀察數據的平均數,計算公式為:
有時,為了反映在均值中不同成分所占的不同重要程度,為數據集中的每一個xi賦予wi,這就得到了加權均值的計算公式:
類似地,頻率分布表(如表3-4)的平均數可以使用下式計算:
式中,x1,x2,…,xk分別為k個組段的組中值;f1,f2,…,fk分別為k個組段的頻率。這裏的fi起了權重的作用。
作為一個統計量,均值的主要問題是對極端值很敏感。如果數據中存在極端值或者數據是偏態分布的,那麽均值就不能很好地度量數據的集中趨勢。為了消除少數極端值的影響,可以使用截斷均值或者中位數來度量數據的集中趨勢。截斷均值是去掉高、低極端值之後的平均數。
(2)中位數
中位數是將一組觀察值從小到大按順序排列,位於中間的那個數據。即在全部數據中,小於和大於中位數的數據個數相等。
將某一數據集x:{x1,x2,…,xn}從小到大排序:{x(1),x(2),…,x(n)}。
當n為奇數時
當n為偶數時
(3)眾數
眾數是指數據集中出現最頻繁的值。眾數並不經常用來度量定性變量的中心位置,更適用於定性變量。眾數不具有唯一性。
2.離中趨勢度量
(1)極差
極差=最大值-最小值
極差對數據集的極端值非常敏感,並且忽略了位於最大值與最小值之間的數據是如何分布的。
(2)標準差
標準差度量數據偏離均值的程度,計算公式為:
(3)變異系數
變異系數度量標準差相對於均值的離中趨勢,計算公式為:
變異系數主要用來比較兩個或多個具有不同單位或不同波動幅度的數據集的離中趨勢。
(4)四分位數間距
四分位數包括上四分位數和下四分位數。將所有數值由小到大排列並分成四等份,處於第一個分割點位置的數值是下四分位數,處於第二個分割點位置(中間位置)的數值是中位數,處於第三個分割點位置的數值是上四分位數。四分位數間距是上四分位數QU與下四分位數QL之差,其間包含了全部觀察值的一半。其值越大,說明數據的變異程度越大;反之,說明變異程度越小。
針對餐飲銷量數據進行統計量分析,其R語言代碼如下:
# 設置工作空間 # 把“數據及程序”文件夾拷貝到F盤下,再用setwd設置工作空間 setwd("F:/數據及程序/chapter3/示例程序") # 讀入數據 saledata <- read.table(file = "./data/catering_sale.csv", sep=",", header = TRUE) sales <- saledata[, 2] # 統計量分析 # 均值 mean_ <- mean(sales, na.rm = T) # 中位數 median_ <- median(sales, na.rm = T) # 極差 range_ <- max(sales, na.rm = T) - min(sales, na.rm = T) # 標準差 std_ <- sqrt(var(sales, na.rm = T)) # 變異系數 variation_ <- std_ / mean_ # 四分位數間距 q1 <- quantile(sales, 0.25, na.rm = T) q3 <- quantile(sales, 0.75, na.rm = T) distance <- q3 - q1 a <- matrix(c(mean_, median_, range_, std_, variation_, q1, q3, distance), 1, byrow = T) colnames(a) <- c("均值", "中位數", "極差", "標準差", "變異系數", "1/4分位數", "3/4分位數", "四分位間距") print(a)
程序運行結果如下:
我們通過上面的程序已經得到餐飲銷量數的統計量情況:銷量數據均值:2755.215,中位數:2655.85,極差: 9084.44,標準差:751.0298,變異系數:0.2725848,四分位數間距:574.15。
後續還有周期性分析和相關性分析以及一些其他統計函數,後面再介紹。
數據分析之數據質量分析和數據特征分析