지난(3.18) 포스팅(https://steemit.com/gartner/@hironlee/5-top-10-strategic-technology-trends-from-gartner-inc) 에 이어, R(RStudio)을 이용하여 최근 5년간의 전략기술 트렌드를 다룬 뉴스의 내용을 읽어 들여, 많이 언급된 단어의 빈도 순으로 크기를 조절하여 WordCloud를 만들어 보는 실습을 해보았습니다.
# 필요 Package 설치
install.packages("rvest") #웹페이지 크롤링을 위한 패키징
library("rvest")
szPostUrl1 <- "http://www.itworld.co.kr/news/106768"
szPostData1 <- read_html(szPostUrl1)
# 전체 페이지 크롤링은 쉬우나, 특정 영역 크롤링은 간단하지 않으므로 우선 Pass, 다음에 실습 예정
# 필요 Package 설치
install.packages("KoNLP") #한글 자연어 처리 패키지 (Korean Natural Language Process)
install.packages("wordcloud") #wordcloud 패키지
install.packages("RColorBrewer")
# Library 로드
library("KoNLP")
library("wordcloud")
library("RColorBrewer")
useSejongDic() #한글 세종사전
szFileName <- "D:\Documents\R\RStudy\data\Gartner_2014_18_TechTrend.txt"
szWordSaveFileName <- "D:\Documents\R\RStudy\data\Gartner_2014_18_TechTrend_Word.txt"
szWordCloudImageFile <- "D:\Documents\R\RStudy\data\Gartner_2014_18_TechTrend_Word.png"
szContents <- readLines(szFileName) # 기사를 담은 파일에서 한 라인씩 읽어들이기
View(szContents) # 파일 내용 확인 (아래 그림1 참고)
# 불필요한 문자 필터링, 치환
szContents <- gsub("'","",szContents)
szContents <- gsub("‘","",szContents)
szContents <- gsub(""","",szContents)
szContents <- gsub("“","",szContents)
szContents <- gsub("”","",szContents)
szContents <- gsub("기술","",szContents)
szContents <- gsub("가트너는","",szContents)
szContents <- gsub("하게","",szContents)
szContents <- gsub("10","",szContents)
szContents <- gsub("들이","",szContents)
szContents <- gsub("하기","",szContents)
szContents <- gsub("부사장","",szContents)
szContents <- gsub("가지","",szContents)
szContents <- gsub("AI","인공지능",szContents)
szNounsContents <- sapply(szContents, extractNoun, USE.NAMES=F) #각 라인마다 명사단어들만 남기기
View(szNounsContents)
szNounsContentsList <- unlist(szNounsContents) #단어들만 가져오기
View(szNounsContentsList)
# 2글자 이상의 단어만 필터링
szLastData <- Filter(function(x) {
nchar(x)>=2
},szNounsContentsList)
## 최종 2글자 이상의 단어들의 목록
View(szLastData) ## 목록 확인 (아래 그림2 참고)
write(szLastData, szWordSaveFileName) # 결과 목록을 파일로 저장
szDataTable <- read.table(szWordSaveFileName)
View(szDataTable)
ListWordCount = table(szDataTable) # 테이블형태 변환해서 저장
View(ListWordCount) ## 테이블 형태로 저장 (아래 그림3 참고)
#### Word Cloud 그리기..
windows()
display.brewer.all() # 제공 색상타입 모두 보기 (아래 그림4 참고)
windowsFonts(font=windowsFont("맑은 고딕"))
### Word Cloud 함수 호출
wordcloud(
names(ListWordCount),
freq=ListWordCount,
scale=c(5,0.2), #빈도가 가장 큰 단어와 가장 빈도가 작은단어 폰사 사이 크기
rot.per=0.1, #90도 회전해서 보여줄 단어 비율
min.freq=3, max.words=100, # 빈도 3이상, 100미만
random.order=F, # True : 랜덤배치, False : 빈도수가 큰단어를 중앙에 배치
random.color=T, # True : 색랜덤, False : 빈도순
colors=brewer.pal(11, "Paired"), #11은 사용할 색상개수, 두번째는 색상타입이름
family="font")
## 최종 이미지파일로 저장
savePlot(szWordCloudImageFile, type="png”)
**) 테스트에 사용된 기사모음 파일 : Gartner_2014_18_TechTrend.txt 파일 다운로드
****** 2018.3.25 이호철([email protected])