Coursera-Getting and Cleaning Data-week4-R語言中的正則表達式以及文本處理

補上第四周筆記,以及本次課程總結。正則表達式

第四周課程主要針對text進行處理。裏面包括express

1.變量名的處理 2.正則表達式 3.日期處理(參見swirl lubridate包練習)windows

首先,變量名的處理,奉行兩個原則,1)統一大小寫tolower/toupper;2)去掉在導入數據時,由於特殊字符致使的合併變量 3)不要重複;4)少用代碼縮寫app

使用的函數包括ide

  1. 替換查找:

gsub |在全局範圍內,把A換成B gsub("A","B",data)函數

sub |僅替換第一個字符 sub("A","B",data)學習

grep |展現字符出現的位置 grep("A",data) 輸出的是A在data裏的位置,若是添加value=TRUE會直接返回包含A的值ui

grepl | 跟grep相似,可是輸出邏輯判斷符TRUE/FALSE,相似於a==burl

  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

相關文章
相關標籤/搜索