티스토리 뷰
1.데이터 수집
빅카인즈(https://www.bigkinds.or.kr)
한국언론진흥재단에서 관리하는 신문기사 빅데이터 서비스 플랫폼
우리나라 신문 기사들로부터 주요인물, 주요 키워드, 주요 이슈 등을 볼 수 있음.
사용 데이타셋 :코로나 관련 뉴스 검색
covid19_news_202001.csv
6.69MB
2. 데이터 불러오기
- 한글이 꺠어져 나올때는 CSV 파일을 utf-8 csv 파일로 저장후 불러온다.
- tools > project Option > code encoding 에서 text encoding이 UTF-8인지 확인

data <- readLines("covid19_news_202001.csv")
head(data)
첫 행 [1] "키워드" 삭제
data <- data[-1]
특수문자 삭제
data <- gsub(pattern = ",", replacement = " ", x=data)
data <- gsub(pattern = "[[:digit:]]",replacement =" ", x = data)
data <- gsub(pattern = "[[:upper:]]",replacement =" ", x = data)
3. 텍스트 정형화 하기 (tm 패키지 사용)
install.packages("tm")
library(tm)

> getSources()
[1] "DataframeSource" "DirSource" "URISource" "VectorSource" "XMLSource"
[6] "ZipSource"
# 코퍼스 : Corpus( )
docs <- Corpus(VectorSource(data))
#docs 실행시키면 4832개의 문서 집합으로 구성 됨을 확인 (리스트 인덱싱) [[1]]$Contents
> docs
<<SimpleCorpus>>
Metadata: corpus specific: 1, document level (indexed): 0
Content: documents: 483
> docs[[1]]$content
[1] "\"접촉 확진자 판정 수원 어린이집 교사 음성 감염증 신종 코로나바이러스 폐렴 확진자 밀접 접촉 보육교사 수원시 시립 금호어린이집 보육 교사 정밀검사 음성 판정 확인 수원시 이날 보육 교사 음정판정 검체 검사 결과 음정 판정 씨 일 시 시 시간 확진자 저녁식사 주거지 의왕시 확진자 씨 사촌지간 확인 질별관리본부 이날 씨 어머니 밀접접촉 사실 연락 씨 어린이집 원장 수원시 보고 수원시 어린이집 조치 잠정 폐쇄 어린이들 귀가 방역 상태 의왕시보건소 씨 검체 채취 경기도보건환경연구원 검사 의뢰 씨 어린이집 영아 세 어린이집 유아 재원 영아 명 교사 원장 포함 명 어린이집 원아 보육교사 상태 확인 자체적 밀착 관리 안양시 씨 확진자 자리 씨 언니 정황 포착 언니 근무 안양시 석수동 위치 어린이집 휴원 조치 상태 씨 언니 실제 별도 확인\""
# DTM : DocumentTermMatrix()
dtm <- DocumentTermMatrix(docs)
> dtm
<<DocumentTermMatrix (documents: 4832, terms: 33784)>>
Non-/sparse entries: 513345/162730943
Sparsity : 100%
Maximal term length: 29
Weighting : term frequency (tf)
# 빈도 확인 : inspect()
inspect(dtm[1:5, 1:10])
# 빈도 합계 : colSums()
terms <- colSums(as.matrix(dtm))
#내림차순 정렬
terms <-terms[order(terms, decreasing = TRUE)]
#상위 200개의 단어집합 생성
terms.freq <- terms[1:200]
#한글자는 삭제 후 재할당
terms.freq <-terms.freq[!(nchar(names(terms.freq))==1)]

4. 데이터 시각화 하기 (워드 클라우드)
wordcloud2패키지는 단어와 빈도를 담은 데이터프레임을 기반으로 워드클라우드를 표현해주는 패키지
install.packages("wordcloud2")
library(wordcloud2)
#데이타프레임 만들기 - (단어명, 빈도수)
wc <- data.frame(words = names(terms.freq), freq = terms.freq)
# 행이름 변경 : rownames()
rownames(wc) <- c(1:nrow(wc))

#wordcloud 시각화 하기
wordcloud2(wc)
wordcloud2(wc)
wordcloud2(wc, size = 0.7) #사이즈
wordcloud2(wc, size = 0.5, shape = "star") #사이즈, shape

Usage
wordcloud2(data, size = 1, minSize = 0, gridSize = 0,
fontFamily = 'Segoe UI', fontWeight = 'bold',
color = 'random-dark', backgroundColor = "white",
minRotation = -pi/4, maxRotation = pi/4, shuffle = TRUE,
rotateRatio = 0.4, shape = 'circle', ellipticity = 0.65,
widgetsize = NULL, figPath = NULL, hoverFunction = NULL)
Arguments
- data : 각 열에 단어와 freq를 포함하는 데이터 프레임
- size : 글꼴 크기, 기본값은 1
- minSize : 부제의 문자열
- gridSize : 캔버스의 가용성을 표시하는 그리드 크기(픽셀)
- fontFamily : 사용할 글꼴
- fontWeight : 글꼴두께(예: 일반, 굵게 또는 600)
- color ; 텍스트 색상, 키워드 'dark-dark' 및 'dark-light'를 사용할 수 있습니다. 색상 벡터도 이 파라미터에서 지원됩니다.
- backgroundColor :배경색
- minRotation ; 단어가 회전해야 하는 경우 텍스트의 최소 회전
- maxRotation : 단어가 회전해야 하는 경우 텍스트가 회전하는 최대 회전(라드 단위)
- shuffle : 같은 목록과 설정에 대해 매번 결과가 달라지도록 그릴 점을 섞습니다.
- rotateRatio :단어가 회전할 확률입니다. 항상 회전하려면 숫자를 1로 설정합니다.
- shape : 모양 ('circle' (default), 'cardioid' (apple or heart shape curve, the most known polar equation), 'diamond' (alias of square), 'triangle-forward', 'triangle' 'pentagon', 'star'.
- ellipticity : 타원성
- widgetsize : size of the widgets
- figPath : 마스크로 사용되는 그림의 경로
- hoverFunction : 자바스크립트 호버 기능
참고 : 데모 데이터 셋 demoFreq로 연습 해 보기
wordcloud2(demoFreq)
wordcloud2(demoFreq, fontFamily = "맑은 고딕",
color = "random-light",
backgroundColor = "grey",
size=0.5)
wordcloud2(demoFreq, fontFamily = "맑은 고딕",
shape="circle",
color = "random-light",
size=0.5)
wordcloud2(demoFreq, fontFamily = "맑은 고딕",
shape="circle",
color = "random-dark",
size=0.5)
wordcloud2(demoFreq, fontFamily = "맑은 고딕",
shape="star",
size=0.5)
wordcloud2(demoFreq,
fontFamily = "맑은 고딕",
shape="diamond",
size=0.5)


728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
반응형