print를 통해 한 번에 많은 양의 데이터를 출력하면 아래와 같이
reached getOption("max.print") -- omitted 999 rows
라고 뜨면서 최대 인쇄 길이를 조정하라고 한다.
이 때, 더 많은 양을 출력하기 위해서는 아래와 같이 설정한다.
#2. 코드
# console 프린트 길이
options(max.print=1000000)
# console 프린트 길이
options(max.print=1000000)
# 소수자릿수 표현
options(scipen = 4)
# string을 factor로 자동 변경하지 않음
options(stringsAsFactors = FALSE)
wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz
ftp ftp://cran.r-project.org/pub/R/src/contrib/
tar -xzvf /다운로드된경로 -C /압축풀경로
pk.list <- c("RJDBC", "data.table", "dplyr", "tidyr", "Amelia" , "lubridate", "xlsx",
"sparklyr", "rsparkling", "h2o", "visNetwork", "igraph", "ggplot2")
pk.installed <- installed.packages()[, "Package"]
setdiff(pk.list, pk.installed)
character(0) # 모든 필수 라이브러리 설치 완료
download.path <- "압축푼경로"
pk.list <- list.files(download.path)
pk.list <- setdiff(pk.list, installed.packages()[, "Package"])
for(i in pk.list){
pk.path <- file.path(download.path, i)
install.packages(pk.path, repos = NULL, type="source")
}
#########################################
# WORD COUNTER - v1.0
# - martinpark
# - ruserive@gmail.com
#########################################
# load library and user function ------------------------------------------
# install.packages(c("KoNLP","plyr","dplyr","qdap","plotly"))
library(KoNLP)
library(plyr)
library(dplyr)
library(qdap)
library(plotly)
# word count part ---------------------------------------------------------
# 기사 내용 추출해서 단어 카운트하기 (전체 기사)
txt <- result$article
txt <- gsub(keyWord," ",gsub("“|”|\"|`|'|\\(|\\)|<|>|\\[|\\]|·|…|△|▷| \\(중략\\)..."," ",txt))
txt <- unlist(sapply(txt, extractNoun, USE.NAMES = F))
txt <- base::Filter(function(x){nchar(x)>1},txt)
word_count <- freq_terms(txt,top=10)
# 완성 데이터 확인
print(word_count)
# time trend --------------------------------------------------------------
# 기사 내용 추출해서 시간별로 단어의 사용량 추이 확인하기
df <- result[,c("article","time")]
df$article <- gsub(keyWord," ",gsub("“|”|\"|`|'|\\(|\\)|<|>|\\[|\\]|·|…|△|▷| \\(중략\\)..."," ",df$article))
# 날짜별
txt2 <- sapply(df$article, extractNoun, USE.NAMES = F)
txt2 <- lapply(txt2, function(x) x[nchar(x)>1])
names(txt2) <- df$time
txt2_result <- data.frame(date = rep(names(txt2), lapply(txt2, length))
,word = unlist(txt2)
,row.names = NULL
,stringsAsFactors = FALSE)
# 빈도 높은 단어(혹은 관심 단어) 하나 선택하기
word_filter <- "금메달"
## word plot(1) - 0불포함(쇼트트랙 관련 기사에 금메달이라는 단어가 없던 날은 아예 그래프에서 제외)
tmpPlot <- txt2_result[txt2_result$word == word_filter,]$date
# 결과 그래프(1) 확인
plot(table(tmpPlot),"l")
## word plot(2) - 0포함(쇼트트랙 관련 기사에 금메달이라는 단어가 없던 날도 그래프에 포함)
tmpPlot2 <- left_join(data.frame(tmpPlot=unique(txt2_result$date),stringsAsFactors=FALSE)
,as.data.frame(table(tmpPlot),stringsAsFactors=FALSE))
tmpPlot2$Freq[is.na(tmpPlot2$Freq)] <- 0
tmpPlot2 <- tmpPlot2[order(tmpPlot2$tmp),]
tmpPlot2$Date <- gsub("-","/",substr(tmpPlot2$tmpPlot,6,10))
# 결과 그래프(2) 확인
plot_ly(tmpPlot2, x = ~Date, y = ~Freq, type = 'scatter', mode = 'lines')
#########################################
# GOOGLE NEWS CRAWLER - v1.0
# - martinpark
# - ruserive@gmail.com
#########################################
# load library and user function ------------------------------------------
# install.packages(c("httr","xml2","stringr","lubridate"))
library(httr)
library(xml2)
library(stringr)
library(lubridate)
unescape_html <- function(str){
xml2::xml_text(xml2::read_html(paste0("<x>", str, "</x>")))
}
# control keyword and number of posts -------------------------------------
# 검색어
keyWord <- "쇼트트랙"
# 검색 뉴스 수 (너무 많을 경우, 블락당할 수 있음)
numOfPost <- 300
# google news crawler main part -------------------------------------------
# 키워드 변환
keyWordUTF8 <- URLencode(iconv(keyWord,to='utf8'))
# 크롤링 페이지 분할
startPosts <- seq(1,numOfPost,100)
startPosts[1] <- startPosts[1] - 1
if (numOfPost%%100==0) {
endPosts <- rep(100,numOfPost/100)
} else {
endPosts <- c(rep(100,floor(numOfPost/100)),numOfPost%%100)
}
# 결과셋 생성
result <- data.frame(stringsAsFactors=FALSE)
for (i in seq(length(startPosts))) {
# 뉴스 가져오기
url <- paste0("https://www.google.co.kr/search?hl=ko&q=",keyWordUTF8,"&tbm=nws&start=",startPosts[i],"&num=",endPosts[i])
doc <- content(GET(url), "text")
# doc <- readLines(url,warn=FALSE)
doc_table <- str_split(doc,"<table><tr>")
for(p in seq(endPosts[i])+1) {
# 뉴스 정제
doc_tab <- str_split(doc_table[[1]][p],"</div>")
doc_tab2 <- str_split(doc_tab[[1]][1],"</a></h3>")
# 뉴스 제목
title <- unescape_html(doc_tab2[[1]][1])
# 뉴스 기사
article <- unescape_html(gsub(" ..."," (중략)...",doc_tab[[1]][2]))
# 뉴스 제공업체
supplier <- str_split(unescape_html(doc_tab2[[1]][2])," - ")[[1]][1]
# 뉴스 URL
news_url <- URLdecode(str_sub(doc_tab2[[1]][1]
,str_locate(doc_tab2[[1]][1],"\"/url")[2]+4
,str_locate(doc_tab2[[1]][1],"&")[1]-1))
# 뉴스 게시 시간
tmp_time <- str_split(unescape_html(doc_tab2[[1]][2])," - ")[[1]][2]
if(length(grep(" 전",tmp_time))==0){
post_time <- as_date(tmp_time)
} else {
post_time <- lubridate::ymd_hms(Sys.time())
num <- as.integer(gsub("[^0-9]","",tmp_time))
unit <- gsub("([0-9]*)| 전","",tmp_time)
if(unit=="일"){
lubridate::day(post_time) <- lubridate::day(post_time) - num
} else if(unit=="시간"){
lubridate::hour(post_time) <- lubridate::hour(post_time) - num
} else if(unit=="분"){
lubridate::minute(post_time) <- lubridate::minute(post_time) - num
} else if(unit=="초"){
lubridate::second(post_time) <- lubridate::second(post_time) - num
}
post_time <- as_date(post_time)
}
# 데이터프레임화
res <- data.frame(keyword=keyWord
,title=title
,article=article
,supplier=supplier
,url=news_url
,time=post_time
,stringsAsFactors=FALSE)
result <- rbind(result, res)
}
print(paste0("Done..! (",nrow(result),"/",numOfPost,")"))
# 빠르게 자주 사용하면 블락당함..
Sys.sleep(3)
}
# 완성 데이터 확인
# View(result)
# csv 추출
write.csv(result, file.path("C:\\Users\\Martin\\Desktop\\google_news.csv"),row.names=FALSE,fileEncoding="CP949")
.libPaths()
# example
.libPaths("/User/GGAAEN_MAC/Documents/ggaaen/library")
> .libPaths("/User/GGAAEN_MAC/Documents/ggaaen/library")
> .libPaths()
[1] "/User/GGAAEN_MAC/Documents/ggaaen/library"
[2] "Library/Frameworks/R.framework/Versions/3.1/Resources/library"
> .
# example
> install.packages("/Users/GGAAEN_MAC/Downloads/plyr_1.8.2.tar", repos = NULL, type = "source")
# example
> install.packages("RJSONIO", repos = "http://www.omegahat.org/R", type="source")
# example
[GGAAEN_MAC:~ ]$ R CMD INSTALL plyr_1.8.2.tar