R語言-預測海藻數量1(資料準備和缺失資料處理)
阿新 • • 發佈:2018-11-02
準備工作
安裝要用到得到包
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))
處理資料缺失
資料缺失常見的處理方法:
- 將含有缺失值的記錄刪除
- 根據變數間相關關係填補缺失資料
- 根據案例之間的相似性進行資料填補
提取不完整的資料記錄
通過!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 - NO3
和 oPO4 - 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