제주 탈출 일지

빅데이터 분석 - tm패키지를 사용하여 영어 비정형 데이터 분석 본문

빅데이터 분석

빅데이터 분석 - tm패키지를 사용하여 영어 비정형 데이터 분석

귀건 2020. 9. 28. 14:03
728x90
반응형

 

이번 포스팅에서는 R을 통해 영어 비정형 데이터를 분석해보겠다. 아래 파일은 스티브 잡스의 연설문이다.

steve.txt
0.01MB

Step 1.  데이터를 불러온다.

setwd("C:\\Rwd")
data1 <- readLines("steve.txt")
data1

setwd로 작업 디렉토리를 설정한다.

그 후 그 디렉터리에 있는 스티브 잡스의 연설문인 steve.txt를 readLines를 통해 읽어오게 된다.

data1을 살펴보게 되면 줄 단위로 일어오기 때문에 "" 이렇게 아무것도 없는 데이터들이 보이게 된다.

 

Step 2. 데이터를 말뭉치로 변환한다.

corp1 <- VCorpus(VectorSource(data1))
corp1
inspect(corp1)

텍스트 마이닝 패키지인 tm에서 문서를 관리하는 기본구조를 Corpus라 부르며, 이는 텍스트 문서들의 집합을 의미한다고 한다.

VCorpus(VectorSource(data1))에서 먼저 VectorSource()는 벡터를 문서로 바꿔준다. 그 문서에 대한 내용을 하나하나 VCorpus의 항목으로 인식한다.  corp1을 확인해보면 다음 그림처럼 59개의 document가 있는 것을 확인할 수 있다.

 

inspect(corp1)을 해보면 , [[1]] 항목에 char45개와 메타데이터 7이 들어있는 것을 확인해볼 수 있다. 메타데이터는 생성 연월일 시간 항목을 포함하고, char는 readLines로 구분한 한줄한줄의 데이터라는 것을 알 수 있을 것이다.(readLines도 마지막 데이터 번호가 59이다.)

 

(참고로 corp1[[59]]$content 이런형태로 명령어를 입력하면, 59번 항의 content값이 나오게 된다.)

 

Step 3. 데이터를 정제한다.

#공백제거
 corp2 <- tm_map(corp1,stripWhitespace) 
#소문자 변경 
 corp2 <- tm_map(corp2,tolower)
#숫자 제거 
 corp2 <- tm_map(corp2,removeNumbers) 
# 구두점 제거
 corp2 <- tm_map(corp2,removePunctuation) 
# 문서를 서식없는 텍스트(PlainText)로 변경
 corp2 <- tm_map(corp2,PlainTextDocument) 
 # 불용어제거
 stopword2 <- c(stopwords('en'),"and","but")
 corp2 <- tm_map(corp2,removeWords,stopword2) 
 
 corp3 <- TermDocumentMatrix(corp2,control=list(wordLengths=c(1,Inf)))

tm_map으로 데이터를 정제한다.

stopwords(Return various kinds of stopwords with support for different languages.) 여기서 stopword는 불용어를 의미하는데, 단어 토큰 중 큰 의미를 가지지 않는 것을 말한다.

 

그 후 특정 단어 이상만으로 매트릭스를 만든다. corp3를 확인해보면 다음과 같은 데이터를 확인할 수 있다.

Step 4.  자주 나오는 단어에 대한 파악 및 정리를 진행한다.

 findFreqTerms(corp3, 10)
 findAssocs(corp3, "apple", 0.5)
 
 corp4 <- as.matrix(corp3)
 corp4
 
 freq1 <- sort(rowSums(corp4), decreasing=T)
 freq2 <- sort(colSums(corp4), decreasing=T)
 head(freq2, 20)

findFreqTerms는 단어-문서, 문서-단어 행렬에 대해 최소 혹은 최대로 나온 단어를 찾아준다. 여기서는 corp3에 대해서 최소 10번 이상 나온 단어를 찾아 주며 그 단어는 "college", "life"이다.

https://thebook.io/006723/ch10/07/04/

 

R을 이용한 데이터 처리 & 분석 실무: 빈번한 단어

 

thebook.io

findAssocs는 주어진 단어와 연관될 확률이 높은 단어를 찾는다. 서로 상관 계수가 높은 단어는 연관될 가능성이 높다.

https://thebook.io/006723/ch10/07/05/

 

R을 이용한 데이터 처리 & 분석 실무: 단어 간 상관관계

 

thebook.io

이후  corp4를 행렬로 변환하고, rowSum과 colSum하여 내림차순 정렬하는데, rowSum은 단어의 빈도수, colSum은 문자의 수를 의미하게 된다.

 

Step 5. wordcloud를 활용하여 시각화한다.

 

 dim(corp4)
 
 colnames(corp4) <- c(1:59)
 library(RColorBrewer)
 library(wordcloud)
 palete <- brewer.pal(7, "Set3")
 wordcloud(names(freq1),freq=freq1,scale=c(5,1),min.freq=5,colors=palete,
            random.order=F, random.color=T)

dim으로 corp4의 차원을 살펴볼 수 있다.

 

그후 colnames를 하면 corp4의 차원의 column 이름들이 1부터 59까지의 숫자로 변하게 된다. corp4를 확인해보자.

 

brewer.pal()함수를 통해 색을 설정하고, wordcloud에 인자들을 집어넣으면

결과는 다음과 같은 그림을 얻을 수 있다.

                             

                  

728x90
반응형
Comments