李航 统计学习方法
统计学习导论 基于R应用
the element of statistical learning
R是一种区分大小写解释性语言,主要功能是由程序内置函数,用户自编函数以及对对象创建和操作所提供,每个对象都有一个类属性
library(package名):加载包
setwd():设定工作路径
getwd:查看d工作路径
<- 赋值符号,等价于 =
对象object
字符型,数值型,整形,复数型,逻辑型
最常见基本对象是向量,包含相同类型的多个对象,不同对象组成的序列叫做列表
和对象有关的东西:属性,不是所有对象都有属性,但属性是对象一部分,常见属性有
名字,维度名字,维度,类属性,长度属性,其他用户定义的属性,可以直接用attribute()查看
注意:每个对象都有一个类属性
c:小写c用来创建向量
向量:相同类型的多个元素组成的序列
NaN:数值型缺失,numeric
NA:所有的缺失值都可用NA,所以NA包含NaN;另外,NA是逻辑型
冒号用来创建等差数列
vector也可以用来创建向量,但是它通常创建的是初始向量
ex:
vector(‘character’,5)
result: “” “” “” “” “”
逻辑型是最高级别,而字符型是最低级别,即逻辑型可以方便在强制转换时转换为任意类型,但是字符型却不能随意转换
as.type(x): as.是强制转换,将x强制转换为所需type类型
ex:
as.character(x):将x向量里的元素强制转换为character型
列表
和向量相似,不同的是每个元素可以是不同类型的对象,通过[[]]索引
也可给每个对象命名 list(name1=object1, name2=object2)
矩阵
是一类特殊向量,维度属性:长度2的整形向量:行数nrow,列数ncol
矩阵可以强制转换为向量
ex:
x2<-matrix(1:6, 2, byrow=T)
as.vector(x2)
t:转秩
t(x2)
rbind:按行合并
x <- 1:3
y <- 10:12
rbind(x,y)
cbind: 按列合并
cbind(x,y)
数据框:R的一个重要数据类型,用来存储表格数据
可认为是特殊类型的列表,列表中每个元素(每类)都有同样的长度
每一列可是不同类型(矩阵是相同的)
特殊属性:行名row.names
可通过读取表格函数read.table()或read.csv()读取数据框
可通过调用data.matrix()将数据框转化为矩阵
rownames:抽取数据框行名
colnames:抽取数据框列名
向量(vector) -> 矩阵(matrix) -> 数组(array)
它们都是相同元素组成的,向量没有维度,矩阵是二维的,数组是多维的
列表(list) -> 数据框(dataframe)
向量和列表都是序列,只是向量是相同元素,而列表可以是不同元素,数据框是特殊类型的列表,列表的每个元素可以是任意长度的,但数据框每个元素是相同长度
因子
因子 <-> 分类
分类:
用于创建分类数据,两种类型:有序/无序
- 一般由函数factor()创建,有序变量需指定参数ordered=True,等级从小到大
输入是字符型向量,有一个单独的属性levels,本质上是整数变量有了levels的属性,每个整数有一个标签,可用unclass(x)查看 - 以一个整数向量形式存贮类别值,同时由一个字符串组成的内部向量映射到整数上
重要原因在于建模函数会对因子进行特殊处理
使用字符型标签作为因子比数字更有解释性
table:可以用来查看频数
ex:
table(x1)
NA和NaN虽然都是null,但是NA的范围要大于NaN的范围,NaN专门指numeric的null
数据框是特殊类型的列表,凡是对列表可以进行处理的函数,也基本可以对数据框进行
读写数据
读写数据常用函数
在R里读取数据时会用到的几个基本函数
读取表格形式数据:read.table(), read.csv(),读取以行列形式存储的文本数据,返回数据框
逐行读取文本文件readLines(),可以读取任何格式的文本文件
读取R代码文件source()(对应的相反的函数dump)
读取被逆句法分析成文本文件的R代码文件dput(对应的相反的函数dget)
load()和unserialize()函数能把二进制文件读取到R
对应的数据存贮函数有:
write.table();write.csv();writeLines();dput();save();serialize()
read.table(), read.csv()读取表格数据,返回一个数据框
file: 文件路径/文件名/连接
header:指明是否有表头(read.table默认为F,read.csv默认为T)
sep:指明列是如何分割的(read.table默认空格,read.csv默认逗号)
colClasses:字符向量(长度是列长度),指定每列的数据类型(指定会很大程度加快读取速度,尤其是数据两大时,可先读取前面几行,通过循环找到每列的类型,再赋值给这个参数读取所有数据)
nrows:读入的行数
comment.char 指定注释字符,此行注释符右边的字符会被忽略(默认为#,指定为空""可以提高效率)
skip:从开始跳过的行数
stringAsFactors:字符作为因子处理,默认为T
读取大型数据
对于大型表格数据而言,如下几点可提效且防止R卡住
仔细阅读read.table帮助文档,会发现大量优化函数的信息
估算一下读取的数据集需要多少存贮空间
如果文件没有注释行的话,设置comment.char=""
coClasses参数非常重要,如果不指定的话,R会遍历每一列来确定每列的数据类型,数据集不太大时可以,但如果很大会消耗内存且拖慢运行速度,如果能告诉R每一列数据类型,通常速度会提升两倍,如果每列都是数值型,可以直接设置colClasses=“numeric”
设置nrows,不会加速,但能提高内存使用率,如果能告诉R读取多少行信息的话,R能计算出将占用多大内存,不用边读边计算了,设置的比实际行数多一些也没关系,仍能准确读取
colClasses:在read.csv里提前定义每列的类型;通常read.csv会先读一遍数据确定每列的类型,再读一次来获得具体的数据;而如果在read.csv里用colClasses里定义好每列类型,那么能大大加快read.csv的读取速度
ex:
d5<-read.csv(“sale.csv”, colClasses =c(“integer”, “factor”, “numeric”,“numeric”))
取子集 – 向量
[]返回的对象和原对象类型相同(可能被简化),从一个对象提取多个元素
[[]]从列表或者数据框中提取元素,且仅可提取一个元素,返回的对象类型可以不同
$可以从有命名的列表或数据框中提取元素,和[[]]类似
三种索引类型:数字索引,逻辑索引,名字索引
[]: 单中括号返回的是变量;[[]]:双中括号返回的是向量
$:可以用来显示变量里的元素名,最后直接返回元素名对应的元素