data

[ R 프로그래밍 ] 경주여행 추천키워드 분석하기

갬짱 2024. 8. 26. 14:56

 

인터넷에서 “경주 여행지 추천” 키워드로 검색한 결과를 수집해서 어떤 관광지를 추천하는지 주요 키워드를 추출하여 워드 클라우드로 시각화 하는 예제입니다. 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"  등 다양한 옵션 사용 가능함.