티스토리 뷰
위 글에 이어 Text mining의 개념과 Wordcloud를 이용해 문서 데이터를 시각화하는 내용을 다룹니다.
Text mining
텍스트 마이닝(Text mining)은 다양한 포맷의 문서로 부터 데이터를 획득해 이를 문서별 단어의 매트릭스로 만들어, 추가 분석이나 데이터 마이닝 기법을 적용해 통찰을 얻거나 의사 결정을 지원하는 방법이다.
이때 사용되는 다양한 포멧의 문서란, 웹콘텐츠, PDF파일, 오피스파일, XML, 텍스트 파일 등을 말한다.
이들에서 텍스트를 추출해 하나의 레코드로 만들어 단어 구성에 따라 데이터 마트를 구성하고 데이터간의 관계를 바탕으로 감성분석이나 Wordcloud를 수행해 정보를 군집화 하거나 분류, 사회 연결망 분석에 활용할 수 있다.
R은 이를 위해 tm패키지를 지원하고 있다.
tm 패키지란?
tm은 R 에서 텍스트 마이닝을 하기위해 사용되는 기본적인 패키지이다. 이때 Corpus(코퍼스)라는 개념이 등장하는데, tm 에서는 문서를 관리하는 기본 구조로 문서 집합인 Corpus를 사용하기 때문이다.
Corpus란, 데이터가 정제, 통합, 선택, 변환 등의 과정을 거치면서 구조화된 형태로 Content와 Meta를 가지는 특정한 형태의 텍스트데이터 뭉치를 말한다.
tm 패키지 설치
먼저 tm 패키지를 설치합니다. 이어서 패키지 내부에 있는 txt 파일을 사용해 Corpus 형식으로 데이터를 적재한 뒤 텍스트 마이닝을 실행해 보겠습니다. (작업 디렉토리를 tm패키지가 설치된 디렉토리로 설정해야합니다.)
# 컴퓨터에 설치된 R 프로그램을 구성하는 시스템 파일에 접근
# tm 패키지에 texts 폴더에 접근한다
txt<-system.file("texts", package = "tm")
# Corpus 형식으로 txts폴더 내의 모든 txt 파일을 지정한 인코딩 방식으로 읽는다.
korea<-Corpus(DirSource(txt, encoding = "UTF-8"),
readerControl = list(language = "en"))
korea[[1]]
데이터 정제
이후 데이터 정제 과정을 진행합니다. 텍스트 파일안의 문장과 문장의 공백, 숫자, 구두점, 특수 기호 등의 요인을 제거해야 단어를 추릴수 있기 때문에 데이터 정제는 텍스트 마이닝에서 중요하고 반드시 필요한 단계입니다. 이러한 정제와 변환에 자주 사용되는 함수는 tm_map이며, 여러 옵션을 파라미터로 지정할 수 있습니다.
- stripWhitespace : 문장과 문장의 공백을 제거한다.
- tolower : 대문자를 소문자로 변경한다.
- removeWords : 특정단어를 제거한다.
- removePunctuation : 구두점을 제거한다.
- removeNumbers : 숫자를 제거한다.
...
# 문서를 Corpus클래스로 만들어 메모리에 저장한다.
# 현재 구동중인 R객체에만 영향(?)을 미친다.
korea<-VCorpus(VectorSource(korea))
# 문장과 문장의 공백을 제거한다.
korea<-tm_map(korea, stripWhitespace)
# 대문자를 소문자로 변경한다.
korea<-tm_map(korea, tolower)
# stopword(불용어)를 제거한다.
korea<-tm_map(korea, removeWords, stopwords("english"))
# 구두점을 제거한다.
korea<-tm_map(korea, removePunctuation)
# 숫자를 제거한다.
korea<-tm_map(korea, removeNumbers)
+ 불용어란?
자주 등장하지만 분석을 하는 것에 있어서는 큰 도움이 되지않는 단어들을 말한다. (ex.I, my, me, over, 조사, 접미사 등)
+ 어근이란?
단어를 분석할때 실질적 의미를 나타내는, 중심이 되는 부분이다. (ex. 어른스럽다의 '어른')
# 동적인 언어(어근)을 추출하는데에 사용되는 패키지
install.packages("SnowballC")
library(SnowballC)
# 어근만을 추출한다.
korea<-tm_map(korea, stemDocument)
TermDocumentMatrix
이어서 여러 문서에서 등장하는 각 단어들의 빈도를 행렬로 표현하는 작업이 필요합니다. DocumentTermMatrix(DTM) 함수나 TermDocumentMatrix(TDM) 함수를 이용합니다.
+ TDM과 DTM의 차이
# PlainTextDocument로 변환후 DocumentTermMatrix함수 적용이 가능하다
korea<-tm_map(korea, PlainTextDocument)
#kdtm<-TermDocumentMatrix(korea)
#kdtm
kdtm<-DocumentTermMatrix(korea)
kdtm
# 10회 이상 사용된 단어 출력
findFreqTerms(kdtm, 10)
WordCloud 시각화 하기
word cloud는 단어들을 구름모양으로 나열하여 시각화하는 패키지입니다.. 빈도가 높은 핵심단어일수록 가운데에 크게 표현되며 어떤 단어들이 자주 사용되었고 데이터에 어떤 의미들이 내포되어있는지 한눈에 알아볼 수 있어 유용합니다. 보통 색상관리를 위해 RCloreBrewer 패키지와 함께 사용됩니다.
# 화면 초기화
dev.off()
install.packages("wordcloud")
library(wordcloud)
w<-as.matrix(kdtm)
wordFreq<-sort(rowSums(w), decreasing = TRUE)
wordcloud(words=names(wordFreq), freq=wordFreq, min.freq = 5,
random.order = F) # 빈도가 큰단어를 중앙에 두도록함
- 표시할 단어의 최소 빈도수(min.freq)를 2로 지정한 예제
감사합니다.
2022년 AI분석을 위한 R통계교육의 수업내용을 정리한 글입니다.
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.
'R' 카테고리의 다른 글
[R] 빅데이터 분석 기법 (0) | 2022.07.07 |
---|---|
[R] 데이터 시각화 - googleVis (0) | 2022.07.06 |
[R] 데이터 시각화 - ggmap (0) | 2022.07.05 |
[R] 데이터 시각화 - ggplot2 (0) | 2022.07.04 |
[R] 데이터 시각화 - 그래프 활용과 Plot (0) | 2022.06.30 |