[R lang 크롤링] (R) wordcloud2로 더 예쁘게 시각화하기

(R) wordcloud2로 더 예쁘게 시각화하기

 
프로필

2018. 9. 26. 0:03

안녕하세요! 이번에 포스팅할 내용은 wordcloud2로 시각화하기입니다.
지난번에 제가 네이버 종목토론실을 크롤링한 뒤 텍스트마이닝하여 시각화를 하는 과정까지를 포스팅해드렸었는데요
그때는 wordcloud라는 패키지를 사용하여 시각화하였습니다. 하지만 해보신분들은 아시겠지만 wordcloud패키지를 포함해서 R에서 나온 출력물들은 너무 미적감각이 떨어진다는 것입니다.

너무나도 구린 wordcloud 출력물


그런데 며칠 전에 어떤 이웃님께서 코딩하는 과정에서 발생한 오류를 저에게 질문을 해주셔서 답해드린 적이 있었는데 그분께서는 wordcloud2라는 패키지를 사용하셨습니다. 사실 저는 그 패키지가 존재하는 지도 몰랐었지만 당황하지 않고 오류를 해결해드리기 위해서 노력했습니다. 그런데 이 패키지는 이름에서 알 수 있듯이 wordcloud를 만들어주는 패키지인데, R에서 쓸 수 있는 패키지 치고는 퀄리티가 제법 괜찮았습니다. 위에 보이는 쓰레기와는 차원이 다름 그리고 사용방법 또한 너무 간단하고 기능도 많았습니다. 
그래서 오늘은 wordcloud2로 워드 클라우드를 출력하는 방법에 대해 포스팅하겠습니다.

library(devtools) devtools::install_github("lchiffon/wordcloud2")

먼저 Rstudio를 여시고 devtools라는 패키지를 불러옵니다. 없으시다면 install.packages('devtools')로 먼저 설치한 다음 불러오시면 됩니다. devtools는 저도 얼마전에 알아서 자세히는 모르지만 아마 github와 연동을 시켜주는 패키지인것 같습니다.
github에는 전 세계의 코딩유저들이 자신의 코드를 공유하고 질문하는 글로벌 코딩 커뮤니티입니다.
devtools를 불러오셨으면 아래와 같이 입력하여 wordcloud2를 설치합니다.

혹시 왜 install.packages('wordcloud2')로 바로 설치하지 않고 저런 방법으로 wordcloud2를 설치하는지 궁금해 하시는 분들을 위해 말씀드리자면, 그냥 install.pakcages로 바로 wordcloud2를 설치하였을 때 구동이 되긴 하지만 많은 기능들이 불구가 되어 사용할 수 없는 오류가 발생합니다. 저도 그래서 해결방법을 찾다가 github에도 같은 질문이 올라와 있더라고요. 그에 대한 답으로 저렇게 설치하면 기능들을 온전히 사용할 수 있다고 합니다.

워드클라우드를 만들기 위해 텍스트 자료를 구하는 것은 각자 방법이 다를 뿐더러 혹시 데이터 텍스트마이닝을 하시는 분들은 웹페이지 크롤링 방법은 이미 포스팅하였기 때문에 아래 포스팅을 참고해주시면 감사하겠습니다.


그러면 각자 워드클라우드를 출력할 텍스트파일이 있다는 가정하에 글을 쓰겠습니다.
제가 사용하는 자료는 학교 교양 수업의 과제에 사용했던 텍스트 파일입니다. 영남학특강이라는 강의라서 영남과 영남학에 관련된 키워드들이 담겨 있는 파일입니다.

library(wordcloud2) library(KoNLP) yung <- readLines('yeungnam.txt',encoding = 'UTF-8')

먼저 wordcloud2와 KoNLP 패키지를 불러옵니다.
그런 다음 제가 사용하는 영남/영남학 관련 키워드들이 담긴 텍스트 파일을 UTF-8로 인코딩하여 불러온 뒤 yung에 저장해 줍니다.

yung2 <- sapply(yung,extractNoun,USE.NAMES = F) yung3 <- unlist(yung2)

불러온 yung을 sapply함수를 사용해 명사를 추출한 뒤 yung2에 저장합니다. 그리고 yung2를 unlist함수로 리스트를 벡터화시켜 준 다음 yung3에 저장합니다.

yung4 <- gsub('\d+','',yung3) yung4 <- gsub('-','',yung4) yung4 <- gsub('""','',yung4) write(unlist(yung4),'yeungnam1.txt')

그런다음 gusb함수로 숫자와 기타 특수문자가 포함된 키워드를 삭제합니다. gusb함수 사용방법은 첫 번째 입력인자를 두 번째 입력인자로 바꿔주며, 세 번째 입력인자는 해당 변수를 입력해주면 됩니다.
'\d+'는 모든 숫자를 의미하는 정규식입니다.
마무리 되었으면 yung4를 unlist함수로 사용한 뒤 'yeungnam1.txt'파일로 만들어 줍니다.

yung5 <- read.table('yeungnam1.txt') head(yung5,200)

그런다음 다시 read.table함수로 'yeungnam1.txt'를 불러와서 yung5에 저장합니다. 이렇게 txt파일을 만들었다가 다시 불러오는 이유는 gsub함수를 사용함으로써 생기는 공백(ex)숫자->""로 바꾸면 공백 생김)을 제거하기 위함입니다.
yung5를 저장했으면 head()함수를 사용해 상위 200개의 키워드를 출력합니다. 결과는 아래와 같습니다.

wordcount <- table(yung5) wordcount <- head(sort(wordcount,decreasing=T),200) wordcount

yung5를 table로 만들어 wordcount로 저장합니다. table함수는 각 단어별로 몇 번 씩 언급되었는지 빈도 수를 나타내 주는 함수입니다.
그 다음 wordcount에 sort함수를 사용해 빈도가 가장 많은 단어에서 적은 단어로 내림차순 정렬을 시킨 다음, head함수를 사용하여 빈도 수 상위 200개의 단어만을 추출해 wordcount로 다시 저장해줍니다.

wordcount를 출력해보면 위와 같이 빈도수를 기준으로 내림차순 정렬되어 있습니다.
완료되었으면 이제 본격적으로 wordcloud2 패키지를 사용하겠습니다.


사용방법은 매우 간단합니다. 위에서 만든 wordcount처럼 단어와 빈도수만 정리된 자료만 있으면 끝입니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
http://s1004games.com

wordcloud2(data=wordcount,fontFamily = '나눔바른고딕')

wordcloud2함수를 사용하기위해서는 2가지만 설정해주시면 됩니다. 첫 번째는 입력자료인 wordcount이고 두 번째는 글자 폰트입니다. fontFamily를 입력하지 않으시면 자동으로 기본 폰트로 출력되니 정확히 말하면 하나만 설정하면 되네요.

출력물을 보니 그냥 wordcloud패키지를 사용했을 때 보다 훨씬 깔끔하고 있어보이는 것을 알 수 있습니다.

wordcloud2(wordcount,color = "random-light", backgroundColor = "grey",fontFamily = '나눔바른고딕')

이번에는 color와 backgroundColor를 설정해보겠습니다. color는 'random-light'를 사용했고 backgroundColor는 'grey'를 입력했습니다. color는 글자 색인데 'random-dark'와 'random-light'이렇게 두 개가 있습니다. random-light는 글자에 약간 형광색을 입혀서 포인트를 주는 효과인것 같네요

출력 결과입니다. 배경이 생기고, 글자 색이 형광색처럼 설정되어 튀는 효과를 볼 수 있네요
다음은 원하는 모양으로 워드클라우드를 출력하는 방법입니다.

letterCloud(data=wordcount,word='R',wordSize=1,fontFamily='나눔바른고딕')

letterCloud함수를 사용하며, data와 출력할 단어 모양 그리고 wordSize를 입력하면 됩니다.

word='R'로 설정하면 이렇게 R모양으로 출력됩니다.

letterCloud(data=wordcount,word='영남',wordSize=1,fontFamily='나눔바른고딕')

이렇게 word를 한글로 입력하여도 한글 모양대로 출력됩니다.
그리고 내가 원하는 모양대로 출력할 수 있는 방법도 있는데 이것은 조금 까다로워서 아래의 사이트를 참고하셔서 따라하시면 됩니다.
https://cran.r-project.org/web/packages/wordcloud2/vignettes/wordcloud.html

library(KoNLP) library(wordcloud2) library(devtools) devtools::install_github("lchiffon/wordcloud2") yung <- readLines('yeungnam.txt',encoding = 'UTF-8') yung2 <- sapply(yung,extractNoun,USE.NAMES = F) yung3 <- unlist(yung2) yung4 <- gsub('\d+','',yung3) yung4 <- gsub('""','',yung4) yung4 <- gsub('-','',yung4) write(unlist(yung4),'yeungnam1.txt') yung5 <- read.table('yeungnam1.txt') wordcount <- table(yung5) wordcount <- head(sort(wordcount,decreasing=T),200) wordcount wordcloud2(data=wordcount,color = "random-dark",fontFamily = '나눔바른고딕') wordcloud2(wordcount,color = "random-light", backgroundColor = "grey",fontFamily = '나눔바른고딕') letterCloud(data=wordcount,word='R',wordSize=1,fontFamily='나눔바른고딕') letterCloud(data=wordcount,word='영남',wordSize=1,fontFamily='나눔바른고딕')

마지막으로 전체 코드입니다. 읽어주셔서 감사합니다. 궁금하신점은 질문해주세요

 

[출처] https://m.blog.naver.com/jk940/221365461445

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 25082
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 24562
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 25940
1081 [데이터베이스 모델링] 테이블정의양식 file 졸리운_곰 2024.02.23 3
1080 [MYSQL] MYSQL JSON 관련 함수 file 졸리운_곰 2024.02.18 6
1079 [통계 R 언어] R 언어에서 Python 코드 호출 : Calling Python from R 졸리운_곰 2024.01.28 2
1078 암호화폐 (비트코인, cryptocurrency, bitcoin) Solidity 이더리움 Solidity Tutorial: How to build and deploy a smart contract to send Ether from one account to another file 졸리운_곰 2024.01.23 0
1077 암호화폐 (비트코인, cryptocurrency, bitcoin) Solidity 이더리움 Cheatsheet 졸리운_곰 2024.01.23 0
1076 [데이터분석 & 데이터 사이언스] 데이터에 관한 꼭 알아야 할 오해와 진실 12가지 졸리운_곰 2024.01.17 3
1075 [tensorflow 1.13 1.x 버전 설치법] [TensorFlow] Anaconda 가상환경 이용하여 TensorFlow GPU 설치 졸리운_곰 2024.01.08 1
1074 [R lang 크롤링] 비트코인(암호화폐) 가격 불러오기 in R 졸리운_곰 2023.12.11 4
1073 [통계 R 언어] 이동평균이 표시된 plotly 동적 주가 그래프 in R file 졸리운_곰 2023.12.11 2
1072 [R lang 크롤링] 금융 데이터 분석 주가 데이터 가져오기 in R 졸리운_곰 2023.12.11 3
1071 [R lang 크롤링] (R) [전략적가치투자] - 증액 투자법 file 졸리운_곰 2023.12.10 1
1070 [R lang 크롤링] (R) [전략적가치투자] - 정액 투자법 file 졸리운_곰 2023.12.10 1
1069 [R lang 크롤링] (R) [전략적가치투자] - 매입 보유법, 정률 투자법, 변율 투자법 file 졸리운_곰 2023.12.10 3
» [R lang 크롤링] (R) wordcloud2로 더 예쁘게 시각화하기 file 졸리운_곰 2023.12.10 3
1067 [R lang 크롤링] (R) 나만의 주식차트만들기 / quantmod 패키지(2) file 졸리운_곰 2023.12.10 3
1066 [R lang 크롤링] (R) R에서 주가정보 가져오기 / quantmod 패키지(1) file 졸리운_곰 2023.12.10 1
1065 [R lang 크롤링] (R) 정규식에서 사용되는 주요 기호들과 의미 file 졸리운_곰 2023.12.10 1
1064 [R lang 크롤링] (R) 종목토론실 텍스트마이닝하여 시각화하기 file 졸리운_곰 2023.12.10 2
1063 [R lang 크롤링] (R) 네이버금융에서 종목토론방 크롤링 file 졸리운_곰 2023.12.10 2
1062 [통계 R 언어] [ R ] pipe operator %>% 의 의미 - magrittr 패키지 졸리운_곰 2023.12.10 1
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED