본문 바로가기

카테고리 없음

11일차 - 4월 25일

텍스트마이닝

 

# r 4.1버전 기준으로 사용 가능
install.packages("remotes")
library(remotes)
remotes::install_github("mrchypark/multilinguer")
library(multilinguer)
multilinguer::install_jdk()
install.packages(c('stringr', 'hash','tau','Sejong','RSQLite','devtools'), type = "binary")
remotes::install_github("haven-jeon/KoNLP",upgrade = 'never',INSTALL_opts=c("--no-multiarch"))
library(KoNLP)
library(dplyr)
useNIADic()

txt <- readLines("C:\\rstudy\\day8\\data\\Data\\hiphop.txt")
head(txt)
#특수문자 제거
library(stringr)
txt <- str_replace_all(txt, "\\W", " ")#txt데이터의 \를 띄어쓰기로 표현
txt
#명사 추출하기
extractNoun("대한민국의 영토는 한반도와 그 부속도서로 한다")
#가사에서 명사추출
nouns <- extractNoun(txt)
#추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성, 테이블함수는 list형태를 사용할 수 없으므로 벡터형태로 바꿔야함->unlist함수, 
wordcount <- table(unlist(nouns))
#데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
head(df_word)
#변수명 수정
df_word <- rename(df_word, word = Var1, freq = Freq)
#두 글자 이상 단어 추출
df_word <- filter(df_word, nchar(word) >= 2)#특정 컬럼에 있는 데이터 문자 개수를 반환시켜줌-> nchar함수
top_20 <- df_word %>% arrange(desc(freq)) %>% head(20) #빈도수에 따라 정렬시키는데 내림차순으로 정렬한 후 상위 20개만 꺼내서 재저장 
top_20

install.packages("wordcloud")
library(wordcloud)
library(RColorBrewer)
pal <- brewer.pal(8,"Dark2")#dark2색상 목록에서 8개 색상 추출(8 숫자 함부로 바꾸지 않기)
#워드 클라우드 생성
set.seed(1234)#난수 고정
wordcloud(words = df_word$word,    #단어
          freq = df_word$freq,     #빈도
          min.freq = 2,            #최소 단어 빈도
          max.words = 200,         #표현 단어 수
          random.order = F,        #고빈도 단어 중앙 배치
          rot.per = .1,            #회전 단어 비율
          scale = c(4,0.3),        #단어 크기 범위
          colors = pal)            #색깔 목록

pal <- brewer.pal(9,"Blues")[5:9]#색상 목록 생성
set.seed(1234)
wordcloud(words = df_word$word,    
          freq = df_word$freq,     
          min.freq = 2,            
          max.words = 200,         
          random.order = F,        
          rot.per = .1,            
          scale = c(4,0.3),        
          colors = pal)  

twitter <- read.csv("C:\\rstudy\\day8\\data\\Data\\twitter.csv", 
                    header = T,
                    stringsAsFactors = F,
                    fileEncoding = "UTF-8")
#변수명 수정
twitter <- rename(twitter,
                  no = 번호,
                  id = 계정이름,
                  date = 작성일,
                  tw = 내용)
#특수문자 제거
twitter$tw <- str_replace_all(twitter$tw, "\\W", " ")
head(twitter$tw)
#트윗에서 명사 추출
nouns <- extractNoun(twitter$tw)
#추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성
wordcount <- table(unlist(nouns))
#데이터 프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
#변수명 수정
df_word <- rename(df_word,
                  word = Var1,
                  freq = Freq)
df_word <- filter(df_word, nchar(word) >= 2)
top20 <- df_word %>% 
  arrange(desc(freq)) %>% 
  head(20)
top20
library(ggplot2)
order <- arrange(top20, freq)$word
ggplot(data = top20, aes(x = word, y = freq))+
  ylim(0,2500) + 
  geom_col() + 
  coord_flip() + 
  scale_x_discrete(limit = order) + 
  geom_text(aes(label = freq), hjust = -0.3)
pal <- brewer.pal(8,"Dark2")
set.seed(1234)
wordcloud(words = df_word$word,    
          freq = df_word$freq,     
          min.freq = 10,            
          max.words = 200,         
          random.order = F,        
          rot.per = .1,            
          scale = c(6,0.2),        
          colors = pal) 



txt <- readLines("C:\\rstudy\\day8\\data\\Data\\new_myray.txt")
head(txt)
txt <- str_replace_all(txt, "\\?", "")
txt <- str_replace_all(txt, "l?", " ")
txt
nouns <- extractNoun(txt)
wordcount <- table(unlist(nouns))
df_word <- as.data.frame(wordcount,stringsAsFactors = F)
df_word <- rename(df_word, word = Var1,
                  freq = Freq)
df_word <- filter(df_word, nchar(word) >= 2)
top_20 <- df_word %>% 
  arrange(desc(freq)) %>% 
  head(20)
top_20
pal <- brewer.pal(8,"Dark2")
set.seed(1234)
wordcloud(words = df_word$word,    
          freq = df_word$freq,     
          min.freq = 10,            
          max.words = 200,         
          random.order = F,        
          rot.per = .1,            
          scale = c(6,0.2),        
          colors = pal) 


txt1 <- readLines("C:\\rstudy\\day8\\data\\Data\\remake.txt")
head(txt1)
nouns1 <- extractNoun(txt1)
wordcount1 <- table(unlist(nouns1))
df_word1 <- as.data.frame(wordcount1,stringsAsFactors = F)
df_word1<- rename(df_word1, word = Var1,
                  freq = Freq)
df_word1 <- filter(df_word1, nchar(word) >= 2)
top_201 <- df_word1 %>% 
  arrange(desc(freq)) %>% 
  head(20)
top_201
pal1 <- brewer.pal(8,"Dark2")
set.seed(1234)
wordcloud(words = df_word1$word,    
          freq = df_word1$freq,     
          min.freq = 10,            
          max.words = 200,         
          random.order = F,        
          rot.per = .1,            
          scale = c(6,0.2),        
          colors = pal1) 
library(KoNLP)
useSejongDic()
mergeUserDic(data.frame("서진수","ncn"))

data1 <- readLines("C:\\rstudy\\day8\\data\\Data\\seoul_new.txt")
head(data1,5)
data1 <- filter(df_word1, nchar(word) >= 2)
data2 <- sapply(data1,extractNoun,USE.NAMES=F)
head(unlist(data2),30)
data3 <- unlist(data2)
data3 <- gsub("\\d+","",data3)#숫자들을 공백없이 변경
data3 <- gsub("서울시","",data3)
data3 <- gsub("서울","",data3)
data3 <- gsub("요청","",data3)
data3 <- gsub("제안","",data3)
data3 <- gsub(" ","",data3)
data3 <- gsub("-","",data3)
data3 <- gsub("님","",data3)
data3 <- gsub("한", "", data3)
data3
write(unlist(data3), "C:\\rstudy\\day8\\data\\Data\\seoul_2.txt")
data4 <- read.table("C:\\rstudy\\day8\\data\\Data\\seoul_2.txt")
head(data4)
nrow(data4)
wordcount <- table(data4)
wordcount
head(sort(wordcount,decreasing = T),20)
data3 <- gsub("OO","",data3)
data3 <- gsub("개선","",data3)
data3 <- gsub("문제","",data3)
data3 <- gsub("관리","",data3)
data3 <- gsub("민원","",data3)
data3 <- gsub("이용","",data3)
data3 <- gsub("관련","",data3)
data3 <- gsub("시장","",data3)

write(unlist(data3),"C:\\rstudy\\day8\\data\\Data\\seoul_3.txt")
data4 <- read.table("C:\\rstudy\\day8\\data\\Data\\seoul_3.txt")
wordcount <- table(data4)
head(sort(wordcount,decreasing = T),20)

v1 <- ("봄이 지나면 여름이고 여름이 지나면 가을입니다.그리고 겨울이죠")
extractNoun(v1)

wordcloud(c(letters,LETTERS,0:9),seq(1,1000,len=62))


data1 <- readLines("C:\\rstudy\\day8\\data\\Data\\remake.txt") 
data1
data2 <- sapply(data1, extractNoun, USE.NAMES = F)
data2
data3 <- unlist(data2)
data3 <- Filter(function(x){nchar(x)<=10},data3)
head(unlist(data3), 30)
data3 <- gsub("\\d+","",data3)
data3 <- gsub("쌍수","쌍꺼풀",data3)
data3 <- gsub("쌍커풀","쌍꺼풀",data3)
data3 <- gsub("메부리코","매부리코",data3)
data3 <- gsub("\\.","",data3) # 마침표제거
data3 <- gsub(" ","",data3)
data3 <- gsub("\\'","",data3)
data3


write(unlist(data3),"remake_2.txt")
data4 <- read.table("remake_2.txt")
data4
nrow(data4)
wordcount <- table(data4) 
wordcount
txt <- readLines("C:\\rstudy\\day8\\data\\Data\\성형gsub.txt")
cnt_txt <- length(txt)
cnt_txt
i <- 1
for( i in 1:cnt_txt) {
 data3 <-gsub((txt[i]),"",data3) #동일한 애가 있으면 제거
}
data3
data3 <- Filter(function(x){nchar(x)>=2},data3)
write(unlist(data3),"remake_2.txt")
data4 <- read.table("remake_2.txt")
data4
nrow(data4)
wordcount <- table(data4)
wordcount
head(sort(wordcount, decreasing = T),30)


library(RColorBrewer) 
palete <- brewer.pal(9,"Set3")
wordcloud(names(wordcount),
          freq=wordcount,
          scale=c(5,1),
          rot.per=0.25,
          min.freq=2,
          random.order=F,
          random.color=T,
          colors=palete)



mergeUserDic(data.frame(readLines("C:\\rstudy\\day8\\data\\Data\\제주도여행지.txt"), "ncn"))
txt <- readLines("C:\\rstudy\\day8\\data\\Data\\jeju.txt") 
place <- sapply(txt,extractNoun,USE.NAMES=F)
place 
head(unlist(place), 30)
cdata <- unlist(place) 
place <- str_replace_all(cdata,"[^[:alpha:]]","")

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("C:\\rstudy\\day8\\data\\Data\\제주도여행코스gsub.txt")
txt
cnt_txt <- length(txt)
cnt_txt
i <- 1
for( i in 1:cnt_txt) {
place <-gsub((txt[i]),"",place) 
 }
 place
 place <- Filter(function(x) {nchar(x) >= 2} ,place)
 write(unlist(place),"jeju_2.txt") 
 rev <- read.table("jeju_2.txt")
 nrow(rev) 
 wordcount <- table(rev)
 head(sort(wordcount, decreasing=T),30)
 library(RColorBrewer)
 palete <- brewer.pal(9,"Set1")
 wordcloud(names(wordcount),
freq=wordcount,
scale=c(5,1),
rot.per=0.25,
min.freq=2,
random.order=F,
random.color=T,
colors=palete)
               
install.packages("ggiraphExtra")               
library(ggiraphExtra)                 
str(USArrests)             
head(USArrests) #인덱싱되었기떄문에 컬럼명이 없다
library(tibble) 
#헹 이름을 state변수로 바꿔 데이터 프레임 생성, 
crime <- rownames_to_column(USArrests, var = "state") #인덱싱된 문자열을 컬럼명으로 변경시켜서 추출 
crime$state <- tolower(crime$state)  #주 이름들 소문자로 만들기
str(crime)
library(ggplot2)
states_map <- map_data("state")   
str(states_map)
ggChoropleth(data = crime, #지도에 표현할 데이터
             aes(fill = Murder, #색깔로 표현할 변수
                 map_id = state), #지역 기준 변수
             map = states_map) #지도 데이터

ggChoropleth(data = crime,
             aes(fill = Murder,
                 map_id = state),
             map = states_map,
             interactive = T) #인터랙티브


devtools::install_github("cardiomoon/kormaps2014")
library(kormaps2014)
str(changeCode(korpop1))
library(dplyr)
korpop1 <- rename(korpop1,
                  pop = 총인구_명,
                  name = 행정구역별_읍면동)
str(changeCode(kormap1))

ggChoropleth(data = korpop1, # 지도에 표현할 데이터
             aes(fill = pop, # 색깔로 표현할 변수
                 map_id = code, # 지역 기준 변수
                 tooltip = name), # 지도 위에 표시할 지역명
             map = kormap1, # 지도 데이터
             interactive = T) # 인터랙티브

str(changeCode(tbc))


ggChoropleth(data = tbc, # 지도에 표현할 데이터
             aes(fill = NewPts, # 색깔로 표현할 변수
                 map_id = code, # 지역 기준 변수
                 tooltip = name), # 지도 위에 표시할 지역명
             map = kormap1, # 지도 데이터
             interactive = T) # 인터랙티브