< 8 > 텍스트 마이닝(KoNLP) 및 워드클라우드
일반적인 텍스트 마이닝 작업 순서
워드 클라우드
워드 클라우드를 위해선 명사 추출이 선행되어야 함
8-1) wordcloud
install.packages("wordcloud")
library(wordcloud)
library(RColorBrewer)
display.brewer.all() # 워드클라우드에 쓸 색상 리스트
palette <- brewer.pal(9,"Set1") # Set1에서 9가지 색을 쓴다는 뜻
wordcloud(name(데이터),
freq = 데이터,
scale = c(a,b), # 가장 빈도가 큰 단어와 가장 빈도가 작은 단어 폰트 사이의 크기 차이
rot.per = , # 글씨 방향의 비율 (0 : 가로만/ 1: 세로만/ 0.x : 비율)
min.freq = , # 출력될 단어들의 최소 빈도
max.words =, # 출력될 단어들의 최대 빈도(inf : 제한 없음)
random.order = , # True면 랜덤, False면 빈도수가 큰 단어를 중앙에 배치하고 작은 순
random.color = , # 글자 색 임의로 지정
colors = palette, # 글자 색
family = "baedal") # 글씨체
8-2) wordcloud2
install.packages("wordcloud2")
# 위에 안될때 devtools::install_github("lchiffon/wordcloud2")
library(wordcloud2)
wordcloud2( 테이블 형태의 데이터 )
Q. 워드클라우드 연습
step1. 필요패키지 깔기
install.packages("wordcloud")
library(wordcloud)
step2. 작업할 파일 불러오기
alert_1 <-readLines("c:/TEMP/Rstudy/data/oracle_alert_testdb.log")
alert_1
step3. 데이터 전처리 (필터링)
## - ORA-nnnn 형태의 오라클 오류만 뽑아내기
alert_2 <- grep("^ORA-", alert_1, value = T)
alert_2 <- substr(alert_2, 1, 8)
alert_2
step4. 집계
errorCount <- table(alert_2)
head(sort(errorCount, decreasing = T), 10)
step5. 시각화 (wordcloud)
- 색상 선택
library(RColorBrewer)
display.brewer.all() # 워드클라우드에 쓸 색상 리스트
palette <- brewer.pal(9,"Set1") # Set1에서 9가지 색을 쓴다는 뜻
- 시각화
install.packages("wordcloud")
library(wordcloud)
wordcloud(names(errorCount),
freq = errorCount,
scale = c(4,0.5), # 폰트 크기 차이
rot.per = 0, # 글씨 방향의 비율 (0 : 가로만/ 1: 세로만/ 0.x : 비율)
min.freq = 5, # 나타내는 최소 언급 값
random.color = T, # 글자 색 임의로 지정
colors = palette, # 글자 색
family = "baedal") # 글씨체
wordcloud2(table(data4))
8-3) 한글 분석 : KoNLP
step1. JAVA 확인
Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre1.8.0_261") # JAVA 환경 설정정
Sys.getenv("JAVA_HOME") # JAVA 환경 설정 확인
step2. KoNLP 및 필요 패키지 설치
install.packages("KoNLP") # KoNLP 패키지 설치
install.packages("Sejong")
install.packages("hash")
install.packages("rJava")
install.packages("tau")
install.packages("RSQLite")
install.packages("devtools")
library(KoNLP)
Step3. 데이터 불러오기
data1 <- readLines("c:/TEMP/Rstudy/data/좋아하는과일2.txt")
data1
step4. 데이터 전처리
## - 중복된 값 제거
data1 <- unique(data1)
data1
## - 특수문자 제거
install.packages("stringr")
library(stringr)
data1 <- str_replace_all(data1, "[^[:alpha:][:blank:]]","")
data1
step5. 단어 단위로 분리
data2 <- extractNoun(data1) # list 형태로 바뀜
data2
step6. 한 줄 안에서 중복되는 단어 제거
data2 <- sapply(data2, unique)
data2
step7. 띄어 쓰기가 안되어 있는 긴 문장(단어)을 제거
## - Filter() 함수에는 데이터가 벡터어야 한다
## - 그래서 unlist() 함수로 list -> vector 전환
data3 <- unlist(data2) ; data3
data4 <- Filter(function(x) {
nchar(x) <= 10 & nchar(x) > 1}, data3)
data4
step8. 불용어 제거
- 방법 1 : R에서 바로 없애기
data4 <- gsub("\\^", "", data4)
data4 <- gsub("ㅎ", "", data4)
data4 <- gsub("ㅋ", "", data4)
data4 <- gsub("좋아합니다", "", data4)
data4 <- gsub("최고", "", data4)
data4 <- Filter(function(x) {
nchar(x) <= 10 & nchar(x) > 1}, data4) # 공백 제거거
data4
- 방법 2 : 메모장에 불용어 따로 적어서 반복문 통해 없애기
txt <- readLines("c:/TEMP/Rstudy/data/과일gsub.txt")
cnt_txt <- length(txt)
cnt_txt
for( i in 1:cnt_txt) {
data4 <-gsub((txt[i]),"",data4)
}
data4
step9. 추출된 키워드를 임시로 확인하기 위해 집계
wordcount <- table(data4)
sort(wordcount, decreasing = T)
step10.워드클라우드로 시각화
install.packages("wordcloud")
library(wordcloud)
palete <- brewer.pal(9,"Set3")
wordcloud(names(wordcount),
freq=wordcount,
scale=c(5,1),
rot.per=0.25,
min.freq=1,
random.order=F,
random.color=T,
colors=palete)