R 파싱하여 데이터 가져오기
##########################################
# 웹에서 문자열 가져오기
##########################################
# revest 패키지의 read_html("url");
# html 파싱
# 특정 노드의 데이터 가져오기
# 문자열에서 html_nodes(태그 또는 클래스 또는 아이디)를 이용하면 매개변수에 해당하는 모든 데이터를 가져온다.
# 마지막 데이터까지 가져온 경우 html_text() 메소드나 html_attr(속성명)을 이용해서
# 문자열로 가져오는 것이 가능.
##########################################
# 네이버(http://www.naver.com)
##########################################
install.packages("rvest")
library(rvest)
naver <- read_html("http://www.nvaer.com")
naver
# 테이블의 내용은 html_table() 메소드로 테이블의 데이터를 프레임으로 바로 변환해 준다.
# %>% 은 메소드의 연산결과를 가지고 다음 메소드를 호출할 때 사용하는 chain operation 연산자이다.
#########################################
# 네이버 팟 캐스트 크롤링
#########################################
# 크롤링을 할 때 가장 중요한 것은
# 원하는 부분을 구분할 수 있는 태그나 클래스 또는 아이디를 찾아내는 일이다.
# 고려해야 할 또 하나의 부분은 현재 페이지에 원하는 데이터가 있는지 아니면 링크만 존재하는지 확인하는 것.
# 1. 웹에서 데이터를 가져오기 위한 패키지 설치
install.packages("rvest")
# 2. 패키지 메모리 로드
library(rvest)
# 3. 문자열을 가지고 올 주소를 생성
url <- 'http://tv.naver.com/r/category/drama'
이미지 썸네일 삭제
Top100 : 네이버TV
동영상을 감상하는 가장 쉽고 빠른 방법
tv.naver.com
# 4. 문자열 다운로드
cast <- read_html(url)
# 5. 문자열 확인
cast
# 6. span 안에 내용들이 출력 ( 태그명 혹은 클래스명 등 크롤링해 올 부분을 확인해야 한다. )
craw <- cast %>% html_nodes(".tit") %>% html_nodes('span')
craw
# 7. tit 클래스 안에 있는 span 안에 내용 가져오기
craw <- cast %>% html_nodes(".tit") %>% html_nodes('span') %>% html_text()
craw
# 8. tooltip 태그 안의 내용 가져오기
craw <- cast %>% html_nodes("tooltip") %>% html_text()
craw
#########################
# 한겨레 신문에서 데이터를 검색한 후
# 검색 결과를 가지고 워드 클라우드 만들기
# 한겨레 신문사에서 지진으로 뉴스 검색하는 경우
# url
# http://search.hani.co.kr/Search?: Search 가 URL 패턴명 지정(서블릿에서 어노테이션 같은 역할)
# command, keyword, sort, period, media 는 파라미터명(수정 불가 값들)
# command=query& : query와 같이 형식이 정해진 애들은 수정할 수 없다.
# keyword=%EC%A7%80%EC%A7%84& : 검색어는 한글이 깨져서 들어갔기 때문에 원하는 검색어를 입력하면 된다.
# sort=d&
# period=all&
# media=news
# --> 검색한 기사를 가져올 경우, 실제 기사 원본 내부의 글자들이 필요하기 때문에 링크들에 관련된 주소를 다 뽑아와야 한다.
# http://search.hani.co.kr/Search?command=query&keyword="검색어입력부분"&sort=d&period=all&media=news
# 기사 검색이나 SNS 검색을 하는 경우
# 검색어를 가지고 검색하면 그 결과는 검색어를 가진 URL의 모임이다
# 기사나 SNS 글이 아니다
# ★ 검색결과에서 URL을 추출해서 그 URL의 기사 내용을 다시 가져와야 함(링크를 모두추출해서 링크에 다시 접속한 후 해당 기사 내용을 하나씩 모두 읽어온다.)
# ★ dt 태그안에 있는 a태그의 href 속성의 값이 실제 기사의 링크이다.
# 실제 기사에서 클래스가 text 안에 있는 내용이 기사 내용이다.
# 1. 기존의 변수를 모두 제거
rm(list=ls()) # R 스튜디오에 있는 모든 변수를 제거하는 함수 remove 함수
# 2. 필요한 패키지 설치
install.packages("stringr")
install.packages("wordcloud")
install.packages("KoNLP")
install.packages("dplyr")
install.packages("RColorBrewer")
install.packages("rvest")
#3. 필요한 패키지 로드
library(stringr) # 문자열 조작하는 전문 패키지
library(wordcloud) # 시각화작업 시 필요한 패키지
library(KoNLP) # 명사 추출과 같은 작업을 위한 사전을 포함하고 있는 패키지
library(dplyr) # 데이터프레임을 수정하거나 합하거나 하는 데이터프레임에 관련된 함수를 가진 패키지
library(RColorBrewer) # 색상과 관련된 패키지, 시각화작업에서 필요하다.
library(memoise) # mf <- 메모(f)는 f의 메모 사본인 mf를 작성한다.
# 메모된 복사본은 기본적으로 같은 기능의 더 게으른 버전이다.
# 즉, 새로운 호출의 답을 저장하고, 오래된 호출의 답을 다시 사용한다.
# 적절한 상황에서, 이것은 정말 멋진 속력을 낼 수 있다.
# 4. 웹에서 문자열을 가져와서 html 파싱을 하기 위한 패키지 로드
library(rvest) # 웹 페이지 크롤링 시 가장 기본적인 패키지
# 5. 기사 검색을 위한 url 생성
# &media=news
# &media=magazine
# &media=common
# 6. url에 해당하는 데이터 가져오기
k <- read_html(url, encoding="utf-8") # url 에 있는 값을 UTF-8 방식으로 읽어와서 k변수에 저장
k
# 7. dt 태그 안에 있는 a 태그 들의 href 속성의 값을 가져오기
k <- k %>% # href 가 a태그 안에 있고, 기사 제목들에 관련된 a태그는 dt태그
html_nodes("dt") %>% # 내부에 있기 때문에 전체 페이지에서 %>% dt 시작태그와 닫는 태그를 모두 찾아온다.
html_nodes("a") %>% # 그 결과값을 다시 html_nodes 함수에 전달하면 dt 태그 사이에서 a 태그만 다시 추출
html_attr("href")
k
전송중...
사진 설명을 입력하세요.
# 8. k에 저장된 모든 URL 에 해당하는 데이터의 클래스가 text인 데이터를 읽어서 파일에 저장
# for(임시변수 in 컬렉션이름){}
# ★ 중요(페이지 내 기사 크롤링하는 방법)
for(addr in k){# 첫 번째 URL(k)을 꺼내서 addr 에 할당
temp <- read_html(addr) %>% html_nodes(".text") %>% # 그래서 그 주소로 다시 읽어들인다.(첫 번째 기사를 읽음) %>%
# 그 결과를 .text에 넘기면 클래스 속성값이 text인 것만 읽음
html_text()# 시작/끝태그가 text인 것만 읽어서 temp 에 저장
cat(temp, file="temp.txt", append=TRUE)# temp가 갖고있는 값을 temp.txt에다가 계속 추가하겠다.
}
# 다시 두번째를 읽어서 반복하고 temp.txt에 append 덧붙여서 쓰여진다. 그래서 계속 추가 추가 추가 반복
# 9. 파일의 모든 내용 가져오기
txt <- readLines("temp.txt")
head(txt)
# 10. 명사만 추출
useNIADic() # 세종사전보다 많은 단어 포함
nouns <- extractNoun(txt)# 명사들만 추출
nouns
전송중...
사진 설명을 입력하세요.
# 11. 빈도수 만들기 - 각 단어가 몇 번씩 나왔는지
wordcount <- table(unlist(nouns)) # 리스트를 풀어주는 함수 unlist
wordcount
class(wordcount) # table
# 12. 데이터프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
df_word
전송중...
사진 설명을 입력하세요.
class(df_word)# data.frame
# 13. 필터링
df_word <- filter(df_word, nchar(Var1) >= 2)
# 14. 워드클라우드 색상 판 생성
pal <- brewer.pal(8, "Dark2")
전송중...
사진 설명을 입력하세요.
# 15. 시드 설정
set.seed(1234)
# 16. 워드 클라우드 생성
wordcloud(words=df_word$Var1,
freq=df_word$Freq,
min.freq = 2, max.words = 200,
random.order= F,
rot.per = .1, scale=c(4,0.3),
colors=pal)
전송중...
검색어가 '지진'인 경우
전송중...
'코로나19'를키워드로 해서 추출한 결과
#######################################################동아일보 태그
# http://news.donga.com/search?
# p=1&
# query=코로나19&
# check_news=1&
# more=1&
# sorting=1&
# search_date=1&
# v1=&
# v2=&
# range=1
k <- read_html(url, encoding="utf-8") # url 에 있는 값을 UTF-8 방식으로 읽어와서 k변수에 저장
k
# 7. dt 태그 안에 있는 a 태그 들의 href 속성의 값을 가져오기
k <- k %>% # href 가 a태그 안에 있고, 기사 제목들에 관련된 a태그는 dt태그
html_nodes(".txt") %>% # 내부에 있기 때문에 전체 페이지에서 %>% dt 시작태그와 닫는 태그를 모두 찾아온다.
html_nodes("a") %>% # 그 결과값을 다시 html_nodes 함수에 전달하면 dt 태그 사이에서 a 태그만 다시 추출
html_attr("href")
k
# 8. k에 저장된 모든 URL 에 해당하는 데이터의 클래스가 text인 데이터를 읽어서 파일에 저장
# for(임시변수 in 컬렉션이름){}
# ★ 중요(페이지 내 기사 크롤링하는 방법)
for(addr in k){
temp <- read_html(addr) %>% html_nodes(".article_txt") %>%
html_text()
cat(temp, file="temp2.txt", append=TRUE)
}
# 다시 두번째를 읽어서 반복하고 temp.txt에 append 덧붙여서 쓰여진다. 그래서 계속 추가 추가 추가 반복
# 9. 파일의 모든 내용 가져오기
txt <- readLines("temp2.txt")
head(txt)
# 10. 명사만 추출
useNIADic() # 세종사전보다 많은 단어 포함
nouns <- extractNoun(txt) # 명사들만 추출
nouns
# 11. 빈도수 만들기 - 각 단어가 몇 번씩 나왔는지
wordcount <- table(unlist(nouns)) # 리스트를 풀어주는 함수 unlist
wordcount
class(wordcount) # table
# 12. 데이터프레임으로 변환
df_word <- as.data.frame(wordcount, stringsAsFactors = F)
df_word
class(df_word) # data.frame
# 13. 필터링
df_word <- filter(df_word, nchar(Var1) >= 2)
# 14. 워드클라우드 색상 판 생성
pal <- brewer.pal(8, "Dark2")
# 15. 시드 설정
set.seed(1234)
# 16. 워드 클라우드 생성
wordcloud(words=df_word$Var1,
freq=df_word$Freq,
min.freq = 2, max.words = 200,
random.order= F,
rot.per = .1,
scale=c(4,0.3),
colors=pal)
전송중...
쓸데없는 태그들 제거 필요
#########################################
# R 키보드를 이용한 데이터 입력
# c() 함수를 이용한 데이터 입력
# x <- c(10.4, 5, 6, 3.1, 6.4, 21.7)
# x
# [1] 10.4, 5.6, 3.1, 6.4, 21.7
# scan() 함수는 외부의 텍스트파일을 불러올 때 외에도 키보드 입력에도 이용할 수 있는 함수이며, 일반적으로 R Console 에서 프롬프트가
# [1]과 같이 보여지나, scan() 함수를 실행할 경우는 '1:'과 같은 형태로 출력된다.
# scan() 함수 이용
x <- scan()
# console 에서 입력
전송중...
사진 설명을 입력하세요.
x <- scan(what=" ")
# console에서 입력
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
# edit() 함수는 데이터 편집기 창을 직접 띄워
# 데이터를 직접 입력하는 방식으로
# 편집기는 셀의 형식을 띄고 있으며,
# 각 셀에 데이터를 입력한 후 수정할 경우는
# 메뉴에서 <편집> - <데이터 편집기>를 선택하여 수정할 수 있다.
# edit() 함수를 이용하여 데이터 입력기를 호출한 후 데이터를 입력한다.
age = data.frame()
age = edit(age)
전송중...
사진 설명을 입력하세요.
age
전송중...
사진 설명을 입력하세요.
library(KoNLP)
library(wordcloud)
library(stringr)
useSejongDic()
전송중...
사진 설명을 입력하세요.
########################################정규표현식################################
[[:digit:]] 숫자 패턴 0,1,2,3,4,5,6,7,8,9 ( [0-9] 와 \d 동일 )
[[^0-9]] 숫자가 아닌 패턴 (\D 와 동일)
[[:lower:]] 영문 소문자 패턴
[[:upper:]] 영문 대문자 패턴
[[:alpha:]] 영문 패턴 (소 대 문자 구분X)
[^[:alpha:]] 영문이 아닌 패턴
[[:alnum:]] 영문&숫자 패턴 (* [[:alpha:][:digit:]] 대괄호로 감싸서 두 패턴 함께 이용 가능)
[[:blank:]] 간격 문자열 패턴(space & tab)
[[:space:]] 공백 문자열 패턴
[[:punct:]] 구두점 문자열 패턴 ! " # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~.
[[:cntrl:]] \n \r 등의 제어 문자열 패턴
[가-핳] 한글 문자열 패턴
grep(pattern, text, value=F)
R 내장 함수이며 문자열 원소를 갖는 vector를 다루는데 사용하며
이는 특정 pattern을 갖는 원소를 vector가 리턴.
value=T 일때는 그 문자열이 리턴되며
FALSE 일때는 해당 문자열의 벡터 내 인덱스가 리턴.
gsub(pattern, replacement, text)
grep가 특정 패턴을 지닌 원소를 찾는 함수라면
gsub은 벡터 내에 존재하는 원소에서 패턴을 찾아내고
그 패턴을 replacement인자에 전달한 문자로 변환해 주는 역할을 하는 함수.
예)
text<-c("phone: 010-1234-5678","home: 02-123-1234","이름: 홍길동")
grep("[[:digit:]]", text, value=T)
[1] "phone: 010-1234-5678" "home: 02-123-1234"
gsub("[[:digit:]]", "x", text)
[1] "phone: xxx-xxxx-xxxx" "home: xx-xxx-xxxx"
[3] "이름: 홍길동"
# 한글 문자열분석에서 매우 중요한 정규표현식.
grep("[가-핳]", text, value=T)
[1] "이름: 홍길동"
grep("[[:lower:]]", text, value=T)
[1] "phone: 010-1234-5678" "home: 02-123-1234"
gsub("^[1-9][0-9]*$",
" ",
c("08","1","19 189","78"))
#---------------------------------------
# [1] "08" " " "19 189" " "
gsub("^[0-9]+(\\.[0-9]{1,2})?$",
"zz",
c("123","123.17","123.456","123.","12.79"))
#-------------------------------------------------
# [1] "zz" "zz" "123.456" "123." "zz"
gsub("^(0|[1-9][0-9]*)$",
"qwe"
,c("123","0123","789789789","0"))
#-------------------------------------------------
# [1] "qwe" "0123" "qwe" "qwe"
################################################################################
#정규표현식 예
text <- c("phone:010-1234-5678",
"home:02-123-1234",
"이름:홍길동")
전송중...
사진 설명을 입력하세요.
grep("[[:digit:]]",text, value=T) # ■ 텍스트라는 변수가 가진 것 중 숫자들이 포함된것들만 추출해달라 : grep 함수
전송중...
사진 설명을 입력하세요.
gsub("[[:digit:]]","x",text) # 숫자부분을 x 표시로 바꿔달라고 요청
전송중...
사진 설명을 입력하세요.
# ★한글 문자열분석에서 매우 중요한 정규표현식.★ 한글만 크롤링
grep("[가-힣]", text, value=T)
전송중...
사진 설명을 입력하세요.
# 영문 소문자가 포함된 것들만 출력 요청
grep("[[:lower:]]", text, value=T)
전송중...
사진 설명을 입력하세요.
# 정수로 쓴 표현만 인식
# 1~9로 시작하는 숫자로 되어있는 애들을 " "로 교체하라는 의미
gsub("^[1-9][0-9]*$", " ", c("08","1","19 189", "78"))
전송중...
사진 설명을 입력하세요.
# 소수점 넣는 방법
gsub("^[0-9]+(\\.[0-9]{1,2})?$",
"zz",
c("123","123.17","123.456","123.","12.79"))
전송중...
사진 설명을 입력하세요.
# 블로거들이 추천하는 서울 명소 분석하기
# "seoul_go.txt" 파일을 사용하여 블로거들이 추천하는 서울 명소들을 워드 클라우드로 생성
# (서울 명소추가: 서울명소merge.txt)
# (제거단어 : 서울명소gsub.txt)
# setwd("c:\\r_temp")
# 필요 패키지를 설치하는데 이미 설치가 되어 있어서 경고가 나오니 무시하세요.
install.packages("KoNLP")
install.packages("wordcloud")
install.packages("stringr")
library(KoNLP)
library(wordcloud)
library(stringr)
useSejongDic()
# 사전에 추가시키려면 반드시 데이터프레임으로 되어있어야 한다.
# ncn은 형태소를 보면 위치값 key들이 다 들어 있다.(일반명사 들어가는 위치값, 고유명사 들어가는 위치값 등)
mergeUserDic(data.frame(readLines("./Data6_prj/서울명소merge.txt"),"ncn"))
txt <- readLines("./Data6_prj/seoul_go.txt")
place <- sapply(txt,extractNoun,USE.NAMES = F)
head(place,10)
전송중...
사진 설명을 입력하세요.
head(unlist(place),30)
전송중...
사진 설명을 입력하세요.
c <- unlist(place)
전송중...
사진 설명을 입력하세요.
res <- str_replace_all(c, "[^[:alpha:]", "")#알파벳으로 된 것들을 공백없는것으로 바꿔치기
전송중...
사진 설명을 입력하세요.
txt <- readLines("./Data6_prj/서울명소gsub.txt")
txt
전송중...
사진 설명을 입력하세요.
cnt_txt <- length(txt)
cnt_txt
전송중...
사진 설명을 입력하세요.
for( i in 1:cnt_txt){
res <- gsub((txt[i]),"",res)
}
전송중...
사진 설명을 입력하세요.
res2 <- Filter(function(x) {nchar(x)>=2},res)
nrow(res2)
write(res2, "./result_files/seoul_go2.txt")
전송중...
사진 설명을 입력하세요.
res3 <- read.table("./result_files/seoul_go2.txt")
wordcount <- table(res3)
전송중...
사진 설명을 입력하세요.
head(sort(wordcount, decreasing = T),30)
전송중...
사진 설명을 입력하세요.
library(RColorBrewer)
palete <- brewer.pal(8,"Set2")
wordcloud(names(wordcount),
freq=wordcount,
scale=c(3,1),
rot.per = 0.25,
min.freq = 5,
random.order= F,
random.color= T,
colors = palete)
전송중...
사진 설명을 입력하세요.
legend(0.3,
1,
"블로거 추천 서울 명소 분석",
cex=0.6,
fill=NA,
border=NA,
bg="white",
text.col="red",
text.font=2,
box.col="red")
전송중...
위에 숨음(제목 다는 방법)
###############################################################
# "제주도 여행코스 추천" 검색어 결과를 그래프로 표시
###############################################################
# 단어 추가(제주도여행지.txt)를 읽어들인 후, dataframe 으로 변경하여 기존 사전에 추가.
# 데이터 읽어오기 (jeju.txt)
# 한글 외 삭제, 영어
# 읽어들인 데이터로부터 제거할 단어 리스트 읽어오기(제주도 여행코스gsub.txt)
# 두 글자 이상인 단어만 추출
# 현재까지의 작업 파일을 파일로 저장 후, 저장된 파일 읽기
# 단어 빈도 수 구한 후, 워드 클라우드 작업
###############################################################
# 가장 추천 수가 많은 상위 10개를 골라서
# 1. pie 그래프로 출력
# 2. bar 형태의 그래프로 표시하기
# 3. 옆으로 누운 바 그래프 그리기
# 4. 3D Pie Chart 로 표현(plotrix 라는 패키지가 추가로 필요)
rm(list=ls()) # R 스튜디오에 있는 모든 변수를 제거하는 함수 remove 함수
# 필요 패키지를 설치하는데 이미 설치가 되어 있어서 경고가 나오니 무시하세요.
install.packages("KoNLP")
install.packages("wordcloud")
install.packages("stringr")
library(KoNLP)
library(wordcloud)
library(stringr)
useSejongDic()
# 사전에 추가시키려면 반드시 데이터프레임으로 되어있어야 한다.
# ncn은 형태소를 보면 위치값 key들이 다 들어 있다.(일반명사 들어가는 위치값, 고유명사 들어가는 위치값 등)
mergeUserDic(data.frame(readLines("./Data6_prj/제주도여행지.txt"),"ncn"))
txt <- readLines("./Data6_prj/jeju.txt")
head(txt)
c <- unlist(place)
res <- str_replace_all(c, "[^[:alpha:]]", "") #알파벳으로 된 것들을 공백없는것으로 바꿔치기
place <- sapply(txt,extractNoun,USE.NAMES = F)
place <- gsub(" ","", place)
txt <- readLines("./Data6_prj/제주도여행코스gsub.txt")
txt
cnt_txt <- length(txt)
cnt_txt
for( i in 1:cnt_txt){
res <- gsub((txt[i]),"",res)
}
res2 <- Filter(function(x) {nchar(x)>=2},res)
nrow(res2)
write(res2, "./result_files/jeju2.txt")
res3 <- read.table("./result_files/jeju2.txt")
wordcount <- table(res3)
head(sort(wordcount, decreasing = T),30)
library(RColorBrewer)
palete <- brewer.pal(8,"Set2")
wordcloud(names(wordcount),
freq=wordcount,
scale=c(3,1),
rot.per = 0.25,
min.freq = 5,
random.order= F,
random.color= T,
colors = palete)
#####################차트그리기
# head(상위 10개 추출) 여행지 탑텐 저장(df)
top10 <- head(sort(wordcount, decreasing = T),10)
pie(top10, col=rainbow(10), radius=1, init.angle = 90, main = "여행 추천지 top 10")
전송중...
사진 설명을 입력하세요.
# 수치값을 함께 출력하기
# 출력값 계산
pct <- round(top10/sum(top10) *100, 1)
names(top10)
# 지명과 계산 결과를 합하기
lab <- paste(names(top10), "\n", pct, "%")
# 퍼센트 값 붙은 파이차트 출력하기
pie(top10, col=rainbow(10), cex=0.8, labels=lab, init.angle = 90, main = "여행 추천지 top 10")
전송중...
사진 설명을 입력하세요.
# bar 형태의 그래프 표시하기
bchart <- head(sort(wordcount, decreasing = T),10)
bchart
전송중...
사진 설명을 입력하세요.
bp <- barplot(
bchart,
main="제주도 추천 여행 코스 TOP 10",
col = rainbow(10),
cex.names=0.7,
las=2, # las : 라벨을 옆으로 눕혀주는 아이
ylim=c(0,25)
)
전송중...
사진 설명을 입력하세요.
# 출력값 계산
pct <- round(bchart/sum(bchart)*100, 1) # 1은 첫 번째 자리수 까지 출력
# 수치값 출력하기(%)
text(x = bp,
y = bchart * 1.05,
labels = paste("(",pct,"%",")"),
col = "black",
cex = 0.7)
전송중...
사진 설명을 입력하세요.
# 수치값 출력하기 (건)
text(x = bp,
y = bchart*0.95,
labels = paste(bchart, "건"),
col = "black",
cex = 0.7)
전송중...
사진 설명을 입력하세요.
# 가로로 누워진 bchart
barplot(bchart,
main="제주도 추천 여행 코스 TOP10",
col = rainbow(10),
xlim=c(0,25),
cex.name=0.7,
las=1,
horiz=T)
전송중...
사진 설명을 입력하세요.
# 수치값 출력하기 (%)
text(y = bp,
x = bchart*1.15,
labels = paste("(",pct,"%",")"),
col="black",
cex=0.7)
전송중...
사진 설명을 입력하세요.
# 수치값 출력하기(건)
text(y = bp,
x = bchart*0.9,
labels = paste(bchart,"건"),
col="black",
cex=0.7)
전송중...
사진 설명을 입력하세요.
# 3D Pie Chart 로 표현(plotrix 라는 패키지가 추가로 필요)
#
install.packages("plotrix")
library(plotrix)
#-----------------------------
# 수치값을 함께 출력하기
# 출력값 계산
th_pct <- round(bchart/sum(bchart)*100,1)
# 지명과 계산 결과를 합치기
th_names <- names(bchart)
th_labels <- paste(th_names,"\n","(", th_pct,")")
pie3D(bchart,
main="제주도 추천 여행 코스 TOP 10",
col=rainbow(10),
cex=0.3,
labels=th_labels,
explode=0.05)
전송중...
사진 설명을 입력하세요.
######################################################################
# 서대문구에 치킨집이 많은 동은?
# 동별 치킨집 분포를 한눈에 파악할 수 있도록
# 트리 맵을 사용하여 시각화
######################################################################
# 1. 업종별 데이터 다운로드 및 기초 가공
# LOCALDATA 웹 사이트
# 지방자치단체에서 인허가한 업종별 데이터를 제공
# 문화, 체육, 관광, 식품 등 11가지 분야의 다양한 데이터 검색 가능.
######################################################################
#---------------------------------------------------------------------
# 불필요한 데이터 제거.
#---------------------------------------------------------------------
# 1. "6110000_서울특별시_07_24_04_P_일반음식점.xlsx" 파일
# 2. 서대문구 치킨집 데이터 확인.
# 3. 주소 : 서대문구, 업태 : 호프/통닭인 데이터만 남기기
######################################################################
# 2. 데이터 가공 및 트리 맵 표현
# 동별 분포를 확인하기 위해 소재지 전체 주소열에서
# 동별 업소 개수를 확인 후,
# Rstudio 에서 추가로 가공하여 트리 맵을 이용한 시각화
######################################################################
#==================================
# 소재지 전체 주소 가공하기.
#==================================
# 우선 전체 주소를 가공하여 동을 파악.
#---------------------------------------------------------------------
# 1. readxl 패키지를 로드하여 xlsx 파일 읽어오기
# setwd("c:/rStudy")
# install.packages("readxl")
library(readxl)
ck <- read_xlsx("./Data6_prj/치킨집_가공.xlsx")
head(ck)
전송중...
사진 설명을 입력하세요.
#---------------------------------------------------------------------
# 2. '소재지 전체주소' 열에서 'XXX동'만 남기고
# 이후 상세 주소 삭제 ...
# substr(데이터, 시작위치, 끝위치)
# substr() 함수를 사용하여
# '서울특별시 서대문구' 다음 글자인 12번째 글자부터
# 'XXX동' 까지 포함되도록 15번째 글자 까지를 잘라내기
# 예) 남가좌동
names(ck) # "소재지전체주소" "사업장명"
# '소재지전체주소' 열에서 12번째 글자부터 16번째 앞 글자까지를 추출
addr <- substr(ck$소재지전체주소,12,16)
head(addr)
#---------------------------------------------------------------------
# 3. 동 이름이 3글자와 4글자 인 경우가 있어
# 3글자인 경우"창천동 5"와 같이 숫자가 포함.
# gsub("어떤 글자를", "무엇으로", "어디에 있는")
# gsub() 함수를 이용하여 공백과 숫자를 제거.
#
# 숫자 제거
addr_num <- gsub("[0-9]", "", addr)
addr_num
전송중...
사진 설명을 입력하세요.
# 공백 제거
addr_trim <- gsub(" ", "", addr_num)
head(addr_trim)
전송중...
사진 설명을 입력하세요.
#==================================
# 동별 업소 개수 확인.
#==================================
# 동별 개수를 확인하여 트리맵으로 표현할 준비 작업.
# table() : 변수 개수를 확인하기 위한 함수
# 사용 형식 : table(데이터 셋1, 데이터 셋2)
# 데이터의 옵션 값이 1개면 도수분포도를 만들고,
# 2개면 교차표를 생성.
# 도수분포표 : 항목별 개수를 나타낸 것.(동별 개수를 파악)
# 교차표 : 2가지 변수에서 항목간 빈도를 파악할 수 있도록 작성한 표
#---------------------------------------------------------------------
# 1. table()함수를 사용하여 도수분포도를 생성.
# 2. 이를 dplyr 패키지의 %>% 연산자로 연결
# 3. data.frame() 하수를 이용하여 데이터 프레임으로 반환.
# install.packages("dplyr")
library(dplyr)
# table() 함수를 이용해서 숫자 세기.
# 변수가 한개일 때 도수분포표를 만들어줌
# addr_trim이 table로 가서 factor 가 만들어지고 data.frame으로 가서 df로 변환
addr_count <- addr_trim %>% table() %>% data.frame()
head(addr_count)
전송중...
사진 설명을 입력하세요.
# 트리맵으로 표현
#==================================
# treemap 패키지에 있는
# treemap() 함수를 이용하여 시각화.
#
# 사용 형식 :
# treemap(데이터 셋, index=구분 열,
# vSize = 분포열,
# vColor = 색상, title=제목)
# treemap(데이터 셋, index=인덱스 표시 열 제목,
# vSize=크기를 이용할 열 제목,
# vColor=컬러, title=제목)
#---------------------------------------------------------------------
# 1. "treemap" 패키지 설치 및 로드
install.packages("treemap")
library(treemap)
#------------------------------------------------------------------
# 2. 동이름 열(.)과 치킨집 개수열(Freq)로 트리맵 시각화.
treemap(addr_count,
index=".",
vSize="Freq",
title="서대문구 동별 치킨집 분포")
전송중...
사진 설명을 입력하세요.
# https://learnr.wordpress.com/: R 배우기 사이트 (원하는 시각화 자료 설명 및 찾기 등등등등등등등)
############################################################
# 서울시 주요 구의 의원 현황을 한꺼번에 보여주기
# 건강보험 심사평가원 홈페이지에서 다운로드 받은
# "2013년_서울_주요구별_병원현황.csv"파일을 사용해서
# 서울시 주요 구의 의원 현황을 아래 예시와 같이 각 구별로 나누어서 출력
data1 <- read.csv("./Data6_prj/2013년_서울_주요구별_병원현황.csv", header=T)
data1
전송중...
사진 설명을 입력하세요.
# 새로운 출력 디바이스 생성
dev.new() # 그려진 차트는 이제 여기에 생성
전송중...
사진 설명을 입력하세요.
# 필요한 데이터를 각각의 변수에 할당
v1 <- data1[1:9, 2] * 0.1 #강남구 값
v2 <- data1[1:9, 3] * 0.1 #강동구 값
v3 <- data1[1:9, 4] * 0.1 #강서구 값
v4 <- data1[1:9, 5] * 0.1 #관악구 값
v5 <- data1[1:9, 6] * 0.1 #구로구 값
v6 <- data1[1:9, 7] * 0.1 #도봉구 값
v7 <- data1[1:9, 8] * 0.1 #동대문구 값
v8 <- data1[1:9, 9] * 0.1 #동작구 값
v9 <- data1[1:9, 10] * 0.1 #마포구 값
v10 <- data1[1:9, 11] * 0.1 #서대문구 값
# 2행 5열로 그래프 배치하기
# 실제 그래프는 표현 안됨.
par(mfrow=c(2,5))
name <- data1$표시과목
name
전송중...
사진 설명을 입력하세요.
#강남구 그래프 그리기
gangnam <- barplot(as.matrix(v1),
main="강남구 병원 현황",
beside=T,
axes=F,
ylab="병원수(단위:10개)",
xlab="",
cex.names=0.85,
las=2,
ylim=c(0,40),
col=rainbow(8),
border="white",
names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#강동구 그래프 그리기
gangdong <- barplot(as.matrix(v2),
main="강동구 병원 현황",
beside=T,
axes=F,
ylab="병원수(단위:10개)",
xlab="",
cex.names=0.85,
las=2,
ylim=c(0,40),
col=rainbow(8),
border="white",
names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#강서구 그래프 그리기
gangseo <- barplot(as.matrix(v3),main="강서구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#관악구 그래프 그리기
gwanak <- barplot(as.matrix(v4),main="관악구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#구로구 그래프 그리기
guro <- barplot(as.matrix(v5),main="구로구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#도봉구 그래프 그리기
dobong <- barplot(as.matrix(v6),main="도봉구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#동대문구 그래프 그리기
dongdaemoon <- barplot(as.matrix(v7),main="동대문구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#동작구 그래프 그리기
dongjak <- barplot(as.matrix(v8),main="동작구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#마포구 그래프 그리기
mapo <- barplot(as.matrix(v9),main="마포구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
#서대문구 그래프 그리기
seodaemoon <- barplot(as.matrix(v10),main="서대문구 병원 현황",beside=T,axes=F,ylab="병원수(단위:10개)",xlab="",
cex.names=0.85,las=2,ylim=c(0,40),col=rainbow(8),border="white",names.arg=name)
axis(2,ylim=seq(0,35,10)) #y축 생성
abline(h=seq(0,35,5),lty=2) # base line 생성
###############################################################################
savePlot("./result_files/hospital2.png", type="png")
전송중...
사진 설명을 입력하세요.
library(KoNLP)
library(wordcloud)
library(stringr)
# 야구 선수별 연봉 대비 출루율 분석(밥값여부 계산)
# R을 활용한 데이터 시각화
kbo <- read.csv("./Data6_prj/야구성적.csv", header=T)
head(kbo)
View(kbo)
riceprice <- kbo[1:25,21]
View(riceprice)
name <- kbo$선수명
########
dev.new()
ricevalue <- barplot(as.matrix(riceprice),
main="밥값현황",
beside=T,
axes=F,
ylab="연봉대비출루율(%)",
xlab="",
cex.names=0.85,
las=2,
ylim=c(0,55),
col=rainbow(8),
border="white",
names.arg=name)
axis(2,ylim=seq(0,50,10)) #y축 생성
abline(h=seq(0,50,5),lty=2) # base line 생성
text(x = ricevalue,
y = riceprice * 1.05,
labels = paste("(",riceprice,"%",")"),
col = "black",
cex = 0.7)
전송중...
사진 설명을 입력하세요.
'PYTHON' 카테고리의 다른 글
20200409 - Python 파이썬 소개, 기본문법, 연습문제, 예제파일, (시험) (0) | 2020.04.09 |
---|---|
20200408 - R 대시보드(flexdashboard, shiny 패키지, 보고서 다루기) (0) | 2020.04.08 |
20200403 - R, 텍스트 마이닝(형태소 분석, 품사 추출, 빈도표 만들기, 시각화) (0) | 2020.04.03 |
20200402 - R (데이터 전처리, 변수 간 관계 분석 - 직업별 월급 차이 ) (0) | 2020.04.02 |
20200401 - R 차트 그리기, 상관관계 분석, 삶의 질 평가 실습 (0) | 2020.04.01 |
댓글