https://cran.r-project.org/bin/windows/base/
위 링크에서 “Download R 3.2.3 for Windows” 다운로드
# web crawling library(RCurl) library(httr) library(XML) # 연도별 곡 songs <- data.frame() fail <- c() for(year in c(1964:2014)) { print(year) url <- paste("http://www.melon.com/chart/age/list.htm?chartType=YE&chartGenre=KPOP&chartDate=", year, sep = ""); doc <- htmlParse(url, encoding="UTF-8") titleNo <- xpathSApply(doc, "//tr[@class='lst50']/td[1]//input", xmlGetAttr, "value") lyricsList <- c() for(no in titleNo) { print(no) lyricsUrl <- paste("http://www.melon.com/song/popup/lyricPrint.htm?songId=", no, sep="") response <- GET(lyricsUrl) if(response$status_code != 200) { #fail fail <- c(fail, no) print(paste("가사 정보 조회 실패 : ", no)) lyrics <- "" } else{ lyricsDoc <- htmlParse(response, encoding="UTF-8") lyrics <- xpathSApply(lyricsDoc, "//div[@class='box_lyric_text']", xmlValue) lyrics <- gsub("[\r\n\t]", " ", lyrics) # line break를 지워주자. } lyricsList <- c(lyricsList, lyrics) } songs.temp <- data.frame(year=year, no=titleNo, lyrics=lyricsList) songs <- rbind(songs, songs.temp) } songs$no <- as.integer(songs$no) songs$lyrics <- as.character(songs$lyrics) # 시각화를 해보자 library(KoNLP) # konlp 라이브러리를 사용한다. library(wordcloud) library(RColorBrewer) useSejongDic() for(year in list(c(1964,1974), c(1975, 1984), c(1985, 1994), c(1995, 2004), c(2005, 2014))) { year.start <- year[1] year.end <- year[2] songs.year <- subset(songs, year > year.start & year <= year.end); nouns <- sapply(songs.year$lyrics, extractNoun, USE.NAMES=F) wordcount <- table(unlist(nouns)) pal <- brewer.pal(12, "Set3") pal <- pal[-c(1:2)] wordcloud(names(wordcount),freq=wordcount,scale=c(6,0.3),min.freq=25,random.order=T,rot.per=.1,colors=pal) }
library(RCurl) library(httr) library(XML)
songs <- data.frame() fail <- c()
songs라는 빈 데이터프레임과 fail이라는 비어있는 벡터 변수를 선언
for(year in c(1964:2014)) { print(year) url <- paste("http://www.melon.com/chart/age/list.htm?chartType=YE&chartGenre=KPOP&chartDate=", year, sep = ""); doc <- htmlParse(url, encoding="UTF-8") titleNo <- xpathSApply(doc, "//tr[@class='lst50']/td[1]//input", xmlGetAttr, "value") }
각 라인 별로 설명하면 아래와 같다.
for(year in c(1964:2014))
1964 부터 2014까지 year 변수에 값을 저장하여 루프를 돈다.
print(year)
year에 저장된 값을 출력
url <- paste("http://www.melon.com/chart/age/list.htm?chartType=YE&chartGenre=KPOP&chartDate=", year, sep = "");
“http~“로 시작하는 문자열 뒤에 year라는 변수의 값을 붙여 url 변수에 문자열을 저장한다는 의미이다. sep는 문자열을 붙일 때 이어 붙일 문자로 단순히 ”” 만 사용하였으므로 추가 문자는 없다. year 값이 2016이라면 위 문자열은 다음과 같이 만들어진다.
"http://www.melon.com/chart/age/list.htm?chartType=YE&chartGenre=KPOP&chartDate=2015"
doc <- htmlParse(url, encoding="UTF-8")
url에 있는 html 문서를 UTF-8 문자형으로 끌어와 doc에 저장
R 언어는 문자열을 합치기 위해 paste() 함수를 사용 할 수 있다. 다음 예를 보자.
root_path <- "/home/wslee/doc" game_dir <- "games" game_name <- "witcher" game_path <- paste(root_path, game_dir, sep="/") game_path <- paste(root_path, game_name, sep="/") print(game_path)
위와 같이 실행하면 아래와 같은 결과를 얻을 수 있다.
[1] "/home/wslee/doc/games/witcher"