Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理
补上第四周笔记,以及本次课程总结。
第四周课程主要针对text进行处理。里面包括
1.变量名的处理 2.正则表达式 3.日期处理(参见swirl lubridate包练习)
首先,变量名的处理,奉行两个原则,1)统一大小写tolower/toupper;2)去掉在导入数据时,因为特殊字符导致的合并变量 3)不要重复;4)少用代码缩写
使用的函数包括
- 替换查找:
gsub |在全局范围内,把A换成B gsub("A","B",data)
sub |仅替换第一个字符 sub("A","B",data)
grep |展示字符出现的位置 grep("A",data)
输出的是A在data里的位置,如果添加value=TRUE
会直接返回包含A的值
grepl | 跟grep类似,但是输出逻辑判断符TRUE/FALSE,类似于a==b
- 字符间计算
nchar 计算data里有多少个字符,如nchar("text05")
,输出6
substr 对A从第m行起取到n substr("data2014",2,4)
输出ata
paste 字符连接paste("ABC","BCD","DEF",sep="-")
输出“ABC-BCD-DEF” 如果用paste0则中间不分割
str-tim 去除头尾和空格
上述,网上搜的类似文档如文本(字符串)处理与正则表达式
正则表达式,Regular Expression,其实是除了查找内容外,R对于一些特殊字符有固定定义。如果使用好该类字符,我们可以更方便进行文本查找。
需要指出的是,正则表达式并不是R独有的,在多个语言中均有介绍。老师视频里主要介绍了他常用的几个表达。主要用于grep/gsub等函数里,查找替换使用。所有的语法都要用**\\**引用才能使用。。
网上搜到的中文应用有
1.在R中使用正则表达式 举了个读取豆瓣电影的方法做示例
-
R正则表达式语法细节 这里讲的蛮详细的,而且还有示例,推荐阅读
-
55分钟练习 这个有习题,可以补充练习一下。
#要替换特殊元字符时,需要使用\\来指定。但是如果是普通字符,使用\\反而什么都得不到╮(╯▽╰)╭ gsub('\\.', "", "$Peace.Love") ## [1] "$PeaceLove" gsub('\\$', "", "$Peace.Love") ## [1] "Peace.Love" #\d匹配数字字符 gsub('\\d', "", "$Peace.Love0102") ## [1] "$Peace.Love" #\D匹配非数字字符 gsub('\\D', "", "$Peace.Love2012012") ## [1] "2012012"
因为现阶段工作学习里用这种替换及文本查找的机会不多,这里就略过吧。。需要时再补好了。quiz4很简单,水水的就过掉了
总之这门Getting and Cleaning Data的课的笔记终于补完了!2月打算看Explorary Data analysis还有Reproducible Research的课。。不过中文字幕到explorary data就没了,所以以后估计要花两个月来过一门课了,看视频时间要增加 前四门课必须要感谢字幕组无私贡献!
最后附上Getting and Cleaning Data的一个实际应用,XML包读取coursera课程页面的PDF讲义,批量下载
首先,要到coursera课程页面把HTML代码全部复制到本地的一个HTML文件家里。
关键字搜索源代码,发现它的PDF文件是明文存放的,那么只要用个XML包,简单读取分段一下即可
##加载XML包,并且读取数据 url1<-"lecture.html" html<-htmlTreeParse(url1,useInternalNodes=T) #在英文版本里,PDF被存在title为 "Lecture Notes"的文件里 #下列代码根据getNodeSet的示范来的。拿到有Lecture Nodes的相关list(应该与正则表达式也相关) notes<-getNodeSet(html,"/html//a[@title='Lecture Notes']") head(notes) #这里使用xmlGetAttr获得相应属性 pdf<-sapply(notes,xmlGetAttr,"href") pdf #这里仅是示范。因为我是windows系统,mode="wb",其他系统不知道。 #只要弄个循环下载,就能把所有PDF下下来了。同时,还可以用正则表达式里提及的内容,批量提取PDF文件名 download.file(pdf[[1]],"test1.pdf",mode="wb") > pdf [1] "https://d396qusza40orc.cloudfront.net/getdata/lecture_slides/01_01_obtainingDataMotivation.pdf" [2] "https://d396qusza40orc.cloudfront.net/getdata/lecture_slides/01_02_rawAndProcessedData.pdf"
前三周笔记
第一周: 从不同数据源获取数据,html & csv & xlsx http://www.cnblogs.com/weibaar/p/4217495.html
第二周:从API以及网页获取数据 http://www.cnblogs.com/weibaar/p/4230868.html
第三周:整理数据(dplyr,tidyr,lubridate) http://www.cnblogs.com/weibaar/p/4273636.html
第四周:文本查找与正则表达式 http://www.cnblogs.com/weibaar/p/4285082.html
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html