DATOR


도표의 이해와 패턴 탐색


도수분포표, 히스토그램, 밀도그림  교재 중 일부분 입니다.
따라해 보세요.  
p_C001.gif

데이터분석도구RFundamental007.gif 데이터분석도구RFundamental008.gif      데이터분석도구RFundamental026.gif 데이터분석도구RFundamental027.gif  데이터분석도구RFundamental029.gifw_c001.gif w_c002.gif w_c003.gif w_c004.gif



############################################################
히스토그램,박스플롯,기술통계,기본함수보조함수 코드
############################################################
#히스토그램
rm(list =ls())
setwd("c:/source_data_package2")
getwd()
data.file <- file.path('data', '01_heights_weights_genders.csv')
heights.weights <- read.csv(data.file, header = TRUE, sep = ',')
heights.weights
###########################################
#http://www.dator.co.kr/Qn2a/textyle/2708885
#error in loadName...............이하 중략
###########################################
install.packages("ggplot2")
library('ggplot2')
head(heights.weights,10)
#폭이 좁은 histogram
#ggplot(데이터셋, aes(x=축에사용할 변수지정))+ #shift + enter
#geom_그림의기하학적표현(bandwith=막대의 넒이)#블럭잡고 실행
ggplot(heights.weights, aes(x = Height)) +
  geom_histogram(binwidth = 1)
##폭이 넓은 histogram
ggplot(heights.weights, aes(x = Height)) +
  geom_histogram(binwidth = 5)

#5
install.packages("lattice")
library(lattice)
#~ x축에 올 변수명, data=데이터
#seq(4,8,by=0.2)4부터 8을 0.2간격으로 나눔
#ylim은 y축의 최소값, 최대값
# groups =  그룹
#panel은 사각형 안의 설정
#col=c("cyan","magenta","yellow") 색
#alpha=0.4 투명도 
#범례: auto.key=list(colums=컬럼개수,
#rectangles=직사각형으로 할것인지여부.
histogram( ~Sepal.Length,
           data = iris,
           type = "p",
           breaks = seq(4,8,by=0.2),
           ylim = c(0,30),
           groups = Species,
           panel = function(...)panel.superpose(...,panel.groups=panel.histogram,
                                                col=c("cyan","magenta","yellow"),alpha=0.4),
           auto.key=list(columns=3,rectangles=TRUE,
                         col=c("cyan","magenta","yellow3"))
)
#9
#boxplot
iris2<-iris
write.csv(iris2,"c:/source_data_package2/iris2.csv")
boxplot(iris$Sepal.Width)
median(iris$Sepal.Width)
#Value
?boxplot
box_valu<- boxplot(iris$Sepal.Width)
box_valu
box_valu$n
box_valu$stats
box_valu$out

#10
#여러 그룹의 상자그림
set.seed(1234)#난수표에 중심, 랜덤하게 값을 추출
dat <- data.frame(Cond = factor(rep(c("A","B","C"), each=200)),
                  Value = rnorm(600))
str(dat)
library('ggplot2')
?ggplot
#aes(x=Cond, y=Value, fill=Cond)
#x=Cond변수를 x축에
#y=Value변수를 Y축에
aaa<-ggplot(dat, aes(x=Cond, y=Value, fill=Cond))+geom_boxplot()
bbb<-aaa+points()
#11
#----------------------------------------------------------------
#꽃의 종류별(명목:코드형)로 
#변수별분포(Petal.Length:수치형)를 파악
#aggregate(수치형변수~factor,요약함수meansum...,data=데이터셋명)
aggregate(Petal.Length ~ Species, summary, data=iris)
aggregate(Petal.Length ~ Species, sum, data=iris)
aggregate(Petal.Length ~ Species, mean, data=iris)
#Species 각 그룹별로 iris데이터의 1열과 3열의값 평균
?aggregate
aggregate(iris[,c(1,3)],by=iris$Species,mean)#error
abc<-aggregate(iris[,c(1,3)],by=iris[c('Species')],mean)
write.csv(abc,"c:/source_data_package2/abc.csv")

aggregate(iris[,c(1,3)],by=list(iris$Species),FUN=mean)

#종별(factor)기준 여러변수의 평균
aggregate(iris[,1:4],by=list(iris$Species),FUN=mean)
#첫번째 컬럼의 이름 Species123로 지정
aggregate(iris[,c(1,3)],by=list(Species123=iris$Species),summary)
#-------------------------------------------------------------
# 조건주어서 추출 후 값 산출
#data=subset(dX1, select=c(Sepal.Length,Species),subset=(Sepal.Length>0)
head(dX1 <- iris) #150개가 dX1로
#data=데이터셋
#데이터 =subset(데이터, select=선택할 컬럼, subset=조건)
aggregate(Sepal.Length ~ Species, mean,
          data=subset(dX1, select=c(Sepal.Length,Species),subset=(Sepal.Length>5))
          )

boxplot(Petal.Length ~ Species, data=iris)

#13
#평균에서 + 표준편차 만큼과 – 표준편차 만큼을 표시
OrchardSprays
str(OrchardSprays)
#y축 ~x축
rb <- boxplot(decrease ~ treatment, data = OrchardSprays, col = "bisque")
#제목
title("Comparing boxplot()s and non-robust mean +/- SD")

#treatment별 평균
mn.t <- tapply(OrchardSprays$decrease, OrchardSprays$treatment, mean)
mn.t
#treatment별 표준편차
sd.t <- tapply(OrchardSprays$decrease, OrchardSprays$treatment, sd)
sd.t 
#x축으로 0.3 만큼 이동해서 “pink”색선을 그리기위해서 위치이동
#boxplot의 n개만큼 seq(rb$n)
xi <- 0.3 + seq(rb$n)
#points(x축지점, 각 treatment의 decrease변수 평균)
points(xi, mn.t, col = "orange", pch = 18)
#y축의 “mn.t- sd.t“는 시작점,“mn.t + sd.t“는 도착점
arrows(xi, mn.t - sd.t, xi, mn.t + sd.t,
       code = 3, col = "pink", angle = 75, length = .1)


#16,17
#기술통계
#데이터셋명$변수명, 숫자
exam <- c(50,53,53,55,55,72,73,73,73,73,58,58,59,
          59,60,73,73,73,74,74,60,62,62,62,62,75,75,76,76,
          77,63,64,64,65,65,77,77,78,78,78,66,66,66,67,67,
          78,79,79,79,80,67,67,67,67,67,67,80,71,82,82,83,
          68,68,68,68,69,84,84,84,86,87,70,70,70,71,72,89,90,91,92,98)
#4분위수
quantile(exam)
#p% 분위수
p <- 0.02
quantile(exam,p)

#중앙값을 중심으로 전체데이터의 50%을 포함하는 범위
c(quantile(exam , probs = 0.25),quantile(exam , probs = 0.75))

#중앙값을 중심으로 전체95%가 포함된 범위
c(quantile(exam, probs = 0.025),quantile(exam, probs = 0.775))

#밀도그림
hist(exam)
a<-hist(exam, freq=FALSE)
##순서
a
b<-lines(density(exam))
####
a;b
abline(v=mean(exam),lty="dotted")

abline(v=median(exam),col="red",lty="dotted")
abline(v=quantile(exam,c(0.25,0.75)),col="green")
abline(v=quantile(exam,c(0.95)),col="red",lwd=2)

fivenum (1:11)

#20
#아래 밀도그림에서 비대칭도 
install.packages("boot")
library(boot)
install.packages("e1071")
library(e1071) 
faithful
str(faithful)
duration = faithful$eruptions     
skewness(duration)  

wait = faithful$waiting     
skewness(wait)
####
faithful1<-faithful
write.csv(faithful1,"c:/source_data_package2/faith.csv")
####
erup <- faithful$eruptions
hist(erup, freq=FALSE)
lines(density(erup))
abline(v=mean(erup),lty="dotted",col="green")
abline(v=median(erup),col="red",lty="dotted")
#abline(v=quantile(erup,c(0.25,0.75)),col="green")
abline(v=quantile(erup,c(0.95)),col="red",lwd=2)

#21
set.seed(1000)
x1 = rbeta(10000,2,4)
x2 = rbeta(10000,5,5)
x3 = rbeta(10000,4,2)
skewness(x1)
skewness(x2)
skewness(x3)
par(mfrow=c(2,2))
hist(x1, freq=FALSE)
lines(density(x1))
hist(x2, freq=FALSE)
lines(density(x2))
hist(x3, freq=FALSE)
lines(density(x3))

#22,23
library(boot)
install.packages("e1071")
library(e1071)
str(faithful)
sapply(faithful,kurtosis)
sapply(faithful,skewness)
#그림이 그려지는 창을 분할
par(mfrow=c(1,2))
hist(faithful$eruptions, freq=FALSE)
lines(density(faithful$eruptions))
hist(faithful$waiting, freq=FALSE)
lines(density(faithful$waiting))
#변수에 대한 하나의 왜도 및 첨도로 판단 할 수 있는 데이터가 아니다.
#양봉형 데이터: 하나의 변수내에 두 개의 class 가 있을 수 있을 것등을 고려하여서 적절한 처리 후 분석하여야한다.
#두 집단으로 분리 가능성 정도, 평균차를 구해볼 필요성 등이 있다.


#24
#두 개의 변수에서는 평균, 중위수가 의미가 있지만 
#나머지 두 개 변수에서는 중위수나 평균이 의미가 x
#표본의 개수를 더 증가 시키거나, 데이터를 분할 한 후에 분석 
#밀도
par(mfrow=c(2,2))
hist(iris[,1], freq=FALSE)
lines(density(iris[,1]))
hist(iris[,2], freq=FALSE)
lines(density(iris[,2]))
hist(iris[,3], freq=FALSE)
lines(density(iris[,3]))
hist(iris[,4], freq=FALSE)
lines(density(iris[,4]))
#산점도
par(mfrow=c(1,1))
#pairs(숫자변수 여러개, panel=panel.smooth 선,
#col=정수(데이터셋명$factor변수(그룹)))
pairs(iris[,1:4],
      panel=panel.smooth,col=as.integer(iris$Species))


#변수별 비대칭도와 첨도
sapply(iris[1:4],kurtosis)

sapply(iris[1:4],skewness)

#변수선택
#iris 데이터셋에서 
#Petal(꽃잎)은 Species(target) 별로 구분이 뚜렷 함
#Sepal(꽃받침)은 Species(target) 별로 구분하기가  뚜렷하지 않은 분포 임.
#그러므로 종을 구분하는데 있어서 Petal(꽃잎)을 중요한 변수로 설정함

#33
#점크기와 점모양 예제
par(mfrow=c(1,1))
plot(0:10,0:10,xlim=c(0,32),ylim=c(0,48), type="n",xaxt="n",yaxt="n",xlab="",ylab="")
x <- seq(1,31,2); y <- rep(4,16)
points(x,y,pch=0:15, cex=0.7)
text(x,y-3,as.character(0:15),cex=0.6)

#36
#5가지 심볼을 5가지 색
# 빈 도표 생성
plot(0:6,0:6,pch=22,type="n",xaxt="n",yaxt="n",ylab="col(border)",xlab="bg(background)")
# “axis(1“은 x축 지정
# at은 x 축의 눈금 명칭 지정,범위를 1에서 5로 지정
axis(1,at=1:5)    
#“axis(2“은  y 축 지정
#at=1:5은 y 축의 눈금 명칭 지정
axis(2,at=1:5)  

# y축을 1위치에지정
#(1,1) (2,1) (3,1)
points(1:5,rep(1,5),pch=c(21,22,23,24,25),bg=1:5,col=1) 

#y축을 2위치에지정
points(1:5,rep(2,5),pch=c(21,22,23,24,25),bg=1:5,col=2)


#39
#colors() 657개의 색상
colors()
cl <- colors()
length(cl); cl[1:20]
par(mfrow=c(2,1))
plot(c(1:16), col=c(0:6), cex=5,pch=16)#white 보임
plot(c(1:16), col=c(1:6), cex=5,pch=16)#white 안보임
?datasets
?mtcars

Tag

Leave Comments