R 데이터셋 전처리용 패키지 : plyr, dplyr

오늘 제가 정리해 봤던 R 패키지인 plyr과 dplyr를 올려 봅니다.
plyr
Hadley Wickham가 R Language로 작성한 데이터 처리에 특화된 R 패키지
xyply
데이터의 분할, 함수 적용, 재조합 등에 사용하는 함수
x : 입력 데이터 타입, y : 출력 데이터 타입
a. 배열, d. data.frame, l. 리스트, _. 없음
m. data.frame 또는 배열의 각 컬럼에 함수 적용한 후 그 결과를 조합(추가)
데이터셋의 행별로 함수 적용 (.margins 인자 값이 1)
library(plyr)
adply(iris, 1, function(row) { row$Sepal.Length })
데이터셋의 열별로 함수 적용 (.margins 인자 값이 2)
adply(iris[, 1:4], 2, function(col) { sum(col) })
데이터를 group by 하여 함수 적용
ddply(iris, .(Species), # Species로 group by
         function(group) { data.frame(mean=mean(group$Sepal.Length)) })
ddply(iris, .(Species), transform, valA=Sepal.Length)
ddply(iris, .(Species), mutate, valA=Sepal.Length)
dplyr
Hadley Wickham가 C++로 작성한 데이터 처리에 특화된 R 패키지
dplyr 패키지 로드
detach(“package:plyr”, unload=TRUE) # plyr 패키지 unload
library(dplyr) # dplyr 패키지 로드
data <- iris %>% filter(Species == “setosa” | Species == “versicolor”) %>% select(Sepal.Length, Sepal.Width, Species) %>% mutate(Sepal = Sepal.Length + Sepal.Width) %>% arrange(Sepal) %>% group_by(Species) %>% summarise(SepalSum=sum(Sepal), SepalMean=mean(Sepal))
filter(Species == “setosa” | Species == “versicolor”) # 필터링
select(Sepal.Length, Sepal.Width, Species)         # 열 추출
mutate(Sepal = Sepal.Length + Sepal.Width)         # 열 추가
arrange(Sepal)                                # 정렬
group_by(Species)                        # 그룹핑
summarise(SepalSum=sum(Sepal), SepalMean=mean(Sepal)) # 집계
%>%를 사용하여 함수를 연결하여 사용하지 않고 개별 함수를 호출하여 사용할 수도 있습니다. 이 경우 함수의 첫번째 인자는 처리할 데이터셋으로 지정 합니다.
data <- filter(iris, Species == “setosa” | Species == “versicolor”) # 필터링
data <- select(data, Sepal.Length, Sepal.Width, Species)         # 열 추출
data <- mutate(data, Sepal = Sepal.Length + Sepal.Width)         # 열 추가
data <- arrange(data, Sepal)                                 # 정렬
data <- group_by(data, Species)                                 # 그룹핑
data <- summarise(data, SepalSum=sum(Sepal), SepalMean=mean(Sepal)) # 집계
파일
 

 

빅데이터 온라인 교육

관심 있으신 분은 한번 들어 보세요.
파일

 

[ADP 실기] ADP 실습 데이터 모음

 
제가 ADP 교재로 작업한 실습 데이터 입니다.
 
 
 
 
 
파일

 

 

 

 
 
 

[ADP 실기] Cheat Sheet for R

 
 
예전에 ADP 필기를 위해서 
약 1200 페이지의 책을 꼭 기억해야 할 6 페이지의 Cheat Sheet로 정리한 적이 있습니다.
 
이번에 ADP 실기를 위해서
꼭 기억해야 할 R 명령어를 2 페이지로 정리를 하여 보았습니다.
(Shiny, D3.js 등 제외)
 
 
 
 
 
파일

 

 

 

[ADP 실기] rJava 로딩 오류 발생시 조치 사항

 
 
rJava 로딩시 아래와 같은 오류가 발생하는 분은 참조 하세요.
 

Error : .onLoad가 loadNamespace()에서 'rJava'때문에 실패했습니다:

  호출: inDL(x, as.logical(local), as.logical(now), …)

  에러: unable to load shared object 'C:/Users/ghkim/Documents/R/win-library/3.1/rJava/libs/x64/rJava.dll':

  LoadLibrary failure:  지정된 모듈을 찾을 수 없습니다.

 
 
오류 원인
 
JDK 8.0이 설치되어 있을 경우 오류 발생
 
 
조치 방법
 
RStudio의 작업 폴더에 있는 .Rprofile 파일에 아래 코드 추가 합니다. (파일이 없으면 만들어 주세요.)

 
 

Sys.setenv(JAVA_HOME="C:/appl/jre170")

 

 
파일

 

 

 

 
 

[ADP 실기] R 주요 패키지 목록

 
 
기본적으로 설치해서 사용하고 있는 R 패키지 입니다.
 
 
#— 기본 패키지
install.packages("base")
install.packages("utils")
install.packages("stats")
install.packages("graphics")
 
#— ETL
install.packages("foreach")             #— foreach 반복문
 
#install.packages("XLConnect")           #— Excel 입출력
 
#— ETL : 데이터 변환용 패키지
install.packages("data.table")          #— data.frame에 key를 추가한 데이터 구조
install.packages("sqldf")               #— Query 문으로 데이터 처리
install.packages("plyr")
install.packages("dplyr")
 
install.packages("reshape")
install.packages("reshape2")
 
install.packages("Amelia")              #— 결측값 보정
install.packages("DMwR")                #— 이상값 추출
 
#— ETL : 샘플링용 패키지
install.packages("cvTools")             #— 계통추출법 (Systematic sampling)
install.packages("doBy")                #— 분류별 샘플 추출
install.packages("sampling")            #— 층화추출법 (Stratified random sampling)
install.packages("caret")
install.packages("DMwR")
 
#— Description
install.packages("Hmisc")               #— 상관계수
 
install.packages("caret")               #— 변수 선택
install.packages("FSelector")           #— 변수 선택
install.packages("rpart")               #— 변수 선택
 
#— Classification
install.packages("MASS")                #— 베이즈 분류 (Bayes Classification) 모형
install.packages("party")               #— ctree 분류
install.packages("rparty")              #— 의사결정 나무 모형
install.packages("randomForest")        #— randomForest 분류
install.packages("ROCR")
install.packages("caret")
install.packages("lattice")
 
#— Estimation : 회귀분석, 시계열 분석을 위한 패키지
install.packages("TTR")                 #— 평활
install.packages("forecast")            #— ARIMA
 
install.packages("mgcv")                #— gam, bam modelling
 
#— Clustering
install.packages("cluster")
install.packages("fpc")                 #— Density-based Clustering
#install.packages("class")
 
#— Association : 연관성 분석
install.packages("arules")              #— 연관 분석
install.packages("arulesViz")           #— 연관 분석 시각화
install.packages("pmml")                #— 연관 규칙을 XML 파일로 저장
 
#— Optimization : 최적화
install.packages("lpSolve", dependencies = TRUE)
install.packages("lpSolveAPI")
 
#— Text_Mining : 비정형 데이터 마이닝 패키지
install.packages("tm")                  #— Text Mining
install.packages("wordcloud")           #— 워드 클라우드
 
#— Social Network Analysis
install.packages("igraph")
 
#— Visualization : 시각화용 패키지
install.packages("ggplot2")
install.packages("aplpack")             #— 줄기잎 그림, 체르노프 안형 그림, Start Chart
install.packages("vcd")                 #— Mosaic plot
install.packages("googleVis")           #— 모션 챠트, GEO 챠트
install.packages("shiny")               #— Shiny
 
install.packages("caret")               #— 산점도 행렬
 
#— 한글 패키지
install.packages("KoNLP")               #— 한글 자연어 처리 (NLP)
 
#— 병렬 처리용 패키지
install.packages("doParallel")          #— Windows 용
install.packages("doMC")                #— Mac 용
 
#— 기타 미분류 패키지
install.packages("knitr")               #— R 문서화
install.packages("RWordPress")          #— knitr로 문서화한후 WordPress로 배포
 
install.packages("twitteR")             #— Twitter 접속
install.packages("ROAuth")              #— Twitter 접속
install.packages("Rfacebook")           #— Facebook 접속
install.packages("Rook")                #— Facebook 접속

 
 
파일

 

[ADP 실기] Shiny

 
 
library(shiny)
 
#— 샤이니를 이용한 그래프 : http://glimmer.rstudio.com/winston/stocks/
#— C:/Program Files/R/R-3.0.3/library/shiny/examples/ 폴더에 샘플 존재
runExample("01_hello")                  #— http://127.0.0.1:3957/
runExample("02_text")                    #— http://127.0.0.1:3957/
runExample("03_reactivity")                  #— http://127.0.0.1:3957/
 
 
library(shiny)
runShiny <- function(idx) {
  processStep <<- idx
  runApp(port = 8081)
}
 
#— 종료하려면 Esc 또는 "stop" 버튼을 선택하세요.
runShiny(1)    #— 1  : pageWithSidebar를 사용한 Hello Shiny
runShiny(2)    #— 2  : fluidPage를 사용한 Hello Shiny
runShiny(3)    #— 3  : boxplot 샘플
runShiny(4)    #— 4  : input 샘플
runShiny(5)    #— 5  : Tab 샘플
runShiny(6)    #— 6  : DataTable 샘플
runShiny(7)    #— 7  : checkBoxGroup 샘플
runShiny(8)    #— 8  : renderPrint 샘플
runShiny(9)    #— 9  : uploading file 샘플
runShiny(10)   #— 10 : downloading file 샘플
#— 11 : HTML UI 샘플 (5번 Tab 샘플을 참조)
runApp(appDir = paste(getwd(), "/shiny", sep = ""), port = 8081)
 
rm(list=ls(all=TRUE))                   #— 작업 영역에 저장된 데이터 모두 삭제
###—————————————————————————–

 
 
파일

[ADP 실기] 기타 visualization, googleVis

 
 
###—————————————————————————–
### 줄기잎 그림
###—————————————————————————–
library(aplpack)
data <- c(1, 2, 3, 4, 10, 2, 30, 42, 31, 50,
          80, 76, 90, 87, 21, 43, 65, 76, 32, 12,
          34, 54)
stem.leaf(data)
rm(data)
 
###—————————————————————————–
### 체르노프 안형 그림
###—————————————————————————–
library(aplpack)
data(WorldPhones, package="datasets")   #— 국가별 연도별 전화기 숫자
head(WorldPhones)
faces(WorldPhones)
 
data(Orange, package="datasets")
data <- Orange
(data$Tree <- as.numeric(Orange$Tree))
faces(data)
rm(WorldPhones, Orange, data)
 
###—————————————————————————–
### Star Chart
###—————————————————————————–
#— Radar char, Star chart
library(aplpack)
data(WorldPhones, package="datasets")   #— 국가별 연도별 전화기 숫자
stars(WorldPhones)
rm(WorldPhones)
 
data(Orange, package="datasets")
stars(Orange)
rm(Orange)
 
###—————————————————————————–
### 모자이크 플롯 (Mosaic plot)
###—————————————————————————–
#—    복수의 categorical variable 분포 파악에 도움이 되는 시각화 방법
data(Titanic, package="datasets")
data(HairEyeColor, package="datasets")
 
library(graphics)
mosaicplot(Titanic, color=TRUE)
mosaicplot(~ Class + Survived, data=Titanic, color=TRUE)
mosaicplot(~ Sex + Age + Class + Survived, data=Titanic, 
           main="Survival on the Titanic", col=hcl(c(240, 1)), off=2)
 
library(vcd)
mosaic(Titanic)
#— 가로 구분 : Class -> Age
#— 세로 구분 : Sex -> Survived
mosaic(Titanic, shade = TRUE, legend = TRUE)
mosaic(HairEyeColor, shade = TRUE, legend = TRUE)
 
#— 특정 집단에 색상 표시
strucplot(Titanic, pop = FALSE)
grid.edit("rect:Class=1st,Sex=Male,Age=Adult,Survived=Yes", gp = gpar(fill = "red"))
 
rm(list=ls(all=TRUE))                   #— 작업 영역에 저장된 데이터 모두 삭제
 
###—————————————————————————–
### 모션 챠트
###—————————————————————————–
data(Fruits, package = "googleVis")
Fruits
 
library(googleVis)
plot(gvisMotionChart(Fruits, idvar = "Fruit", timevar = "Year"))
rm(Fruits)
 
###—————————————————————————–
### GEO 챠트
###—————————————————————————–
library(googleVis)
data(Exports, package = "googleVis")    #— 국가별 수출에 따른 수익과 온라인 유무
head(Exports)
#— 전세계 지도에 국가별 수출 수익의 크기를 색상으로 표시
plot(gvisGeoChart(Exports, locationvar='Country', colorvar='Profit'))
#— 유럽(150) 지역만 표시
plot(gvisGeoChart(Exports, "Country", "Profit", options=list(region="150")))   #— 150. Europe
plot(gvisGeoChart(Exports, "Country", "Profit", options=list(region="030")))   #— 030. Easten Asia
 
 
data(state, package="datasets")         #— 주별 문맹률 등
(data <- data.frame(state.name, state.x77))
m <- gvisGeoChart(data, "state.name", "Illiteracy",
                  options=list(region="US", displayMode="regions", resolution="provinces",
                               width=600, height=400))
plot(m)
m <- gvisGeoChart(data, "state.name", "Illiteracy",
                  options=list(region="KR", displayMode="regions", resolution="provinces",
                               width=600, height=400))
plot(m)
 
 
data(CityPopularity, package = "googleVis")
head(CityPopularity)
m <- gvisGeoChart(CityPopularity, locationvar='City', colorvar='Popularity',
                  options=list(region='US', height=350, 
                               displayMode='markers',
                               colorAxis="{values:[200,400,600,800],
                               colors:[‘red’, ‘pink’, ‘orange’,’green’]}"))
plot(m)
 
 
data(Andrew, package = "googleVis")     #— 허리케인과 관련된 위치와 속도 정보
head(Andrew)
m <- gvisGeoChart(Andrew, "LatLong", colorvar='Speed_kt',
                  options=list(region="US"))
plot(m)
 
m <- gvisGeoChart(Andrew, "LatLong", sizevar='Speed_kt',
                  colorvar="Pressure_mb", options=list(region="US"))
plot(m)
 
rm(list=ls(all=TRUE))                   #— 작업 영역에 저장된 데이터 모두 삭제
 
 
#require(stats)
data(quakes, package = "datasets")      #— 지진 데이터
head(quakes)
quakes$latlong <- paste(quakes$lat, quakes$long, sep=":")
m <- gvisGeoChart(quakes, "latlong", "depth", "mag",   #— depth : 깊이, mag : 진도
                  options=list(displayMode="Markers", region="009",
                               colorAxis="{colors:[‘red’, ‘grey’]}",
                               backgroundColor="lightblue"))
plot(m)
rm (list = c("quakes", "m"))
 
 
#library(XML)
#— 위키피디아의 국가별 신용등급 정보의 세번째 테이블에 있는 데이터
#url <- "http://en.wikipedia.org/wiki/List_of_countries_by_credit_rating"
#(data <- readHTMLTable(readLines(url), which = 3))
#write.table(data, file="data/ADV_5_3_001.csv", append=FALSE, quote=FALSE, sep=",", row.names=FALSE)
(data <- read.table("data/ADV_5_3_001.csv", header=TRUE, sep=",", 
                    stringsAsFactors=FALSE, na.strings=c('NIL'), 
                    comment.char="#", encoding="UTF-8") )
levels(data$Rating) <- substring(levels(data$Rating), 4, nchar(levels(data$Rating)))   #— 범주 지정
data$Ranking <- data$Rating
levels(data$Ranking) <- nlevels(data$Rating):1
data$Ranking <- as.character(data$Ranking)
data$Rating <- paste(data$Country, data$Rating, sep=": ")
m <- gvisGeoChart(data, "Country", "Ranking", hovervar="Rating",
                  options=list(gvis.editor="S&P", 
                               colorAxis="{colors:[‘#91BFDB’, ‘#FC8D59’]}"))
plot(m)
rm (list = c("data", "m"))
 
 
#library(XML)
#— 최근 30일간 진도 4.0 이상의 지진발생 정보
#(data <- read.csv("http://earthquake.usgs.gov/earthquakes/feed/v0.1/summary/2.5_week.csv"))
#write.table(data, file="data/ADV_5_3_002.csv", append=FALSE, quote=FALSE, sep=",", row.names=FALSE)
(data <- read.table("data/ADV_5_3_002.csv", header=TRUE, sep=",", 
                    stringsAsFactors=FALSE, na.strings=c('NIL'), 
                    comment.char="#", encoding="UTF-8") )
data$loc=paste(data$Latitude, data$Longitude, sep=":")
m <- gvisGeoChart(data, "loc", "Depth", "Magnitude",
                  options=list(displayMode="Markers", 
                               colorAxis="{colors:[‘purple’, ‘red’, ‘orange’, ‘grey’]}",
                               backgroundColor="lightblue"), chartid="EQ")
plot(m)
rm (list = c("data", "m"))
 
rm(list=ls(all=TRUE))                   #— 작업 영역에 저장된 데이터 모두 삭제
###—————————————————————————–

 
 
파일
 

[ADP 실기] ggplot2

 
 
 
###—————————————————————————–
### 실습용 데이터
###—————————————————————————–
data(ChickWeight, package="datasets")   #— 식이요법을 적용한 닭
head(ChickWeight)
#— Time : 시간
#— weight : 몸무게
#— Chick : 닭의 ID
#— Diet : 닭에게 먹인 다이어트 약
 
data(mtcars, package="datasets")        #— 자동차 테스트에 관한 데이터
head(mtcars)
#— wt : 무게
#— mpg : 연비
 
data(movies, package="ggplot2")
head(movies)
 
data(economics, package="ggplot2")      #— 미국 경제 상황에 대한 시계열 데이터
head(economics)
#— date : 월별로 정보를 수집한 시점
#— pce : 개인 소비지출
#— pop : 총인구 (1000 단위)
#— psavert : 개인 저축률
#— unempmed : 실업기산 중앙값 (주 단위)
#— unemploy : 실업자수 (1000 단위)
 
data(diamonds, package="ggplot2")       #— 다이아몬드의 캐럿, 커팅 정보
head(diamonds)
#— price : 가격 ($)
#— carat : 다이아몬드의 무게
#— cut : cut 품질
#— colour : J ~ D (D가 최상품)
#— clearity : 투명도, I1 ~ IF (IF가 최상품)
#—     I1, SI1, SI2, VS1, VS2, VVS1, VVS2, IF
#— x, y : 크기 (mm), 
#— z : 깊이 (mm)
#— table : 다이아몬드 꼭지의 폭과 제일 넓은 곳의 거리
 
data(Orange, package="datasets")
 
#(data <- read.table(file = url("http://dl.dropbox.com/u/1648032/ggplot2_tutorial_dataset.txt"), header=TRUE, sep="t", 
#                    stringsAsFactors=FALSE, na.strings=c('NIL'), 
#                    comment.char="#", encoding="UTF-8") )
#write.table(data, file="data/ADV_5_3_003.csv", append=FALSE, quote=FALSE, sep=",", row.names=FALSE)
(data01 <- read.table("data/ADV_5_3_003.csv", header=TRUE, sep=",", 
                      stringsAsFactors=FALSE, na.strings=c('NIL'), comment.char="#", 
                      fileEncoding="UTF-8", encoding="CP949"))
 
set.seed(1410)
(dsmall <- diamonds[sample(nrow(diamonds), 100),])
 
###—————————————————————————–
### 산점도
###—————————————————————————–
#— geom_point() : 산점도 (XY 그래프)
#—     geom_smooth() : 평균선
#—     geom_hline() : 가로선
#—     annotate() : 박스
#—     scale_shape_identity() : 
library(ggplot2)
(g <- qplot(wt, mpg, colour = hp, data = mtcars))
(g <- g + coord_cartesian(ylim = c(0, 40)))   #— ylim : y축의 범위 지정
(g <- g + scale_colour_continuous(breaks = c(100, 300)))   #— breaks : 색상 분류 기준에서 break point 지정
(g <- g + guides(colour = "colourbar"))                    #— 범례로 색상바 사용
(g <- g + guides(colour = guide_legend()))                 #— 이산형 범례, 작은값 -> 큰값
(g <- g + guides(colour = guide_legend(reverse=TRUE)))     #— 이산형 범례, 큰값 -> 작은값
(g <- g %+% mtcars[1:10, ])             #— 최초 10개의 데이터만 적용
 
(g <- qplot(disp, wt, colour = hp, data = mtcars))
(g <- g + geom_smooth())
(g + scale_x_continuous(limits = c(325, 500))) #— 범위를 지정하여 그래프를 그림
(g + scale_x_reverse())
(g + scale_y_continuous(limits = c(3, 5)))     #— 범위를 지정하여 그래프를 그림
(g + scale_y_reverse())
 
g <- ggplot(ChickWeight, aes(x = Time, y = weight, colour = Diet))   #— colour : 색상 분류 기준 (선 색)
(g <- g + geom_point(alpha = .3))              #— geom_point() : 점으로 표시, alpha : 투명도
(g <- g + geom_smooth(alpha = .1, size = 1))   #— geom_smooth() : 평균선 표시, size : 선의 굵기
 
(data <- data.frame(x = rnorm(5000), y = rnorm(5000)))
head(data)
g <- ggplot(data, aes(x, y))
(g + geom_point())
(g + geom_point(alpha = 0.5))
(g + geom_point(alpha = 1/10))
 
g <- ggplot(mtcars, aes(wt, mpg))
(g + geom_point())
(g + geom_point(size = 4))
(g + geom_point(size = mtcars$qsec))
(g + geom_point(aes(colour = factor(cyl)), size = 4))
(g + geom_point(aes(shape = factor(cyl)), size = 4))
(g + geom_point(shape = 5))
(g + geom_point(shape = "k", size = 3))
(g + geom_point(shape = "."))
(g + geom_point(shape = NA))
(g + geom_point() + geom_hline(yintercept = 25, size = 3.5))   #— geom_hline : 가로선 추가
(g + geom_point() + annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, fill = "dark grey", alpha = .5))
 
(data <- data.frame(x = 1:5, y = 1:25, z = 1:25))
g <- ggplot(data, aes(x, y))
(g <- g + geom_point(aes(shape = z), size = 4))
(g <- g + scale_shape_identity())   #— shape에 주어진 연속값을 불연속 값으로 매핑
 
(g <- qplot(data = data01, x = Hab, y = var1))
(g <- qplot(data = data01, x = BM, y = var1, log = "xy", color = Tribe))
(g <- qplot(data = data01, x = BM, y = var1, log = "xy", color = Tribe, facets = Hab ~ Tribe))
(g <- qplot(data = data01, x = BM, y = var1, log = "xy", color = Tribe, facets = ~ Tribe))
(g <- qplot(data = data01, x = BM, y = var1, color = Tribe, facets = ~ Tribe))
(g <- g + stat_smooth(method = "lm"))
 
 
qplot(x = carat, y = price, data = diamonds)
qplot(x = log(carat), y = log(price), data = diamonds)
qplot(x = carat, y = price, data = diamonds, log = "xy")
 
qplot(carat, price, data = dsmall, colour = color, main = "산점도", xlab = "X축", ylab = "Y축")
qplot(carat, price, data = dsmall, shape = cut)
 
qplot(carat, price, data = diamonds, alpha = I(1/10))
qplot(carat, price, data = diamonds, alpha = I(1/100))
qplot(carat, price, data = diamonds, alpha = I(1/200))
 
qplot(carat, price, data = diamonds, geom = c("point", "smooth"))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), se = FALSE)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "loess")
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), span = 0.2)
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), span = 1)
 
library(mgcv)                           #— gam, bam modelling
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), 
      method = "gam", formula = y ~ s(x))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), 
      method = "gam", formula = y ~ s(x, bs = "cs"))
qplot(carat, price, data = dsmall, geom = c("point", "smooth"), method = "lm")
 
#ggsave("ggplot001.png")
 
###—————————————————————————–
### 선 그래프
###—————————————————————————–
#— geom_line() : 선 그래프
g <- ggplot(ChickWeight, aes(x = Time, y = weight, colour = Diet, group = Chick))
(g <- g + geom_line())                  #— geom_line() : 라인 챠트 표시
 
g <- ggplot(economics, aes(x = date, y = unemploy))
(g + geom_line())                       #— geom_line() : 선 그래프 표시
(g + geom_line(colour = "red"))
(g + geom_line(colour = "red", size = 3))
(g + geom_line(linetype = 1))
(g + geom_line(linetype = 2))
(g + geom_line(linetype = 3))
(g + geom_line(linetype = 4))
(g + geom_line(linetype = "dotdash"))
 
rescale01 <- function(x) {              #— 상대적인 값을 만들어 표준화
  (x – min(x)) / diff(range(x))
}
library(plyr)
(data <- data.frame(date = economics[,]$date, colwise(rescale01)(economics[, -(1:2)])))
library(reshape2)
(data <- melt(data, id = "date"))
rm(rescale01)
 
g <- ggplot(data, aes(date, value, group = variable))
g + geom_line(linetype = 1)
(g + geom_line(linetype = data$variable))
 
qplot(date, unemploy / pop, data = economics, geom = "line")
qplot(date, uempmed, data = economics, geom = "line")
 
 
year <- function(x) { as.POSIXlt(x)$year + 1900; }   #— 날자 연도를 숫자로 반환
qplot(unemploy / pop, uempmed, data = economics, geom = c("point", "path"))
qplot(unemploy / pop, uempmed, data = economics, geom = c("path"),
      colour = year(date)) + scale_size_area()
 
g <- ggplot(Orange, aes(x=age, y=circumference, colour=Tree))
(g + geom_line())
 
###—————————————————————————–
### 히스토그램
###—————————————————————————–
#— geom_histogram() : 히스토그램
#—     facet_grid() : 각각을 별도의 챠트로 표시
g <- ggplot(subset(ChickWeight, Time == 21), aes(x = weight, fill = Diet))   #— fill : 색상 분류 기준 (채워넣는 색)
(g <- g + geom_histogram(colour = "black", binwidth = 50))   #— geom_histogram() : 히스토그램 표시, binwidth : x축 간격
(g <- g + facet_grid(Diet ~ .))         #— facet_grid() : 각각을 별도의 챠트로 표시
(g <- g + facet_grid(. ~ Diet))         #— facet_grid() : 각각을 별도의 챠트로 표시
 
g <- ggplot(movies, aes(x = rating))
(g <- g + geom_histogram())
(g <- g + geom_histogram(aes(fill = ..count..)))   #— ..count.. : 관측 개수
 
g <- ggplot(diamonds, aes(carat, ..density..))   #— ..density.. : 밀도 (전체 합이 1)
(g <- g + geom_histogram(binwidth = 0.2))
(g + facet_grid(. ~ cut))
 
(g <- qplot(data = data01, x = BM, main = "Histogram of BodyMass"))
 
qplot(carat, data = diamonds, geom = "histogram")
qplot(carat, data = diamonds, geom = "histogram", fill = color)
qplot(carat, data = diamonds, geom = "histogram", binwidth = 1, xlim = c(0, 3))
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
qplot(carat, data = diamonds, geom = "histogram", binwidth = 0.01, xlim = c(0, 3))
qplot(carat, data = diamonds, facets = color ~ .,
      geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
qplot(carat, ..density.., data = diamonds, facets = color ~ .,
      geom = "histogram", binwidth = 0.1, xlim = c(0, 3))
 
###—————————————————————————–
### 분포도
###—————————————————————————–
#— geom_density() : 분포도
g <- ggplot(subset(ChickWeight, Time == 21), aes(x = weight, colour = Diet))
(g <- g + geom_density())               #— geom_density() : 분포도 표시
 
qplot(carat, data = diamonds, geom = "density")
qplot(carat, data = diamonds, geom = "density", colour = color)
 
###—————————————————————————–
### 막대 그래프
###—————————————————————————–
#— geom_bar() : 막대 그래프
(g <- qplot(cut, data = diamonds, geom = "bar"))
(g <- g + coord_flip())
 
g <- ggplot(mtcars, aes(factor(cyl)))
(g <- g + geom_bar())                   #— geom_bar() : 막대 그래프 표시
(g <- g + geom_bar(fill = "red"))
(g <- g + geom_bar(colour = "red"))
(g <- g + geom_bar(fill = "white", colour = "red"))
 
g <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs)))
(g <- g + geom_bar())                   #— geom_bar() : 막대 그래프 표시
 
g <- ggplot(diamonds, aes(clarity, fill = cut))
(g + geom_bar())
library(plyr)
(g + geom_bar(aes(order = desc(cut))))
 
qplot(color, data = diamonds, geom = "bar")
qplot(color, data = diamonds, geom = "bar", weight = carat) + scale_y_continuous("carat")
 
###—————————————————————————–
### Point Range
###—————————————————————————–
#— geom_pointrange()
(m <- lm(price ~ cut, diamonds))
(data <- data.frame(cut = unique(diamonds$cut),
                    predict(m, data.frame(cut = unique(diamonds$cut)), se = TRUE)[c(“fit”, “se.fit”)]))
g <- ggplot(data, aes(x = cut, y = fit, 
                      ymin = fit – se.fit,
                      ymax = fit + se.fit, colour = cut))
(g + geom_pointrange())
rm(m)
 
###—————————————————————————–
### 박스 그래프
###—————————————————————————–
#— qplot(geom = "boxplot") : 박스그래프
(g <- qplot(cut, price, data = diamonds, geom = "boxplot"))
(g <- last_plot() + coord_flip())
 
(g <- qplot(data = data01, x = Hab, y = var1, geom = "boxplot"))
 
qplot(cut, price, data=diamonds, geom="boxplot")
 
###—————————————————————————–
#— stat_bin2d() : 
g <- ggplot(diamonds, aes(carat, price))
(g <- g + stat_bin2d(bins = 25, colour = "grey50"))
(g + scale_x_continuous(limits = c(0, 2)))   #— 범위를 지정하여 그래프를 그림
 
###—————————————————————————–
#— jitter
qplot(color, price / carat, data = diamonds, geom = "jitter", alpha = I(1 / 5))
qplot(color, price / carat, data = diamonds, geom = "jitter", alpha = I(1 / 50))
qplot(color, price / carat, data = diamonds, geom = "jitter", alpha = I(1 / 200))
 
rm(list=ls(all=TRUE))                   #— 작업 영역에 저장된 데이터 모두 삭제
###—————————————————————————–

 
 
파일
 

[ADP 실기] ggplot2 – ggplot, 주요 argument

 
 
ggplot2 패키지에 있는 qplot의 주요 argument에 대한 글을 올린 후
qqplot2와 관련된 두번째 글이로군요.
 
 
ggplot2 패키지에서 그래프 표시 단계
 
Ggplot2
 
 
ggplot2 패키지에는 gplot 함수와 ggplot 함수가 있습니다.
 
사용법은 조금 다르지만 둘 다 위 방식을 따르고 있습니다.
  1. 미적 매핑
    데이터와 미적 속성 (AESthetic attributes, AES)을 매핑하는 메타 데이터를 생성 합니다.
    이 단계에서는 레이어가 추가 되지 않았으므로 화면에 표시되는 그래프가 없습니다.
    ggplot(data, aes(x = ~, y = ~, colour = ~, group = ~))

    생성된 미적 속성은 +로 레이어를 추가할 경우, 뒤에 나오는 각각의 레이어로 상속이 됩니다.
    즉 "미적 속성 + 레이어1 + 레이어2"의 경우, 미적 속성이 레이어1과 레이어2로 상속이 됩니다. 
    이 때 레이어1에서 미적 속성을 추가 하였다면 이는 레이어2로 상속되지 않음을 이해하셔야 합니다.
     

  2. 통계 변환
    예약어와 함수 등을 사용하여 화면에 표시할 데이터를 변환 합니다.
     
  3. 기하 객체 적용
    기하 객체 (GEOMetric object)는 1단계에서 언급한 레이어에 해당 합니다.
    데이터와 매핑된 미적 속성으로 화면에 그래프를 그려 줍니다.
     
  4. 위치 조정
    그래프를 그린 후에는 위치를 조정 하거나 여러개의 그래프를 배열 형태로 나열 합니다.
 
 
ggplot2
 
  • data : 데이터
  • graph %+% dataFrame : 그래프의 데이터 교체
  • aes(~) : Aesthetic attributes, 미적 속성 (데이터와 매핑됨)
  • x, y : x, y 좌표의 값
  • colour : 색상 분류 기준 (선/점 색)
  • shape : 점의 모양 분류 기준, NA. 표시하지 않음
  • size : 점의 크기, 선의 굵기 (1. default)
  • alpha : 투명도, 작을수록 투명함
  • fill : 색상 분류 기준 (채워넣는 색)
  • group : 그룹 지정
  • order : 누적 데이터 표시시 누적되는 순서 변경, order = desc(~)
  • geom_point() : 산점도, 점 그래프
  • geom_smooth() : 회귀선 표시
  • stat_smooth() : smooth 추가
  • binwidth() : 한칸당 간격
  • geom_line() : 선 그래프 (방향 : 왼쪽  오른쪽)
  • geom_histogram() : 히스토그램
  • geom_density() : 밀도 그래프
  • geom_bar() : 막대 그래프, 도수분포표
  • aes(~) : Aesthetic attributes, 미적 속성
  • binwidth : 구간의 넓이, X축 간격
  • colour : 색상 분류 기준 (선/점 색)
  • shape : 점의 모양 분류 기준, NA. 표시하지 않음
  • size : 점의 크기, 선의 굵기 (1. default)
  • alpha : 투명도, 작을수록 투명함
  • fill : 채우는 색
  • linetype : 선의 모양 (2, "dotdash")
  • method : lm
  • position : 그룹항목을 누적 표시, dodge (그룹 항목을 개별 표시), fill
  • geom_pointrange() : 값과 범위 표시
  • ymin, ymax : pointrange()에서 사용할 최소값과 최대값
  • stat_bin2d() : 격자 형태의 그래프
  • bins : stat_bin2d()에서 격자의 크기
  • stat_bin2d(bins=25, colour="grey50")
  • stat_bin() : 그래프 지정
  • geom : bar, area, point, tile
  • facet_grid() : 챠트 분할
  • facet_wrap() : 챠트 분할
  • nrow : 한 행에 표시할 챠트의 수
  • xlab(), ylab() : X축, Y축 이름
  • coord_cartesian()
  • xlim, ylim : X축, Y축 값의 범위
  • scale_x_continuous() : X축의 범위를 지정
  • limits
  • scale_y_continuous() : Y축의 범위를 지정
  • limits
  • sacle_x_date(breaks="2 years", labels=date_format("%Y-%m")) : 날자축 지정
  • guides()
  • colour = "colourbar" : 색상 범례 사용
  • colour = guide_legend() : 이산형 범례, 작은값 -> 큰값
  • colour = guide_legend(reverse = TRUE) : 이산형 범례, 큰값 -> 작은값
  • scale_color_hue() : 색상 범례 제목 지정
  • scale_colour_continuous() : 색상 범례
  • breaks : break point 지정
  • scale_shape_identity() : shape에 주어진 연속값을 불연속 값으로 매핑
  • last_plot() : 마지막으로 그린 그래프
  • coord_flip() : 가로, 세로 변경
  • scale_x_reverse() : X축 값의 순서를 반대로 설정
  • scale_y_reverse() : Y축 값의 순서를 반대로 설정
  • opts() : 테마(theme) 상세 설정
  • opts(axis.text.x=theme_text(angle=90, hjust=1)) : X축 라벨 90 회전
  • geom_hline() : 가로선
  • annotate() : 사각형 상자
  • annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, fill = "dark grey", alpha = 0.5)
  • 예약어
  • ..count.. : 관측 개수
  • ..ncount.. : (0, 1)인 관측 개수
  • ..density.. : 밀도
  • ..ndensity.. : (0, 1)인 밀도
  • ggsave("~.png") : 챠트 저장
 
 
 

 

 

파일