2019년 8월 22일 목요일

Chp3. WORD_CLOUD - 1

본론
1-1 비정형데이터

1-1-1 비정형 data의 word cloud 생성하기
material_jeju.txt_RColorBrewer
-->text mining을 이용해 추출한 데이터를 다수로 노출된 항목에 대해 큰글씨로 나타내는것

jeju.txt 파일을 이용해서 많이 사용된 단어를 정형 data로 만들기

step - 1 - 작업디렉토리 지정
prepare 부분을 참조해서 working directory를 지정

step - 2 - 필수 package설치

==========================
설치된 package 관리
list <- installed.packages()
-->List object 를 생성해서 값을 담음
write.table(list,"list.txt")
-->Working Directory 에 설치한 list object의 값을 모두 담음
list.txt 파일을 이용해서 설치된 package를 검색한다
==========================


install.packages("rJava")
install.packages("memo")
install.packages("KoNLP")
install.packages("wordcloud")
install.packages("RColorBrewer")
-->해당 명령어를 치면 설치는 안되고 download 까지만 진행한다
-->이때 다운로드 받은 경로에 파일을 WD 에 복사해서 다음명령어로 설치한다install
-->install.packages("RColorBrewer_1.1-2.zip", repos = NULL)
JDK 설치
-->rJava 패키지를 load 하면 javahome 으로 Error 가 발생한다
JDK를 https://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 설치후 system 변수에 JAVA_HOME 과 경로를 넣는다

library(rJava)
library(KoNLP)
library(wordcloud)
useSejongDic()
-->한글을 대상으로 word cloud 를 생성할때 사용해야함

추출을 원하는 단어를 선정해서 dictionary에 추가해둔다

mergeUserDic(data.frame("주상절리","ncn"))
-->1 words were added to dic_user.txt.
-->사용자 dic에 단어가 추가됨
mergeUserDic(data.frame("협재해변","ncn"))
mergeUserDic(data.frame("성산일출봉","ncn"))
mergeUserDic(data.frame("섭지코지","ncn"))
mergeUserDic(data.frame("천지연폭포","ncn"))
mergeUserDic(data.frame("우도","ncn"))
mergeUserDic(data.frame("산방산","ncn"))
mergeUserDic(data.frame("중문관광단지","ncn"))
mergeUserDic(data.frame("잠수함","ncn"))
mergeUserDic(data.frame("러브랜드","ncn"))
mergeUserDic(data.frame("용두암","ncn"))
mergeUserDic(data.frame("신비의도로","ncn"))
mergeUserDic(data.frame("한라산","ncn"))
mergeUserDic(data.frame("오설록","ncn"))
mergeUserDic(data.frame("유리의성","ncn"))
mergeUserDic(data.frame("한림공원","ncn"))
mergeUserDic(data.frame("용머리해안","ncn"))
mergeUserDic(data.frame("해수욕장","ncn"))
mergeUserDic(data.frame("중문","ncn"))
mergeUserDic(data.frame("제주민속촌","ncn"))
mergeUserDic(data.frame("외돌개","ncn"))
mergeUserDic(data.frame("에코랜드","ncn"))

step - 3 - 분석용데이터를 변수로 읽기
txt <- readLines("jeju.txt")
-->txt를 입력해 object에 잘 들어갔는지 확인한다

step - 4 - 데이터중에서 명사만 골라서 nouns 변수에 할당
-->데이터에서 한글 명사만 골라서 사용하자

place <- sapply(txt,extractNoun,USE.NAMES=F)
place
-->txt로 받은 각각의 줄에서 명사만 뽑아온다
--> 1006번 line 은 "두 곳을 견주어 후회가 없었답니다." 인데 place object 에서 1006번줄은 "두"   "곳"   "후회"로 분석된것을 알수있다

step - 5 - 명사 확인
head(unlist(place),30)

[1] "제주"             "여행"             "코스"         
[4] "숙소"             "어디"             "지"           
[7] "수"               "대략적"           "제주"         
[10] "여행"             "일정"             "필요"         
[13] "없구요.."         "제주"             "여행"         
[16] "준비"             "도움"             "합니"         
[19] "●"               "제주"             "관광지"       
[22] "입장료"           "모바일할인쿠폰을" "이용"         
[25] "하시"             "할인"             "수"           
[28] "6월4일부터"       "징검다리"     

c <- unlist(place)
place <- Filter(function(x) {nchar(x) >=2} ,c)
-->두글자 이상되는 data대상으로만 filtering

step - 6 - 원하지 않는 내용 걸러내기
-->gsub 함수 문법("변경전 글자","변경후 글자","원본데이터")
place <- gsub("\\d+","",place)
-->모든 숫자를 없앤다
place <- gsub("제주","",place)
place <- gsub("통운","",place)
place <- gsub("전국","",place)
place <- gsub("체인","",place)
place <- gsub("업체","",place)
place <- gsub("질문","",place)
place <- gsub("가격","",place)
place <- gsub("무난","",place)
place <- gsub("여행","",place)
place <- gsub("검색","",place)
place <- gsub("코스","",place)
place <- gsub("숙소","",place)
place <- gsub("준비","",place)
place <- gsub("다운로드","",place)
place <- gsub("조회수","",place)
place <- gsub("추천수","",place)
place <- gsub("답변수","",place)
place <- gsub("조회수","",place)
place <- gsub("추천수","",place)
place <- gsub("추천","",place)
place <- gsub("답변수","",place)
place <- gsub("첫째날","",place)
place <- gsub("좋음","",place)
place <- gsub("좋구요","",place)
place <- gsub("이런거","",place)
place <- gsub("둘째날","",place)
place <- gsub("셋째날","",place)
place <- gsub("세쨋날","",place)
place <- gsub("토요일","",place)
place <- gsub("일요일","",place)
place <- gsub("시간","",place)
place <- gsub("항공","",place)
place <- gsub("관광지","",place)
place <- gsub("입장료","",place)
place <- gsub("저가","",place)
place <- gsub("항공사","",place)
place <- gsub("도움","",place)
place <- gsub("대략","",place)
place <- gsub("요금","",place)
place <- gsub("이용","",place)
place <- gsub("공항","",place)
place <- gsub("해안","",place)
place <- gsub("드라이브","",place)
place <- gsub("경유","",place)
place <- gsub("바다","",place)
place <- gsub("전망","",place)
place <- gsub("하루","",place)
place <- gsub("랜트카","",place)
place <- gsub("하시","",place)
place <- gsub("예약","",place)
place <- gsub("사진","",place)
place <- gsub("위치","",place)
place <- gsub("필요","",place)
place <- gsub("할인","",place)
place <- gsub("출발","",place)
place <- gsub("가능","",place)
place <- gsub("소요","",place)
place <- gsub("일정","",place)
place <- gsub("하게","",place)
place <- gsub("근처","",place)
place <- gsub("중간","",place)
place <- gsub("다양","",place)
place <- gsub("첫날","",place)
place <- gsub("도착","",place)
place <- gsub("용머","",place)
place <- gsub("리","",place)
place <- gsub("바위","",place)
place <- gsub("유명","",place)
place <- gsub("정도","",place)
place <- gsub("이동","",place)
place <- gsub("무료","",place)
place <- gsub("체험","",place)
place <- gsub("둘째","",place)
place <- gsub(" ","",place)
place <- gsub("\\d+","",place)

step - 7 - 파일 저장후 테이블로 변환
write(unlist(place),"jeju_2.txt")

step - 8 - 수정 완료파일을 table 로 변환후 object생성
rev <- read.table("jeju_2.txt")

step - 9 - txt 형태로 확인
nrow(rev)
-->데이터 건수 확인

wordcount <- table(rev)
rev 변수를 table 형태로 바꿔서 wordcount object 생성

head(sort(wordcount,decreasing=T),30)
rev
  우도     주상절     박물관   섭지코지       중문     산방산       녹차
18         12         11         10         10          9          8
  에코랜드 성산일출봉       신창       일출       정상       대장     송악산
8          7          7          7          7          6          6
  식당     오설록     용두암       주도       폭포       풍경   해수욕장
6          6          6          6          6          6          6
  관광       구석     렌트카     분화구       산책       생각   신라호텔
5          5          5          5          5          5          5
  야간       연폭
5          5

step - 10 - Word Cloud 형태로 출력
library(RColorBrewer)

palete <- brewer.pal(9,"Set1")
-->글자색 지정

wordcloud(names(wordcount),freq=wordcount,scale=c(5,1),rot.per=0.24,min_freq=1,random.order=F,random.color=T,color=palete)
-->최소 한번은 언급된 data를 기반으로 word cloud 생성하기
Step - 6에서 제외할 단어를 잘 정리하면 결과물이 더 깔끔하게 나온다

savePlot("1-1-1.png",type="png")


댓글 없음:

댓글 쓰기