library(KoNLP)
library(dplyr)
library(ggplot2)
install.packages("stringr")
library(stringr) # stringr 패키지는 문자열을 가능한 한 쉽게 처리하도록 설계 함수
# 세트를 제공합니다.
useNIADic()
twitter <- read.csv("./Data/twitter.csv",
header = T,
stringsAsFactors = F,
fileEncoding = "UTF-8")
glimpse(twitter)
# 변수명 수정
twitter <- rename(twitter,
no = 번호,
id = 계정이름,
date = 작성일,
tw = 내용)
# 특수문자 제거
twitter$tw <- str_replace_all(twitter$tw, "\\W", " ")
head(twitter$tw)
# 단어 빈도표 만들기
# 트윗에서 명사추출
nouns <- extractNoun(twitter$tw)
# 추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
wordcount <- table(unlist(nouns))
wordcount
# 데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringAsFactors = F)
glimpse(df_word)
# 변수명 수정
df_word <- rename(df_word,
word = Var1,
freq = Freq)
# nchar() 하고 str_lenght()는 문자열을 카운트 하는 기능이 들어 있다. 하지만, 두 기능 간의 차이점이 있는게,
# nchar()는 범주형인 factor를 처리하지 못하고, str_lenght()는 처리 할 수 있다는 것이다.
# word는 팩터형이므로 nchar()는 적용되지 않는다.
df_word <- filter(df_word, str_length(word) >= 2)
# 빈도 순으로 정렬한 후 상위 20개 단어를 추출
top_20 <- df_word %>% arrange(desc(freq)) %>% head(20)
top_20
# 빈도 순서 변수 생성
order <- arrange(top_20, freq)$word # 빈도 순서 변수 생성
# arrange(top_20, freq) --> 상위 20개 단어와 그 출력 횟수 출력
# $word를 통해 단어만 뽑아냄
ggplot(data = top_20, aes(x = word, y = freq)) +
ylim(0, 2500) +
geom_col() +
coord_flip() +
scale_x_discrete(limit = order) + # 빈도순 막대 정렬
geom_text(aes(label = freq), hjust = -0.3) # 빈도 표시
# 워드 클라우드 만들기
library(wordcloud)
pal <- brewer.pal(8,"Dark2") # 색상 목록 생성
set.seed(1234) # 난수 고정
wordcloud(words = df_word$word, # 단어
freq = df_word$freq, # 빈도
min.freq = 10, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order = F, # 고빈도 단어 중앙 배치
rot.per = .1, # 회전 단어 비율
scale = c(6, 0.2), # 단어 크기 범위
colors = pal) # 색상 목록