WordCloud
Woonn
2020-05-07
0. 워드클라우드란?
자료의 빈도를 시각적으로 나타내는 시각화 방법중 하나로 키워드, 개념 등을 직관적으로 파악할 수 있다는 것이 가장 큰 장점입니다. 보통 문서나 수집한 비정형 데이터의 특징을 도출하기 위해 사용합니다.
1. 활용 패키지 및 라이브러리
#install.packages("wordcloud")
#install.packages("RColorBrewer")
#install.packages("KoNLP")
#install.packages("xlsx")
library(wordcloud)
library(RColorBrewer)
library(KoNLP)
library("readxl")
library(dplyr)
library(tidyverse)
library("rJava")
useSejongDic()#사전추가
## Backup was just finished!
## 370957 words dictionary was built.
2. 워드클라우드
2.1 데이터 준비
#데이터 입력
data <- read_xlsx("관광기사(0108_0331).xlsx")
colnames(data)[17] <- c("contents")#컬럼명이 한글일 경우 에러가 발생하기도 함
data$contents <- iconv(data$contents, "utf8", "UTF-8")
#데이터 확인
head(data$contents)
## [1] "지난 29일 서울 용산구 용산전자상가에 위치한 전자랜드 상가 내부가 손님들의 발길이 뜸한 가운데 한산한 모습을 보이고 있다. 이우중 기자 “당장 밖을 보세요, 사람이 있나. 지나가는 사람이 있어야 (물건을) 살 사람도 있죠 .” \n \n 지난 29일 찾은 서울 용산구 용산전자상가는 휑하다 못해 적막감마저 들었다. 주말이라 일부 상가 건물이 문을 닫는다는 .."
## [2] "서울 강남구 삼성역 일대가 대기업 계열 호텔의 격전지로 떠오르고 있다. 지에스(GS)그룹, 에이치디씨(HDC)그룹에 이어 삼성그룹까지 가세하면서 비즈니스 고객을 사로잡기 위한 경쟁이 치열해질 것으로 보인다.\n\n호텔신라는 4월1일부터 삼성역 인근에 비즈니스호텔인 ‘신라스테이 삼성’의 영업을 개시한다고 31일 밝혔다. 지하 3층~지상 21층 건물에 총 30.."
## [3] "영국에서 입국한 2명이 광주광역시에서 신종 코로나바이러스 감염증(코로나19) 확진 판정을 받았다. 2명의 추가 확진자들은 전용 공항버스와 KTX를 이용해 광주로 이동했다. \n \n 31일 광주시에 따르면 지난 29일 영국에서 입국한 2명이 코로나19 진단검사에서 '양성' 판정을 받았다. 광주 21번째 확진자 A씨(43 여)와 22번째 확진자 B씨(20 여.."
## [4] "외교부가 1989년도 생산된 외교 문서의 기밀을 해제하면서 그해 세간을 떠들썩하게 했던 임수경 무단 방북 사건 관련 문서는 비공개해 논란이 일고 있다. \n \n 31일 외교부는 총 1577권(23만 6900여 쪽) 분량의 외교 문서의 기밀을 해제했다. 그런데 그해 언론의 이목이 쏠렸던 임수경씨 방북 사건 관련 문서는 정작 극히 일부만 포함됐다. \n \n 임.."
## [5] "오늘 코스피 시장에서 외국인이 많이 순매도한 종목은 삼성전자우(005935), KODEX 200, SK텔레콤(017670), 삼성전자(005930), S-Oil(010950)등이다. \n \n(금액: 억원)순위종목명금액주가 등락률연관 섹터1삼성전자우(005935)297.33-0.87%반도체와 반도체 장비2KODEX 200262.89+1.77%[코스피 상승에.."
## [6] "오늘 코스닥 시장에서 외국인이 많이 순매도한 종목은 씨젠(096530), 아난티(025980), 고영(098460), 케이엠더블유(032500), 대아티아이(045390)등이다. \n \n(금액: 억원)순위종목명금액주가 등락률연관 섹터1씨젠(096530)192.86-8.18%[유전체검사]2아난티(025980)67.93+29.95%[금강산 관광]3고영(098.."
2.2 명사추출
extraNoun
으로 명사를 추출합니다. sapply()
함수를 활용하며, sapply
는 기본적으로 sapply(data, function)
의 구조를 갖습니다. 또 칼럼명은 필요없으니 USE.NAMES = F
를 추가합니다.
sapply
함수는 기본적으로 list
형태로 반환합니다.
## [1] "list"
이에 unlist()
를 사용해서 벡터로 변환해줍니다.
## [1] "character"
해당 단어들의 빈도수를 나타내기 위해 table
형태로 바꿔줍니다.
## data_unlist
## '2020년판 '2020도쿄올림픽 '5080시니어케어보험'
## 1 1 1
## 'KT&G 'KTX속초역(가칭)'도 'L7
## 1 1 1
해당 기간동안 뽑아낸 기사는 5547건으로 큰 데이터는 아닙니다. 하지만 일반적으로 워드클라우드에 사용하는 텍스트는 상당히 많아서 모두 집어넣고 돌리면 컴퓨터가 멈춰버릴 겁니다. 그래서 내림차순으로 정렬하고 상위 200개 단어만 뽑아서 사용하겠습니다.
## data_unlist
## 한 등 신종 바이러스
## 4133 2297 1778 1658
## 것 관광 명 코로나
## 1634 1602 1511 1487
## 해 일 정부 년
## 1349 1346 1293 1214
## 수 시 원 이
## 1128 1112 1112 1063
## 적 들 확산 중국
## 963 956 913 908
## 2 경제 월 중
## 880 833 813 769
## 부 지역 1 4
## 758 725 724 710
## 3 입국 제주 만
## 698 697 697 682
## 사업 코 전 시장
## 682 625 619 611
## 이날 대통령 국내 코로나19
## 608 603 588 585
## 대 관광객 억 개
## 560 559 556 544
## 5 추진 여행 북한
## 530 524 521 515
## 지원 하기 세계 관련
## 515 505 503 500
## 미국 들이 서울 올해
## 489 475 461 460
## 말 6 사태 감염증
## 456 452 446 444
## 10 방문 본 중국인
## 439 432 426 422
## 코스 번 폐렴 지난해
## 420 417 417 414
## 12 문재 오전 오후
## 409 403 398 398
## 감염증(코로나19) 경기 미 문화
## 394 392 380 361
## 환자 기업 위 외국
## 361 354 353 349
## △ 개별 내 대책
## 348 348 346 346
## 9 남북 분 11
## 336 334 333 331
## 감염 발표 곳 종목
## 330 329 328 325
## 발생 대응 도시 테마
## 324 322 321 321
## 문 장 한국 20
## 319 318 315 311
## 상황 우려 자료 7
## 308 302 302 297
## 대표 조치 확인 19
## 297 293 291 289
## 대구 주 가운데 스
## 288 288 287 285
## 우한 회의 시작 운영
## 284 284 277 277
## 23 8 방역 자
## 276 272 272 270
## 외국계 17 중단 우리
## 268 265 265 262
## 장관 부산 확진 도
## 260 259 259 258
## 차 30 확진자가 세
## 255 251 251 248
## 국제 대상 이번 달
## 245 244 242 241
## 국민 기록 15 확대
## 239 239 237 236
## 18 산업 외교 이후
## 231 231 231 231
## 때 ” 두 지난달
## 230 229 228 228
## 16 국가 21 선정
## 225 223 222 222
## 축제 전국 금지 해당
## 220 219 216 216
## 격리 전망 협력 계획
## 214 213 213 211
## 최대 성 때문 14
## 211 208 205 204
## 판정 27 기획 국회
## 204 202 201 200
## 28 이상 24 조성
## 199 199 197 196
## 뒤 마련 지정 나
## 195 195 195 194
## 특별 닥 대북 보도
## 194 193 192 192
## 사람 안전 산 영향
## 192 192 190 190
## 마스크 조 감염증(우한 동
## 189 189 188 188
## 한국인 상위 추가 해리
## 188 187 185 185
## 규모 대사 데 피
## 183 183 182 182
## 25 시간 화 13
## 180 180 179 177
wordcloud()
에는 데이터와 빈도수가 파라미터로 들어갑니다. names()
를 이용하면 table의 제목을 벡터형식으로 뽑아낼 수 있는데 이를 data로 넣고 table 내용물은 그대로 빈도수(freq)에 넣습니다.
아직 완벽하진 않지만, 워드 클라우드 형태가 보입니다.
3. 등록
3.1 신조어 추가
텍스트 데이터의 경우, 신조어가 하루가 다르게 만들어지고 있으며 이것이 결과물을 해석하는데 중요한 척도가 될 수 있습니다. 관광기사의 경우, 혼여족
, 욜로(YOLO)
, 숙박앱
등의 신조어가 포함됩니다. 이처럼 사전에 없는 단어들을 파악하지 못한다면, 해당 텍스트마이닝은 반쪽짜리가 될 것입니다.
## 1 words were added to dic_user.txt.
3.2 불용어 처리
또 일반적인 단어는 2글자 이상인 경우가 많으며 잘못 분리되서 나온 데, 등, 도
등의 의존명사가 있기 때문에 최소 글자수를 2글자 이상으로 설정해 줍니다.
잘못 정제된 단어도 있습니다. 해당 문서의 경우 대통
이라는 단어가 등장합니다. 이는 대통령 이라는 단어에서 잘못 정제되었을 가능성이 높습니다. 또 문재
, 광화
라는 단어도 나타나는데 이는 문재인
에서 문재 + 인
으로, 광화문
에서 광화 + 문
으로 나뉜 결과입니다. 그리고 한자나 특수문자 등도 분석에 방해가 됩니다. 따라서 잘못 정제된 단어를 gsub
을 통해 정확한 단어로 변환합니다. gsub("수정할 단어", "수정 후 단어", data)
의 형태를 갖습니다.
data_unlist <- gsub('[~!@#$%&*()_+=?<>]','',data_unlist)#특수문자 삭제
data_unlist <- gsub("[[:punct:]]", " ", data_unlist)
data_unlist <- gsub("\\[","",data_unlist)
data_unlist <- gsub('[ㄱ-ㅎ]','',data_unlist)#자음삭제(ㅎㅎ, ㅇㅇ등)
data_unlist <- gsub('(ㅜ|ㅠ)','',data_unlist)#ㅜㅜ나 ㅠㅠ등 삭제
data_unlist <- gsub("\\d+","",data_unlist)#숫자삭제
data_unlist <- gsub("대통", "대통령", data_unlist)
data_unlist <- gsub("문재", "문재인", data_unlist)
data_unlist <- gsub("이번", "", data_unlist)
data_unlist <- gsub("이날", "", data_unlist)
data_unlist <- gsub("하기", "", data_unlist)
data_unlist <- gsub("때문", "", data_unlist)
data_unlist <- gsub("들이", "", data_unlist)
data_unlist <- gsub("일현지시간", "", data_unlist)
data_unlist <- gsub("제주\\S*", "제주도", data_unlist)#단어 뒤에 뭐가 얼마나 붙든 바꾸기
data_unlist <- gsub("확진자\\S*", "확진자", data_unlist)#단어 뒤에 뭐가 얼마나 붙든 바꾸기
또 str_replace_all
을 사용할 수도 있습니다. 정규식을 활용하여 특수문자
, 자.모음
등의 의미없는 글자를 삭제해 줍니다. str_raplace_all(data, pattern = "수정할 단어", replacement = "수정 후 단어")
의 형태를 갖습니다.
데이터 정제 과정이 끝났으면 처리한 데이터를 다시 워드 클라우드에 필요한 형태로 만들어 줍니다.
## data_unlist
## 으로 C CES
## 11684 992 83 2 1 1
## data_unlist
## 코로나 신종 바이러스 관광 정부
## 11684 2075 1780 1658 1602 1293
## 확산 중국 경제 제주도 지역
## 992 913 909 833 750 725
## 입국 사업 시장 대통령령 국내 확진자
## 697 682 611 603 588 588
## 관광객 추진 여행 북한 지원 세계
## 560 524 522 516 515 503
## 관련 미국 서울 올해 사태 감염증
## 500 491 461 460 446 444
## 방문 중국인 코스 감염증코로나 폐렴 지난해
## 432 422 420 418 417 414
## 문재인 오전 오후 경기 환자 문화
## 403 398 398 392 369 361
## 기업 외국 개별 대책 남북 감염
## 354 349 348 347 334 330
## 발표 종목 발생 대응 도시 테마
## 329 325 324 322 321 321
## 한국 상황 우려 자료 대표 조치
## 315 308 302 302 297 293
## 확인 대구 가운데 우한 회의 시작
## 291 288 287 286 284 277
## 운영 방역 외국계 중단 우리 확진
## 277 272 268 265 262 262
## 장관 부산 국제 대상 국민 기록
## 260 259 245 244 239 239
## 확대 산업 외교 이후 지난달 국가
## 236 231 231 231 228 225
## 선정 축제 전국 금지 해당 격리
## 222 220 219 216 216 214
## 전망 협력 계획 최대 판정 기획
## 213 213 212 211 204 201
## 국회 이상 조성 마련 지정 특별
## 200 199 196 195 195 194
## 사람 대북 보도 안전 영향 마스크
## 193 192 192 192 190 189
## 감염증우한 한국인 상위 추가 해리 규모
## 188 188 187 185 185 183
## 대사 시간 개발 뉴스 영화 예정
## 183 180 177 175 175 175
## 진행 여성 하게 거래 재정 정책
## 173 172 172 171 170 169
## 업계 강화 대비 필요 주요 행사
## 167 164 164 164 162 162
## 활성화 시민 문제 분야 평화 방안
## 162 161 160 158 158 156
## 개최 실제 국무부 취소 통일 해외
## 154 154 153 152 151 151
## 공매도 관계 제재 서비스 공사 관광지
## 150 150 150 148 147 147
## 개선 사회 내용 외국인 제한 포함
## 146 146 145 145 145 145
## 경북 크루즈 수치 금강 기준 설명
## 144 144 143 140 140 140
## 업무 오늘 개사 가능성 본부 증권사
## 140 140 139 138 136 136
## 순수 입장 투입 추정치 추출 긴급
## 135 135 135 134 134 133
## 부총리 소비 항공 검토 의원 결과
## 133 133 133 132 131 130
## 연합 호텔 문화체육관 발언 접촉 여파
## 130 130 129 129 129 128
## 유치 주한 광부 마을 센터 단체
## 128 128 127 127 127 126
## 관계자 어려움 주민 경우 청와대 결정
## 124 124 124 123 123 122
## 기자회견 육성
## 122 122
4. 출력
RColorBrewer
에서 사용할 수 있는 색상이 표시됩니다. 전체 색상을 보고 싶으면 다음을 실행합니다.
set별 이름과 색상이 보이는데, 여기서 사용하고 싶은 set을 선택합니다.
폰트는 a한글사랑L
폰트를 사용해 보겠습니다.
5. 결과
위 과정을 종합해 워드클라우드를 출력해보겠습니다.
#출력
wordcloud(names(wordcount_top), wordcount_top, scale=c(35,0.5),random.order = FALSE, random.color = TRUE, colors = color, family = "font")
간단하게 출력해 보았습니다. 검색어인 관광
보다도 코로나
나 신종
, 바이러스
등이 더 많은 비중을 차지하고 있는 것을 볼 수 있습니다. 코로나19는 이제 전 지구적인 이슈로, 여러 분야에 영향을 미쳤으며 관광 분야에도 큰 영향을 미쳤음을 직관적으로 알 수 있습니다. 보다 의미있고 보기좋은 워드클라우드를 만들기 위해서는 위의 전처리 작업
을 확실히 수행해줘야 합니다. 본인이 수집한 데이터에 알맞는 전처리를 통해 보기 좋은 워드클라우드를 만들도록 합니다.
'데이터분석 저장소 > R 저장소' 카테고리의 다른 글
잠재 디리클레 할당(Latent Dirichlet Allocation, LDA) (0) | 2020.05.21 |
---|---|
워드클라우드('19년도', '관광') (0) | 2020.05.15 |
데이터 핸들링 (0) | 2020.03.26 |
R 데이터 구조 및 기본 문법 (0) | 2020.03.22 |
R studio 다운로드 및 설정 (0) | 2020.03.21 |