# chap05_DataVisualization
# 데이터 시각화
# 1. 이산변수 시각화 (막대차트, 점차트, 파이차트)
# 2. 연속변수 시각화 (상자그래프, 히스토그램, 산점도)
# 3. 변수간의 비교 시각화
# 4. 3차원 산점도
# 5. 차트 파일 저장
# 1. 이산변수 시각화
# - 정수형 변수(예:자녀수, 자동차 수)
# - 막대차트, 점차트, 파이차트
# 차트 데이터 생성
chart_data <- c(305,450, 320, 460, 330, 480, 380, 520)
names(chart_data) <- c("2016 1분기","2017 1분기","2016 2분기","2017 2분기","2016 3분기","2017 3분기","2016 4분기","2017 4분기")
str(chart_data)
chart_data
max(chart_data) # 520
length(chart_data) # 8
# 1) 막대차트
# (1) 세로막대차트
barplot(chart_data, ylim = c(0,600),
col = rainbow(8),
main = "2016년도 vs 2017년도 분기별 매출현황")
?barplot
# (2) 가로막대차트
barplot(chart_data, xlim = c(0,600),
col = rainbow(8), horiz = TRUE,
main = "2016년도 vs 2017년도 분기별 매출현황")
barplot(chart_data, xlim = c(0,600),
ylab = "년도별 현황",
xlab = "매출액(단위 : 만원)",
col = rainbow(8), horiz = TRUE,
main = "2016년도 vs 2017년도 분기별 매출현황")
# 2) 점차트
?dotchart
dotchart(chart_data, color = c("green", "red"),
lcolor = "black", pch=1:2,
labels = names(chart_data), xlab = "매출액",
main = "2016년도 vs 2017년도 분기별 매출현황",
cex=1.2)
# pch : pointer 모양
# cex : 확대/축소
# 3) 파이 차트
?pie
par(mfrow=c(2,2)) # 2행2열
pie(chart_data, labels = names(chart_data),
border = 'blue', col = rainbow(8),
cex=1.2)
pie(table(iris$Species))
# 2. 연속변수 시각화
# - 시간, 길이, 몸무게 등과 같은 연속성을 갖는 변수
# - 실수형 변수
# - boxplot, hist, plot
par(mfrow=c(1,1)) # 1행1열
# 1) 상자 그래프 시각화
VADeaths
str(VADeaths) # num [1:5, 1:4] : 2차원
str(chart_data) # num [1:8] : 1차원
summary(VADeaths) # 요약통계량
boxplot(VADeaths) # 요약통계량 시각화
# 2) 히스토그램 시각화
data("iris") # dataset memory loading
iris
str(iris)
# 'data.frame': 150 obs. of 5 variables:
#$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
#$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
#$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
#$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
#$ Species : Factor w/ 3 levels "setosa","versicolor",..:
mean(iris$Sepal.Length)
summary(iris$Sepal.Length)
hist(iris$Sepal.Length, xlab = "꽃받침 길이",
col = "green", main ="iris Sepal.Length",
xlim = c(4.3, 7.9))
summary(iris$Sepal.Width) # 2.000 ~ 4.400
hist(iris$Sepal.Width, xlab = "꽃받침 넓이",
col = "blue", main ="iris Sepal.Width",
xlim = c(2.0, 4.4))
# 밀도분포곡선, 정규분포곡선
hist(iris$Sepal.Width, xlab = "꽃받침 넓이",
col = "yellow", freq = FALSE,
main ="iris Sepal.Width",
xlim = c(2.0, 4.5))
# 밀도분포곡선 추가 : 밀도 기준 line
lines(density(iris$Sepal.Width), col="red")
# 정규분포곡선 : 대칭성 확인
x <- seq(2.0, 4.5, 0.1)
x
curve(dnorm(x, mean=mean(iris$Sepal.Width),
sd=sd(iris$Sepal.Width)), col="blue", add=T)
# 3) 산점도(plot)
# plot(x, y)
x <- runif(5, min=0, max=1)
y <- runif(5, min=1.5, max=2.5)
x; y
plot(x, y)
# plot(y)
y <- 1:5
y
plot(y) # x : index
# 산점도 주요 속성
price <- runif(n=10, min=2, max=8)
price
par(mfrow=c(2,2))
plot(price, type = "l") # 실선
plot(price, type = "o") # 타원과 실선
plot(price, type = "h") # 직선
plot(price, type = "s") # step
# pch = 1 ~ 30
plot(price, type = "o", pch=5) # 빈 마름모
plot(price, type = "o", pch=15) # 사각형
plot(price, type = "o", pch=20) # 원형
plot(price, type = "o", pch=25) # 삼각형
# 만능 차트
WWWusage # Time Series:
plot(WWWusage) # 시계열 data시각화
methods(plot)
# 회귀분석 model
install.packages("psych")
library(psych) # galton dataset
data("galton") # dataset loading
galton
str(galton)
# 'data.frame': 928 obs. of 2 variables:
# $ parent: num
# $ child : num
head(galton)
# x : parent(독립변수) ~ y : child(종속변수)
model <- lm(formula=child ~ parent, data = galton)
model
plot(model)
# 3. 변수간의 비교 시각화
# - 산점도 매트릭스(scatter matrix)
head(iris)
pairs(iris[1:4]) # 5번 칼럼 제외
# 4. 3차원 산점도
install.packages('scatterplot3d')
library(scatterplot3d)
# 꽃의 종류별 분류
iris_setosa = iris[iris$Species == 'setosa',]
iris_versicolor = iris[iris$Species == 'versicolor',]
iris_virginica = iris[iris$Species == 'virginica',]
# scatterplot3d(밑변, 오른쪽변, 왼쪽변, type='n') # type='n' : 기본 산점도 제외
d3 <- scatterplot3d(iris$Petal.Length, iris$Sepal.Length, iris$Sepal.Width, type='n')
d3$points3d(iris_setosa$Petal.Length, iris_setosa$Sepal.Length,
iris_setosa$Sepal.Width, bg='orange', pch=21)
d3$points3d(iris_versicolor$Petal.Length, iris_versicolor$Sepal.Length,
iris_versicolor$Sepal.Width, bg='blue', pch=23)
d3$points3d(iris_virginica$Petal.Length, iris_virginica$SSepal.Length,
iris_virginica$Sepal.Width, bg='green', pch=25)
table(iris$Species)
#setosa versicolor virginica
# 50 50 50
# 5. 차트 파일 저장
setwd("c:/2_Rwork/output")
jpeg("galton.jpg", width = 750, height = 480)
plot(galton$child, galton$parent, col = "green")
title("galton dataset plotting")
dev.off() # 장치 종료
#######################
### train/test 과적합
#######################
str(galton)
# 'data.frame': 928 obs. of 2 variables:
nrow(galton)*0.7 # 649.6
idx <- sample(x=nrow(galton), size=nrow(galton)*0.7,
replace = FALSE)
# x : 관측치 길이
# size : sample size
# replace = FALSE : 비복원 추출
length(idx) # 649
idx # 행 번호
train <- galton[idx, ] # 70%
test <- galton[-idx, ] # 30%
dim(train) # 649 2
dim(test) # 279 2
# 회귀model - train
model <- lm(child ~ parent, data = train)
pred <- model$fitted.values # 예측치(자녀 키)
pred
# 회귀model - test
model2 <- lm(child ~ parent, data = test)
pred2 <- model2$fitted.values # 예측치(자녀 키)
pred2
plot(x=pred, y=train$parent, col="blue", pch=18)
points(pred2, test$parent, col="red", pch=19)
# 범례
legend("topleft", legend = c("train", "test"),
col = c("blue", "red"), pch = c(18, 19))
'R 과 데이터분석 > 기초 문법 ~ 머신러닝' 카테고리의 다른 글
[R 데이터분석] 7장. EDA & 데이터 전처리 (0) | 2019.09.13 |
---|---|
[R 데이터분석] 6장. 데이터 조작 (0) | 2019.09.13 |
[R 데이터분석] 4장. 제어문과 함수 (0) | 2019.09.13 |
[R 데이터분석] 3장. 데이터 입출력 (feat. 데이터셋 제공 사이트) (0) | 2019.09.13 |
[R 데이터분석] 2장. 데이터 자료구조 & 문자열 처리와 정규표현식 (0) | 2019.09.12 |
댓글