[R] 워드클라우드 R코드 Korean Wordcloud R code

워드클라우드 R코드 Korean Wordcloud R code
한국어 워드클라우드 만드는 코드입니다. 첫번째 방법은 직접 단어와 빈도수를 입력해서 넣어주는 방법이고, 두번째 방법은 형태소분석을 R에서 직접 하는 방식입니다.

1-1. 직접 단어와 빈도수 입력하는 방법

install.packages("wordcloud") #워드클라우드 패키지 설치 
library(wordcloud) 
library(RColorBrewer) #색상표_wordcloud package를 설치하면 자동 설치됨
#예시: 직접 단어와 빈도 넣기 
word <- c("인천광역시", "강화군", "옹진군")  #단어(지역명) 할당
frequency <- c(651,85,61)  # 전입과 전출을 고려한 지역의 순이동 인구수
wordcloud(word, frequency) #단어와 빈도수 매칭 
wordcloud(word, frequency, colors="blue")   #각 지역별 순이동 인구수에 대한 워드 클라우드 출력 & 단어 색 설정
pal2 <- brewer.pal(8,"Dark2")   #8가지 색으로 구성되는 Dark2 팔레트 생성
wordcloud(word, frequency, colors=pal2)   # 단어를 Dark2 팔레트의 색으로 출력

1-2. 단어-빈도 파일을 업로드하는 방법

install.packages("wordcloud") #워드클라우드 패키지 설치 
library(wordcloud) 
library(RColorBrewer) #색상표_wordcloud package를 설치하면 자동 설치됨
#예시: 직접 단어와 빈도 넣기 
#추가_폰트 적용하기 
install.packages('extrafont')
library(extrafont)
font_import()
y
loadfonts(device = 'win')
windowsFonts(gothic=windowsFont('a고딕13'))
#data파일 불러오기 (CSV 파일) 
data <- read.csv("C:/Users/yghga/OneDrive/바탕 화면/w1.csv", header=F)
head(data)
CSVdata$V1
word <- CSVdata$V1 #1열에 단어 목록 
frequency <- CSVdata$V2 #2열에 빈도
wordcloud(word, frequency) #단어와 빈도수 매칭 
wordcloud(word, frequency, colors="blue") 
pal2 <- brewer.pal(8,"Dark2")   #8가지 색으로 구성되는 Dark2 팔레트 생성
wordcloud(word, frequency, colors=pal2, family = 'gothic')   # 단어를 Dark2 팔레트의 색으로 출력  #마지막은 폰트 적용

(결과 예시) a고딕13 폰트 사용

2. 텍스트 업로드해서 형태소분석하는 방법

#패키지 설치 
install.packages("KoNLP")
install.packages("wordcloud")
#패키지 불러오기 
library(KoNLP)
library(wordcloud) 
#워드클라우드 준비물 
useSejongDic()   # 한글 '세종사전'로딩
pal2 <- brewer.pal(8,"Dark2")   # 팔레트 생성
#파일 불러오기 
text <- readLines("C:/Users/user/Desktop/wordcloud.txt")#경로 복사한 후에 "\"가 아니라 "/"로 들어갔는지 확인해줘야 함 
#명사만 추출하기 
noun <- sapply(text, extractNoun, USE.NAMES=F)
noun # 각 행별로 추출된 명사 확인 
class(noun) 
noun2 <- unlist(noun)    # 추출된 명사 통합
noun2   # 통합된 명사 확인
word_count <- table(noun2)     #단어별 빈도수 계산
word_count
head(word_count,10) 
tail(word_count,10)
head(sort(word_count, decreasing=T), 10)  #단어 빈도를 내림차순으로 정렬해서 상위 10개 보기 
wordcloud(names(word_count), freq=word_count, scale=c(6,0.3), min.freq=3, random.order=F, colors=pal2)
wordcloud(names(word_count), freq=word_count, scale=c(10,1), min.freq=3, random.order=F, colors=pal2)
#폰트 설정하기 
windowsFonts(a=windowsFont("맑은 고딕"))
windowsFonts(b=windowsFont("궁서체"))
#여러가지 설정 해보기 
wordcloud(names(word_count), freq=word_count, scale=c(6,0.3), min.freq=3, random.order=F, colors=pal2)
wordcloud(names(word_count), freq=word_count, scale=c(10,1), min.freq=3, random.order=F, colors=pal2, family="a")
wordcloud(names(word_count), freq=word_count, scale=c(10,1), min.freq=3, random.order=F, colors=pal2, family="b")

워드클라우드에서 전처리하는 방법 (단어 추가, 제거하는 법) 역시 중요합니다.

#단어 추가하기
mergeUserDic(data.frame(c("정치"), c("ncn"))) 
noun <- sapply(text, extractNoun, USE.NAMES=F)  # 각 행별로 명사 추출
noun 
class(noun)
noun2 <- unlist(noun)    # 추출된 명사 통합
class(noun2)
word_count <- table(noun2)     ##불필요한 단어 삭제. 날짜를 빈 문자열인 ""로 변경. 즉, 날짜를 제외하는 것을 의미 단어별 빈도수 계산
word_count
noun2 <- gsub("여러분","", noun2)   # 불필요한 단어 삭제. "여러분", "우리", "오늘" 단어들은 빈 문자열인 ""로 변경
noun2 <- gsub("우리","", noun2)
noun2 <- gsub("오늘","", noun2)
#단어 추가하기
noun2 <- gsub("\\d+","", noun2)   # 날짜를 제외하는 것을 의미
noun2 <- gsub("[A-z]","", noun2)  # 영문을 제외하는 것을 의미
noun2 <- gsub("[[:cntrl:]]","", noun2)   # 특수문자를 제외하는 것을 의미
noun2 <- Filter(function(x){nchar(x)>=2}, noun2)  # 단어 필터링
noun3 <- Filter(function(x){nchar(x)>2}, noun2)
word_count <- table(noun2)     #단어별 빈도수 계산
word_count
head(word_count,10)
head(sort(word_count, decreasing=T), 10)  #단어 빈도를 내림차순으로 정렬해서 상위 10개 보기
a <- head(sort(word_count, decreasing=T), 10)
par(mfrow=c(1,2))  
barplot(a)
pie(a) 
par(mfrow=c(1,2))  
barplot(a, las=2, ylim=c(0,30)) 
pie(a) 
getwd()
setwd("/a")   # 작업 폴더를 "c:/a"로 변경. 만약 a 폴더가 없는 경우 에러 발생
savePlot("speech", type="png")   #출력한 워드 클라우드를 PNG 타입의 speech.png 파일로 저장
savePlot("speech", type="jpg")   #출력한 워드 클라우드를 JPG 타입의 speech.jpg 파일로 저장
savePlot("speech", type="pdf") 
noun2
write.table(noun2, "word.txt")
write.table(noun2, "word.txt", row.names=F, col.names=F)

You may also like...

Leave a Reply