热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[译]用R语言做挖掘数据《二》

数据探索一、实验说明1.环境登录无需密码自动登录,系统用户名shiyanlou,密码shiyanlou2.环境介绍本实验环境采用带桌面的UbuntuLinux环境,实验中会用到程序:
数据探索

一、实验说明

1. 环境登录

无需密码自动登录,系统用户名shiyanlou,密码shiyanlou

 2. 环境介绍

本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序:

1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令
2. GVim:非常好用的编辑器,最简单的用法可以参考课程[Vim编辑器](http://www.shiyanlou.com/courses/2)
3. R:在命令行输入‘R’  进入R语言的交互式环境,下面的代码都是在交互式环境运行。

3. 环境使用

使用R语言交互式环境输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操作。

完成实验后可以点击桌面上方的“实验截图”保存并分享实验结果到微博,向好友展示自己的学习进度。实验楼提供后台系统截图,可以真实有效证明您已经完成了实验。

实验记录页面可以在“我的主页”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。

二、课程介绍

这一节课主要介绍使用R语言初步分析数据。首先查看数据的维度、结构以及R数据对象,其次是基本的统计量和图表。接下来是多元数据的分析包括多变量分布、多变量箱型图以及散点图。在后面的例子中将会绘制水平图、热图和3D图,并将图表保存为各种形式的文件。

三、课程内容

1、观察数据

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

> dim(iris) # 维度
> names(iris) # 列名
> str(iris) # 结构
> attribute(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] # 一般比较常用的检索方式

结果如下图所示:

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()计算变量之间的协方差和相关系数。

> cov(iris$Sepal.Length, iris$Petal.Length)
# 计算1-4列属性之间的协方差
> cov(iris[,1:4])
# 计算萼片长度和花瓣长度之间的相关系数
> cor(iris$Sepal.Length, iris$Petal.Length)
> cor(iris[,1:4]) # 计算4个属性之间的相关系数

使用aggregate()返回每种鸢尾花的萼片长度的状态。

# summary这个参数表明使用的是summary()函数查看数据分布状态
> aggregate(Sepal.Length ~ Species, summary, data=iris)

结果显示如下:

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

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

如下图所示:

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

使用plot()函数可以绘制两个数值变量之间的散点图,如果使用with()函数就不需要在变量名之前添加‘iris$’,下面的代码中设置了每种鸢尾花观测值的点的颜色和形状(了解函数或者模块的用法可以通过输入‘?function’查看函数文档):

# 参数col根据鸢尾花种类设置点的颜色,pch将种类转化为数值型设置点的形状
> with(iris, plot(Sepal.Length, Sepal.Width, col=Species, pch=as.numeric(Species)))

效果图如下:

当点比较多的时候就会有重叠,我们可以在绘图前使用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)
> library(ggplot2)
> qplot(Sepal.Length, Sepal.Width, data=iris, facets=Species ~.)

除了上面的图以外,还有更多比较复杂的图可以通过包‘ggplot’实现。

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()

更多关于数据挖掘的课程细节请参考:实验楼课程


推荐阅读
  • 探讨 MySQL 8.0 版本中出现的连接错误 1130,分析其产生原因及提供详细的解决方案。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上搭建GitLab服务器的过程,包括环境准备、软件安装及基本配置等关键步骤。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文介绍了 Winter-1-C A + B II 问题的详细解题思路和测试数据。该问题要求计算两个大整数的和,并输出结果。我们将深入探讨如何处理大整数运算,确保在给定的时间和内存限制下正确求解。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
author-avatar
keleesen
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有