zoukankan      html  css  js  c++  java
  • Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理

    补上第四周笔记,以及本次课程总结。

    第四周课程主要针对text进行处理。里面包括

    1.变量名的处理 2.正则表达式 3.日期处理(参见swirl lubridate包练习)

    首先,变量名的处理,奉行两个原则,1)统一大小写tolower/toupper;2)去掉在导入数据时,因为特殊字符导致的合并变量 3)不要重复;4)少用代码缩写

    使用的函数包括

    1. 替换查找:

    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

    1. 字符间计算

    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中使用正则表达式 举了个读取豆瓣电影的方法做示例

    1. R正则表达式语法细节 这里讲的蛮详细的,而且还有示例,推荐阅读

    2. 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

     

  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/weibaar/p/4285082.html
Copyright © 2011-2022 走看看