標籤:r語言 資料分析
R語言資料分析系列之六—— by comaple.zhang
上一節講了R語言作圖,本節來講講當你拿到一個資料集的時候如何下手分析,資料分析的第一步,探索性資料分析。
統計量,即統計學裡面關注的資料集的幾個指標,常用的如下:最小值,最大值,四分位元,均值,中位元,眾數,方差,標準差,極差,偏度,峰度
先來解釋一下各個量得含義,淺顯就不說了,這裡主要說一下不常見的
眾數:出現次數最多的
方差:每個樣本值與均值的差得平方和的平均數
標準差:又稱均方差,是方差的二次方根,用來衡量一個資料集的集中性
極差:最大值與最小值只差
偏度:相對於常態分佈而言如果波峰出現在左邊,就表明長尾出現在右邊,成為右偏態(正偏態)偏度值>0,分布反之為左偏太(負偏態)偏度值<0
峰度:也是相對於正太分布的,常態分佈的峰度為3,如果峰度>3圖形越胖,越矮,稱為厚尾,峰度<3 圖形越瘦,越高,稱為瘦尾
本節資料集:
我們採用MASS包的Insurance資料集,該資料集為某保險公司的車險資料。
"District" "Group" "Age" "Holders" "Claims"
按列一次表示:家庭住址地區,投保汽車排量,投保人年齡,投保人數量,要求索賠的數量
安裝包與載入資料集:
install.pacakges('MASS') # 安裝包library(MASS) #載入包data(Insurance) # 載入資料集ins <- Insurance #拷貝一份資料
探索行資料分析
R包內建的函數summary可以給出資料的概括:
summary(ins)
District Group Age Holders Claims
1:16 <1l :16 <25 :16 Min. : 3.00 Min. : 0.00
2:16 1-1.5l:16 25-29:16 1st Qu.: 46.75 1st Qu.: 9.50
3:16 1.5-2l:16 30-35:16 Median : 136.00 Median : 22.00
4:16 >2l :16 >35 :16 Mean : 364.98 Mean : 49.23
3rd Qu.:327.50 3rd Qu.: 55.50
Max. :3582.00 Max. :400.00
我們發現對於因子類型向量該方法給出了頻度分布,對於連續型變數該方法給出了,最小值,第一四分位元,中位元,均值,第三四分位元,最大值
從結果中我們可以看到Holders列的資料中位元明顯遠小於均值,這說明這個資料集是個偏資料集,整體資料集中在3——327.5之間,我們可以通過點圖來繼續查看:
plot(ins$Holders)
點圖看的可能不是很直觀,我們期望直觀的看到資料的變化,可以通過長條圖來展示:
col <- c(brewer.pal(9,'YlOrRd')[1:9])h<-hist(ins$Holders,breaks=12,col=col)xfit <-seq(min(ins$Holders),max(ins$Holders),length=40)yfit <-dnorm(xfit,mean=mean(ins$Holders),sd=sd(ins$Holders))yfit <- yfit*diff(h$mids[1:2]) *length(ins$Holders)lines(xfit,yfit,col='red',lwd=2)
方差與標準差
來計算Holders列的方差和標準差:
var(ins$Holders)sd(ins$Holders)
其實單變數的方差和標準差是沒有太大意義的,對比才可以看出資料集的異同。
如果我們要分析使用者按照年齡分組後的統計值該如何計算呢,aggregate函數為我們提供了很好的方法如下:
agg<-aggregate(ins[4:5],by=list(age=ins$Age),sd)pie(agg$Claims,labels=agg$age)agg
age Holders Claims
1 <25 80.41797 16.55181
2 25-29 141.11414 22.63184
3 30-35 177.34353 24.23694
4 >35 941.66603 103.52228
相當於按照age列 group by 後的分組統計量。
偏度和峰度:
為了計算偏度和峰度我們可以自己實現函數stat如下:
stat <- function(x,na.omit=F){ if(na.omit) x <- x[!is.na(x)] m<- mean(x) n<- length(x) s<- sd(x) skew <- sum((x-m)^3/s^3)/n kurt <- sum((x-m)^4/s^4)/n - 3 return(c(n=round(n),mean=m,stdev=s,skew=skew,kurtosis=kurt))} sapply(ins[4:5],stat)
Holders Claims
n 64.000000 64.000000
mean 364.984375 49.234375
stdev 622.770601 71.162399
skew 3.127833 2.877292
kurtosis 10.999610 9.377258
我們可以看到,Holders和Claims的偏度都是大於零的,那麼就是說明,這兩個變數都是正偏態分布也就是說資料偏向左邊,而峰度值都很高,那麼說明這兩個變數都存在離群點。
同理我們可以利用箱型圖來觀察,上節已經介紹過了這裡不再贅述。
R語言資料分析系列之六