# chap08_VisualizationAnalysis
# 고급시각화
# 1. lattice
# 2. ggplot2
# 3. ggmap 패키지
# 1. lattice
# - 격자 형태의 그래프 제공
install.packages("lattice")
library(lattice)
install.packages("mlmRev")
library(mlmRev) # Chem97 데이터 제공
Chem97
str(Chem97)
# 'data.frame': 31022 obs. of 8 variables:
# score : 화학점수
# gender : 성별(M,F)
# gcsescore : 입학점수
head(Chem97)
table(Chem97$score)
# 1) histogram
# histogram(~x, data)
histogram(~gcsescore, data=Chem97)
# 연속변수(실수) vs 이산변수(정수)
histogram(~gcsescore | factor(score), data=Chem97)
# 2) densityplot(~x, data)
# 연속변수, 이산변수, 범주형변수
densityplot(~gcsescore | factor(score), groups = gender,
auto.key=T, data = Chem97)
# | factor(변수) : 범주만큼 격자 생성
# groups = 변수 : 한 격자 내에서 그룹 표현
# auto.key=T : 범례
# 3) xyplot(x, y | 집단변수, data)
str(quakes)
# 'data.frame': 1000 obs. of 5 variables:
# lat : 위도
# long : 경도
# depth : 수심 깊이
# mag : 규모
xyplot(lat ~ long, data = quakes) # y ~ x
# depth 범위
range(quakes$depth) # 40 680
summary(quakes$depth)
# 연속형 -> 범주형
# 1 : min ~ 1st
# 2 : 1st ~ Mean
# 3 : Mean ~ max
quakes$depth2[quakes$depth >= 4.0 & quakes$depth <= 99.0] <- "d1"
quakes$depth2[quakes$depth > 99.0 & quakes$depth <= 311.4] <- "d2"
quakes$depth2[quakes$depth > 311.4 ] <- "d3"
table(quakes$depth2)
# d1 d2 d3
#251 305 444
xyplot(lat ~ long | depth2, data = quakes, layout = c(3,1))
# layout = c(3,1) : 격자 배열
# 2. ggplot2
library(ggplot2) # function + dataset
data("mpg")
str(mpg)
# 1) qplot(x, y, data)
# (1) 변수 1개(연속형) : hist
qplot(hwy, data = mpg) # bins : 계급 or 막대 수
# 연속형 vs 범주형
table(mpg$drv) # 4 f r
qplot(hwy, fill = drv, data = mpg)
# (2) 변수 2개(연속형 vs 연속형) : 산점도
qplot(displ, hwy, data = mpg)
# 연속형 vs 연속형 vs 범주형
qplot(displ, hwy, color = drv, data = mpg)
# (3) 색상, 크기, 모양 적용
data("mtcars") # datasets 제공
str(mtcars)
qplot(wt, mpg, color=factor(gear), size=factor(gear), data = mtcars)
# 2) ggplot(data, aes(x,y,color))
data("diamonds") # ggplot3 제공 dataset
str(diamonds)
# 'data.frame': 53940 obs. of 10 variables:
aes <- ggplot(data=diamonds, aes(carat, price, color=cut))
aes + geom_point() # 미적 객체 + 차트 유형
# 객체 재사용
aes + geom_line()
aes + geom_step()
table(diamonds$clarity)
aes <- ggplot(data=diamonds, aes(clarity)) # 범주형
aes + geom_bar(aes(fill=cut), position="fill")
# 3) ggsave()
setwd("d:/sunmoon/2_Rwork/output")
ggsave("diamonds_cut.png")
# 3. ggmap 패키지
# - 지도 공간 시각화
install.packages("ggmap")
library(ggmap) # get_stemenmap()
# 서울 위도(126.992), 경도(37.551) : google 지도
seoul <- c(left=126.85, bottom=37.35,
right=127.25, top=37.65)
# 지도 이미지
map <- get_stamenmap(seoul, zoom=12, maptype='terrain')
# 지도 이미지 view
ggmap(map)
# 대구 위도(128.5700), 경도(35.8293)
# 대구 중심으로 남한 대륙
deagu <- c(left=123.4423, bottom=32.8529306,
right=131.6015, top=38.3714354)
map <- get_stamenmap(deagu, zoom = 7, maptype="terrain")
ggmap(map)
# 2015년 6월 인구수
pop <- read.csv(file.choose())
pop
library(stringr)
region <- pop$지역명
log <- pop$LON # 위도
lan <- pop$LAT # 경도
tot_pop <- as.numeric(str_replace_all(pop$총인구수, ",", ""))
df <- data.frame(region, log, lan, tot_pop)
df
# 지도 정보 생성
map <- get_stamenmap(deagu, zoom=7, maptype="watercolor")
# 레이어1 : 지도 플로팅
layer1 <- ggmap(map)
layer1
# 레이어2 : 포인트 추가
library(ggplot2) # geom_point(), geom_text(),ggsave()
layer2 <- layer1 + geom_point(data = df,
aes(x=log, y=lan,
color=factor(tot_pop),
size = factor(tot_pop)))
layer2
# 레이어3 : 텍스트(지역명) 추가
layer3 <- layer2 + geom_text(data = df,
aes(x=log+0.01, y=lan+0.18,
label=region), size=3)
layer3
# file save
getwd()
ggsave("pop201506.png", width = 10.24, height = 7.68)
'R 과 데이터분석 > 기초 문법 ~ 머신러닝' 카테고리의 다른 글
[R 데이터분석] 10장. 통계분석절차와 통계지식 (0) | 2019.09.13 |
---|---|
[R 데이터분석] 9장. 정형(DB데이터)과 비정형 데이터 처리 (0) | 2019.09.13 |
[R 데이터분석] 7장. EDA & 데이터 전처리 (0) | 2019.09.13 |
[R 데이터분석] 6장. 데이터 조작 (0) | 2019.09.13 |
[R 데이터분석] 5장. 데이터 시각화 (0) | 2019.09.13 |
댓글