1. 程式人生 > >R語言-預測海藻數量1(資料準備和缺失資料處理)

R語言-預測海藻數量1(資料準備和缺失資料處理)

準備工作

安裝要用到得到包
install.packages("DMwR")

載入並檢視資料

> library(lattice)
> library(grid)
> library(DMwR)
> summary(algae)
    season       size       speed         mxPH            mnO2              Cl         
 autumn:40   large :45   high  :84   Min.   :5.600   Min.   : 1.500   Min.   :  0.222
spring:53 medium:84 low :33 1st Qu.:7.700 1st Qu.: 7.725 1st Qu.: 10.981 summer:45 small :71 medium:83 Median :8.060 Median : 9.800 Median : 32.730 winter:62 Mean :8.012 Mean : 9.118 Mean : 43.636 3rd Qu.
:8.400 3rd Qu.:10.800 3rd Qu.: 57.824 Max. :9.700 Max. :13.400 Max. :391.500 NA's :1 NA's :2 NA's :10 NO3 NH4 oPO4 PO4 Chla Min. : 0.050 Min. : 5.00 Min. : 1.00 Min. : 1.00 Min. : 0.200 1st Qu.: 1.296 1st Qu.: 38.33 1st Qu.: 15.70 1st Qu.: 41.38 1st Qu.: 2.000 Median : 2.675 Median : 103.17 Median : 40.15 Median :103.29 Median : 5.475 Mean : 3.282 Mean : 501.30 Mean : 73.59 Mean :137.88 Mean : 13.971 3rd Qu.: 4.446 3rd Qu.: 226.95 3rd Qu.: 99.33 3rd Qu.:213.75 3rd Qu.: 18.308 Max. :45.650 Max. :24064.00 Max. :564.60 Max. :771.60 Max. :110.456 NA'
s :2 NA's :2 NA's :2 NA's :2 NA's :12 a1 a2 a3 a4 a5 Min. : 0.00 Min. : 0.000 Min. : 0.000 Min. : 0.000 Min. : 0.000 1st Qu.: 1.50 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.000 1st Qu.: 0.000 Median : 6.95 Median : 3.000 Median : 1.550 Median : 0.000 Median : 1.900 Mean :16.92 Mean : 7.458 Mean : 4.309 Mean : 1.992 Mean : 5.064 3rd Qu.:24.80 3rd Qu.:11.375 3rd Qu.: 4.925 3rd Qu.: 2.400 3rd Qu.: 7.500 Max. :89.80 Max. :72.600 Max. :42.800 Max. :44.600 Max. :44.400 a6 a7 Min. : 0.000 Min. : 0.000 1st Qu.: 0.000 1st Qu.: 0.000 Median : 0.000 Median : 1.000 Mean : 5.964 Mean : 2.495 3rd Qu.: 6.925 3rd Qu.: 2.400 Max. :77.600 Max. :31.600

資料簡單介紹
algae是歐洲多條河流的水樣在一年時間內水樣的化學物質含量及藻類數量。資料集的觀測值為200個水樣,變數包括3個河流基本資訊(season季節 size河流大小 speed河水流速),8種化學物質含量( mxPH;mnO2;Cl;NO3;NH4;oPO4;PO4;Chla ),7種藻類的數量(a1~a7)。
資料裡存在空值,會導致部分函式報錯。

根據某個屬性繪製正態分佈直方圖

> hist(algae$mnO2)
> #關於MnO2物質的

這裡寫圖片描述

#把資料裡的空值去掉,並在圖形上新增一條線描述正態分佈
prop 把分佈頻率轉化為分佈密度
> hist(algae$mnO2,prob = T,ylim = c(0,1/4))
> lines(density(algae$mnO2,na.rm = T))

這裡寫圖片描述

處理資料缺失

資料缺失常見的處理方法:

  1. 將含有缺失值的記錄刪除
  2. 根據變數間相關關係填補缺失資料
  3. 根據案例之間的相似性進行資料填補

提取不完整的資料記錄
通過!complete.case()函式將有空值的記錄提取出來!說明是提取不完整的樣本。

> algae[!complete.cases(algae),]
> #將所有有缺失值的資料行打印出來

這裡寫圖片描述

找出缺失資料較多的記錄

> manyNAs(algae)
[1]  62 199
#預設manyNAs的缺失百分比是0.2

manyNAs(algae,n)n是一個c(0,1)的小數,如果n=0.2,意思為如果有20%的資料項值為空,就認定該條資料是缺失資料較多的。

1.將缺失資料較多的記錄刪除

> manyNAs(algae)
[1]  62 199
> algae1 <- algae[-c(62,199),]
> #刪除兩條資料
> manyNAs(algae1)
named integer(0)
Warning message:
In manyNAs(algae1) :
  Empty index generated, no rows with many NAs. Undesirable effects may be caused if indexing a data frame with this.
> 

找到欄位間的相關關係

cor(algae[, 4:18], use = "complete.obs")
#得到algae資料集中第4到第18個欄位之前的相關關係

這裡寫圖片描述
這樣的資料表示不是很容易看明白
使用symnum() 函式使資料直觀一點。

“`

symnum(cor(algae[, 4:18], use = “complete.obs”))
“`這裡寫圖片描述

從上面的表裡可以看到NH4 - NO3oPO4 - PO4 兩對具有較強相關的變數

#得到oPO4 - PO4間的線性關係
> lm(oPO4~PO4,data = algae)

Call:
lm(formula = oPO4 ~ PO4, data = algae)

Coefficients:
(Intercept)          PO4  
   -15.6142       0.6466   

上面得到的資料意義為oPO4 = -15.6142 + 0.6466 * PO4