티스토리 뷰
▶작업을 하기 위해선 필수 library 를 등록해야한다. 1번창에 library(KoNLP)를 친후 Ctrl + Enter 해보자.
▶그런데 2번창을 보면 에러가 뜨는데 패키지를 등록 안해서 그렇다. 패키지를 먼저 등록하자.
▶사진에 보이는 것처럼 친후 Ctrl + Enter 해서 등록하자. 오래 걸릴 수도 있다.
▶그런다음 library를 Ctrl + Enter 등록하자.
library(KoNLP)
library(wordcloud)
useSejongDic()
저는 문재인 대통령께서 연설하신 문장을 가져와서 해보겠습니다.
글자 수를 확인하고 싶은 글을 복사해서 메모장에 붙여넣기 한 후 저장합니다. 이름은 아무 상관없습니다.
저는 문재인 대통령님과 관련이 있으므로 moon.txt 파일로 저장하겠습니다.
▶파일을 업로드 해주자
▶파일이 업로드 된걸 볼 수 있다.
▶moon.txt 에 변수를 준다
▶moon.txt는 원하는 내용을 모두 Ctrl + C, Ctrl + V 해서 모은 txt 파일이다.
moon <- readLines("moon.txt")
이 작업은 텍스트파일을 읽기 쉽게 할당을 준겁니다. 이렇게 해주면 RStudio 내에서 moon 만 쳐도 연설문을 복사 붙여넣기한 moon.txt 파일을 읽을 수 있습니다.
▶ head(moon)
가장 앞 6개만 불러오는 명령어[?]입니다. 보시는 바와 같이 첫 문장과 다섯 번째 문장을 불러왔고 나머지는 빈줄인가 보군요.
▶ nouns <- sapply(moon , extractNoun, USE.NAMES=F)
명사만 추출해 내는 명령어[?]입니다. 저는 moon 객체에 할당을 줬으니 moon을 넣었지만 다르게 하신분은 다르게 넣으시면 됩니다.
굳이 nouns 로 할당을 안주셔도 됩니다. 다른 이름하셔도 되요.
다섯 번째 줄에 문장이 아닌 명사만 나온 것을 볼 수 있습니다. 이제 이걸 보기좋게 정리해야합니다.
▶c <- unlist(nouns) ▶ 필터링을 위해 unlist 작업을 해서 저장
▶nouns <- Filter(function(x) {nchar(x) >= 2} , c) ▶ 두 글자 이상 되는 것만 필터링하기
▶nouns <- gsub("\\d+","",nouns) ▶숫자를 공백으로 만든다
하나씩 따라해보면 왜 했는지 이해 되실 겁니다. 이제 필요없는 내용을 삭제해야됩니다. 보통 gsub 을 쓰게됩니다.
gsub은 삭제하고 싶은 내용을 공백으로 만들어주는데, nouns <- Filter(function(x) {nchar(x) >= 2} , c) 이걸 사용해서 공백도 없애주면 됩니다.
이제 필요없는 내용들을 없애줍시다. 노가다가 필요합니다.
nouns <- gsub("\\(","",nouns) ▶괄호를 공백으로 만든다
nouns <- gsub("\\)","",nouns) ▶다는 괄호를 공백으로 만든다
nouns <- gsub("[A-Za-z]","",nouns) ▶영어를 공백으로 만든다
nouns <- gsub("거리","",nouns) ▶원하는 단어(거리)을 공백으로 만든다
nouns <- gsub("여행","",nouns)
nouns <- gsub("위치","",nouns)
nouns <- gsub("다양","",nouns)
nouns <- gsub("시간","",nouns)
nouns <- gsub("방문","",nouns)
nouns <- gsub("하나","",nouns)
nouns <- gsub("이곳","",nouns)
nouns <- gsub("들이","",nouns)
place <- str_replace_all(cdata,"[^[:alpha:]]","")
▶ 한글과 영어를 제외한 모든 글자 삭제
wordcount <- table(unlist(nouns)) ▶단어 수를 카운터한다
head(sort(wordcount, decreasing = T), 30) ▶오름차순으로 30개 카운트한다
sort(wordcount, decreasing = T) ▶오른차순으로 모두 카운트한다
이렇게 단어 정리는 끝났습니다.
library(RColorBrewer) ▶색상을 불러올 수 있게 등록해준다
display.brewer.all() ▶색상정보를 본다
많은 단어들을 한 화면에 띄웠을 때 똑같은 색깔이면 보기가 안좋습니다. 마음에 드는 빠레트[?]를 선택합시다.
이걸보고 원하는 색상정보를 선택하면 되는데,'만약에 RdBu 빠레트가 마음에 든다' 싶으면
pal <- brewer.pal(11, "RdBu") ▶ "RdBu" 색상정보를 등록한다
이렇게 하면 됩니다. 11은 빠레트 색깔 수가 11개라는 겁니다.
wordcloud(names(wordcount), freq = wordcount, scale = c(2, 0.6), min.freq = 4, random.order = F, random.color = T, rot.per = F, colors = pal)
▶ wordcloud()를 활용하여 글자수를 띄우는건데... 아니 저게 뭐죠..? ㅋㅋㅋ 왜 저렇게 뜨지? 이상하네요.
다른거 해볼 때는 다 괜찮았는데 .. ㅋㅋㅋㅋ 배운걸 정리해놓을려고 했는데 왜 저렇게 뜨는지는 모르겠네요 ㅠ
▶ wordcloud() 함수 사용법
words # 출력할 단어들
freq # 언급된 빈도수
scale # 빈도가 가장 큰 단어와 가장 빈도가 작은단어 폰트 사이즈
min.freq # 최소언급횟수지정 - 이 값 이상 언급된 단어만 출력
max.words # 최대언급횟수지정. 이 값 이상 언급되면 삭제
random.order # True : 랜덤배치, False : 언급횟수가 큰단어를 중앙에
random.color # True : 랜덤, False : 빈도순
rot.per # 90도 회전해서 보여줄 단어 비율
colors # 출력될 단어들의 색상을 지정
ordered.colors # 이 값을 true 로 지정할 경우 각 글자별로 색상을 순서대로 지정
use.r.layout # 이 값을 false 로 할 경우 R 에서 c++ 코드를 사용할 수 있다
여기서부턴 딱히 쓸모없는 내용입니다
# 제주도 여행지 추천 #
library(KoNLP)
library(wordcloud)
library(stringr) # <- 패키지를 로딩합니다
useSejongDic()
mergeUserDic(data.frame(readLines("제주도여행_단어추가.txt"), "ncn"))
txt <- readLines("jeju.txt")
place <- sapply(txt,extractNoun,USE.NAMES=F)
place
head(unlist(place), 30)
cdata <- unlist(place)
place <- str_replace_all(cdata,"[^[:alpha:]]","")
place <- gsub(" ","", place)
txt <- readLines("제주도여행_제거목록.txt")
txt
cnt_txt <- length(txt)
cnt_txt
for( i in 1:cnt_txt) {
place <-gsub((txt[i]),"",place)
}
place
c <- unlist(place)
place <- Filter(function(x) {nchar(x) >= 2} ,c)
wordcount <- table(place)
head(sort(wordcount, decreasing=T),30)
# 가장 추천 수가 많은 상위 10개를 골라서 pie 형 그래프로 출력합니다.
top10 <- head(sort(wordcount, decreasing=T),10)
pie(top10,main="제주도 추천 여행 코스 TOP 10")
pie(top10,col=rainbow(10),radius=1,main="제주도 추천 여행 코스 TOP 10")
pct <- round(top10/sum(top10) * 100 ,1)
names(top10)
lab <- paste(names(top10),"\n",pct,"%")
pie(top10,main="제주도 추천 여행 코스 TOP 10",col=rainbow(10), cex=0.8,labels = lab)
bchart <- head(sort(wordcount, decreasing=T),10)
bchart
bp <- barplot(bchart, main = "제주도 추천 여행 코스 TOP 10 ", col = rainbow(10),
cex.names=0.7, las = 2,ylim=c(0,25))
pct <- round(bchart/sum(bchart) * 100 ,1)
pct
text(x = bp, y = bchart*1.05, labels = paste("(",pct,"%",")"), col = "black", cex = 0.7)
text(x = bp, y = bchart*0.95, labels = paste(bchart,"건"), col = "black", cex = 0.7)
barplot(bchart,main="제주도 추천 여행 코스 Top 10",col=rainbow(10),
xlim=c(0,25),cex.name=0.7,las=1,horiz=T)
text(y = bp, x = bchart*0.9, labels = paste(bchart,"건"), col = "black", cex = 0.7)
text(y = bp, x = bchart*1.15, labels = paste("(",pct,"%",")"), col = "black", cex = 0.7)
# 3D Pie Chart 생성하기
install.packages("plotrix")
library(plotrix)
th_pct <- round(bchart/sum(bchart) * 100,1)
th_names <- names(bchart)
th_labels <- paste(th_names,"\n","(",th_pct,")")
pie3D(bchart,main="제주도 추천 여행 코스 Top 10",col=rainbow(10),
cex=0.3,labels=th_labels,explode=0.05)
'컴퓨터 언어 공부 > RStudio' 카테고리의 다른 글
만약 마우스 우클릭이 안되서 소스를 못가져 온다면? (0) | 2018.08.23 |
---|---|
RStudio 크롤링 간단 방법 정리 (뉴스 기사로 설명) (1) | 2018.08.22 |