19
Jun 12
R語言與數(shù)據(jù)挖掘?qū)W習(xí)筆記(3):數(shù)據(jù)探索
在開始一個(gè)數(shù)據(jù)分析項(xiàng)目之前,都非常有必要了解一下我們的數(shù)據(jù),今天晚上主要整理數(shù)據(jù)探索方面一些常用的代碼:
一、先看看數(shù)據(jù)
我們首先要先了解一下數(shù)據(jù)的尺寸和結(jié)構(gòu):
dim(iris) # 了解數(shù)據(jù)集的維度,有多少行多少列?
names(iris) # 數(shù)據(jù)有哪些列?
str(iris) # 數(shù)據(jù)的結(jié)構(gòu)如何?
attributes(iris) # 數(shù)據(jù)的列名、行名和數(shù)據(jù)結(jié)構(gòu)
然后看看數(shù)據(jù)集前幾行和后幾行長成什么樣子:
iris[1:5, ] # 看看數(shù)據(jù)的前5行
head(iris) # 看看數(shù)據(jù)的前6行
tail(iris) # 看看數(shù)據(jù)的最后6行
iris[1:10, "Sepal.Length"] # Sepal.Length變量的前10個(gè)取值
iris$Sepal.Length[1:10] # 用另外一種形式取出
二、看看單個(gè)變量的情況
summary(iris) # 看看單個(gè)變量的關(guān)鍵數(shù)據(jù):最小值、25%分位數(shù)、中位數(shù)、均值、75%分位數(shù)、最大值
quantile(iris$Sepal.Length) # 單個(gè)變量的1%、25%、50%、75%、100%分位數(shù)
quantile(iris$Sepal.Length, c(0.1, 0.3, 0.65)) # 指定分位點(diǎn)對應(yīng)的分位數(shù)
mean(),median(),range() # 返回均值、中位數(shù)和數(shù)據(jù)的范圍
對于連續(xù)變量:
var() # 返回變量的方差
hist(iris$Sepal.Length) # 畫出變量的直方圖,看看變量的分布情況
plot(density(iris$Sepal.Length)) # 畫出變量的密度函數(shù)圖
對于類別變量:
table(iris$Species) # 統(tǒng)計(jì)每個(gè)類別的計(jì)數(shù),了解一下各個(gè)類別的分布
pie(table(iris$Species)) # 畫出每個(gè)類別的占比餅圖
barplot(table(iris$Species)) # 畫出柱狀圖
三、觀察多個(gè)變量之間的關(guān)系
首先看看變量之間的相關(guān)性:
cov(iris[ , 1:4]) # 計(jì)算變量之間的協(xié)方差矩陣
cor(iris[ , 1:4]) # 計(jì)算變量之間的相關(guān)系數(shù)矩陣
然后研究一些在不同的目標(biāo)變量水平下,某變量的基本情況:
aggregate(Sepal.Length~Spacies, summary, data=iris) # 對于Sepal.Length變量,在每個(gè)Species水平上執(zhí)行summary計(jì)算
boxplot(Sepal.Length~Species, data=iris) # 針對每個(gè)Species水平繪制Sepal.Length的盒形圖
with(iris, plot(Sepal.Length, Sepal.Width, col=Species, pch=as.numeric(Species))) #針對每個(gè)Species水平繪制兩個(gè)變量的散點(diǎn)圖,并用顏色和點(diǎn)狀區(qū)分
plot(jitter(iris$Sepal.Length), jitter(iris$Sepal.Width))
接著用圖形的方式研究變量之間的關(guān)系:
pairs(iris) # 繪制任意兩個(gè)矩陣之間的散點(diǎn)圖,發(fā)現(xiàn)變量之間的相關(guān)性
四、看看其他方面
三維散點(diǎn)圖:
library(scatterplot3d)
scatterplot3d(iris$Petal.Width, iris$Sepal.Length, iris$Sepal.Width)
構(gòu)造相似性矩陣,用熱圖可視化樣本之間的相似性:
distMatrix <- as.matrix(dist(iris[,1:4]))
heatmap(distMatrix)
以Sepal.Length和Sepal.Width為橫縱坐標(biāo),分水平,以Petal.Width大小為顏色,探索數(shù)據(jù)之間的關(guān)系:
library(lattice)
levelplot(Petal.Width~Sepal.Length*Sepal.Width, iris, cuts=9,col.regions=grey.colors(10)[10:1])
以等高線的形式探索數(shù)據(jù)的關(guān)系:
library(lattice)
filled.contour(volcano, color=terrain.colors, asp=1,plot.axes=contour(volcano, add=T))
畫一頂帽子:
persp(volcano, theta = 25, phi = 30, expand = 0.5, col = "lightblue")
平面坐標(biāo)可視化,研究不同類別變量之間的差異:
library(MASS)
parcoord(iris[1:4], col=iris$Species)
還可以用另外一個(gè)函數(shù)實(shí)現(xiàn)
library(lattice)
parallelplot(~iris[1:4] | Species, data=iris)
最后介紹一下ggplot2這個(gè)包,非常強(qiáng)悍,后續(xù)專門找一個(gè)晚上重點(diǎn)學(xué)習(xí),一個(gè)簡單的例子:
根據(jù)Species的不同類別,繪制Sepal.Length和Sepal.Width的散點(diǎn)圖。
library(ggplot2)
qplot(Sepal.Length, Sepal.Width, data=iris, facets=Species ~.)
五、保存圖片
# save as a PDF file
pdf("myPlot.pdf")
x <- 1:50
plot(x, log(x))
graphics.off()
# Save as a postscript file
postscript("myPlot2.ps")
x <- -20:20
plot(x, x^2)
graphics.off()