r语言 整理、处理数据步骤_R语言之数据处理(一)
在上一篇小文中,提到了關于R語言導入數(shù)據(jù)的一些方法,之后的重點就轉向了數(shù)據(jù)的處理上。數(shù)據(jù)處理其實在整個數(shù)據(jù)分析項目中所占用的時間是比較多的,所以根據(jù)處理的目的不同,也有不同的處理方法。在R語言中,我通常會將數(shù)據(jù)處理分成三部分:數(shù)據(jù)質量處理、數(shù)據(jù)維度處理和特殊文本的處理。由于三個部分的內容也比較多,就先介紹數(shù)據(jù)質量處理的內容,其余的兩部分會在后面的文章介紹。
一、數(shù)據(jù)清洗
數(shù)據(jù)清洗簡單說就是處理缺失值和異常值的判斷,當然要根據(jù)實際情況來定義數(shù)據(jù)清洗的任務。
1.缺失值處理
當我們面對的數(shù)據(jù)是比較大量的時候,就需要了解數(shù)據(jù)集中那些變量有缺失值、缺失的數(shù)量、屬于那種組合方式等有用信息。此時可以使用mice包中的md.pattern()函數(shù),該函數(shù)可生成一個以矩陣或者數(shù)據(jù)框形式展示缺失值模式的表格,且該函數(shù)只需要傳入需要判斷的數(shù)據(jù)即可。另外還有使用圖形方法這種更直觀的方法描述數(shù)據(jù)的缺失,可利用VIM包中的aggr()函數(shù)實現(xiàn),形式如下:
aggr(x,delimiter = NULL,plot = T,...)
x表示一個向量、矩陣或者數(shù)據(jù)框,delimiter用于區(qū)分插值補量,plot則指明是否畫圖。
識別出數(shù)據(jù)中的缺失值,接下來對其處理。最常用的方法是將包含缺失值的記錄刪去,使用na.omit()函數(shù),但僅限于出現(xiàn)缺失值的記錄數(shù)量比較少。但含缺失值的記錄很多時,就要考慮替換缺失值,一般可用均值、中位數(shù)和平均數(shù)替換,更專業(yè)一點的做法是使用插值法(將缺失數(shù)據(jù)的變量作為因變量,其他變量作為自變量,建立預測模型)
2.異常值的判斷與處理
異常值處理的重點在于識別,處理的手段和缺失值基本一致,所以下面主要介紹識別異常值的一些方法。3σ原則是使用比較多的方法,而R語言qc包中的qcc()函數(shù)是專業(yè)繪制質量監(jiān)控圖的。初次之外,還可以利用箱線圖和聚類分析識別出異常值。
二、數(shù)據(jù)去重
數(shù)據(jù)去重并不是處理數(shù)據(jù)的必要步驟,所以單獨拿出來說。在R語言中去重的方法也很簡單,對于向量數(shù)據(jù)可使用unique()函數(shù),而針對矩陣或者數(shù)據(jù)框這種多維數(shù)據(jù)時,可使用duplicated()函數(shù)。
三、數(shù)據(jù)轉換
數(shù)據(jù)轉換的內容簡單地可分為三部分,產生衍生變量、數(shù)據(jù)分箱和數(shù)據(jù)標注化。衍生變量就是原有的變量屬性構造新的屬性,比如變量A和變量B通過相乘得到變量C,另外比較常見的就是啞變量的構成(可以使用caret包的dummyVars()函數(shù))。
數(shù)據(jù)分箱實際上就是按照屬性值劃分子區(qū)間,比如將考試成績0-59分的歸為不及格,60-89的歸為中等,90-100的歸為優(yōu)秀。R語言中分cut()函數(shù)可以實現(xiàn)數(shù)據(jù)分箱的目的。
數(shù)據(jù)標準化主要的目的就是消除變量之間的量綱影響,讓不同的變量經過標準化后可以有平等分析和比較的基礎。常用的標準化有兩種,Min-Max標準化和Z-Score標準化,而caret包中的preProcess()函數(shù)能非常靈活地實現(xiàn)數(shù)據(jù)的標注化。
四、數(shù)據(jù)抽樣
在數(shù)據(jù)分析或者建立數(shù)據(jù)模型之前,在面對或多或少的數(shù)據(jù)時,一般不會直接使用數(shù)據(jù),而是采用抽樣的方法去選取數(shù)據(jù),而根據(jù)不同的情況,會有不同的抽樣方法。下面介紹四種抽樣方法及其在R語言中的實現(xiàn):
類失衡會發(fā)生在包含分類變量的數(shù)據(jù)集,比如在整個數(shù)據(jù)集中,A類的數(shù)據(jù)占總體的5%,而B類數(shù)據(jù)占了95%。具體的理論可參考下面的連接:
SMOTE算法?www.jianshu.com現(xiàn)在我們的關鍵在于如何使用R語言去解決類失衡的情況,比如A類數(shù)據(jù)有4000條記錄,B類數(shù)據(jù)只有200條記錄,此時可以使用DMwR包中的SMOTE()函數(shù)。
2.隨機抽樣
R語言中實現(xiàn)隨機抽樣的函數(shù)是sample(),基本形式如下:
sample(x,size,replace=F/T,prob=NULL)
x是數(shù)值型向量,size是抽樣個數(shù),replace表示是否放回,prob是與x長度一致的向量,且每個元素表示與x對應位置上的元素被抽中的概率。
如上面的命令,在1到5中隨機抽取3個元素,且每個元素被抽中的概率為0.1、0.2、0.5、0.4和0.3。
3.等比抽樣
當面對多分類數(shù)據(jù)時,我們會采用等比抽樣的方法,實現(xiàn)快速得到與原始數(shù)據(jù)集有比例關系的抽樣數(shù)據(jù)。R語言中實現(xiàn)這一功能的是caret包中的createDataPartition()函數(shù),形式如下:
createDataPartition(x,time,p,list=F/T,groups = min(5,length(x)))
x是包含了多分類信息的向量,time表示需要進行抽樣的次數(shù),p表示需要從數(shù)據(jù)中抽取的樣本比例,list表示結果是否是為list形式,默認為T,groups表示如果輸出變量是數(shù)值型數(shù)據(jù),則默認按分位數(shù)分組進行取樣。以iris數(shù)據(jù)集為例,使用str()函數(shù)查看iris數(shù)據(jù)集的構成:
可以知道iris數(shù)據(jù)集中的Species變量是分類變量,且有3類元素。使用createDataPartition()函數(shù)進行抽樣。
從結果可以看到三類的數(shù)據(jù)量是一樣的。
4.交叉驗證的樣本抽取
如果我們在建立模型時只采用一次抽樣的數(shù)據(jù),這樣得到的數(shù)據(jù)模型隨機性和誤差性是比較大的,因此使用N折交叉驗證的方法可以提高模型結果的可靠性。步驟大概是將數(shù)據(jù)集的每條記錄分配下標1,2,...N個數(shù)據(jù),換言之就是將數(shù)據(jù)集分成了N份,然后,每次提取一份作為測試數(shù)據(jù)集,剩下的N-1份數(shù)據(jù)作為訓練數(shù)據(jù)集,然后記錄下擬合的N個模型結果和誤差,最后計算平均誤差來衡量模型的準確性。對K折交叉驗證法原理不熟悉的伙伴,可以看以下的連接:
K折交叉驗證?blog.csdn.netR語言中實現(xiàn)K折交叉驗證法,主要是使用caret包中的createFolds()和createMultiFolds()兩個函數(shù)。兩者的形式別如下:
createFolds(x,k=10,list = T,returnTrain = F)
x是要依據(jù)分類的變量,k指指定的折數(shù),默認是10,list表示返回的結果索引值是否為列表形式,默認為True,returnTrain表示是否返回抽樣的真實值,默認Flase。
createMultiFolds(x,k = 10,times = 5)
x和k的參數(shù)意義與createFolds()一樣,times為指定抽樣組數(shù)。
兩個函數(shù)都可是實現(xiàn)K折交叉驗證的抽樣,具體的使用方法可參照下面的連接:
k折交叉驗證(R語言)?www.jianshu.com總結
以上是生活随笔為你收集整理的r语言 整理、处理数据步骤_R语言之数据处理(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow怎样调用gpu_te
- 下一篇: mysql定时器每月执行一次_MySQL