일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AI
- 알버트
- 패캠챌린지
- 직장인자기계발
- 패스트캠퍼스후기
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 직장인인강
- 패스트캠퍼스
- R
- albert
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- SKT
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- Today
- Total
제주 탈출 일지
빅데이터 분석 - tm패키지를 사용하여 영어 비정형 데이터 분석 본문
이번 포스팅에서는 R을 통해 영어 비정형 데이터를 분석해보겠다. 아래 파일은 스티브 잡스의 연설문이다.
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에 인자들을 집어넣으면
결과는 다음과 같은 그림을 얻을 수 있다.

'빅데이터 분석' 카테고리의 다른 글
빅데이터 분석 - 네이버 실시간 검색어 & 코스피 지수 데이터 크롤링 (0) | 2020.10.02 |
---|---|
빅데이터 분석 - R 웹크롤링 포스팅 정리 (0) | 2020.09.30 |
빅데이터 분석 - 선형 그래프 그리기 (0) | 2020.09.24 |
빅데이터 분석 - csv파일을 읽어 barplot 그래프 그리기 (0) | 2020.09.19 |
빅데이터 분석 - 비정형 데이터 처리(wordcloud2) (0) | 2020.09.08 |