SlideShare a Scribd company logo
세번째 세미나
Jay Tiger
jaytiger.park@gmail.com
2014-11-26
데이터 조작 2: 데이터 처리와 가공
Chapter 4.
01. 데이터 처리 및 가공 패키지
Data를 다루는 능력의 중요성
• ML/DM 프로젝트에서 모델을 만드는 데 소요되는 시간은 전체 프로젝트의 14%
• 데이터 수집, 전처리 및 후처리에 더 많은 시간 소비
• 데이터를 원하는 형태로 바꾸거나 조작하는 능력은 절대적으로 중요
R 주요 Packages
Package 용도
sqldf SQL을 사용한 데이터 처리
plyr 데이터를 분할(split), 분할된 결과에 함수 적용(apply), 그 결과를 재조합(combine)
reshape2 데이터의 모양을 바꾸거나 요약
data.table R의 데이터 프레임을 대신할 수 있는 더 빠르고 편리한 데이터 타입
foreach apply 계열 함수들과 for문을 대신할 수 있는 반복문 구조
doParallel 멀티코어를 사용한 프로그램의 병렬적 사용 가능
testthat R코드의 기능 테스트를 위한 유닛 테스팅 프레임워크
02. SQL을 사용한 데이터 처리
함수 대신 SQL 문을 사용하여 데이터 처리
SQL문이 주어지면 자동으로 스키마 생성하고 데이터를 테이블로
로드
> sqldf("select distinct Species from iris")
> sqldf('select avg("Sepal.Length") from iris where Species="setosa"')
avg("Sepal.Length")
1 5.004
> mean(subset(iris, Species == "setosa")$Sepal.Length)
[1] 5.004
> sqldf('select species, avg("sepal.length") from iris group by species')
Species avg("sepal.length")
1 setosa 5.004
2 versicolor 5.936
3 virginica 6.588
> sapply(split(iris$Sepal.Length, iris$Species), mean)
setosa versicolor virginica
5.004 5.936 6.588
03. 분할, 적용, 재조합을 통한 데이터 분석
plyr 패키지 –데이터를 분할split하고, 함수를 적용apply후, 결과를
재조합combine하는 함수들을 제공
함수 naming 규칙 – a(rray), d(ata frame), l(ist), _(nothing)
{adl} {adl_} ply
입력 데이터 타입 입력 데이터 타입
split apply
combine
mean
mean
mean
array data frame list nothing
array aaply adply alply a_ply
data frame daply ddply dlply d_ply
list laply ldply llply l_ply
n
replicates
raply rdply rlply r_ply
function
arguments
maply mdply mlply m_ply
vector, matrix도 가능
03. 분할, 적용, 재조합을 통한 데이터 분석
adply(.data, .margins, .fun=NULL)
• .data - 주어진 입력을 숫자 색인으로 읽을 수 있는 데이터 타입
• .margins – 함수를 적용할 방향 (그림참고)
• .fun – margin 방향으로 잘려진 데이터에 적용할 함수
2D 3D
03. 분할, 적용, 재조합을 통한 데이터 분석
> apply(iris[, 1:4], 1, function(row) { print(row) })
...
Sepal.Length Sepal.Width Petal.Length Petal.Width
6.5 3.0 5.2 2.0
Sepal.Length Sepal.Width Petal.Length Petal.Width
> apply(iris, 1, function(row) { print(row) })
...
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
"5.8" "4.0" "1.2" "0.2" "setosa"
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
> adply(iris, 1, function(row) { row$Sepal.Length >= 5.0 & row$Species == "setosa" })
Sepal.Length Sepal.Width Petal.Length Petal.Width Species V1
1 5.0 3.5 1.4 0.2 setosa TRUE
2 4.9 3.0 1.4 0.2 setosa FALSE
> adply(iris, 1, function(row) { data.frame(sepal_ge_5_setosa=c(row$Sepal.Length >= 5.0 & row$
Sepal.Length Sepal.Width Petal.Length Petal.Width Species sepal_ge_5_setosa
1 5.0 3.5 1.4 0.2 setosa TRUE
2 4.9 3.0 1.4 0.2 setosa FALSE
03. 분할, 적용, 재조합을 통한 데이터 분석
ddply(.data, .variables, .fun=NULL)
• 데이터 프레임을 분할하고 함수를 적용한 뒤 결과를 데이터 프레임으로 반환
• adply()는 행 또는 열 단위로 함수를 적용하는 반면 ddply()는 .variables에
나열한 컬럼에 따라 데이터를 나눈 뒤 함수를 적용
• .variables – data를 group지을 변수명, .()안에 기록
> ddply(iris, .(Species, Sepal.Length > 5.0),
function(sub) {
data.frame(sepal.width.mean=mean(sub$Sepal.Width))
})
Species Sepal.Length > 5 sepal.width.mean
1 setosa FALSE 3.213793
2 setosa TRUE 3.723810
3 versicolor FALSE 2.233333
4 versicolor TRUE 2.804255
5 virginica FALSE 2.500000
6 virginica TRUE 2.983673
> head(subset(baseball, id=="ansonca01"))
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1 NA NA NA NA NA
121 ansonca01 1872 1 PH1 46 217 60 90 10 7 0 50 6 6 16 3 NA NA NA NA NA
276 ansonca01 1873 1 PH1 52 254 53 101 9 2 0 36 0 2 5 1 NA NA NA NA NA
398 ansonca01 1874 1 PH1 55 259 51 87 8 3 0 37 6 0 4 1 NA NA NA NA NA
525 ansonca01 1875 1 PH1 69 326 84 106 15 3 0 58 11 6 4 2 NA NA NA NA NA
741 ansonca01 1876 1 CHN NL 66 309 63 110 9 7 2 59 NA NA 12 8 NA NA NA NA NA
> ddply(baseball, .(id), function(sub) { mean(sub$g) })
id V1
1 aaronha01 143.39130
2 abernte02 40.05882
3 adairje01 77.66667
4 adamsba01 25.36842
5 adamsbo03 85.40000
6 adcocjo01 115.23529
...
03. 분할, 적용, 재조합을 통한 데이터 분석
선수의 년도별 출장게임수
각 선수별 년도별 평균
출장게임 수
03. 분할, 적용, 재조합을 통한 데이터 분석
그룹마다 연산을 쉽게 수행하기
• base::transform(_data, …) ▶ _data의 … 연산 결과를 새로운 컬럼으로
추가한 데이터 프레임 반환
• plyr::mutate(_data, …) ▶ 여러 컬럼을 데이터 프레임에 추가할 때 직전에
추가한 컬럼을 뒤에 추가하는 컬럼에서 참조가 가능
• plyr::summarise(_data, …) ▶ …에 지정된 그룹마다 요약을 수행한 뒤 그
결과만을 담은 새로운 데이터 프레임 반환
• base::subset(x, subset) ▶ 그룹별로 조건을 만족하는 행만 추출
> head(ddply(baseball, .(id), transform, cyear = year - min(year) + 1))
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp cyear
1 aaronha01 1954 1 ML1 NL 122 468 58 131 27 6 13 69 2 2 28 39 NA 3 6 4 13 1
2 aaronha01 1955 1 ML1 NL 153 602 105 189 37 9 27 106 3 1 49 61 5 3 7 4 20 2
> head(ddply(baseball, .(id), mutate, cyear = year - min(year) + 1, log_cyear=log(cyear)))
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp cyear log_cyear
1 aaronha01 1954 1 ML1 NL 122 468 58 131 27 6 13 69 2 2 28 39 NA 3 6 4 13 1 0.0000000
2 aaronha01 1955 1 ML1 NL 153 602 105 189 37 9 27 106 3 1 49 61 5 3 7 4 20 2 0.6931472
3 aaronha01 1956 1 ML1 NL 153 609 106 200 34 14 26 92 2 4 37 54 6 2 5 7 21 3 1.0986123
> head(ddply(baseball, .(id), summarise, minyear=min(year), maxyear=max(year)))
id minyear maxyear
1 aaronha01 1954 1976
2 abernte02 1955 1972
3 adairje01 1958 1970
> head(ddply(baseball, .(id), subset, g == max(g)))
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
1 aaronha01 1963 1 ML1 NL 161 631 121 201 29 4 44 130 31 5 78 94 18 0 0 5 11
2 abernte02 1965 1 CHN NL 84 18 1 3 0 0 0 2 0 0 0 7 0 1 3 0 0
3 adairje01 1965 1 BAL AL 157 582 51 151 26 3 7 66 6 4 35 65 7 2 4 2 26
03. 분할, 적용, 재조합을 통한 데이터 분석
컬럼추가
직전 컬럼 참조
03. 분할, 적용, 재조합을 통한 데이터 분석
mdply()
• m{adl_}ply() 함수는 데이터 프레임 또는 배열을 인자로 받아 각 컬럼을
주어진 함수에 적용하고 그 실행 결과들을 조합
> (x <- data.frame(mean=1:5, sd=1:5))
mean sd
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
> mdply(x, rnorm, n=2)
mean sd V1 V2
1 1 1 0.1255683 0.8584299
2 2 2 4.0005895 0.7128111
3 3 3 4.1732252 1.5489749
4 4 4 7.5287423 1.4327492
5 5 5 5.3530204 6.2291398
>
04. 데이터의 구조의 변형과 요약
Reshape2 패키지는 데이터의 모양을 바꾸거나 그룹별 요약 값을
계산하는 함수들을 담고 있는 패키지
변환된 데이터는 측정치를 variable과 value라는 두 컬럼으로 표현
함수 의미
melt() 여러 컬럼으로 구성된 데이터를 데이터 식별자(id), 측정 변수(variable), 측정
값(value)이라는 3개 컬럼으로 변환. 각 variable마다 value의 통계값을 계산
하는 것이 편리
cast() melt()된 데이터를 다시 여러 컬럼으로 변환한다. 데이터에 여러 측정 변수와 측
정값이 존재한다면 이들은 모두 새로운 컬럼으로 변환된다.
또 다른 유용한 기능으로 데이터의 요약 값을 제공하는 기능을 제공
04. 데이터의 구조의 변형과 요약
> head(m <- melt(french_fries, id.vars=1:4))
time treatment subject rep variable value
1 1 1 3 1 potato 2.9
2 1 1 3 2 potato 14.0
...
> ddply(m, .(variable), summarise, mean=mean(value, na.rm=TRUE))
variable mean
1 potato 6.9525180
2 buttery 1.8236994
...
> french_fries[!complete.cases(french_fries),]
time treatment subject rep potato buttery grassy rancid painty
315 5 3 15 1 NA NA NA NA NA
455 7 2 79 1 7.3 NA 0.0 0.7 0
...
> head(m <- melt(id=1:4, french_fries, na.rm=TRUE))
time treatment subject rep variable value
1 1 1 3 1 potato 2.9
2 1 1 3 2 potato 14.0
...
04. 데이터의 구조의 변형과 요약
> # melt()후에 dcast()를 사용해 원 데이터로 변환하는 예제
> m <- melt(french_fries, id.vars=1:4)
> r <- dcast(m, time + treatment + subject + rep ~ ...)
> rownames(r) <- NULL
> rownames(french_fries) <- NULL
> identical(r, french_fries)
> m <- melt(french_fries, id.vars=1:4)
> dcast(m, time ~ variable)
[1] TRUE
Aggregation function missing: defaulting to length
time potato buttery grassy rancid painty
1 1 72 72 72 72 72
2 2 72 72 72 72 72
…
> dcast(m, time ~ variable, mean, na.rm=TRUE)
time potato buttery grassy rancid painty
1 1 8.562500 2.236111 0.9416667 2.358333 1.645833
2 2 8.059722 2.722222 1.1819444 2.845833 1.444444
…
> dcast(m, time ~ treatment + variable, mean, na.rm=TRUE)
time 1_potato 1_buttery 1_grassy 1_rancid 1_painty 2_potato 2_buttery 2_grassy 2_rancid 2_painty 3_po
1 1 7.925000 1.7958333 0.9041667 2.758333 2.1500000 8.775000 2.491667 0.9958333 1.716667 0.8083333 8.98
2 2 7.591667 2.5250000 1.0041667 3.900000 1.9750000 8.537500 3.125000 0.9500000 2.141667 0.6625000 8.05
04. 데이터의 구조의 변형과 요약
> ddply(m, .(time, treatment, variable), function(rows) {
+ return(mean(rows$value, na.rm=TRUE))
+ })
time treatment variable V1
1 1 1 potato 7.9250000
2 1 1 buttery 1.7958333
3 1 1 grassy 0.9041667
4 1 1 rancid 2.7583333
5 1 1 painty 2.1500000
6 1 2 potato 8.7750000
05. 데이터 테이블: 더 빠르고 편리한 데이터 프레임
데이터 프레임을 대신 ▶ 속도 개선
• 색인 사용
• 참조를 통한 데이터 갱신 : 데이터 복사에 따른 비용 감소
06. 더 나은 반복문 - foreach
apply 계열 함수, for() 문을 대체할 수 있는 루프문을 위한 함수
반환 값이 있고, {}가 아닌 %do% 문을 사용해 블록 지정
foreach(i=1:5) %do% {
return(i)
}
foreach(i=1:5, .combine=c) %do% {
return(i)
}
foreach(i=1:5, .combine=c) %do% {
return(i)
}
foreach(i=1:5, .combine=rbind) %do% {
return(data.frame(val=i))
}
07. 병렬처리
멀티코어를 활용하여 프로그램을 병렬적으로 수행
Steve Weston이 개발한 doMC와 doParallel 패키지가 대표적
• doMC – multicore, foreach 패키지를 조합, fork사용으로 인한 OS 의존성
• doParallel – multicore, foreach, snow 패키지 조합, snow는 다수의
머신에 클러스터를 구현하는 기능 제공
Process의 수 결정
• CPU intensive vs. I/O(network, file) intensive
 적절한 I/O가 있는 경우는 core x 2, CPU intensive한 작업들이 대부분일 경우는 core
개수와 동일하거나 default 값인 core개수의 절반 추천
• Ex. doParallel::registerDoParallel(cores=4)
plyr의 병렬화
• {adl}{adl_}ply 함수는 .parallel 옵션을 TRUE 로 설정
foreach의 병렬화
• %do% 대신 %dopar% 를 지정
가용 메모리 확인을 통해 스래싱thrashing 현상 여부 파악
• 시스템의 가용 메모리가 바닥
• 스와핑으로 인한 디스크 I/O가 지속적으로 발생
• R 프로세스의 CPU 사용량이 낮다.
08. 유닛테스팅과 디버깅
Unit Testing은 단위코드가 의도대로 동작하는지 코드를 통해
검증하는 방법
일반적 사용 상황 및 특이 사용 상황(Corner Case) 테스트
테스트 코드를 통해 코드의 사용 방법을 설명하는 Documentation의
역할을 담당
함수의 사용자가 함수로부터 어떤 것을 기대할지를 미리 생각하게
하는 TDD(Test Driven Development)가 가능
UnitTesting Packages in R
• RUnit, testthat
08. 유닛테스팅과 디버깅
testthat::expect 함수들
• 기대값(expected value)값이 실제 반환값과(return value) 동일한지 확인
Package 용도
expect_true(x) x가 참인가?
expect_false(x) x가 거짓인가?
expect_equal(object, expected) Object가 기대값 expected와 동일한가? 값의 비교에는
all.equal() 사용하며 두 객체가 거의 같은지를 비교. 부동소수의
경우 epsilon(매우 작은 값) 이하로 차이는 동일한 것으로 취급
expect_equivalent(x, y) x가 y와 동등한가? expect_equal()과 달리 속성
(ex. rownames)을 제외한 값만 비교
08. 유닛테스팅과 디버깅
> a <- 1:3
> b <- 1:3
> expect_equal(a, b)
> expect_equivalent(a, b)
> names(a) <- c('a', 'b', 'c')
> expect_equal(a, b)
Error: a not equal to b
names for current but not for target
> expect_equivalent(a, b)
>
Debugging
• print(), sprintf(), cat()을 사용하여 메시지나 객체의 내용을 출력
• browser()를 사용한 코드 디버깅
메시지 출력을 통한 디버깅
• print(x) – 값을 출력
• sprintf() – C언어 스타일로 문자열 포맷팅
• cat() – 값들을 붙여서 출력
• browser() – 코드의 실행을 중지하고 현재 환경(environmen)을 조사
browser()
• 디버깅 모드로 진입 – prompt mode
• c(ontinue), n(ext), Q(uit)
09. 코드 수행 시간 측정
수행 시간 측정 및 프로파일링 수행을 통해 병목 구간 파악
명령문 수행 시간 측정
• system.time(expr)
• user time, system time, elapsed time
 Elasped Time은 User mode와 Kernel mode에서 수행한 시간으로 구성
코드 프로파일링
• 프로그램의 동적인 성능, 즉 메모리나 CPU 사용량을 평가하는 작업을 의미
• Rprof()
 특정 시간 간격마다 수행 중인 함수를 샘플링하여 분석에 사용

More Related Content

What's hot

알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
영기 김
 
R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기
Yoonwhan Lee
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
Sung Yub Kim
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
PgDay.Seoul
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
Yoonwhan Lee
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출
동윤 이
 
R 프로그래밍을 이용한 야생동물 행동권(HR) 분석
R 프로그래밍을 이용한 야생동물 행동권(HR) 분석R 프로그래밍을 이용한 야생동물 행동권(HR) 분석
R 프로그래밍을 이용한 야생동물 행동권(HR) 분석
Byeong-Hyeok Yu
 
Sicp 2.2 계층 구조 데이터와 닫힘 성질
Sicp 2.2 계층 구조 데이터와 닫힘 성질Sicp 2.2 계층 구조 데이터와 닫힘 성질
Sicp 2.2 계층 구조 데이터와 닫힘 성질
aceigy6322
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
Terry Cho
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
beom kyun choi
 
이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4pkok15
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03
Kwang Woo NAM
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
Yong Joon Moon
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
seungdols
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택
JinTaek Seo
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)fmbvbfhs
 

What's hot (19)

알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기R과 기초통계 : 02.기술통계-자료나타내기
R과 기초통계 : 02.기술통계-자료나타내기
 
R_datamining
R_dataminingR_datamining
R_datamining
 
Data Mining with R CH1 요약
Data Mining with R CH1 요약Data Mining with R CH1 요약
Data Mining with R CH1 요약
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출
 
R 프로그래밍을 이용한 야생동물 행동권(HR) 분석
R 프로그래밍을 이용한 야생동물 행동권(HR) 분석R 프로그래밍을 이용한 야생동물 행동권(HR) 분석
R 프로그래밍을 이용한 야생동물 행동권(HR) 분석
 
Sicp 2.2 계층 구조 데이터와 닫힘 성질
Sicp 2.2 계층 구조 데이터와 닫힘 성질Sicp 2.2 계층 구조 데이터와 닫힘 성질
Sicp 2.2 계층 구조 데이터와 닫힘 성질
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03집단지성 프로그래밍 03-군집발견-03
집단지성 프로그래밍 03-군집발견-03
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
이산수학04
이산수학04이산수학04
이산수학04
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 

Viewers also liked

20130222 Data structures and manipulation in R
20130222 Data structures and manipulation in R20130222 Data structures and manipulation in R
20130222 Data structures and manipulation in R
Kazuki Yoshida
 
Structural Health Monitoring Example
Structural Health Monitoring ExampleStructural Health Monitoring Example
Structural Health Monitoring Example
aileencv
 
주간 소셜미디어 트렌드(9월 4주, 10월 1주)
주간 소셜미디어 트렌드(9월 4주, 10월 1주)주간 소셜미디어 트렌드(9월 4주, 10월 1주)
주간 소셜미디어 트렌드(9월 4주, 10월 1주)
Jinseok Ro
 
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)KH Park (박경훈)
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
복연 이
 
Subspace Identification
Subspace IdentificationSubspace Identification
Subspace Identification
aileencv
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
Dexter Jung
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With Java
Dexter Jung
 
머피의 머신러닝 13 Sparse Linear Model
머피의 머신러닝 13 Sparse Linear Model머피의 머신러닝 13 Sparse Linear Model
머피의 머신러닝 13 Sparse Linear Model
Jungkyu Lee
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기
복연 이
 
Basics of torque measuring english
Basics of torque measuring englishBasics of torque measuring english
Basics of torque measuring english
Carlos Cardelo
 
R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기
Yoonwhan Lee
 
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
Kwang Woo NAM
 
00.통계학입문
00.통계학입문00.통계학입문
00.통계학입문Yoonwhan Lee
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 R
Yoonwhan Lee
 
금융 데이터 이해와 분석 PyCon 2014
금융 데이터 이해와 분석 PyCon 2014금융 데이터 이해와 분석 PyCon 2014
금융 데이터 이해와 분석 PyCon 2014
Seung-June Lee
 
Climate Impacts Tanya
Climate  Impacts TanyaClimate  Impacts Tanya
Climate Impacts Tanya
Patricia Muller
 
Level2 OPS-toets (bijdrage 1)
Level2 OPS-toets (bijdrage 1)Level2 OPS-toets (bijdrage 1)
Level2 OPS-toets (bijdrage 1)
Socius - steunpunt sociaal-cultureel werk
 
Fys presentation 12_aug_2010
Fys presentation 12_aug_2010Fys presentation 12_aug_2010
Fys presentation 12_aug_2010
Bruce Gilbert
 
Многоязычная база архивных терминов Международного Совета Архивов: История пр...
Многоязычная база архивных терминов Международного Совета Архивов: История пр...Многоязычная база архивных терминов Международного Совета Архивов: История пр...
Многоязычная база архивных терминов Международного Совета Архивов: История пр...
Natasha Khramtsovsky
 

Viewers also liked (20)

20130222 Data structures and manipulation in R
20130222 Data structures and manipulation in R20130222 Data structures and manipulation in R
20130222 Data structures and manipulation in R
 
Structural Health Monitoring Example
Structural Health Monitoring ExampleStructural Health Monitoring Example
Structural Health Monitoring Example
 
주간 소셜미디어 트렌드(9월 4주, 10월 1주)
주간 소셜미디어 트렌드(9월 4주, 10월 1주)주간 소셜미디어 트렌드(9월 4주, 10월 1주)
주간 소셜미디어 트렌드(9월 4주, 10월 1주)
 
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
 
『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기『누워서 읽는 알고리즘』 - 미리보기
『누워서 읽는 알고리즘』 - 미리보기
 
Subspace Identification
Subspace IdentificationSubspace Identification
Subspace Identification
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With Java
 
머피의 머신러닝 13 Sparse Linear Model
머피의 머신러닝 13 Sparse Linear Model머피의 머신러닝 13 Sparse Linear Model
머피의 머신러닝 13 Sparse Linear Model
 
『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기『밑바닥부터 시작하는 딥러닝』 - 미리보기
『밑바닥부터 시작하는 딥러닝』 - 미리보기
 
Basics of torque measuring english
Basics of torque measuring englishBasics of torque measuring english
Basics of torque measuring english
 
R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기R과 기초통계 : 01.자료다루기
R과 기초통계 : 01.자료다루기
 
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
 
00.통계학입문
00.통계학입문00.통계학입문
00.통계학입문
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 R
 
금융 데이터 이해와 분석 PyCon 2014
금융 데이터 이해와 분석 PyCon 2014금융 데이터 이해와 분석 PyCon 2014
금융 데이터 이해와 분석 PyCon 2014
 
Climate Impacts Tanya
Climate  Impacts TanyaClimate  Impacts Tanya
Climate Impacts Tanya
 
Level2 OPS-toets (bijdrage 1)
Level2 OPS-toets (bijdrage 1)Level2 OPS-toets (bijdrage 1)
Level2 OPS-toets (bijdrage 1)
 
Fys presentation 12_aug_2010
Fys presentation 12_aug_2010Fys presentation 12_aug_2010
Fys presentation 12_aug_2010
 
Многоязычная база архивных терминов Международного Совета Архивов: История пр...
Многоязычная база архивных терминов Международного Совета Архивов: История пр...Многоязычная база архивных терминов Международного Совета Архивов: История пр...
Многоязычная база архивных терминов Международного Совета Архивов: История пр...
 

Similar to R 스터디 세번째

파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트
itproman35
 
Mapreduce tuning
Mapreduce tuningMapreduce tuning
Mapreduce tuning
Gruter
 
[week6]R_Wrangling
[week6]R_Wrangling[week6]R_Wrangling
[week6]R_Wrangling
neuroassociates
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)주영 송
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
스플렁크 머신러닝 연동
스플렁크 머신러닝 연동스플렁크 머신러닝 연동
스플렁크 머신러닝 연동
Seung-Woo Kang
 
스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration
TIMEGATE
 
생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작
DACON AI 데이콘
 
22 r data manipulation 2 pt 20140404
22 r data manipulation 2 pt 2014040422 r data manipulation 2 pt 20140404
22 r data manipulation 2 pt 20140404
Myung-Hoe Huh
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
Han Sung Kim
 
Persistent Segment Tree - Sogang ICPC Team, 2019
Persistent Segment Tree - Sogang ICPC Team, 2019Persistent Segment Tree - Sogang ICPC Team, 2019
Persistent Segment Tree - Sogang ICPC Team, 2019
Suhyun Park
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
용 최
 
데이타베이스 기본튜닝
데이타베이스 기본튜닝 데이타베이스 기본튜닝
데이타베이스 기본튜닝
Jinuk Bhak
 
Amazon aurora 2
Amazon aurora 2Amazon aurora 2
Amazon aurora 2
EXEM
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracleTABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
엑셈
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Jungsu Heo
 
공간데이터베이스(Spatial db)
공간데이터베이스(Spatial db)공간데이터베이스(Spatial db)
공간데이터베이스(Spatial db)
H.J. SIM
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국
hanbeom Park
 
함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking
재문 심
 

Similar to R 스터디 세번째 (20)

파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트파이썬 데이터 분석 3종세트
파이썬 데이터 분석 3종세트
 
Mapreduce tuning
Mapreduce tuningMapreduce tuning
Mapreduce tuning
 
[week6]R_Wrangling
[week6]R_Wrangling[week6]R_Wrangling
[week6]R_Wrangling
 
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
MapReduce 실행 샘플 (K-mer Counting, K-means Clustering)
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
스플렁크 머신러닝 연동
스플렁크 머신러닝 연동스플렁크 머신러닝 연동
스플렁크 머신러닝 연동
 
스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration
 
생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작생체 광학 데이터 분석 AI 경진대회 1위 수상작
생체 광학 데이터 분석 AI 경진대회 1위 수상작
 
22 r data manipulation 2 pt 20140404
22 r data manipulation 2 pt 2014040422 r data manipulation 2 pt 20140404
22 r data manipulation 2 pt 20140404
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
Persistent Segment Tree - Sogang ICPC Team, 2019
Persistent Segment Tree - Sogang ICPC Team, 2019Persistent Segment Tree - Sogang ICPC Team, 2019
Persistent Segment Tree - Sogang ICPC Team, 2019
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
데이타베이스 기본튜닝
데이타베이스 기본튜닝 데이타베이스 기본튜닝
데이타베이스 기본튜닝
 
Amazon aurora 2
Amazon aurora 2Amazon aurora 2
Amazon aurora 2
 
분석6기 4조
분석6기 4조분석6기 4조
분석6기 4조
 
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracleTABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
TABLE ACCESS 패턴을 이용한 SQL 튜닝_Wh oracle
 
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons LearnedWeb Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
 
공간데이터베이스(Spatial db)
공간데이터베이스(Spatial db)공간데이터베이스(Spatial db)
공간데이터베이스(Spatial db)
 
Deview 2019 눈발자국
Deview 2019 눈발자국Deview 2019 눈발자국
Deview 2019 눈발자국
 
함수형 사고 - Functional thinking
함수형 사고 - Functional thinking함수형 사고 - Functional thinking
함수형 사고 - Functional thinking
 

R 스터디 세번째

  • 2. 데이터 조작 2: 데이터 처리와 가공 Chapter 4.
  • 3. 01. 데이터 처리 및 가공 패키지 Data를 다루는 능력의 중요성 • ML/DM 프로젝트에서 모델을 만드는 데 소요되는 시간은 전체 프로젝트의 14% • 데이터 수집, 전처리 및 후처리에 더 많은 시간 소비 • 데이터를 원하는 형태로 바꾸거나 조작하는 능력은 절대적으로 중요 R 주요 Packages Package 용도 sqldf SQL을 사용한 데이터 처리 plyr 데이터를 분할(split), 분할된 결과에 함수 적용(apply), 그 결과를 재조합(combine) reshape2 데이터의 모양을 바꾸거나 요약 data.table R의 데이터 프레임을 대신할 수 있는 더 빠르고 편리한 데이터 타입 foreach apply 계열 함수들과 for문을 대신할 수 있는 반복문 구조 doParallel 멀티코어를 사용한 프로그램의 병렬적 사용 가능 testthat R코드의 기능 테스트를 위한 유닛 테스팅 프레임워크
  • 4. 02. SQL을 사용한 데이터 처리 함수 대신 SQL 문을 사용하여 데이터 처리 SQL문이 주어지면 자동으로 스키마 생성하고 데이터를 테이블로 로드 > sqldf("select distinct Species from iris") > sqldf('select avg("Sepal.Length") from iris where Species="setosa"') avg("Sepal.Length") 1 5.004 > mean(subset(iris, Species == "setosa")$Sepal.Length) [1] 5.004 > sqldf('select species, avg("sepal.length") from iris group by species') Species avg("sepal.length") 1 setosa 5.004 2 versicolor 5.936 3 virginica 6.588 > sapply(split(iris$Sepal.Length, iris$Species), mean) setosa versicolor virginica 5.004 5.936 6.588
  • 5. 03. 분할, 적용, 재조합을 통한 데이터 분석 plyr 패키지 –데이터를 분할split하고, 함수를 적용apply후, 결과를 재조합combine하는 함수들을 제공 함수 naming 규칙 – a(rray), d(ata frame), l(ist), _(nothing) {adl} {adl_} ply 입력 데이터 타입 입력 데이터 타입 split apply combine mean mean mean array data frame list nothing array aaply adply alply a_ply data frame daply ddply dlply d_ply list laply ldply llply l_ply n replicates raply rdply rlply r_ply function arguments maply mdply mlply m_ply vector, matrix도 가능
  • 6. 03. 분할, 적용, 재조합을 통한 데이터 분석 adply(.data, .margins, .fun=NULL) • .data - 주어진 입력을 숫자 색인으로 읽을 수 있는 데이터 타입 • .margins – 함수를 적용할 방향 (그림참고) • .fun – margin 방향으로 잘려진 데이터에 적용할 함수 2D 3D
  • 7. 03. 분할, 적용, 재조합을 통한 데이터 분석 > apply(iris[, 1:4], 1, function(row) { print(row) }) ... Sepal.Length Sepal.Width Petal.Length Petal.Width 6.5 3.0 5.2 2.0 Sepal.Length Sepal.Width Petal.Length Petal.Width > apply(iris, 1, function(row) { print(row) }) ... Sepal.Length Sepal.Width Petal.Length Petal.Width Species "5.8" "4.0" "1.2" "0.2" "setosa" Sepal.Length Sepal.Width Petal.Length Petal.Width Species > adply(iris, 1, function(row) { row$Sepal.Length >= 5.0 & row$Species == "setosa" }) Sepal.Length Sepal.Width Petal.Length Petal.Width Species V1 1 5.0 3.5 1.4 0.2 setosa TRUE 2 4.9 3.0 1.4 0.2 setosa FALSE > adply(iris, 1, function(row) { data.frame(sepal_ge_5_setosa=c(row$Sepal.Length >= 5.0 & row$ Sepal.Length Sepal.Width Petal.Length Petal.Width Species sepal_ge_5_setosa 1 5.0 3.5 1.4 0.2 setosa TRUE 2 4.9 3.0 1.4 0.2 setosa FALSE
  • 8. 03. 분할, 적용, 재조합을 통한 데이터 분석 ddply(.data, .variables, .fun=NULL) • 데이터 프레임을 분할하고 함수를 적용한 뒤 결과를 데이터 프레임으로 반환 • adply()는 행 또는 열 단위로 함수를 적용하는 반면 ddply()는 .variables에 나열한 컬럼에 따라 데이터를 나눈 뒤 함수를 적용 • .variables – data를 group지을 변수명, .()안에 기록 > ddply(iris, .(Species, Sepal.Length > 5.0), function(sub) { data.frame(sepal.width.mean=mean(sub$Sepal.Width)) }) Species Sepal.Length > 5 sepal.width.mean 1 setosa FALSE 3.213793 2 setosa TRUE 3.723810 3 versicolor FALSE 2.233333 4 versicolor TRUE 2.804255 5 virginica FALSE 2.500000 6 virginica TRUE 2.983673
  • 9. > head(subset(baseball, id=="ansonca01")) id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp 4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1 NA NA NA NA NA 121 ansonca01 1872 1 PH1 46 217 60 90 10 7 0 50 6 6 16 3 NA NA NA NA NA 276 ansonca01 1873 1 PH1 52 254 53 101 9 2 0 36 0 2 5 1 NA NA NA NA NA 398 ansonca01 1874 1 PH1 55 259 51 87 8 3 0 37 6 0 4 1 NA NA NA NA NA 525 ansonca01 1875 1 PH1 69 326 84 106 15 3 0 58 11 6 4 2 NA NA NA NA NA 741 ansonca01 1876 1 CHN NL 66 309 63 110 9 7 2 59 NA NA 12 8 NA NA NA NA NA > ddply(baseball, .(id), function(sub) { mean(sub$g) }) id V1 1 aaronha01 143.39130 2 abernte02 40.05882 3 adairje01 77.66667 4 adamsba01 25.36842 5 adamsbo03 85.40000 6 adcocjo01 115.23529 ... 03. 분할, 적용, 재조합을 통한 데이터 분석 선수의 년도별 출장게임수 각 선수별 년도별 평균 출장게임 수
  • 10. 03. 분할, 적용, 재조합을 통한 데이터 분석 그룹마다 연산을 쉽게 수행하기 • base::transform(_data, …) ▶ _data의 … 연산 결과를 새로운 컬럼으로 추가한 데이터 프레임 반환 • plyr::mutate(_data, …) ▶ 여러 컬럼을 데이터 프레임에 추가할 때 직전에 추가한 컬럼을 뒤에 추가하는 컬럼에서 참조가 가능 • plyr::summarise(_data, …) ▶ …에 지정된 그룹마다 요약을 수행한 뒤 그 결과만을 담은 새로운 데이터 프레임 반환 • base::subset(x, subset) ▶ 그룹별로 조건을 만족하는 행만 추출
  • 11. > head(ddply(baseball, .(id), transform, cyear = year - min(year) + 1)) id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp cyear 1 aaronha01 1954 1 ML1 NL 122 468 58 131 27 6 13 69 2 2 28 39 NA 3 6 4 13 1 2 aaronha01 1955 1 ML1 NL 153 602 105 189 37 9 27 106 3 1 49 61 5 3 7 4 20 2 > head(ddply(baseball, .(id), mutate, cyear = year - min(year) + 1, log_cyear=log(cyear))) id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp cyear log_cyear 1 aaronha01 1954 1 ML1 NL 122 468 58 131 27 6 13 69 2 2 28 39 NA 3 6 4 13 1 0.0000000 2 aaronha01 1955 1 ML1 NL 153 602 105 189 37 9 27 106 3 1 49 61 5 3 7 4 20 2 0.6931472 3 aaronha01 1956 1 ML1 NL 153 609 106 200 34 14 26 92 2 4 37 54 6 2 5 7 21 3 1.0986123 > head(ddply(baseball, .(id), summarise, minyear=min(year), maxyear=max(year))) id minyear maxyear 1 aaronha01 1954 1976 2 abernte02 1955 1972 3 adairje01 1958 1970 > head(ddply(baseball, .(id), subset, g == max(g))) id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp 1 aaronha01 1963 1 ML1 NL 161 631 121 201 29 4 44 130 31 5 78 94 18 0 0 5 11 2 abernte02 1965 1 CHN NL 84 18 1 3 0 0 0 2 0 0 0 7 0 1 3 0 0 3 adairje01 1965 1 BAL AL 157 582 51 151 26 3 7 66 6 4 35 65 7 2 4 2 26 03. 분할, 적용, 재조합을 통한 데이터 분석 컬럼추가 직전 컬럼 참조
  • 12. 03. 분할, 적용, 재조합을 통한 데이터 분석 mdply() • m{adl_}ply() 함수는 데이터 프레임 또는 배열을 인자로 받아 각 컬럼을 주어진 함수에 적용하고 그 실행 결과들을 조합 > (x <- data.frame(mean=1:5, sd=1:5)) mean sd 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 > mdply(x, rnorm, n=2) mean sd V1 V2 1 1 1 0.1255683 0.8584299 2 2 2 4.0005895 0.7128111 3 3 3 4.1732252 1.5489749 4 4 4 7.5287423 1.4327492 5 5 5 5.3530204 6.2291398 >
  • 13. 04. 데이터의 구조의 변형과 요약 Reshape2 패키지는 데이터의 모양을 바꾸거나 그룹별 요약 값을 계산하는 함수들을 담고 있는 패키지 변환된 데이터는 측정치를 variable과 value라는 두 컬럼으로 표현 함수 의미 melt() 여러 컬럼으로 구성된 데이터를 데이터 식별자(id), 측정 변수(variable), 측정 값(value)이라는 3개 컬럼으로 변환. 각 variable마다 value의 통계값을 계산 하는 것이 편리 cast() melt()된 데이터를 다시 여러 컬럼으로 변환한다. 데이터에 여러 측정 변수와 측 정값이 존재한다면 이들은 모두 새로운 컬럼으로 변환된다. 또 다른 유용한 기능으로 데이터의 요약 값을 제공하는 기능을 제공
  • 14. 04. 데이터의 구조의 변형과 요약 > head(m <- melt(french_fries, id.vars=1:4)) time treatment subject rep variable value 1 1 1 3 1 potato 2.9 2 1 1 3 2 potato 14.0 ... > ddply(m, .(variable), summarise, mean=mean(value, na.rm=TRUE)) variable mean 1 potato 6.9525180 2 buttery 1.8236994 ... > french_fries[!complete.cases(french_fries),] time treatment subject rep potato buttery grassy rancid painty 315 5 3 15 1 NA NA NA NA NA 455 7 2 79 1 7.3 NA 0.0 0.7 0 ... > head(m <- melt(id=1:4, french_fries, na.rm=TRUE)) time treatment subject rep variable value 1 1 1 3 1 potato 2.9 2 1 1 3 2 potato 14.0 ...
  • 15. 04. 데이터의 구조의 변형과 요약 > # melt()후에 dcast()를 사용해 원 데이터로 변환하는 예제 > m <- melt(french_fries, id.vars=1:4) > r <- dcast(m, time + treatment + subject + rep ~ ...) > rownames(r) <- NULL > rownames(french_fries) <- NULL > identical(r, french_fries) > m <- melt(french_fries, id.vars=1:4) > dcast(m, time ~ variable) [1] TRUE Aggregation function missing: defaulting to length time potato buttery grassy rancid painty 1 1 72 72 72 72 72 2 2 72 72 72 72 72 … > dcast(m, time ~ variable, mean, na.rm=TRUE) time potato buttery grassy rancid painty 1 1 8.562500 2.236111 0.9416667 2.358333 1.645833 2 2 8.059722 2.722222 1.1819444 2.845833 1.444444 … > dcast(m, time ~ treatment + variable, mean, na.rm=TRUE) time 1_potato 1_buttery 1_grassy 1_rancid 1_painty 2_potato 2_buttery 2_grassy 2_rancid 2_painty 3_po 1 1 7.925000 1.7958333 0.9041667 2.758333 2.1500000 8.775000 2.491667 0.9958333 1.716667 0.8083333 8.98 2 2 7.591667 2.5250000 1.0041667 3.900000 1.9750000 8.537500 3.125000 0.9500000 2.141667 0.6625000 8.05
  • 16. 04. 데이터의 구조의 변형과 요약 > ddply(m, .(time, treatment, variable), function(rows) { + return(mean(rows$value, na.rm=TRUE)) + }) time treatment variable V1 1 1 1 potato 7.9250000 2 1 1 buttery 1.7958333 3 1 1 grassy 0.9041667 4 1 1 rancid 2.7583333 5 1 1 painty 2.1500000 6 1 2 potato 8.7750000
  • 17. 05. 데이터 테이블: 더 빠르고 편리한 데이터 프레임 데이터 프레임을 대신 ▶ 속도 개선 • 색인 사용 • 참조를 통한 데이터 갱신 : 데이터 복사에 따른 비용 감소
  • 18. 06. 더 나은 반복문 - foreach apply 계열 함수, for() 문을 대체할 수 있는 루프문을 위한 함수 반환 값이 있고, {}가 아닌 %do% 문을 사용해 블록 지정 foreach(i=1:5) %do% { return(i) } foreach(i=1:5, .combine=c) %do% { return(i) } foreach(i=1:5, .combine=c) %do% { return(i) } foreach(i=1:5, .combine=rbind) %do% { return(data.frame(val=i)) }
  • 19. 07. 병렬처리 멀티코어를 활용하여 프로그램을 병렬적으로 수행 Steve Weston이 개발한 doMC와 doParallel 패키지가 대표적 • doMC – multicore, foreach 패키지를 조합, fork사용으로 인한 OS 의존성 • doParallel – multicore, foreach, snow 패키지 조합, snow는 다수의 머신에 클러스터를 구현하는 기능 제공 Process의 수 결정 • CPU intensive vs. I/O(network, file) intensive  적절한 I/O가 있는 경우는 core x 2, CPU intensive한 작업들이 대부분일 경우는 core 개수와 동일하거나 default 값인 core개수의 절반 추천 • Ex. doParallel::registerDoParallel(cores=4)
  • 20. plyr의 병렬화 • {adl}{adl_}ply 함수는 .parallel 옵션을 TRUE 로 설정 foreach의 병렬화 • %do% 대신 %dopar% 를 지정 가용 메모리 확인을 통해 스래싱thrashing 현상 여부 파악 • 시스템의 가용 메모리가 바닥 • 스와핑으로 인한 디스크 I/O가 지속적으로 발생 • R 프로세스의 CPU 사용량이 낮다.
  • 21. 08. 유닛테스팅과 디버깅 Unit Testing은 단위코드가 의도대로 동작하는지 코드를 통해 검증하는 방법 일반적 사용 상황 및 특이 사용 상황(Corner Case) 테스트 테스트 코드를 통해 코드의 사용 방법을 설명하는 Documentation의 역할을 담당 함수의 사용자가 함수로부터 어떤 것을 기대할지를 미리 생각하게 하는 TDD(Test Driven Development)가 가능 UnitTesting Packages in R • RUnit, testthat
  • 22. 08. 유닛테스팅과 디버깅 testthat::expect 함수들 • 기대값(expected value)값이 실제 반환값과(return value) 동일한지 확인 Package 용도 expect_true(x) x가 참인가? expect_false(x) x가 거짓인가? expect_equal(object, expected) Object가 기대값 expected와 동일한가? 값의 비교에는 all.equal() 사용하며 두 객체가 거의 같은지를 비교. 부동소수의 경우 epsilon(매우 작은 값) 이하로 차이는 동일한 것으로 취급 expect_equivalent(x, y) x가 y와 동등한가? expect_equal()과 달리 속성 (ex. rownames)을 제외한 값만 비교
  • 23. 08. 유닛테스팅과 디버깅 > a <- 1:3 > b <- 1:3 > expect_equal(a, b) > expect_equivalent(a, b) > names(a) <- c('a', 'b', 'c') > expect_equal(a, b) Error: a not equal to b names for current but not for target > expect_equivalent(a, b) >
  • 24. Debugging • print(), sprintf(), cat()을 사용하여 메시지나 객체의 내용을 출력 • browser()를 사용한 코드 디버깅 메시지 출력을 통한 디버깅 • print(x) – 값을 출력 • sprintf() – C언어 스타일로 문자열 포맷팅 • cat() – 값들을 붙여서 출력 • browser() – 코드의 실행을 중지하고 현재 환경(environmen)을 조사
  • 25. browser() • 디버깅 모드로 진입 – prompt mode • c(ontinue), n(ext), Q(uit)
  • 26. 09. 코드 수행 시간 측정 수행 시간 측정 및 프로파일링 수행을 통해 병목 구간 파악 명령문 수행 시간 측정 • system.time(expr) • user time, system time, elapsed time  Elasped Time은 User mode와 Kernel mode에서 수행한 시간으로 구성 코드 프로파일링 • 프로그램의 동적인 성능, 즉 메모리나 CPU 사용량을 평가하는 작업을 의미 • Rprof()  특정 시간 간격마다 수행 중인 함수를 샘플링하여 분석에 사용