텍스트마이닝
# 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) # 인터랙티브