티스토리 뷰




▶작업을 하기 위해선 필수 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)


2018.08.25_1차_수정_/미완료/
2018.08.27_2차_수정_/미완료/
2018.08.28_3차_수정_/완료/


댓글