# 설치 전 반드시 자바를 설치하고 path를 잡아주어야 함.
# word cloud
# R에서 Java를 사용한 패키지를 이용할 수 있도록 해주는 패키지!!
install.packages('rJava')
#KoNLP 패키지(한국어 분석)가 사용하는 패키지
install.packages('memoise')
#KoNLP(Korean Natural Language Processing): 한국어 자연어 처리
install.packages('KoNLP')
# 문자열을 처리하는 여러가지 함수들을 가지고 있는 패키지
install.packages('stringr')
# wordcloud 작성 패키지
install.packages('wordcloud')
# 설치한 패키지들을 검색경로(메모리)에 로드
library(KoNLP)
library(stringr)
library(wordcloud)
search()
# 한국어 분석에 사용할 사전을 로드
useSejongDic()
# 텍스트 파일(*.txt)에서 한줄씩 문자열들을 읽음
txt <- readLines('data/hiphop.txt')
str(txt)
> txt[1:10]
[1] "\"보고 싶다" "이렇게 말하니까 더 보고 싶다" "너희 사진을 보고 있어도" \" : 텍스트 안에 따옴표가 들어간 것
[4] "보고 싶다" "너무 야속한 시간" "나는 우리가 밉다"
[7] "이젠 얼굴 한번 보는 것 조차" "힘들어진 우리가" "여긴 온통 겨울 뿐이야"
[10] "8월에도 겨울이 와"
> txt[1000:1010]
[1] "잘사는 척 행복하게 사는 척" "물고 사는 담배를 " "마치 끊고 사는 척"
[4] "너란 여자가 내게 그런 존재" "전쟁 같은 삶에 " "나를 다시 꺼낸"
[7] "행복한 척 해 난 그래" "혹시나 실망 할까 봐서 " "난 그래"
[10] "행복 난 조바심을 내" "사랑은 멀어져 "
# 특수문자(", ?, !, ...) 등을 제외
txt <- str_replace_all(txt, "\\W", " ") # \\W (대문자 w 하면 특수문자)
txt[1:10]
[1] " 보고 싶다" "이렇게 말하니까 더 보고 싶다" "너희 사진을 보고 있어도"
[4] "보고 싶다" "너무 야속한 시간" "나는 우리가 밉다"
[7] "이젠 얼굴 한번 보는 것 조차" "힘들어진 우리가" "여긴 온통 겨울 뿐이야"
[10] "8월에도 겨울이 와"
# 각 문장에서 명사들만 추출
nouns <- extractNoun(txt)
> nouns[1:5]
[[1]]
[1] "싶"
[[2]]
[1] "말" "싶"
[[3]]
[1] "너희" "사진" "도"
[[4]]
[1] "싶"
[[5]]
[1] "야속" "한" "시" "간"
#명사들로 이루어진 리스트를 도수분포표 형태로 변환
> word_count <- table(unlist(nouns))
> word_count
1 100 168 17 1VERSE에 1순
12 2 8 3 1 1 1 1
1악 1악장 1운동 2 20 2012 2016 21
3 1 1 5 3 1 2 6
# 데이터 프레임으로 다시 변환
df <- as.data.frame(word_count, stringsAsFactors = F) # 행2개 -> 컬럼2개 데이터로 변환, stringAs... : 범주형 데이터로 취급하지 않음.
> head(df)
Var1 Freq
1 12
2 2
3 1 8
4 100 3
5 168 1
6 17 1
#데이터 프레임을 분석하기 쉽게 변수이름을 변경
df <- rename(df, word = Var1, freq = Freq)
# 가장 많이 사용된 명사 20개
top20 = df %>%
arrange(desc(freq)) %>%
head(20)
top20
word freq
1 you 89
2 my 86
3 YAH 80
4 on 76
5 하나 75
6 오늘 51
7 and 49
8 사랑 49
9 like 48
10 우리 48
11 the 43
12 시간 39
13 love 38
14 to 38
15 we 36
16 it 33
17 em 32
18 not 32
19 역사 31
20 flex 30
# wordcloud
# 팔레트 설정
# Dark2 색상 목록에서 8개의 색상을 선택
pal <- brewer.pal(8,'Dark2')
# wordcloud
# 팔레트 설정
# Dark2 색상 목록에서 8개의 색상을 선택
pal <- brewer.pal(8,'Dark2')
# wordcloud는 생성할 때마다 랜덤하게 만들어 지는데,
# 실행할 때마다 항상 같은 결과를 주기 위해서,
set.seed(1234)
# wordcloud 작성
wordcloud(words = df$word, # 그림에 표현해줄 글자의 변수명
freq = df$freq, # 단어의 빈도수 변수명
min.freq = 2, # 표현할 단어의 최소 빈도수 조건
max.words = 200, # wordcloud에 보여줄 단어의 최대 갯수
random.order = F, # 단어들을 무작위로 배치 ? F로 설정시 빈도수가 큰 글자가 가운데 위치
rot.per = 0.1, # 회전하는 단어의 비율
scale = c(4,0.3), # 단어 크기 범위의 비율 : 0.3 ~ 4정도 상대적인 크기를 의미
colors = pal) # wordcloud 그리는데 사용된 색깔