统计数据分析及其可视化2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
read.table
对于中等大小的数据集,你可以使用read.table,而不用指定其他参数
R将自动: -跳过以#开始的行 -自动计算有多少行数据需要读(需要分配多少内存) -算出表格中的每列有什么类型的变量,并且告知R以使读取数据更快和有效率 -read.csv等同于默认分隔符为逗号的read.table
读写数据—写数据
相应的有一些针对性的写函数
write.table
write.Lines dump dput save serialize
使用read.table来读数据文件
read.table函数为常用读取数据的函数,有以下重要的参数
file文件的名称,或者数据连接
矩阵
矩阵可以通过向向量添加一个维度值而直接创建
列合并与行合并
矩阵可以通过列合并(column-binding)函数cbind与行合并来创建(row-binding) 函数rbind()
列表
列表是特殊的向量,它可以包含不同的类,列表对于R非常重要
因子
因子用于表示分类数据,可以为有序的或者无序的,可以把因子看成一个整数向量, 每个整数值代表一种标记
显式强制转换
如果可以,对象可以通过使用as.*函数强制转换成另一类
显式强制转换
无法解释的强制转换会返回NA
矩阵
矩阵是带有维度属性的向量,维度属性自身有一个包含有2个元素的整数向量 (nrow, ncol)
矩阵
矩阵是列敏感(column-wise)的,矩阵中的元素项可被认为是从左上角开始,按 列来排列的
提取矩阵的子集
类似的,提取某一列或者某一行将给你一个向量,而不是矩阵
对列表提取子集
对列表提取子集
对列表提取子集
[[算子可以被用于计算索引,$仅用于名称
对列表的内嵌元素取子集
部分匹配
部分匹配允许使用[[和$
去除NA值
一个常用的操作是移除缺失值
去除NA值
如果有多个对象,怎么取不带有缺失值的子集?
统计数据分析及其可视化
--第二课
李吉明 大数据实验室
主要内容
数据类型与基本操作
取数据的子集
向量化操作 读写文件
对象
R有五个基本对象类(原子类) 字符 数值(实数) 整数 虚数 逻辑值(真/假) 最基本的对象是向量(vector) 一个向量只能包含同类对象 但是:列表(list)是一个例外,其表示为向量,但 是里面可以包含不同类别的对象 空向量可以由vector()函数来创建
缺失值
缺失值被表示为NA或NaN,也表示为未定义的数学预算
is.na()可用于测试对象是否是NA
is.nan()可用于测试是否NaN NA值也有一个类,所以也有整数NA,字符型NA等 一个NaN值也为NA,但反过来则不成立
缺失值
数据框
数据框被用来存储表格形式的数据
数据框被看做一种特别形式的列表,列表中的每个元素都有着相同的长度
数值
R中的数字被用来做数值对象处理(如双精度实数)
如果需要指明为整数,加上L后缀
例如:输入1给定一个数值对象,输入1L显式地指定为整数 也有特别的数Inf用于表示无穷大,如1/0;Inf可用于正常的计算,如1/Inf为0 值NaN表示为一个未定义的数值(“not a number”);如0/0;NaN也可以被认为是 一个缺失值
去除缺失值
向量化运算
R中的许多运算都可以进行想量化从而使计算更有效率、简洁和易读
向量化矩阵操作
读写数据—读数据
一些常用的读数据到R里面的函数
read.table,read.csv用于读表格数据
readLines用于读文本文件中的行 source用于读R代码文件 dget也用于读R代码文件 load用于装载工作区 unserialize用于读写单个二进制形式的R对象
属性
R对象可以具有属性:
名字,维度名
维度(如矩阵,数组) 类 长度 其他用户定义的属性/元数据 一个对象的属性可以通过attributes()函数获得
输入
从R命令行来输入表达式,<-符号用于赋值
由R语言的语法来决定是否一个表达式是完整还是不完整
#字符表示注释,任何在#右方的文字(包括#自身)都会被忽略
数据框
名称
R对象可以有名称,这有利于编写可读性的代码以及具有自描述性的对象
名称
列表也可以有名称
名称
矩阵也可以有
总结
数据类型
原子类:数值,逻辑,字符,整数,复数
向量,列表 因子 缺失值 数据框 名称
提取子集
提取子集
有几种操作可以提取R对象的子集
[常用于返回同原有对象相同的类别的对象,也可用于选择多于一个元素
[[用于提取列表或者数据框中的元素,只能用于提取单个元素,并且提取出来的 不一定还是列表或数据框 $被用于按名称提取列表或者数据框中的元素,用意同[[相似
提取子集
提取矩阵的子集
矩阵可以通过(i,j)类型的索引来提取
也可以不带有索引(全选)
提取矩阵的子集
默认情况下,当矩阵的一个单独元素被取出,返回的是长度为1的向量而不是1乘 1的矩阵,这个行为可以通过设置drop=FALSE选项来关闭
列表中的每个元素都可被视为单列多行,行数等于元素的个数 不同于矩阵,数据框中在不同的列可以存储不同类别的对象,而矩阵要求所有的 元素都是相同类别 数据框也有一个特别的属性称为row.names 数据框通常由调用函数read.table()或read.csv()来创建 可以通过调用data.matrix()来转换为矩阵
因子通常会用到一些建模函数中如lm()和glm() 使用带有描述性的标记表示因子比使用整数好,因为能够得到直观的解读,比如 一个具有”Male”和”Female”的因子变量应该比只有数值1和2好
因子
因子
因子水平的顺序可以使用levels参数来设定在factor()函数中。这个对于线性建模 很重要,因为第一个水平被用于基准水平
设定nrows,这个并不能使R运行更快,但是它可以帮助内存的使用,在linux下, 也可以使用wc来计算文件的行数。
了解你自己的计算机
有多少内存?
有多少的程序正在使用?
什么操作系统? 32位还是64位?
计算内存需要
如果有一个1,500,000行和120列的数据框,所有都是数值型数据,大致我们需要 多少内存呢?
1,500,000*120*8字节 =144000000字节 =1440000000/2^30字节/MB =1373.29MB =1.34GB
外部连接
wenku.baidu.com
数据常使用connection接口,可以是文件也可以是别的
file打开一个连接文件
gzfile打开一个gzip压缩文件连接 bz打开一个bzip2压缩文件连接 url打开一个网页连接
header,逻辑值说明是否文件包含一个文件头行 sep,一串字符表示列是如何被分隔的 colClasses,字符向量表明数据集中每列的类 nrows,数据集中的行数 comment.char,注释字符的字符串 skip,需要从文件开头跳过的行数 stringsAsFactors,是否字符变量应该被编码为因子
使用read.table读大数据集
读read.table的有关帮助
大致计算下所需内存,如果数据大于你的内存,那么你可以停止了
设定comment.char=” ”,如果文件里没有注释行
使用read.table读取大数据集
使用colClasses参数,设定而不是使用默认可以让读取数据更快,但必须知道每 一项的类型,如果所有的列都是数值的,那么你可以直接设定colClass = “numeric” 一种更快的方式是:
解释执行
任何输入的完整表达式,都由编译器来进行解释执行,然后返回结果并自动打印
[1]表示x是一个向量并且5为它的第一个元素
打印
:算子被用于产生整数序列
创建向量
c()函数可以用于创建对象向量
使用vector()函数
混合对象
下面的情形会发生什么?
当有不同类型的对象混合在一个向量中,类型会自动进行强制转换,将向量中的所有元素转换成 同一类型