항상 패키지 설치와 라이브러리는 필수다.
# 텍스트 마이닝에 필요한 packages
install.packages("rJava")
install.packages("multilinguer")
multilinguer::install_jdk()
install.packages(c("hash", "tau", "Sejong", "RSQLite", "devtools", "bit", "rex",
"lazyeval", "htmlwidgets", "crosstalk", "promises", "later",
"sessioninfo", "xopen", "bit64", "blob", "DBI", "memoise", "plogr",
"covr", "DT", "rcmdcheck", "rversions"), type = "binary")
# KoNLP 한국어 형태소 분석 라이브러리
install.packages("KoNLP",
repos = "https://forkonlp.r-universe.dev",
dependencies = TRUE,
INSTALL_opts = c("--no-multiarch")
)
install.packages("memoise")
install.packages("tm") # for text mining
install.packages("SnowballC") #SnowballC는 이 단어들을 뭉쳐줄 수 있는 패키지, # for text stemming
install.packages("RColorBrewer") # color palettes
install.packages("wordcloud") #워드클라우드 차트 지원
install.packages("stringr") # 문자열 처리 함수들이 여기있음
#패키지로드
library(hash)
library(tau)
library(Sejong)
library(KoNLP)
library(dplyr)
library(stringr)
library(tm)
library(SnowballC)
library(RColorBrewer)
library(wordcloud)
setwd("c:/r_work/data") # 윈도우 OS는 폴더에 대소문자구분못함.
# R이 리눅스에서도 사용 가능
# 폴더나 파일의 대소문자 중요함
### 주의할점 : 소문자로 폴더를 만들었다가, 대문자 섞어서 이름을 바꾸면?
# 윈도우가 인식을 못함 / 아예 삭제시키거나 다른 이름으로 다시만들어야함
이렇게 ~ 설치하였으나.. KoNLP가 제대로 설치가 안됐는지.. 계속 실행오류가 발생했다 ㅠ
그래서 별짓다해봤는데 !!
https://always-apramada.tistory.com/129
KoNLP 에러 : Warning in value[[3L]](cond) :
KoNLP 는 의존형 패키지라 , 설치 하기 전에 이것 저것 많이 깔아야 한다. 지금 그것에 대한 이야기를 하려는 건 아니고 이것 저것 다 깔았음에도 불구하고 KoNLP가 제기능을 안할 때의 문제를 해결
always-apramada.tistory.com
환경변수설정 + 이 주소를 따라했더니 해결됨 .. 감사합니다
형태소 분석하기
# 형태소 분석에 필요한 사전을 불러옴
useNIADic()
useSejongDic()
# 파일을 읽는다
txt <- readLines("hiphop.txt")
class(txt)
txt
# 문장으로 부터 명사를 추출한다
extractNoun("대한민국의 영토는 한반도와 그 부속도시로 한다", autoSpacing = FALSE )
nouns <- extractNoun(txt,autoSpacing = FALSE)
nouns
거지같은 warning in value[[3L]](cond) ..
단어 추출하기
#extracNoun함수가 list 타입으로 가져옴
# unlist <- list 타입을 vector f로 바꿔줌 / table 함수는 vector만 취급해서 list로하면 x
wordcount <- table(unlist(nouns))
wordcount
# 데이터 프레임으로 변환 문자열은 factor 타입으로 전환
df_word <- as.data.frame(wordcount,stringsAsFactors = F)
head(df_word)
# 변수명 수정
df_word <- rename(df_word,
word = Var1,
freq = Freq)
head(df_word)
# 2글자 이상 단어 추출
df_word <- df_word %>% filter(nchar(word)>= 2)
빈도수 높은 단어 20개 추출하기
df_word <- df_word %>% filter(nchar(word)>= 2)
df_word
top_20 <- df_word %>%
arrange(desc(freq)) %>%
head(20)
top_20
워드 클라우드 만들기pal <- brewer.pal(8,"Dark2") # Dark2 색상 목록에서 8개 색상추출 set.seed(1234) # seed- 컴퓨터안에서 랜덤값 추출, 정수를 준다 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) # 색깔 목록
**set.seed 함수를 사용해야하는 이유 : 초반에 뽑아낸 랜덤 값이 계속 바뀌지 않고 유지되게 만들어줌. (랜덤값고정)
=> set.seed 없이 실행하면 워드클라우드가 실행할때마다 배치위치나 색이 바뀜!
display.brewer.all() # 여기서 원하는 색 찾으면 된다
pal <- brewer.pal(8,"Blues") # 파랑색으로
set.seed(1234) # seed- 컴퓨터안에서 랜덤값 추출, 정수를 준다
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(11,"RdBu") # 색상 목록에서 11개 색상추출
set.seed(1234) # seed- 컴퓨터안에서 랜덤값 추출, 정수를 준다
wordcloud(words = df_word$word, # 단어
freq = df_word$freq, # 빈도
min.freq = 4, # 최소 단어 빈도
max.words = 300, # 표현 단어 수
random.order = T, # 고빈도 단어 중앙 배치
rot.per = .4, # 회전 단어 비율
scale = c(4, 0.3), # 단어 크기 범위
colors = pal)
파이썬은 워드클라우드 모양도 바꿀 수 있다고 한다 !
다음에 파이썬을 배우면 다시해보겠다.
워드클라우드 만들고 파일저장하기
windows()# 윈도우형태로 출력하기 위해 함수호축
# 이 함수 실행안하면 savePlot()에서 에러 발생
palete = brewer.pal(9,"Set1")
wordcloud(words = df_word$word, # 단어
freq = df_word$freq, # 빈도
min.freq = 19, # 최소 단어 빈도
max.words = 200, # 표현 단어 수
random.order = T, # 고빈도 단어 중앙 배치
random.color = T,
rot.per = .25, # 회전 단어 비율
scale = c(5, 0.5), # 단어 크기 범위
colors = pal)
savePlot(filename="a.jpg") # jpg 파일 저장
# wordcloud2 활용하기
강의 중 강사님이 wordcloud2를 발견하셨다 ! 다같이 해보기로함
# wordcloud2 packages 설치
install.packages("wordcloud2")
install.packages("tidyverse")
install.packages("nord")
library(wordcloud2)
library(tidyverse)
library(nord)
# 실행
wordcloud2(df_word)
별 모양 워드클라우드 만들기
df <- df_word %>% arrange(desc(freq)) %>% head(300)
# 별모양으로 만들기
wordcloud2(df,
color='random-light', size=0.5,
shape='star')
워드클라우드2를 이용하면 다양한 모양의 워드클라우드를 만들 수 있었다..!
# 크롤링
gsub함수 활용하기 / 원하는 문자열 지우기
sub(바꿀패턴,바뀔패턴,변수) : 처음 발견한 곳만 바꿔주는 함수
gsub(바꿀패턴,바뀔패턴,변수) : 전체에서 원하는 곳을 다 바꿔주는 함수
word <- "JAVA javascript 23 가나다 123 abc %^&* 대한민국"
gsub("A","",word) # A를 찾아서 삭제하라
gsub("A","",word, ignore.case=T) # 대소문자 무시하고 삭제하기
# A나 a를 제거하라 [ ]
gsub("[Aa]","",word)
gsub("[Aabcs]","",word)
# 영어 전부 없애기
gsub("[A-Z]","",word)
gsub("[A-Za-z]","",word) # 대문자, 소문자
# 숫자 전부 없애기 (셋다 같은 뜻임)
gsub("[0-9]","",word)
gsub("[1234567890]","",word)
gsub("\\d","",word)
# 한글
gsub("[가-힣]","",word)
# [^a] 제외하고 다지우기
gsub("[^a]","",word) # 소문자 a빼고 다 지우기
gsub("[^a-z]","",word) # 소문자 빼고 다 지우기
gsub("[^가-힣]","",word) # 한글 빼고 다 지우기
words <- c("병원", "학교", "바이러스", "학생", "수학",
"정확", "목단", "작약", "목련", "천일홍", "백일홍")
# gsub는 벡터도 받아진다
gsub("학","교", words) # 학을 교로 바꾸기
gsub("^학","나", words) # 학으로 시작하는 단어를 찾아 교로 바꾸기
gsub("학$", "나", words) # 학으로 끝나는 단어 찾아 나로 바꾸기
word <- "JAVA javascript 23 가나다 123 abc %^&* 대한민국"
gsub(" ","@",word) # 공백찾아 골뱅이로 바꾸기
word <- "JAVA javascript Aaa 가나다 AAaAa A123 %^&*"
# 첫번째 하나만 대체하기
sub(" ", "@", word)
# {2} : 2번 반복하는 앞의 글자를 {}만큼 반복할때 지운다
gsub("Aa{2}", "", word)
R에서만 제공하는 특수패턴
# 특수문자 제거하는 특수패턴
gsub("[[:punct:]]","",word)
# 특수문자를 제외한 나머지
gsub("[[:alnum:]]","",word)
# 특수문자 + 공백 제거하기
gsub("[^[:alnum:]]","",word)
# 숫자만 제거하기
gsub("[[:digit:]]","",word)
# 숫자를 제외하고 제거
gsub("[^[:digit:]]","",word)
stringr 라이브러리 사용하기
library("stringr") # 문자열 취급 라이브러리
# 문자열을 토큰으로 나누거나 합칠 때 사용
# 단어 단위로 , 로 쪼개놓고 단어를 토큰이라 부름
w<- c("red, green, blue, cyan, magenta",
"flower, rainbow")
result <- str_split(w,pattern=",") # list 타입으로 리턴함
result
class(result)
table(result)
# 인자수를 맞춰주면 ?
w<- c("red, green, blue, cyan, magenta",
"flower, rainbow, a, b, c")
result <- str_split(w,pattern=",") # list 타입으로 리턴함
result
class(result)
table(result)
list 해제하기
result<-unlist(result)
result
R은 함수를 안쓰고는 한글자씩 바꾸는 능력이 없다
word <-"R language"
word[1]
word[1] = "r"
word
nchar 활용하기
# nchar - 문자의 개수를 카운트
nchar(result)
length(result) # 벡터의크기
nchar("스칼라-데이터한개")
length("스칼라-데이터한개")
nchar는 값의 길이를, length는 값의 개수를 추출한다 !
대소문자 한번에 바꾸기
# 대소문자 한번에 바꾸기
fox.says = "It is with the HEART that one can see Rightly"
tolower(fox.says) # 전부소문자
toupper(fox.says) # 전부대문자
문자열 추출하기
# 문자열 자르기
w <- "Data Analytics"
substr(w, 1, 4) # 1번부터 4번까지 글자만 남기기
substr(w, 6, 14) # 6 ~ 14 번 까지만 남기기
** substr(변수, 시작, 끝) : 문자열에서 시작 위치와 끝 위치를 정하여 문자를 추출함
문자열 붙이기
birth <- "2012-09-09"
# 2012년 09월 09일 로 뜨게하기
birth <- paste(substr(birth,1,4),"년",
substr(birth,6,7),"월",
substr(birth,9,10),"일")
birth
~ 오늘의 강의 후기 ~
wordcloud는 화려한 결과가 눈에 바로 보이니까 신기하고 재밌었다 ~
문자열 관련한 패턴이나 함수들은.. 더 공부를 해야할 것 같다 ~...
※ 사용한 교재 : 쉽게 배우는 R 데이터 분석 / 저자 : 김영우
'R > 강의복습' 카테고리의 다른 글
[22.08.18] 8일차 (날짜 / 시간 관련 데이터) (0) | 2022.08.21 |
---|---|
[22.08.18] 8일차(wordclou2/정규식/문자열/gsub/grep/substring) (0) | 2022.08.21 |
[22.08.16] 6일차 (ggplot, 산포도, 막대그래프, 선그래프, 데이터분석하기, 전처리) (0) | 2022.08.21 |
[22.08.12] 5일차 차트그리기(plot, barplot, pie) (0) | 2022.08.20 |
[22.08.11] 4일차 강의(arrange / filter / select / mutate / summarize / group_by / join / is.na / na.rm) (0) | 2022.08.14 |