写在前面
作为统计专业的小白,为了适应大数据时代的到来,并且找到一份称心的工作,熟练掌握一门统计软件的使用几乎是一个必备的技能。而从就业形势来看,机器学习、数据挖掘等领域的人才有很大缺口,因而决定自学机器学习。本书是基于R语言对一些具体案例进行分析,要求有一定R语言基础。初读导言部分,还是感觉有点吃力(R语言仅仅入门)。导言内容主要是围绕一个案例引入R与机器学习的关系及应用,现将涉及到的R函数进行整理。
1、library( )和require( )
两个函数都是用来加载R程序包的,两者之间存在细微差别。在本书中,主要差别是:后者会返回一个布尔值(TRUE或FALSE)来表示是否加载成功
2、read.*( )
read.*( )函数都用来读取文件,几个函数除了默认分隔符不同,没有其他区别。
- read.table( ):字段分隔符为" ",表示小数点的字符为"."
- read.csv( ):字段分隔符为",",表示小数点的字符为"."
- read.csv2( ):字段分隔符为",",表示小数点的字符为","
- read.delim( ):字段分隔符为"\t",表示小数点的字符为"."
- read.delim2( ):字段分隔符为"\t",表示小数点的字符为","
注意:所有的read.*函数都默认把字符串转换为factor类型。
factor是用来表示分类变量的,这并不是我们想要的,因此我们需要设置 stringsAsFactors = FALSE 来防止其转换。实际上,把这个默认值设置为FALSE一般都不会错。
数据中有很多空元素,想要把这些设置为R中的特殊值NA,故显式定义空字符串na.string( ),即设置参数na.string = " "
3、head( )和tail( )
- head( ) :打印出数据框的前六条数据记录
- tail( ):打印出数据框的后六条数据记录
主要应用是检查经处理后数据框中数据是否满足条件。
4、names( )
names( ) 函数既能读取列名,又能写入列名。
- 读取列名:colnames(data)
- 写入列名:colnames(data) = c("A","B","C","D")
5、as.Date( )和strftime( )
as.Date( ):输入日期字符串,它会尝试将其转换为Date对象。当字符串的日期格式是不太常见的YYYYMMDD时,需要用format参数给as.Date制定一个日期格式字符串,这样它才知道该怎么转换。
- Date = as.Date("20200420",format = "%Y%m%d")
strftime( ):把日期对象转换成一个“YYYY-MM”格式的字符串。
- str = strftime("2020-04-20",format = "%Y-%m")
6、ifelse( )
ifelse函数是一个典型的逻辑开关,用于布尔测试,相当于将if...else...条件语句合为一条语句。
- a = ifelse(3 = 5,False,True) <=> if 3 = 5,a = False; else a = True.
7、nchar( )
返回字符串的长度
8、which( )
用于条件筛选
- which(df$score > 80) #返回数据框中分数大于80的记录(保留整条记录)
9、strsplit( )和tryCatch( )
用于分隔字符串
- strsplit(char,",") #将字符串按","分隔
strsplit函数在遇到不符合格式的数据时会抛出一个异常,因此我们需要捕获(catch)这个异常。
tryCatch函数是错误处理机制,用于抓取错误和警告。 - tryCatch(strsplit(l,",")[[1]],error = function(e)return(c(NA,NA)))#如果分离字符串l的过程中出现错误就返回(NA,NA)
10、gsub( )
gsub函数是一个替换函数,它是R的正则表达式相关函数之一。
- gsub("?","!",str) #将string中所有?换成!
gsub(pattern,replacement,str)
pattern:string to be matched.
replacement:string for replacement
str:string or string vector
11、do.call( )
do.call函数是在一个list上执行一个函数调用。
- do.call(mean,l) #对列表l的每一列求均值
12、transform( )
- 为原数据框在最后添加新的列
- 改变原变量列的值
- 通过赋值NULL删除列变量
13、tolower( )
作用:将字符串中的大写字母转换成小写字母
14、match( )
用于数据筛选,返回结果为x在table中的位置序号。
- match(x, table,nomatch = NA_integer_, incomparables = NULL)
x:待匹配的值
table:用于匹配的数据
nomatch:不匹配时的返回值(默认为NA,必须为integer型),incomparables:指定不能用来匹配的值(vector)。incomparables中配置的值,即使x在table中得到匹配也会由nomatch代替。match函数要求完全匹配。
15、subset( )
作用:提取符合条件的子集
16、scale_x_date( )和scale_color_manual( )(可以详细了解scale系列函数)
scale_x_date( ):用于当x轴为日期时
- scale_x_date(name = ..., breaks = ..., labels = ..., limits = ...)
name:x轴名称
breaks:刻度间隔
labels:刻度标签
limits:刻度开始结束值(只能1-2位)
e.g:scale_x_date(name="x轴名称", breaks='10 years',labels = date_format("%Y-%m-%d"),limits=as.Date(c("2018-01-01","2022-01-01")))
scale_color_manual( ):可以自制离散型颜色标度
17、gg.save( )
把ggplot进行可视化后的结果保存到文件里
- gg.save(plot = 可视化结果,filename ="存储地址名称",height = h,width = w)
18、ddply( )(了解plyr库)
以数据框为输入值,根据几个变量对其分类并做相应的运算,最后返回一个数据框。
- ddply(data,variables)
data : 要处理的数据框
variables :用以做数据框的分类,作为引用变量,公式或字符向量
19、merge( )
输入两个有序数据框,将两个数据框中某些列进行合并,可以充当Excel中的Vlookup的角色。
- merge(x,y,by,all)
x: 第一个数据框.
y: 第二个数据框.
by, by.x, by.y: 指定两个数据框中匹配列名称。缺省使用两个数据框中相同列名称。
all, all.x, all.y: 指定合并类型的逻辑值。缺省为all=FALSE (仅返回匹配的行),设置为all= TRUE使没匹配上的数据可包含进来并填充为NA.
20、reduce( )
迭代过程中循环的化简。
- reduce(function(x,y),merge(x,y,by="id",all.x=TRUE),list(df1,df2,df3),accumulate =FALSE) #可以同时实现多个数据框的merge
reduce函数在Python中应用比较广泛:
- reduce ( func , seq [ , init ] )
每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。
在reduce函数中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。
e.g. reduce( func, [1, 2,3] ) = func( func(1, 2), 3)
用reduce实现一个阶乘的代码:
n = 5
print reduce(lambda x, y: x * y, range(1, n + 1)) #range为左闭右开
21、seq.Date( )
构造日期序列
- seq.Date(from = "开始时间",to = "结束时间")
22、rep( )
用于复制
- rep(x,times = m,each = n,len = k)
x:一个向量,可以是数字、文本、列表、因子等等
times:重复整个向量的次数
each:向量x中每个元素重复的次数
len:输出向量的长度
虽然整理到吐血,但是以上函数仅仅是简单了解定义,对于实际应用还是一头雾水。但引言部分本来就是入门,还需要接下来进一步学习,等吃完这本书再回头来看,也许就会有不同的感受吧!