인터넷에서 “경주 여행지 추천” 키워드로 검색한 결과를 수집해서 어떤 관광지를 추천하는지 주요 키워드를 추출하여 워드 클라우드로 시각화 하는 예제입니다. R코드를 통해 주요키워드를 추출후 word cloud로 시각하고자 합니다.
[ 원본파일 일부내용 ]
(1) 작업 디렉토리 설정하고 필요 패키지 설치 및 실행하기
setwd("c:\\temp\\")
install.packages("KoNLP")
install.packages("wordcloud")
install.packages("stringr")
library(stringr)
library(KoNLP)
library(wordcloud)
useNIADic()
(2) 분석할 파일 불러오기
data1 <- readLines("경주여행_지식인_2016.txt", encoding="UTF-8")
head(data1,10) # 잘 불러졌는지 앞부분의 10줄만 보고 확인하기
length(data1) # 분석해야 할 텍스트가 총 몇 줄인지 확인
(3) 중복값 제거, 필요없는 특수문자 제거 후 명사만 추출하기
data1 <- unique(data1) # 중복행제거
length(data1) # 중복제거후 분석대상이 되는 행(줄)의 수 확인
data2 <- str_replace_all(data1,"[^[:alpha:][:blank:]]","") # 각 행(줄)에서 특수문자제거
data3 <- extractNoun(data2) # 행(줄)에서 명사추출 리스트화
head(data3,5) # 5개의 행(줄)의 명사리스트 확인
(4) 불용어 제거 및 용어정리 - 코드로 작업
집계작업 -> (불용어 판단후) 제거작업을 반복적으로 수행하여 의미있는 데이터만 추출한다.
# (1) 각 행(줄)에서 중복단어 제거
data4 <- lapply(data3, unique)
# 집계확인 : 어떤 키워드가 있는지 많이 언급된 빈도 기준으로 상위 100개 출력해서 확인
wordcount <- table(unlist(data4)) # table(빈도별 집계함수)이용 : list-> vector 변환
head(sort(wordcount, decreasing=T),100) # 언급 빈도 순서로 역순(내림차순)으로 정렬 -> 상위 100개 추출
# (2) 한글자이하단어('', 한글자) 삭제하기
data5 <- Filter(function(x) {nchar(x) <= 10 & nchar(x) >1} , unlist(data4))
# 집계확인
wordcount <- table(data5)
head(sort(wordcount, decreasing=T),100) # 다시통계작업으로 확인
# (3) 필요없는 단어 일일이 삭제
data5 <- gsub("\\d", "", data5) # 숫자삭제
data5 <- gsub("경주", "", data5) # 분석에 의미없는 단어 삭제
data5 <- gsub("여행", "", data5) # 분석에 의미없는 단어 삭제
data5 <- gsub("\\^", "", data5)
# (3-1) 단어 대체
data5 <- gsub("스프링", "스프링돔", data5)
data5 <- gsub("파크", "워터파크", data5)
data5 <- gsub("월드", "월드엑스포", data5)
data5 <- gsub("순두부", "멧돌순두부", data5)
data5 <- gsub("블루", "블루원워터파크",data5)
# (3-2) 단어 결합
data5 <- gsub(paste(c("교촌","한옥마을"), collapse='|'), "교촌한옥마을", data5)
data5 <- gsub(paste(c("주상","절리","주상절리"), collapse='|'), "주상절리", data5)
data5 <- gsub(paste(c("보문단지","보문","보문관광단지"), collapse='|'), "보문관광단지", data5)
data5 <- gsub(paste(c("달동네","추억","추억의달동네"), collapse='|'), "추억의달동네", data5)
data5 <- gsub(paste(c("한우","떡갈비"), collapse='|'), "한우수제떡갈비", data5)
data5 <- gsub(paste(c("게스트","하우스","게스트하우스"), collapse='|'), "게스트하우스", data5)
data5 <- gsub(paste(c("월성","반월성"), collapse='|'), "반월성", data5)
data5 <- gsub(paste(c("맛집이","맛집"), collapse='|'), "맛집", data5)
data5 <- gsub(paste(c("교리","김밥","계란지단"), collapse='|'), "교리김밥", data5)
data5 <- gsub(paste(c("천마","천마총"), collapse='|'), "천마총", data5)
data5 <- gsub(paste(c("박물관","테디베어","테디베어박물관"), collapse='|'), "테디베어박물관", data5)
data5 <- gsub(paste(c("현대","밀면"), collapse='|'), "현대밀면", data5)
data5 <- gsub(paste(c("이조","이조한정식"), collapse='|'), "이조한정식", data5)
# 집계확인
wordcount <- table(data5)
head(sort(wordcount, decreasing=T),100)
(4) 불용어 제거 및 용어정리 - 파일로 작업
집계작업 -> (불용어 판단후) 파일로 입력하여 제거작업을 반복적으로 수행하여 의미있는 데이터만 추출한다.
삭제 대상 단어들은 공백으로 구분하고 마지막 반복문에서 커서가 잘 작동하도록 마지막에 엔터(\n) 입력한다.
# 불용어들을 파일에 저장한 후 불러와서 제거하는 방식 사용
txt <- readLines("경주gsub.txt") # 삭제하고 싶은 단어를 한줄에 하나씩 작성
txt # 삭제 타켓 단어들, 불용어가 사라질때까지 수동으로 추가하여 작업수행
cnt_txt <- length(txt)
for( i in 1:cnt_txt) { # 입력한 불용어 수만큼 삭제작업 반복하기
data5 <- gsub((txt[i]),"", data5)
}
head(data5,5)
#삭제된 키워드의 공백("")제거
data6 <- Filter(function(x) {nchar(x) <= 10 & nchar(x) >1} , data5)
head(data6,10)
#재집계
wordcount <- table(data6)
head(sort(wordcount, decreasing=T),100)
반복작업을 3회진행하여 집계작업한 결과물 ( data7 -> data8 -> data9 )
(5) 워드 클라우드로 시각화
wordcloud로 시각화
palete <- brewer.pal(7,"Set2")
wordcloud(names(wordcount),freq=wordcount,scale=c(5,1),rot.per=0.5,min.freq=35,
random.order=F,random.color=T,colors=palete)
wordcloud2로 시각화
##추가 시각화 기법 - wordcloud2( ) 패키지로 시각화 하기 : 웹브라우저에서 그려짐
install.packages("wordcloud2")
library(wordcloud2)
wordcount2 <- head(sort(wordcount, decreasing=T),100)
wordcloud2(wordcount2,gridSize=1,size=0.5,shape="circle")
# shape = "diamond" , "star" , "circle" 등 다양한 옵션 사용 가능함.
'data' 카테고리의 다른 글
[ R 프로그래밍 ] 미세먼지관련 소셜키워드 분석 (0) | 2024.08.27 |
---|---|
[ R 프로그래밍 ] 제주 여행지 추천 키워드 분석하기 (9) | 2024.08.26 |
R 프로그램을 활용한 빅데이터 분석특강 - 데이터처리 (1) | 2024.08.24 |
R 프로그램을 활용한 빅데이터 분석특강 - R언어 기본 (4) | 2024.08.24 |
Tibero DBMS 설치 및 설정 ( Linux, Windows ) (0) | 2024.03.10 |