1. 程式人生 > >基於R的資料探勘方法與實踐(1)——資料準備

基於R的資料探勘方法與實踐(1)——資料準備

1、資料檢查

資料檢查是資料探勘的第1步,從不同的維度檢查資料,找出其中有問題的資料以便對其進行修正。

1.1 資料型別

檢視資料的構成與形態,尤其是各列的屬性。

> library(MASS)
> data(ChickWeight)
> str(ChickWeight)
Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame':	578 obs. of  4 variables:
 $ weight: num  42 51 59 64 76 93 106 125 149 171 ...
 $ Time  : num  0 2 4 6 8 10 12 14 16 18 ...
 $ Chick : Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ...
 $ Diet  : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
 - attr(*, "formula")=Class 'formula'  language weight ~ Time | Chick
  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
 - attr(*, "outer")=Class 'formula'  language ~Diet
  .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> 
 - attr(*, "labels")=List of 2
  ..$ x: chr "Time"
  ..$ y: chr "Body weight"
 - attr(*, "units")=List of 2
  ..$ x: chr "(days)"
  ..$ y: chr "(gm)"

1.2 數量檢查

樣本個數太少會影響結果的解釋程度,而樣本個數太多,則統計上的顯著則可能沒有實際意義。

1.3質量檢查

1.3.1資料的集中趨勢

資料集中趨勢的衡量方法包括平均數、中位數、眾數、偏態係數、峰態係數等。

1.3.2資料的變異程度

資料的變異程度可以用標準差、四分位距、變異係數等進行衡量。

可以用psych包中的describe()的函式進行資料檢查,它可以計算非缺失值的數量、平均數、標準差、中位數、截尾均值、絕對中位差、最小值、最大值、值域、偏度、峰度和平均值的標準誤。例如,對MASS包中的ChickWeight資料進行檢查的例項如下:

> library(psych)
> describe(ChickWeight)
       vars   n   mean    sd median trimmed   mad min max range  skew kurtosis   se
weight    1 578 121.82 71.07    103  113.18 69.68  35 373   338  0.96     0.34 2.96
Time      2 578  10.72  6.76     10   10.77  8.90   0  21    21 -0.02    -1.26 0.28
Chick*    3 578  26.26 14.00     26   26.27 17.79   1  50    49  0.00    -1.19 0.58
Diet*     4 578   2.24  1.16      2    2.17  1.48   1   4     3  0.31    -1.39 0.05

定義function,用以求得眾數:

> Mode <- function(x)
+ {
+   return(as.numeric(names(table(x))[table(x) == max(table(x))]))
+          
+ }
> varNames = colnames(ChickWeight)
> for (i in 1:ncol(ChickWeight))
+ {
+   print(varNames[i]); print(Mode(ChickWeight[, i]))
+ }
[1] "weight"
[1] 41
[1] "Time"
[1] 0 2
[1] "Chick"
[1] 13  9 20 10 17 19  4  6 11  3  1 12  2  5 14  7 24 30 22 23 27 28 26 25 29 21 33 37 36 31 39 38 32 40 34 35 45 43 41
[40] 47 49 46 50 42 48
[1] "Diet"
[1] 1

1.3.3資料探索與視覺化

(1)盒須圖

盒須圖也稱為箱線圖,用於展示資料的中央趨勢與離散程度。盒中包含有50%的屬性資料,盒子長度越大說明資料越分散,盒子上下所延伸出的線用以連線離群值與極端值。當資料介於1.5~3倍的四分位距(IQR)時,稱為離群值;超過3倍IQR時,稱為極端值。

boxplot(ChickWeight$weight)


(2)折線圖

折線圖可以展現資料分佈的變化趨勢,使用者可以通過折線的上升或下降看出序列的變動,從而推測數值的變化。

> ChickWeightPart = ChickWeight[1:12, ]
> plot(ChickWeightPart$weight,ChickWeightPart$Time,type="o",xlab="Time",ylab="Chick Weight",col="red",main="Chick Weight by Time",pch=c(15))


(3)散點圖

散點圖可以通過點的疏密程度、延展方向和分佈特徵,瞭解變數間的相互關係,迴歸分析中,我們可以通過散點圖作為篩選變數的基本檢驗步驟,初步得到因變數和自變數之間的相關特性。

> plot(ChickWeightPart$weight, ChickWeightPart$Time)


1.4 資料清理

資料在使用前可能存在以下問題:

(1)不正確的資料

判斷資料是否正確,首先要確定資料的有效範圍,比如某個同學的身高達到5011cm,則肯定是不正確的資料。

(2)不一致的資料

不同來源的資料屬性可能不同,在資料表達、比例定義或編碼上也會有不同,因此產生數值或欄位不一致的情況。例如,在記錄重量過程中,有的資料是以kg為單位記錄的,有的資料是以ton為單位。在使用資料之前,需要首先將這些資料進行轉換統一。

(3)重複的資料

在資料庫資料表的使用過程中,常常會遇到兩項重複資料完全相同,這些資料應當刪除其中的一組。

(4)冗餘的資料

資料冗餘主要是針對具有相同意義或彼此之間存在明確轉換關係的資料,例如一組資料中既包含學生的出生日期又包含學生年齡,那就可以將學生的年齡刪除,因為可以從學生的出生日期推斷出提取學生的年齡。

(5)遺漏值

遺漏值可能出現的情況有很多,例如問卷調查過程中被調查人沒有填寫部分資料,資料錄入過程中出現遺漏,資料採集裝置損壞導致的資料缺失,資料儲存過程中出現遺失等等。遺漏值的處理需要視情況而定。

i) 直接刪除該觀察值。這是最簡單直接的處理方法,但如果資料遺漏比例較大,此種處理將導致資料的大量流失。

ii) 人工填寫遺漏值。通過人的主觀判斷來填補遺漏值,但比較費時費力,如果遺漏值較多,此方法並不合適。

iii) 使用全域性常數填充遺漏值。例如對遺漏值統一採用“9999”進行替換,但這種方法只能解決後續的部分資料輸入問題,無法解讀遺失屬性所隱含的資訊。

iv) 使用屬性平均值。對缺失的資料,採用欄位平均值代替遺漏值。缺點是不具有客觀性,當資料本身有類別或等級之分的時候,容易高估或低估資料。

v) 用同一類別的所有樣本平均值填充遺漏值。

vi) 利用資料探勘模式來填充遺漏值。可用迴歸分析、決策樹、人工神經網路等資料探勘推導工具。

(6)噪聲

噪聲表示一個數據中的隨機誤差或干擾。這些誤差或干擾可能來自認為因素或機器裝置產生的誤差。針對噪聲資料,若非資料本身的誤差,經由噪聲識別之後即可去除,若是資料本身既有隨機誤差,可以利用以下幾種資料平滑技術降低其對結果的影響。

i) 分箱法

分箱法是利用相鄰值來區域性平滑儲存在同一箱子的資料值。將資料想排序後,依序排入預定的箱子中,排入方式可採用等寬、等頻方法,接著利用各箱子的平均值、中位數、邊界值等三種數值進行資料平滑。

ii) 資料配適

利用資料配適為新的函式來平滑資料,例如採用簡單線性迴歸以一個解釋變數估計目標變數。

(7)離群值

在資料集中,如果某些資料的表現顯然與其他資料不一樣時,這些資料被稱為離群值。例如初二1班的同學身高都在140~160釐米之間,但有幾位同學的身高好過200釐米,則稱這些同學的身高是離群值。離群值會影響資料探勘的效果,特別是預測。因此在開展資料探勘的時候要先處理離群值。

i) 直接刪除

當發現數據是由於儀器或工具造成的判斷錯誤,或者可以明確判斷出資料完全不合理時,可以將資料直接刪除。

ii) 用其他數值替換,將資料範圍歸一化

當數值變數為空值或者非數值資料,當資料具有一定的代表性時,則可以用其他資料來替換。

iii) 聚類分析

離群值可以利用聚類分析檢測出,藉此將有類似點組合為一個族群,通過考察這些資料的重要性,並確定是否刪除或保留。

1.5 資料轉換

1.5.1 資料值轉換

(1)歸一化

歸一化是將屬性資料按比例放到一個特定區間中。歸一化可以防止較大初始值域與較小初始值域間相互比較的情況以及權重過大的問題。

極小值—極大值歸一化是常用的歸一化方法,主要是對原始資料進行線性轉換,假設minXA和maxXA分別是屬性A的最小值和最大值,其計算方式是:

X’ =(X - minXA)*(newmaxXA - newminXA)/(maxXA - minXA) + newminXA

(2)標準化

資料標準化是基於屬性A的平均值和標準差將資料標準化。A的值X標準化後為Z,可經下式計算而得:

Z = (X- avgXA)/SA

其中,avgXA和SA分別為屬性A的平均值和標準差。

1.5.2 資料型別轉變

(1)離散型資料轉成連續型資料

離散型資料轉換成連續型資料必須加入領域知識來定義離散值的距離或相似程度。

(2)連續型資料轉成離散型資料

離散化是將連續資料分到數個小區間。以類別取代原有的連續資料。典型的離散化過程有四個步驟:i) 將資料的連續數值進行排序;ii) 選擇分割或合併的準則;iii) 分割或合併數值;iv) 是否符合停止條件。