young
is this it
young
전체 방문자
오늘
어제
  • 분류 전체보기 (143)
    • 웹_프론트엔드 (1)
      • 로드맵 챌린지 (73)
      • Svelte (2)
      • React (6)
      • JavaScript (8)
      • TypeScript (2)
      • HTML+CSS (5)
    • 웹_백엔드 (0)
      • Django (0)
    • 빅데이터 (33)
      • R (30)
      • Python (2)
    • 기타 (11)
      • git (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 버전관리
  • 웹보안
  • 구글맵api
  • bem
  • form
  • 공개키
  • ggmap()
  • 태스크러너
  • ggplot
  • 인증
  • ssl
  • 대칭키
  • css후처리기
  • vcs
  • owasp
  • rstudio지도정보
  • Regex
  • 암호화
  • 보안취약점
  • css네이밍

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
young

is this it

빅데이터/R

[R] 비정형 데이터 처리 - 워드클라우드(wordcloud) 패키지 사용 예시 [텍스트 마이닝]

2019. 12. 11. 21:08
반응형

일반적으로 비정형 데이터 처리는 SNS(Social Network Service)에서 제공하는 텍스트 자료나 기존에 준비된 디지털 자료를 대상으로 미리 만들어 놓은 사전과 비교화여 단어의 빈도를 분석하는 텍스트 마이닝 방식을 주로 이용한다. 따라서 한글 단어를 처리할 수 있는 우수한 사전 기능이 무엇보다도 요구된다. 특히 비정형 데이터 처리를 위해서는 사전에 없는 단어를 추가하거나 불용어를 처리하는 별도의 함수를 정의해 놓을 필요가 있다.

 

데이터 마이닝(Data Mining): 의사 결정을 위해서 DB(정형화 data)로 부터 규칙과 패턴을 발견하는 기법

텍스트 마이닝(Text Mining): text data(자연어, 비정형 data)로 부터 규칙과 패턴을 발견하는 기법

워드 클라우드(Word Cloud) : 자료 처리 과정과 자료 분석 과정 - 단어 빈도수 체크

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 한글 워드 클라우드 절차
# 1. Java 실행환경 구축 (jdk 설치)
# 2. 자료 수집 (text 자료)
    # 2.1 text file 형태로 수집
    # 2.2 web scraping을 이용하여 수집
# 3. 명사 추출
Sys.setenv ( JAVA_HOME = 'C:/Program Files/Java/jre1.8.0_231' ) 
 
# 필요시 설치할 패키지들
# install.packages("wordcloud")
# install.packages("wordcloud2")
# install.packages("KoNLP")           # 한국어 처리
# install.packages("RColorBrewer")    # 색상 선택
 
library(wordcloud)
library(wordcloud2)
library(KoNLP)
library(RColorBrewer)
 
library(dplyr)
library(ggplot2)
 
setwd('D:경로 지정')
text <- readLines('텍스트파일.txt', encoding = 'UTF-8')
text
# txt 파일 맨마지막 줄에 공백 한 줄을 넣는 것이 R과 호환에 좋다.
 
# '우리말씀' 한글 사전 로딩 ( 62만 개의 우리말 단어 수록)
buildDictionary(ext_dic = 'woorimalsam')
pal2 <- brewer.pal(8,'Dark2')                 # 색상 팔레트 생성
# pal2 <- brewer.pal(9,'Blues')[5:9]        # 다른 팔레트 참고
noun <- sapply(text, extractNoun, USE.NAMES = F) # 명사 추출
noun # class: list
 
# 4. 추출된 단어(주로 명사) 에 대한 빈도수 계산 및 시각화
noun2 <- unlist(noun) # list -> vector로 변환
noun2
wordcount <- table(noun2)
wordcount
sort.noun <- sort(wordcount, decreasing = T)[1:20] # 최고 빈도의 20개 단어 추출
sort.noun
sort.noun <- sort.noun[-1]
barplot (sort.noun, names.arg = names(sort.noun),
         col = 'steelblue', main = '빈도수 높은 단어',
         ylab = '단어 빈도수')
 
df <- as.data.frame(sort.noun)
df
ggplot ( df, aes(x = df$noun2, y = df$Freq)) +
    geom_bar(stat = 'identity',
             width = 0.7,
             fill = 'steelblue') +
    ggtitle('빈도수 높은 단어') +
    theme(plot.title = element_text(size = 25,
                                    face = 'bold',
                                    colour = 'steelblue',
                                    hjust = 0,
                                    vjust = 1 )) +
    labs(x = '명사', y='단어빈도수') +
    geom_text(aes(label = df$Freq), hjust = -0.3) + # 빈도 표시
    coord_flip()
        
# 5. word cloud 작성
wordcloud (names(wordcount), # 단어
           freq = wordcount, # 단어 빈도
           scale = c(6, 0.7),# 단어 폰트 크기(최대, 최소)
           min.freq = 3,     # 단어 최소 빈도
           random.order = F, # 단어 출력 위치
           rot.er = .1,      # 90도 회전 단어 비율
           colors = pal2)    # 단어 색
 
# 6. 전처리 과정 수행
#   6.1 생략된 단어를 사전에 등재
buildDictionary(ext_dic = 'woorimalsam',
                user_dic = data.frame('펭수', 'ncn'), # 사전에 없는 '펭수'라는 단어를 명사(ncn)로 추가
                replace_usr_dic = T)
noun <- sapply(text, extractionNoun, USE.NAMES = F)
noun2 <- unlist(noun)
 
# 6.2 불필요한 단어 삭제: 하나하나 찾아봐야 함 ㅠㅠ
noun2 <- noun2[nchar(noun2) > 1] # 글자수 1 초과
noun2 <- gsub('하지', '', noun2) # '하지'를 ''로 바꿈 (제거)
noun2 <- gsub('때문', '', noun2)
wordcount <- table(noun2)
 
# 7. 다시 워드클라우드 실행하면 등장하는 단어가 바뀜
wordcloud (names(wordcount), # 단어
           freq = wordcount, # 단어 빈도
           scale = c(6, 0.7),# 단어 폰트 크기(최대, 최소)
           min.freq = 3,     # 단어 최소 빈도
           random.order = F, # 단어 출력 위치
           rot.er = .1,      # 90도 회전 단어 비율
           colors = pal2)    # 단어 색
 
반응형

'빅데이터 > R' 카테고리의 다른 글

[R] 고급시각화 분석 - ggmap 패키지, 구글맵 지도 정보 이용하기  (0) 2019.12.11
[R] symbols() 함수 사용 예시  (0) 2019.12.10
[R] treemap() 함수 사용 예시  (0) 2019.12.10
[R] RStudio에서 read.csv 후 한글 깨짐 현상 해결 방법 (영문 OS)  (0) 2019.12.10
[R] 고급 시각화 분석 - ggplot() 함수 사용 예시  (0) 2019.12.09
    '빅데이터/R' 카테고리의 다른 글
    • [R] 고급시각화 분석 - ggmap 패키지, 구글맵 지도 정보 이용하기
    • [R] symbols() 함수 사용 예시
    • [R] treemap() 함수 사용 예시
    • [R] RStudio에서 read.csv 후 한글 깨짐 현상 해결 방법 (영문 OS)
    young
    young

    티스토리툴바