일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- R
- 알버트
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- albert
- 패스트캠퍼스후기
- SKT
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- 직장인자기계발
- 패스트캠퍼스
- 직장인인강
- 패캠챌린지
- AI
- Today
- Total
제주 탈출 일지
빅데이터 분석 - 비정형 데이터 처리(wordcloud2) 본문
R에서 텍스트 파일을 읽을 때
1. read.table()
예시) read.table("파일명", header=T, sep=" ")
여기서 header=T는 파일의 첫 행을 변수로 읽는다.(디폴트)
sep의 경우 구분자를 말하고 " "는 공백이므로 공백을 구분자로 설정한다.
-> csv파일도 가능하다.
2. read.csv()
콤마로 구분된 csv 파일을 읽는다.
read.csv("파일.csv", header = T)
3. readLines()
데이터를 한 줄 단위로 읽어 배열로 만들어준다.(array)
길이가 일정하지 않은 경우에도 읽는다.
readLines("파일명", encoding = "unknown")
R에서 excel 자료 읽기
install packages("read_excel")
library("read_excel")
R에서 윈도우 경로를 지정할 때, 원래는 D:\ 형식으로 사용하는데, R에서는 그렇게 하면 안된다.
D:\\ 형태로 사용하거나, D:/ 형태로 사용해야 한다.
a <- read_excel("D:/rwork/iris_1.xlsx", sheet = "Iris", range = "B2:C5", col_types = "guess", col_names = FALSE)
help("read_excel")을 통해 확인할 필요가 있어 보인다.(너무 휘리릭 넘어가심ㅠㅠ.)
비정형 데이터를 분석 후 Word Cloud 생성하기
행태소 분석에는 KoNLP가 가장 인기 있으나, 설치에 어려움이 있다.
설치 방법이 나온 링크이다.
https://buillee.tistory.com/965
KoNLP 설치할 때 오류 해결
안녕하세요, 현재 코드 내부적인 이슈로 KoNLP 패키지가 cran에서 내려져 있습니다. github 버전으로 설치해야 해서 해당 내용을 공유합니다. (최초 아카이브 버전을 공유했었는데, 설치가 제대로 진
buillee.tistory.com
install.packages("KoNLP")
install.packages("wordclouds2")
library(KoNLP)
library(wordcloud2)
useNIADic()
KoNLP 패키지에는 extractNoun 함수가 중요하다. extractNoun함수를 사용하면 명사를 추출해준다.
한글 형태소 분석기-은전한닢
install.packages("RmecabKo")
RmecabKo::install_mecab("D:/Rlibs/mecab") #경로는 상관없으나, 꼭 마지막 폴더명은 mecab이어야 한다.
여기서의 명사 추출은 noun()을 사용한다.
pos(), nouns(), tokenizer() 3가지의 함수를 소개하는데,
pos()는 형태소 태깅을 제공한다.(명사인가 부사인가 조사인가 등등등..)
nouns()는 명사만 추출하여 제공한다.
tokenizers는 형태소 전체, 실질형태소, 명사형 형태소 토큰과 이 토큰의 n-gram 형태를 제공한다.
library(RmecabKo)
pos("안녕하세요.")
pos(c("안녕하세요." , "은전한닢 프로젝트 R wrapper입니다."))
nouns("안녕하세요.")
nouns(c("안녕하세요." , "은전한닢 프로젝트 R wrapper입니다."))
txt <- c("안녕하세요." , "은전한닢 프로젝트 R wrapper입니다.")
token_words(txt)
library(tidyverse)
library(tidytext)
실전 예제
1-1. 서울시 응답소 페이지 분석하기
http://cafe.naver.com/theareum/196
더많이~R라뷰 실습용 파일 올려 드립니다~
더 많이~R 라뷰 실습용 자료 올려 드립니다~~다운 로드 받으신 후 압축을 적당한 곳에 푸시고이 파일들을 작업 디렉토리로 복사해서 사용해 주세요~~감사합니다~~
cafe.naver.com
Step1. 작업용 디렉터리 지정. (선택사항)
setwd("d:\\rwork") # setwd("d:/rwork")
작업용 디렉토리를 설정하면 경로 안적고 폴더명이나 파일명을 바로 적으면서 할 수 있어 편할 수 있따.
Step2. 필요한 패키지 설치 후 R에 load
install.packages("RmecabKo")
RmecabKo::install_mecab("D:/Rlibs/mecab")
library(RmecabKo)
install.packages("wordcloud2")
library(wordcloud2)
data1 <- readLines("seoul_new.txt")
data1
Step 3. 데이터 중 명사만 골라내어 nouns 변수에 할당한다.
data2 <- sapply(data1,nouns,USE.NAME=F)
apply 계열 함수는 apply, sapply, lapply가 있다.
sapply()함수는 여러건의 데이터를 한꺼번에 저장하는 함수.
USE.NAME=F는 변수명을 포함하지 않는다는 인자.
#추가.. apply 계열 함수는 특정 함수에 데이터를 적용하여 나오는 데이터 저장을 도와주는 함수이다.
cf.) list 형은 내부 데이터 끼리의 형이 달라도 상관없다. 벡터는 상관 있음.
Step4 . 추출된 명사를 30개만 출력해서 확인함.
head(unlist(data2), 30)
data3 <- unlist(data2
data2의 list형태를 unlist하여 데이터만 가져오는데 앞에서부터 30개의 데이터만 가져오게 됨.
Step5. 위 출력 결과에서 원하지 않는 내용 걸러 내기
gsub함수 사용.
gsub("변경전 글자", "변경 후 글자", "원본데이터")
data3 <- gsub("\\d+","", data3)
data3 <- gsub("서울시", "", data3)
data3 <- gsub("서울", "", data3)
data3 <- gsub("요청", "", data3)
data3 <- gsub("제안", "", data3)
data3 <- gsub(" ", "", data3)
data3 <- gsub("-","", data3)
data3
이렇게 필요없는 키워드들을 gsub함수로 정리하면 어느정도 정제된 결과가 나오게 된다.
Step6. 파일로 저장 한후 테이블 형태로 변환 후 불러 들임.
write(unlist(data3), "seoul_2.txt")
write는 파일쓰기 명령어. data3의 데이터를 seoul_2.txt로 쓰기 작업함.
Step7. 수정 완료된 파일을 read.table 명령으로 다시 변수에 불러들임.
data4 <- read.table("seoul_2.txt")
data4
이 경우 V1이 생성되는데, Header=T 옵션 때문에 자동으로 생성되게 됨.
read.table은 data.frame 형태로 텍스트 파일을 읽어 들이게 됨.
Step8. 화면에 그래픽으로 출력하기 전에 text 형태로 결과 확인.
nrow(data4)
wordcount <- table(data4)
wordcount
head(sort(wordcount, decreasing=T),20)
data4 변수에 몇 건의 데이터가 있는지 확인해 봄.(nrow는 행의 갯수)
table 함수를 통해서 데이터의 빈도수를 확인해보게 됨.
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)
추가적으로 불필요한 단어들을 제거하여 객체를 만든다.
Tip) 일일히 gsub로 단어를 제거하는 것은 힘든 일이다. 제거하고 싶은 단어를 파일에 저장한 후
반복문으로 해결하는 것이 편하다.
txt <- readLines("gsubfile.txt")
txt
cnt_txt <- length(txt) #데이터의 길이만큼
cnt_txt
for( i in 1:cnt_txt) { #루프
data3 <-gsub((txt[i]),"",data3)
}
data3 #제거되었는지 확인
gsub로 제거할 단어들을 정리한 후에, table형태로 다시 데이터를 만든다.
write(unlist(data3), "seoul_3.txt")
data4 <- read.table("seoul_3.txt")
wordcount <- table(data4)
head(sor(wordcount, decreasing=T), 20)
Step9. Word Cloud 형태로 그래픽으로 출력함.
wordcloud2(wordcount)
wordcloud2(data=wordcount, fontFamily = '나눔바른고딕')
이 후에 결과가 다음과 같이 나오게 된다.
실전 예제
1-2. 여고생은 어디를 가장 고치고 싶을까요?
step1. 주요 패키지 설치 및 로딩
library(RmecabKo)
library(wordcloud2)
data1 <- readLines("remake.txt")
data1
data2 <- sapply(data1, nouns, USE,NAMES=F)
data2
data3 <- unlist(data2)
data3 <- Filter(function(x) {nchar(x) <= 10}, data3)
head(unlist(data3), 30)
head함수로 확인해보면 오타와 같은 부분에서는 자연어 처리가 매끄럽지 않게 된다.
data3 <- gsub("\\d+","", data3)
data3 <- gsub("쌍수", "쌍꺼풀", data3)
data3 <- gsub("쌍커플", "쌍꺼풀", data3)
data3 <- gsub("메부리코", "매부리코", data3)
data3 <- gsub("\\", "", data3)
data3 <- gsub(" ", "", data3)
data3
step 2. 공백 제거
write(unlist(data3), "remake_2.txt")
data4 <- read.table("remake_2.txt")
data4
nrow(data4)
wordcount <- table(data4)
wordcount
step 3. 필요 없는 단어 제거하기 2
head(sort(wordcount, decreasing=T), 20)
txt <- readLines("성형gsub.txt") #제거하고 싶은 단어 목록을 미리 작성 후 불러옴
txt
cnt_txt <- length(txt
cnt_txt
i <- 1
for(i in 1:cnt_txt) {
data3 <- gsub((txt[i], "", data3)
}
for문으로 gsub 함수를 반복문으로 처리함.
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)
wordcloud2(wordcount)
그 후 문자가 2개 이상인 데이터를 Filter함수로 정제해주고, 데이터만 remake_2.txt로 다시 작성.
그 후 data4에 table형태로 remake_2.txt를 작성
그 후 wordcloud를 불러와 wordcount의 그림을 그리게 된다.
요약
비정형 데이터 분석에는 데이터의 명사들을 추출하여 해당 데이터를 분석하는게 상당히 유용하다.
1. 데이터를 readLines를 이용하여 한줄씩 읽어들인다. 이 readLines는 게시판의 글 등에서 하나의 글들을 읽어들이는데 상당히 유용하다.
2. RmecabKo, KoLNP 와 같은 자연어 처리기를 이용하여 명사를 추출해낸다.(extractnouns, nouns) 그를 위해서 sapply함수를 사용했다.
3. 이 함수를 사용하여 만들어 놓은 배열에서 데이터만 추출하기 위해서 unlist()함수를 사용한다.
4. 데이터를 확인하기 위해서, View와 table함수를 이용해서 데이터의 빈도 수를 확인하고 불필요한 데이터를 확인한다.
4-1. 불필요한 데이터를 gsub함수를 통해 삭제한다. (+ 한글과 영어 데이터만을 추출하기 위해 str_replace_all() 함수를 사용한다.
4-2. 해당 데이터를 unlist()를 통해 데이터만 텍스트 형태로 쓴다(write)
5. 4번 과정을 반복하여 어느정도 정제된 데이터가 되었을 떄, table() 함수를 통해서 명사의 빈도수를 세게 된다.
6. wordcloud2, ggplot 과 같은 시각화 툴을 이용하여 데이터를 시각화 한다.
'빅데이터 분석' 카테고리의 다른 글
빅데이터 분석 - 네이버 실시간 검색어 & 코스피 지수 데이터 크롤링 (0) | 2020.10.02 |
---|---|
빅데이터 분석 - R 웹크롤링 포스팅 정리 (0) | 2020.09.30 |
빅데이터 분석 - tm패키지를 사용하여 영어 비정형 데이터 분석 (0) | 2020.09.28 |
빅데이터 분석 - 선형 그래프 그리기 (0) | 2020.09.24 |
빅데이터 분석 - csv파일을 읽어 barplot 그래프 그리기 (0) | 2020.09.19 |