數(shù)據(jù)預(yù)處理

前提

在數(shù)據(jù)挖掘中,海量的原始數(shù)據(jù)中存在大量不完整(有缺失值)肌访、不一致找默、有異常的數(shù)據(jù),會嚴重影響到數(shù)據(jù)挖掘建模的執(zhí)行效果吼驶,甚至?xí)?dǎo)致挖掘結(jié)果的偏差惩激,進而數(shù)據(jù)清洗就變得尤為重要。在數(shù)據(jù)清洗完成后接著甚至同時進行數(shù)據(jù)集成蟹演、變換风钻、規(guī)約等一系列的處理,而整個過程稱之為數(shù)據(jù)預(yù)處理酒请。在整個數(shù)據(jù)挖掘過程中骡技,數(shù)據(jù)預(yù)處理工作大致占據(jù)整個過程的60%
一般來說羞反,數(shù)據(jù)預(yù)處理的主要包括如下內(nèi)容: 數(shù)據(jù)清洗布朦、數(shù)據(jù)集成、數(shù)據(jù)變換昼窗、數(shù)據(jù)規(guī)約是趴。
接下來的內(nèi)容,我們也是從這幾方面闡述澄惊。

數(shù)據(jù)預(yù)處理

1.1 數(shù)據(jù)清洗

數(shù)據(jù)清洗主要是刪除原始數(shù)據(jù)中的無關(guān)數(shù)據(jù)右遭、重復(fù)數(shù)據(jù)做盅、平滑噪聲數(shù)據(jù),篩選掉與挖掘主題無關(guān)的數(shù)據(jù)窘哈,處理缺失值及異常值等吹榴。

  • 缺失值處理
    從統(tǒng)計上說,缺失的數(shù)據(jù)可能產(chǎn)生偏估計滚婉,使得樣本數(shù)據(jù)不能很好代表總體數(shù)據(jù)集图筹。常見的缺失值的處理包括:缺失數(shù)據(jù)識別和缺失值處理兩個步驟。

注:由于R語言做數(shù)據(jù)挖掘让腹、分析相當便捷远剩,整個文章的實例都是基于R實現(xiàn)的。比如發(fā)現(xiàn)缺失值的存在:is.na(), 另外函數(shù)complete.cases()可識別樣本數(shù)據(jù)是否完整進而得出缺失情況等等
<code>
缺失數(shù)據(jù)的識別
is.na(inputfile) #判斷是否存在缺失
n=sum(is.na(inputfile)) #輸出缺失值個數(shù)
異常值識別
par(mfrow=c(1,2))#將繪圖窗口劃為1行兩列骇窍,同時顯示兩圖
dotchart(inputfile$sales)#繪制單變量散點圖
boxplot(inputfile$sales,horizontal=T)#繪制水平箱形圖
</code>

常見的缺失值處理方法: 刪除法瓜晤、替換法、插補法等
(1)腹纳、刪除法: 最簡單的缺失值處理方法痢掠。從不同角度進行數(shù)據(jù)處理劃分:

  • 刪除觀測樣本 又稱為行刪除,直接移除所有含有缺失數(shù)據(jù)的行嘲恍,比較適用缺失值所占比例較小的情況
  • 刪除變量 直接刪除整個變量足画,適用變量由較大的缺失且對研究目標影響不大的情況。

刪除法會存在信息浪費的問題并數(shù)據(jù)結(jié)構(gòu)會變動佃牛,致使后續(xù)得到的統(tǒng)計結(jié)果又偏差.

<code>
缺失值的處理
inputfile$date=as.numeric(inputfile$date)#將日期轉(zhuǎn)換成數(shù)值型變量
sub=which(is.na(inputfile$sales))#識別缺失值所在行數(shù)
inputfile1=inputfile[-sub,]#將數(shù)據(jù)集分成完整數(shù)據(jù)和缺失數(shù)據(jù)兩部分
inputfile2=inputfile[sub,]
行刪除法處理缺失淹辞,結(jié)果轉(zhuǎn)存
result1=inputfile1
</code>
(2)、替換法
一般根據(jù)屬性將變量分:數(shù)值型和非數(shù)值型

  • 數(shù)值型:可用該變量在其他所有對象的取值的均值來替換缺失值
  • 非數(shù)值型: 使用該變量其他全部有效觀測值的中位數(shù)或眾數(shù)進行替換
    <code>
    均值替換法處理缺失俘侠,結(jié)果轉(zhuǎn)存
    avg_sales=mean(inputfile1$sales)#求變量未缺失部分的均值
    inputfile2$sales=rep(avg_sales,n)#用均值替換缺失
    result2=rbind(inputfile1,inputfile2)#并入完成插補的數(shù)據(jù)
    </code>
    (3)象缀、插補法
    常見的插補法:回歸插補、多重插補等
  • 回歸插補: 利用回歸模型將需要補缺的變量作為因變量爷速,其他相關(guān)變量作為自變量攻冷,通過回歸函數(shù)【比如在R中使用lm()】預(yù)測出因變量的值來對缺失變量進行補缺。
  • 多重插補: 從一個包含缺失值的數(shù)據(jù)集中生成一組完整的數(shù)據(jù)遍希,如此進行多次等曼,從而產(chǎn)生缺失值的一個隨機樣本。
    【注:在R中已經(jīng)提供了mice函數(shù)實現(xiàn)多重插補】
    <code>
    回歸插補法處理缺失凿蒜,結(jié)果轉(zhuǎn)存
    model=lm(sales~date,data=inputfile1)#回歸模型擬合
    inputfile2$sales=predict(model,inputfile2)#模型預(yù)測
    result3=rbind(inputfile1,inputfile2)
    多重插補法處理缺失禁谦,結(jié)果轉(zhuǎn)存
    library(lattice) #調(diào)入函數(shù)包
    library(MASS)
    library(nnet)
    library(mice) #前三個包是mice的基礎(chǔ)
    imp=mice(inputfile,m=4) #4重插補,即生成4個無缺失數(shù)據(jù)集
    fit=with(imp,lm(sales~date,data=inputfile))#選擇插補模型
    pooled=pool(fit)
    summary(pooled)
    result4=complete(imp,action=3)#選擇第三個插補數(shù)據(jù)集作為結(jié)果
    </code>
  • 異常值處理
    前面也已經(jīng)提到異常值處理的方式废封,這里不會在舉例子州泊,只是簡單描述下在R中常見的處理:
    使用dochart()、 boxplot()繪制單變量散點圖與箱形圖
    1漂洋、刪除含有異常值的記錄: 直接刪除對應(yīng)的記錄
    2遥皂、視為缺失值: 按照缺失值處理方法來處理
    3力喷、平均值修正:用前后兩個觀測值的平均值修正該異常值
    4、不處理:在異常值基礎(chǔ)上挖掘模型

1.2數(shù)據(jù)集成

在數(shù)據(jù)挖掘過程中演训,可能會存在數(shù)據(jù)分布在不同的數(shù)據(jù)源中弟孟,而這個時候需要將多個數(shù)據(jù)源合并存放在一個一致的數(shù)據(jù)存儲(如數(shù)據(jù)倉庫),整個過程稱之為數(shù)據(jù)集成样悟。

數(shù)據(jù)倉庫:
關(guān)于數(shù)據(jù)倉庫構(gòu)思
漫談數(shù)據(jù)倉庫之維度建模
漫談數(shù)據(jù)倉庫之拉鏈表(原理拂募、設(shè)計以及在Hive中的實現(xiàn))

在R中,通過將存儲在兩個數(shù)據(jù)框中的數(shù)據(jù)以關(guān)鍵字為依據(jù)窟她,以行為單位做列向合并陈症,直接通過merge()函數(shù)完成。
merge(數(shù)據(jù)框1震糖,數(shù)據(jù)框2录肯,by="關(guān)鍵字"),而合并后的新數(shù)據(jù)自動按照關(guān)鍵字取值大小升序排列吊说。不過在數(shù)據(jù)集成過程中存在表達形式不一樣论咏,導(dǎo)致不能直接完成匹配,就需要我們進行加以轉(zhuǎn)換疏叨、提煉潘靖、集成等操作穿剖。具體從如下幾方面:
(1)蚤蔓、實體識別
從不同數(shù)據(jù)源識別出現(xiàn)實世界的實體,來完成統(tǒng)一不同源的數(shù)據(jù)矛盾之處糊余。

  • 同名異義
    比如同是屬性ID:源A中為UserId 源B為OrderId秀又,描述不同的視聽
  • 異名同義
    比如源A中DetailOrderId:訂單ID 源B:OrderId 即為A.DetailOrderId = B.OrderId
  • 單位不一致
    比如價格單位 采用不同的貨幣計量單位

實體識別承擔著檢測和解決這些沖突的任務(wù)

(2)、冗余屬性識別

  • 同一屬性多次出現(xiàn)
  • 同一屬性命名不一致贬芥,導(dǎo)致重復(fù)
    通過整合不同源數(shù)據(jù)減少甚至避免數(shù)據(jù)冗余與不一致吐辙,提高數(shù)據(jù)挖掘的質(zhì)量和速度。

1.3數(shù)據(jù)變換

數(shù)據(jù)變換主要對數(shù)據(jù)進行規(guī)范化處理蘸劈、連續(xù)變量的離散化以及屬性屬性的構(gòu)造昏苏,將數(shù)據(jù)轉(zhuǎn)換成“適當?shù)摹毙问剑瑏頋M足挖掘任務(wù)及算法的需要威沫。
(1)贤惯、簡單函數(shù)變換
對原始數(shù)據(jù)進行某些數(shù)學(xué)函數(shù)變換,常見平方棒掠、開方孵构、取對數(shù)、差分運算等等
主要來完成不具有正態(tài)分布變換服從正態(tài)分布烟很;非平穩(wěn)序列變?yōu)槠椒€(wěn)序列等等
(2)颈墅、數(shù)據(jù)規(guī)范化
為了清除指標之間的量綱和取值范圍差異的影響蜡镶,需要進行標準化處理,將數(shù)據(jù)按照比例進行縮放恤筛,使之落入一個特定區(qū)域官还,便于進行綜合分析。
常見方法如下:

  • 最小-最大規(guī)范化
    也稱為離差標準化叹俏,是對原始數(shù)據(jù)的線性變換
    x* = (x-min) / (max-min)
    其中max:樣本數(shù)據(jù)最大值妻枕, min: 樣本數(shù)據(jù)最小值,max-min為極差

離差標準化保留了原來的數(shù)據(jù)中存在的關(guān)系粘驰,是清除量綱和數(shù)據(jù)取值范圍影響的最簡單方法屡谐。同樣它的缺點也明顯若是數(shù)集中某個數(shù)值很大,則規(guī)范化后各值會接近為0蝌数,并且將會相差不大愕掏。另外一旦超過[min,max]時,需要重新確定max和min

  • 零-均值規(guī)范化
    也稱為標準差標準化顶伞,處理后數(shù)據(jù)均值=0饵撑,標準差=1
    x* = (x- x(均)) / σ
    其中X(均)原始數(shù)據(jù)平均值,σ為原始數(shù)據(jù)的標準差

由于均值和標準差容易受離群點的影響唆貌,常常通過使用中位數(shù)M取代均值滑潘,其次使用絕對標準差取代標準差
σ* = ∑|Xi-W|,其中W為平均數(shù)或中位數(shù)

  • 小數(shù)定標規(guī)范化
    通過移動屬性值的小數(shù)位數(shù),將屬性映射到[-1,1],移動的小數(shù)位數(shù)取決于屬性值絕對值的最大值
    x* = (x) / 10 ^ k

<code>
讀取數(shù)據(jù)
data=read.csv('./data/normalization_data.csv',he=F)
最小-最大規(guī)范化
b1=(data[,1]-min(data[,1]))/(max(data[,1])-min(data[,1]))
b2=(data[,2]-min(data[,2]))/(max(data[,2])-min(data[,2]))
b3=(data[,3]-min(data[,3]))/(max(data[,3])-min(data[,3]))
b4=(data[,4]-min(data[,4]))/(max(data[,4])-min(data[,4]))
data_scatter=cbind(b1,b2,b3,b4)
零-均值規(guī)范化
data_zscore=scale(data)
小數(shù)定標規(guī)范化
i1=ceiling(log(max(abs(data[,1])),10))#小數(shù)定標的指數(shù)
c1=data[,1]/10^i1
i2=ceiling(log(max(abs(data[,2])),10))
c2=data[,2]/10^i2
i3=ceiling(log(max(abs(data[,3])),10))
c3=data[,3]/10^i3
i4=ceiling(log(max(abs(data[,4])),10))
c4=data[,4]/10^i4
data_dot=cbind(c1,c2,c3,c4)
</code>

(3)锨咙、連續(xù)屬性離散化
在數(shù)據(jù)的取值范圍內(nèi)設(shè)定若干個離散的劃分點语卤,將取值范圍劃分為不同的離散化的區(qū)間,最后使用不同的符號或數(shù)值代表落在不同區(qū)間的數(shù)據(jù)值酪刀。
常見離散方法:

  • 等寬法:均分對應(yīng)的屬性的值域
  • 等頻法:相同數(shù)量的記錄放到一個區(qū)間
  • 聚類(一維):采用聚類方法完成聚類粹舵,再將聚類得到簇合并到一個連續(xù)屬性并做同一標記。
    <code>
    等寬離散化
    v1=ceiling(data[,1]*10)
    等頻離散化
    names(data)='f'#變量重命名
    attach(data)
    seq(0,length(f),length(f)/6)#等頻劃分為6組
    v=sort(f)#按大小排序作為離散化依據(jù)
    v2=rep(0,930)#定義新變量
    for(i in 1:930) v2[i]=ifelse(f[i]<=v[155],1,
    ifelse(f[i]<=v[310],2,
    ifelse(f[i]<=v[465],3,
    ifelse(f[i]<=v[620],4,
    ifelse(f[i]<=v[775],5,6)))))
    detach(data)
    聚類離散化
    result=kmeans(data,6)
    v3=result$cluster
    </code>

(4)骂倘、屬性構(gòu)造
利用已有的屬性構(gòu)造出新的屬性
(5)眼滤、小波變換(本次不進行闡述)

1.4數(shù)據(jù)規(guī)約

數(shù)據(jù)規(guī)約在大數(shù)據(jù)集上產(chǎn)生更小的且保持原數(shù)據(jù)完整性的新數(shù)據(jù)集,提升在數(shù)據(jù)集合上進行分析和挖掘的效率历涝。
意義如下:

  • 降低無效诅需、錯誤數(shù)據(jù)對建模的影響,提高建模的準確性
  • 少量且具有代表性的數(shù)據(jù)將大幅度縮減數(shù)據(jù)挖掘所需的時間
  • 降低存儲數(shù)據(jù)的成本
    常見規(guī)約
    (1)荧库、屬性規(guī)約
    合并屬性
    逐步向前選擇
    逐步向后刪除
    決策樹歸納
    主成分分析
    (2)堰塌、數(shù)值規(guī)約
    直方圖
    聚類
    抽樣(采樣)
    參數(shù)回歸
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市电爹,隨后出現(xiàn)的幾起案子蔫仙,更是在濱河造成了極大的恐慌,老刑警劉巖丐箩,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摇邦,死亡現(xiàn)場離奇詭異恤煞,居然都是意外死亡,警方通過查閱死者的電腦和手機施籍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門居扒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丑慎,你說我怎么就攤上這事喜喂。” “怎么了竿裂?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵玉吁,是天一觀的道長。 經(jīng)常有香客問我腻异,道長进副,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任悔常,我火速辦了婚禮影斑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘机打。我一直安慰自己矫户,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布残邀。 她就那樣靜靜地躺著皆辽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪罐旗。 梳的紋絲不亂的頭發(fā)上膳汪,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天唯蝶,我揣著相機與錄音九秀,去河邊找鬼。 笑死粘我,一個胖子當著我的面吹牛鼓蜒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播征字,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼都弹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匙姜?” 一聲冷哼從身側(cè)響起畅厢,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氮昧,沒想到半個月后框杜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浦楣,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年咪辱,在試婚紗的時候發(fā)現(xiàn)自己被綠了振劳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡油狂,死狀恐怖历恐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情专筷,我是刑警寧澤弱贼,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站磷蛹,受9級特大地震影響哮洽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弦聂,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一鸟辅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莺葫,春花似錦匪凉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至堡纬,卻和暖如春聂受,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烤镐。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工蛋济, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炮叶。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓碗旅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親镜悉。 傳聞我的和親對象是個殘疾皇子祟辟,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容