일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- React
- barplot
- 값삭제
- 그래픽
- setstate
- asynchronization
- vetor
- 버스분석
- 광명시버스분석
- 10172
- DataFrame
- 백준 10172
- 이용현황분석
- 그대로 출력하기
- await
- 탈출문자
- plot in r
- 백준
- 배열추가
- 배열삭제
- 이스케이프시퀀스
- barplot in r
- useState
- react #회원가입 #비밀번호비교
- getline
- R 그래프
- 데이터분석
- 백준 11718
- R데이터형태
- 값추가
- Today
- Total
devlog_zz
textmining - wordcloud 본문
▶ textmining : 비정형 텍스트인 자연어를 자연어 처리기술로 의미 있는 정보 찾는 과정
▶ wordcloud : 텍스트에서 빈번히 사용된 키워드를 시각적으로 표시하는 텍스트마이닝 기법
① 기사 wordcloud 생성
###기사 textmining wordcloud ###
text<-"(서울=연합뉴스) 김승욱 기자 = 제19호 태풍 '솔릭'이 제주 서귀포에 접근했다. 모레 새벽에는 서울 주변을 통과할 전망이어서 철저한 대비가 필요하다.
22일 기상청에 따르면 이날 오전 9시 현재 '솔릭'은 제주 서귀포 남남동쪽 340㎞ 부근 해상으로 이동한 상태다.
강한 중형급 태풍인 '솔릭'의 강풍 반경은 380㎞에 달하고 중심기압은 950hPa(헥토파스칼)이다.
태풍 영향 반경 내에서 가장 바람이 센 곳의 풍속은 초속 43m(시속 155㎞)에 달한다.
현재 시속 19㎞로 서북서 방향으로 이동 중인 '솔릭'은 22일 밤부터 23일 아침 사이 제주도 서쪽 해상을 지나 23일 오후에는 서해 남부 해상까지 북상할 것으로 보인다.
이후 23일 늦은 밤 중부 서해안에 상륙한 뒤 24일 새벽 수도권 지역을 통과해 같은 날 오후에는 강원도 북부를 지나 동해 상으로 빠져나갈 것으로 예보됐다.
현시점에서 수도권 통과 예상 시점과 지역을 보면 24일 오전 4시께 서울 동남동쪽 20㎞ 부근 육상을 지날 것으로 예상된다.
한반도 전체가 태풍 영향권에 들면서 전국에 매우 강한 비바람이 몰아칠 것으로 예상된다.
특히 '솔릭'이 강한 세력을 유지한 채 서해 상을 따라 북상하고 우리나라가 태풍의 '위험 반원'(동쪽)에 포함되기 때문에 적지 않은 피해가 예상된다."
#install.packages("KoNLP") #패키지 설치 안했다면 설치하기
library(KoNLP) #자연어 처리 패키지
library(wordcloud)
useSejongDic()
nouns <- extractNoun(text) #명사만을 추출하기 위한 함수
nouns <-nouns[nchar(nouns)>=2] # nchar():단어의 글자수 세는 함수
# 변수 nouns에 있는 단어의 글자 수 가 2자 이상 되는 단어들만 검색
nouns <-gsub("텍스트마이닝.*","텍스트마이닝",nouns) #패턴을 검색하여 지정된 문자열로 대체하는 함수
nouns <-gsub("데이터마이닝.*","데이터마이닝",nouns)
#Gsub( 검색 문자열, 대체할 문자열 , 문자열 벡터)
#외래어인 경우 하나의 단어로 인식 못함
#텍스트 마이닝.* 에서 .은 임의의 글자를 나타내고 *는 0번 이상 나타내기 위해 사용한다.
#텍스트마이닝 다음에 조사가 올 수 있는데 0번 이상이므로 조사가 안 올 수도, 한번, 혹은 여러 번 올 수 있음을 나타냄
wordFreq<-table(nouns)
pal<-brewer.pal(6,"Dark2") #Brewer.pal( 워드 클라우드에서 나타낼 수 있는 색상의 개수, 컬러 팔레트이름)
( Accent , Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3)
windowsFonts(malgun=windowsFont("맑은고딕"))
set.seed(1000)
wordcloud(words=names(wordFreq),freq=wordFreq,colors=pal, min.freq=1,
random.order=F,family="malgun")
wordFreq<-table(nouns)
sort(wordFreq,decreasing=T)
barplot(wordFreq,las=2) #수평축과 수직으로 나타냄 1이면 수평축과 평행
### 연설문 wordcloud ( 파일 불러오는 ) ###
setwd("C:/Users/yeonjae/Desktop/R을 이용한 빅데이터 분석")
library(KoNLP)
library(wordcloud)
moon <- readLines("moon.txt")
useSejongDic()
mergeUserDic(data.frame(c('문재인','5·18','임을 위한 행진곡'),"ncn")) #새로운 단어 추가
nouns <- sapply(moon, extractNoun,USE.NAMES=F) # 벡터 혹은 리스트에 있는 각각의 원소에 대해 특정함수를 적용하기위해 사용하는 함수
nouns <- unlist(nouns)
nouns <- nouns[nchar(nouns)>=2]
nouns
#nouns <-gsub("하게","",nouns)
wordFreq<-table(nouns)
pal<-brewer.pal(10,"Spectral")
windowsFonts(malgun=windowsFont("맑은 고딕"))
set.seed(1000)
wordcloud(words=names(wordFreq),freq=wordFreq,scale=c(3,0.5),colors=pal,min.freq = 2,
random.order = F,family="malgun")
결과화면
③영문 파일 wordcloud
-> corpus를 생성해야함
#영문파일 textmining wordcloud
setwd("C:/Users/yeonjae/Desktop/R을 이용한 빅데이터 분석")
#install.packages("tm")
library(tm)
library(wordcloud)
textMining = readLines("textmining.txt")
myCorpus<- Corpus(VectorSource(textMining)) #corpus 생성
myCorpus <- tm_map(myCorpus,stripWhitespace) #공백제거
myCorpus <- tm_map(myCorpus,tolower) #소문자로 변환
myCorpus <- tm_map(myCorpus,removePunctuation) #구두점제거
myCorpus <- tm_map(myCorpus,removeNumbers) #숫자제거
myCorpus <- tm_map(myCorpus,removeWords,stopwords("english")) #관사제거
#myCorpus <- tm_map(myCorpus,PlainTextDocument)
tdm <- TermDocumentMatrix(myCorpus) #빈도수를 위한 행렬 생성
m<-as.matrix(tdm)
wordFreq<-sort(rowSums(m),decreasing=TRUE)
pal=brewer.pal(8,"Dark2")
set.seed(1234)
wordcloud(words=names(wordFreq),freq=wordFreq,scale=c(7,0.5),min.freq=2,colors=pal,
random.order = F)
임동훈.「R을 이용한 빅데이터 분석」.자유아카데미
'빅데이터 > R을 이용한 빅데이터분석' 카테고리의 다른 글
버스 노선별 이용 승객 현황분석 barplot() in r (0) | 2018.10.02 |
---|---|
연도별 요양 기관별 보험 청구 건수 분석 - plot() in r (0) | 2018.09.12 |
R 그래프 기초 2 - barplot() (1) | 2018.09.10 |
R 그래프 기초1 - plot() (1) | 2018.09.10 |
R 데이터 형태 ( vector, matrix, array, list, dataframe) (0) | 2018.08.31 |