前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【R语言进行数据挖掘】数据探索

【R语言进行数据挖掘】数据探索

作者头像
统计学家
发布2019-04-10 10:22:30
8420
发布2019-04-10 10:22:30
举报

1、观察数据

这一章我们将会用到‘iris’(鸢尾花)数据集,这个数据集属于R中自带的数据,因此不需要额外的加载。首先,查看数据的维度和结构,使用函数dim()和names()可以分别得到数据的维度和数据的列表名称也就是变量名称。使用函数str()和函数attribute()可以查看数据的结构和属性。

> dim(iris) # 维度

> names(iris) # 列名

> str(iris) # 结构

> attributes(iris) # 属性

接下来,查看数据的前5行,使用head()查看数据的前面几行,使用tail()可以查看数据的后面几行。

> iris[1:5,] # 查看1-5行数据

> head(iris) # 查看前6行数据

> tail(iris) # 查看后6行数据

其次,我们可以通过单独的列名称检索数据,下面的代码都可以实现检索‘Sepal.Length’(萼片长度)这个属性的前面10个数据。

> iris[1:10,'Sepal.Length']

> iris$Sepal.Length[1:10] # 一般比较常用的检索方式

结果如下:

> tail(iris) Sepal.Length Sepal.Width Petal.Length Petal.Width Species 145 6.7 3.3 5.7 2.5 virginica 146 6.7 3.0 5.2 2.3 virginica 147 6.3 2.5 5.0 1.9 virginica 148 6.5 3.0 5.2 2.0 virginica 149 6.2 3.4 5.4 2.3 virginica 150 5.9 3.0 5.1 1.8 virginica > iris[1:10,'Sepal.Length'] [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9

2、分析单个变量的分布

每一个数值变量的分布都可以使用函数summary()查看,该函数可以得出变量的最小值、最大值、均值、中位数、第一和第三四分位数。

> summary(iris)

结果显示如下:

同样,均值、中位数以及范围可以通过函数mean()、median()以及range()分别实现,下面的代码是通过quantile()实现四分位数和百分位数。

> quantile(iris$Sepal.Length)

# 实现10%和30%以及65%的分位数

> quantile(iris$Sepal.Length,c(.1,.3,.65))

接下来,我们使用var()查看‘Sepal.Length’的方差,并使用函数hist()和density()查看该属性的直方图分布和密度分布。

> var(iris$Sepal.Length) # 方差

> hist(iris$Sepal.Length) # 直方图

> plot(density(iris$Sepal.Length)) # 密度分布图

变量的频数可以通过函数table()查看,使用pie()画饼状图或使用barplot()画条形图。

> table(iris$Species)

> pie(table(iris$Species))

> barplot(table(iris$Species))

如下图所示:

3、分析多元数据

在观察完单变量的分布之后,我们需要研究两个变量之间的关系。下面我们将会使用函数cov()和cor()计算变量之间的协方差和相关系数。

使用aggregate()计算每种鸢尾花的萼片长度的统计数据。

# summary这个参数表明使用的是summary()函数查看数据分布状态

> aggregate(Sepal.Length ~ Species, summary, data=iris)

结果显示如下:

Species Sepal.Length.Min. Sepal.Length.1st Qu. Sepal.Length.Median 1 setosa 4.300 4.800 5.000 2 versicolor 4.900 5.600 5.900 3 virginica 4.900 6.225 6.500 Sepal.Length.Mean Sepal.Length.3rd Qu. Sepal.Length.Max. 1 5.006 5.200 5.800 2 5.936 6.300 7.000 3 6.588 6.900 7.900

使用函数boxplot()绘制箱线图也称箱须图来展示中位数、四分位数以及异常值的分布情况。

> boxplot(Sepal.Length~Species, data=iris)

如下图所示:

上图中,矩形盒中间的横条就是变量的中位数,矩形盒的上下两个边分别是上、下四分位数也称第一四分位数和第三四分位数,最外面的上下两条横线分别是最大值和最小值,至于在virginica这类鸢尾花上面的箱线图外面的一个圆圈就是异常值。

使用plot()函数可以绘制两个数值变量之间的散点图,如果使用with()函数就不需要在变量名之前添加‘iris$’,下面的代码中设置了每种鸢尾花观测值的点的颜色和形状。

# 参数col根据鸢尾花种类设置点的颜色,pch将种类转化为数值型设置点的形状

> with(iris, plot(Sepal.Length, Sepal.Width, col=Species, pch=as.numeric(Species)))

注:如果事先使用命令attach(iris),即可免去with直接用plot

效果图如下:

当点比较多的时候就会有重叠,我们可以在绘图前使用jitter()往数据中添加一些噪声点来减少数据的重叠:

> plot(jitter(iris$Sepal.Length), jitter(iris$Sepal.Width))

通过函数pair()绘制散点图矩阵。

> pairs(iris)

4、拓展

这一节将会学习一些有趣的图,包括3D图、热图和平行坐标图。

> library(scatterplot3d) # 加载包

> scatterplot3d(iris$Petal.Width, iris$Sepal.Length,iris$Sepal.Width) # 3d图

# dist()函数用来计算不同鸢尾花数据的相似度

> distMatrix <- as.matrix(dist(iris[,1:4]))

> heatmap(distMatrix)

# 绘制平行坐标图

> library(MASS)

> parcoord(iris[1:4], col=iris$Species)

> library(lattice)

> parallelplot(~iris[1:4] | Species, data=iris)

5、将图标保存到文件

在数据分析中会产生很多图片,为了能够在后面的程序中用到那些图表,需要将它们保存起来。R提供了很多保存文件的函数。下面的例子就是将图表保存为pdf文件。另外,可以使用函数ps()和postscript()将图片保存为ps文件,使用bmp()、jpeg()、png()以及tiff()可以保存为对应的图片格式文件。注意画完图以后需要使用函数graphics.off()或者dev.off()关闭画图设备。

# 创建一个myPlot.pdf文件,并在里面画图,画完图后关闭图片设备

> pdf("myPlot.pdf")

> x <- 1:50

> plot(x, log(x))

> graphics.off()

这里的myPlot.pdf可以使用浏览器打开查看。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档