Post on 19-Feb-2017
R을 이용한 데이터 분석
November 16, 2015simon
Audience● 16 개 회사
● 23 명
강사● 김문주
● moonikan@gmail.com
목적
R BigDataData Mining
Materials
● 교재 한권 (340 page)
● 다이어리
● 볼펜
● 본 문서는 교재내용과 수업내용을 토대로 google slides에서 작성
1 day
1. 빅데이터 개요2. 데이터 관리와 이해
2 day
3. 데이터 전처리10. Text Mining
3 day
11. Social NetworkAnalysis
4. 분류
4 day
6. 결정 트리5. 확률에 의한 분류7. 회귀 분석
5 day
8. Clustering9. Association
Analysis
1. 빅데이터 개요
BigData
조직에서 주어진 비용, 시간 내에 처리 가능한 범위를 넘어서는 데이터
Volume / Velocity
Variety
Variety
BigData Technology (Hadoop Ecosystem)
Hadoop
BigData Analysis
BigData Analysis
Data Mining
데이터 속에 있는
의미 있는 데이터 패턴을 파악하거나
데이터 자동분석한 예측결과로
의사결정에 활용
Machine Learning
Data Abstraction Generalization
EquationsDiagrams such as trees and graphsLogical if/else rulesGroupings of data known as clusters
Data Mining AlgorithmsModel Algorithms Task
지도 학습 알고리즘 최근접 이웃 분류
나이브 베이즈 분류
결정 트리 분류
선형 회귀 수치 예측
회귀 트리 수치 예측
모델 트리 수치 예측
신경망 다중 용도
서포트 벡터 머신 다중 용도
자율 학습 알고리즘 연관 규칙 패턴 감지
k평균 군집화 군집화
Data Mining Process
MachineLearning
ManLearning
Data Mart 및 비정형 데이터 관리정형 Data : Appliance DB 활용비정형 Data : Appliance DB 에서 Hadoop 활용
Data Mining 사례
2. 데이터 관리와 이해
분석툴
Figure 6a. Analytics tools used by respondents to the 2015 Rexer Analytics Survey. In this view, each respondent was free to check multiple tools.
R System Requirements
데이터의 규모전처리 작업량R 32bit / 64bitx86_64 CPU 에서는 최대 128 TBWindows x64 경우 8 TBOS 에서 허용하는 1개 프로세스 가용 메모리량 확인
결론은 Linux 64 bit 가 바람직
R Data Object & Data TypeData Object
Vector, ScalarMatrixArrayFactor
ListData Frame
Data Type
NumericInteger, Double
LogicalTRUE(T), FALSE(F)
Character‘a’, ‘abc’
Basic
Collection
R packagepackage install
install.packages(‘package명’)
package load
library(package명)
R Special Values & OperatorsSpecial Values
NULL - empty valueNA - not availableNaN - not a numberInf(-Inf) - infinite number
Operators
mathematical+ - * ^%*% (matrix multiplication)%/% (remainder)
relational> >= < <= == !=
logical ! & |assignment <- =list indexing $sequencing :
R Functions
R Vector원소라고 불리는 값의 순서 있는 집합
동일 Data Type으로 구성
subject_name <- c(‘John Doe’, ‘Jane Doe’)temperature <- c(98.1, 98.6, 93.2)flu_status <- c(FALSE, TRUE)
원소 접근
temperature[2]temperature[2:3]temperature[-2]temperature[c(TRUE, TRUE, FALSE)]
R Factor수준(level)으로 이루어진 Vector
범주 라벨(Label)을 한 번 저장
내부적으로 값이 아닌 숫자 형태로 변환해서 저장(예) MALE, FEMALE, MALE → 1, 2, 1
Factor 생성
gender <- factor(c(‘MALE’, ‘FEMALE’, ‘MALE’))결과
[1] MALE FEMALE MALELevels: FEMALE MALE
생성 시 레벨을 지정
blood <- factor(c(‘O’, ‘AB’, ‘A’), levels = c(‘A’, ‘B’, ‘AB’, ‘O’))
결과
[1] O AB ALevels: A B AB O
R List서로 다른 Data Type을 지원하는 Vector
List 생성
subject1 <- list(fullname = subject_name[1], temperature = temperature[1], flu_status = flu_status[1], gender = gender[1], blood = blood[1]) 속성 접근
subject1[2]subject1$temperaturesubject1[c(‘temperature’, ‘flu_status’)]subject1[3:5]
R Data FrameRDB의 Table과 같은 2차원 형태
Data Frame 생성
pt_data <- data.frame( … )
데이터 접근
pt_data$subject_namept_data[c(‘temperature’, ‘flu_status’)]pt_data[2:3]pt_data[1, 2]pt_data[c(1, 3), c(2, 4)]pt_data[, 1]pt_data[1, ]pt_data[ , ]pt_data[c(1, 3), c(‘temperature’, ‘gender’)]pt_data[-2, c(-1, -3, -5)]
R Matrix행과 열로 2차원 테이블을 표시
동일 Data Type으로 구성
전형적인 수치 데이터만을 저장하며 수학적 연산에 주로 사용
Matrix 생성
m <- matrix(c(‘a’, ‘b’, ‘c’, ‘d’), nrow = 2)m <- matrix(c(‘a’, ‘b’, ‘c’, ‘d’), ncol = 2)
데이터 접근
m[1, 1]m[3, 2]m[1, ]m[, 2]
R Data FileR Data
save(m, file = ‘c:/data/mydata.RData’)save(m, subject1, pt_data, file = ‘c:/data/mydata2.RData’)
CSV
write.csv(pt_data, file = ‘c:/data/pt_data.csv’)pt_data2 <- read.csv(‘c:/data/pt_data.csv’)
R Data 이해Data 구조 확인
str(usedcars)
Data 통계정보 확인
summary(usedcars$year)summary(usedcars[c(‘price’, ‘mileage’)])
퍼짐 측정
diff(range(usedcars$price))IQR(usedcars$price)quantile(usedcars$price)
절단점 사용
quantile(usedcars$price, probs = c(0.01, 0.99))quantile(usedcars$price, seq(from = 0, to = 1, by = 0.20))
R 수치 변수 시각화boxplot
변수의 범위와 쏠림을 다른 변수와 비교해 표현boxplot(usedcars$price, main = ‘Boxplot of Used Car Prices’, ylab = ‘Price($)’)boxplot(usedcars$mileage, main = ‘Boxplot of Used Car Mileage’, ylab = ‘Odometer(mi.)’)
R 수치 변수 시각화histogram
수치 변수의 퍼짐을 시각적으로 표현hist(usedcars$price, main = ‘Histogram of Used Car Prices”, xlab = ‘Price($)’)hist(usedcars$mileage, main = ‘Histogram of Used Car Mileage”, xlab = ‘Odometer(mi.)’)
균등분포, 정규분포
R 분산과 표준편차분산 (Variance)
var(usedcars$price)var(usedcars$mileage)
표준편차 (Standard Deviation)
sd(usedcars$price)sd(usedcars$mileage)
R 범주형 변수일원 배치표
table(usedcars$year)table(usedcars$model)table(usedcars$color)
prop.table()
model_table <- table(usedcars$model)prop.table(model_table)
R 변수 사이 관계산포도 : 관계 시각화
plot(x = usedcars$mileage, y = usedcars$price, main = ‘Scatterplot of Price vs. Mileage’, xlab = ‘Used Car Odometer (mi.)’, ylab = ‘Used Car Price ($)’)
R 독립성 검증이원 교차표
usedcars$conservative <- usedcars$color %in% c(‘Black’, ‘Gray’, ‘Silver’, ‘White’)table(usedcars$conservative)CrossTable(x = usedcars$model, y = usedcars$conservative)
R 독립성 검증카이스퀘어 검정 순서
1) 각 범주에 대한 기대값을 구함2) 범주별 카이스퀘어 계산
- 관측값과 기대값의 차이를 계산- (관측값 - 기대값)을 제곱하여 기대값으로 나누면 각 범주의 카이스퀘어 값이 됨
3) 이 값을 합하여 전체의 카이스퀘어 값을 계산4) 카이스퀘어의 자유도를 계산
(row수 - 1) * (col수 - 1)5) 이를 유의수준에 해당하는 카이스퀘어 값과 비교하여 결론
귀무가설 / 대립가설
귀무가설 : 변수 사이에 연관성이 없다. (독립적이다)대립가설 : 변수 사이에 연관성이 있다. (독립적이 아니다)
R 독립성 검증chisq.test()
xtabs( ~ usedcars$conservative + usedcars$model)chisq.test(xtabs( ~ usedcars$conservative + usedcars$model))유의수준 5% 관리인 경우,p-value 값이 0.05 보다 작아야 대립가설을 지지 함 (연관성이 있음, 독립적이 아님)
3. 데이터 전처리
R apply 함수apply 함수란 ?
Vector 또는 행렬 Data에 임의의 함수를 적용한 결과를 반환
apply(행렬, 방향, 함수)
방향 : 1(행) / 2(열)d <- matrix(1:9, ncol = 3)apply(d, 1, sum)
R apply 함수lapply(X, 함수)
X는 Vector 또는 List처리한 결과는 List로 반환 됨X가 Data Frame일 때도 처리 가능한데,List 결과를 Data Frame으로 만드는 방법- unlist() 활용하는 방법
주의 : 문자열과 숫자가 혼합된 경우 unlist()가 문자열을 엉뚱한 값으로 반환- do.call() 활용하는 방법
R apply 함수sapply(X, 함수)
X는 Vector, List, Data Frame처리한 결과는 Matrix, Vector 등으로 반환 됨
tapply(X, 색인, 함수)
그룹별 처리를 위한 함수색인은 Data가 어느 그룹에 속하는지 표현하기 위한 Factor형 Data
mapply(X, 색인, 함수)
sapply()와 유사하지만 다수의 인자를 함수에 전달
R Data 전처리 함수with() : Data Frame 또는 List 내 필드를 쉽게 접근하기 위한 함수
within() : Data를 수정할 때 사용
which() : Vector 또는 Array에서 주어진 조건에 만족하는 값의 색인을 검색
which.min() : 주어진 Vector에서 최소값의 색인
which.max() : 주어진 Vector에서 최대값의 색인
R sqldf packageSQL 구문으로 Data를 다룰 수 있게 지원
sqldf(‘select avg(“Sepal.Length”) from iris where Species = “setosa” limit 20’)MySQL 구문에 가까움SQL구문은 작은 따옴표(‘’)를 사용Data이름에 마침표(.) 같은 특수문자가 사용 된 경우 큰 따옴표(“”)로 묶어서 사용중첩된 쿼리 등 다냔한 내용 처리 가능SQL 구문 내에서는 대소문자 구별 없음
R plyr package필수적인 데이터 처리기능 지원
??ply(data, variables, function,,,)apply function에 기반하여 입력 및 출력변수 처리를 동일한 형식으로 모든 데이터형식을 지원SQL구문은 작은 따옴표(‘’)를 사용Data이름에 마침표(.) 같은 특수문자가 사용 된 경우 큰 따옴표(“”)로 묶어서 사용중첩된 쿼리 등 다냔한 내용 처리 가능SQL 구문 내에서는 대소문자 구별 없음
apply()
열에 서로 다른 데이터의 경우, 타입 변환이 발생apply()와 plyr 제공함수와 혼동하지 않도록 주의
중요 옵션
summarizetransform
R 필수 package
원시 Data Data 변환 가설 검증
시각화
모델링
reshape2
plyr
gplot2
lm, glm
R 변수 생성reshape package
기존 테이블 구조의 데이터를 column-wise 하게 전환
기본 함수
data(), head(), tail(), names(), tolower(), inspect()
melt()
R 변수 생성formula
‘행변수 ~ 열변수' 형태로 표현아무 변수도 지정하지 않으려면 . 을 사용formula 에 나열되지 않은 모든 변수를 표현하려면 … 을 사용
cast()
dcast(), acast()
R 변수 생성중요 옵션
marginssubsetrange
10. Text Mining
Text Mining다양한 문서형태로 부터 Data를 획득, 분석하는 기법을 이용하여
통찰(insight)을 얻거나 의사결정을 지원
모든 형태의 Text (web, pdf, office, xml, text ,,,)로 부터 ‘문자'를 추출하여 이들간의 관계를 이용하거나clustering, classification, social network analysis에 활용
해당 언어 및 문화, 습관에 대한 깊이 있는 이해가 필요
R 파일 읽기tm package
Text Mining 기능을 지원하는 package
Corpus
Text 문서를 관리하는 기본 구조VCorpus, PCorpusDirSource, VectorSource, DataframeSource
R 문서 조작Meta data 제거 (xml 경우 각종 Tag)공백 제거소문자로 변환구두점 제거특수문자 제거시제 변환
R 문서 Matrix문서번호와 단어간의 사용여부 또는 빈도수를 이용하여 Matrix를 생성
R 문서 Matrix자주 사용된 단어 검색
단어와 연관된 단어들 검색
비어있는 데이터 삭제
R Twitter 연결Twitter 인증 획득 ( http://dev.twitter.com/ )
Twitter 메세지 조회(‘samsung’ 단어) 및 저장
Twitter 메세지에서 긍정단어, 부정단어로 빈도수 확인
R Twitter 메세지 분석Word Cloud 출력
최소 3회 이상 언급된 단어의 빈도수 만큼 글자크기를 부여하고
가운데 부터 시작하게 Wordcloud를 그림
R Twitter 메세지 분석거리계산법으로 clustering시켜 연관 단어를 분석
11. Social Network Analysis
Social Network
node(vertex)와 link(edge)로 구성된 Graph
단어간 연관성 분석1. 단어와 단어간 연관성 Matrix를 생성
단어간 연관성 분석2. Graph 생성
3. Graph 조절
단어간 연관성 분석
문서간 연관성 분석1. 문서와 문서간 연관성 Matrix를 생성
2. Graph 생성
문서간 연관성 분석
3. Graph 조절
문서간 연관성 분석
4. Graph 조절
문서간 연관성 분석
5. Graph 분석
문서간 연관성 분석
Matrix 연관성 분석Matrix 의 행과 열의 교차값으로 관계 Graph 를 계산
Matrix 연관성 분석1. 단어와 문서간의 연관성 Graph 생성
Matrix 연관성 분석2. 단어와 문서간의 연관성 분석
Graph 분석1. URL 정보로 Graph 생성
Graph 분석2. Graph 조절
Graph 분석3. closeness 분석
Graph 분석4. betweenness 분석
4. 분류
Data Mining AlgorithmsModel Algorithms Task
지도 학습 알고리즘 최근접 이웃 분류
나이브 베이즈 분류
결정 트리 분류
선형 회귀 수치 예측
회귀 트리 수치 예측
모델 트리 수치 예측
신경망 다중 용도
서포트 벡터 머신 다중 용도
자율 학습 알고리즘 연관 규칙 패턴 감지
k평균 군집화 군집화
최근접 이웃을 사용한 분류거리를 사용해 두 예제의 유사도를 측정하는 방법
범주를 알지 못하는 예제에 대해
범주가 분류돼 있는 가장 유사한 예제의 범주로 지정
장점 단점
단순, 효율적Data분산에 대한 추정 필요없음빠른 훈련 단계
모델을 생성하지 않음느린 분류 단계많은 메모리 필요명목형 속성, 결측 데이터 추가 처리 필요
최근접 이웃을 사용한 분류
재료 단맛 아삭거림 음식 종류
apple 10 9 fruit
bacon 1 4 protein
banana 10 1 fruit
carrot 7 10 vegetable
celery 3 10 vegetable
cheese 1 1 protein
최근접 이웃을 사용한 분류거리 계산법
최근접 이웃을 사용한 분류적당한 k 선택
최근접 이웃을 사용한 분류Data 표준화
최근접 이웃을 사용한 분류
kNN 특징
추상화가 일어나지 않음
추상화와 일반화 과정을 생략
어떤 것도 학습하지 않고, 훈련 데이터를 그대로 저장
인스턴스 기반 학습/ 암기 학습
kNN 분석1. Data 준비
kNN 분석2. Data 정규화
kNN 분석3. 훈련 Data와 테스트 Data 생성
4. 성능 평가
kNN 분석
1. Confusion Matrix
성능 평가
2. 카파 통계
우연으로 예측된 값과 실제 값이 일치할 확률인 Pr(e)로 정확도를 판정
두 사건이 독립적이라고 가정할 때,두 사건이 동시에 일어날 확률은 각 발생 확률을 곱함
항목 a의 동시에 일어날 확률 = Pr(실제 a) * Pr(예측된 a)Pr(e) = 각 항목의 동시에 일어날 확률의 총합k = (Pr(a) - Pr(e)) / (1 - Pr(e))
성능 평가
3. ROC (Receiver Operating Characteristics)
성능 평가
4. 교차 검증
성능 평가
1. z-score normalization
성능 향상
2. k 값 변화
성능 향상
k value False Negative False Positive Percent classfied Incorrectly
1 1 3 4 %
5 2 0 2 %
11 3 0 3 %
15 3 0 3 %
21 2 0 2 %
27 4 0 4 %
6. 결정 트리
Data Mining AlgorithmsModel Algorithms Task
지도 학습 알고리즘 최근접 이웃 분류
나이브 베이즈 분류
결정 트리 분류
선형 회귀 수치 예측
회귀 트리 수치 예측
모델 트리 수치 예측
신경망 다중 용도
서포트 벡터 머신 다중 용도
자율 학습 알고리즘 연관 규칙 패턴 감지
k평균 군집화 군집화
결정 트리Classification : 데이터를 분류하는데 목적
0과 1로 구분하거나 0, 1, 2, 3 등의 구분으로 분류
고객의 속성을 파악하고 고객의 행동을 예측하는데 활용
rpart, rpartOrdinal, randomForest,party, tree, marginTree, maptree 등
결정 트리트리 생성 과정
결정 트리세분화 : 관심 있는 어떤 성질을 기준으로 전체 데이터를 그룹으로 나누는 방법
속성 : 데이터로 표현되는 객체의 정보를 전달하는 중요한 변수
정보 : 무언가에 대한 불확실성을 감소시키는 성질
Target 변수가 있으면, 이 변수에 대한 단서를 제공하는 다른 변수가 존재
모델 : 어떤 목적을 달성하기 위해 실세계를 단순하게 표현한 것
결정 트리정보를 전달하는 속성의 선택
데이터를 분류할 때 순수하게 세분화하는 변수
No NoNoNoNoYes Yes Yes Yes Yes Yes Yes
결정 트리엔트로피 : 무질서도
ctree 분석1. Data 준비
ctree 분석2. Data 전처리 및 ctree 훈련
ctree 분석3. ctree 모델 확인
ctree 분석4. 테스트 Data 검증
rpart 분석Recursive Partitioning and Regression TreesTree의 prediction error를 최소화
1. Data 준비
rpart 분석2. rpart 생성
ctree 분석3. rpart 모델 확인
Random Forest 분석임의 입력값에 따른 forest에 있는 tree에 각각 값을 투입하여각각의 tree들이 voting 함으로써 분류
1. randomForest 생성
Random Forest 분석2. 오차율 분석
Random Forest 분석3. 영향도 분석
Random Forest 분석3. ROC 분석 (AUC)
ctree vs rpart 비교1. Data 준비
ctree vs rpart 비교2. Data 전처리 및 분리
불필요 속성 제거속성의 Data Type 변경 (Factor, 문자로 변환 등)단순공백을 NA 로 변경훈련 / 테스트 Data 분리
ctree vs rpart 비교3. 교차검증용 Data 생성
ctree vs rpart 비교4. Feature Plot 분석
ctree vs rpart 비교5. Mosaic Plot 분석
ctree vs rpart 비교6. rpart 훈련 및 예측
ctree vs rpart 비교7. ctree 훈련 및 예측
ctree vs rpart 비교8. 정확도 평가
ctree vs rpart 비교8. 비교 분석
5. 확률에 의한 분류
Data Mining AlgorithmsModel Algorithms Task
지도 학습 알고리즘 최근접 이웃 분류
나이브 베이즈 분류
결정 트리 분류
선형 회귀 수치 예측
회귀 트리 수치 예측
모델 트리 수치 예측
신경망 다중 용도
서포트 벡터 머신 다중 용도
자율 학습 알고리즘 연관 규칙 패턴 감지
k평균 군집화 군집화
확률을 이용한 분류확률 원리를 활용하는 나이브 베이즈 (naive bayes) 알고리즘
유사한 증거를 기반으로 한 사건의 유사성을 추정
확률론적 분류사건의 확률은 사건이 일어난 시도의 수를 총 사건의 수로 관찰된 데이터
50개 메일 중 10개 메일이 스팸이었다면 스팸의 확률은 20%
P(spam) = 0.20
P(normal) = 1 - 0.20 = 0.80조건부 확률
일반 메일 (80%)스팸 메일(20%)
모든 이메일
만남(5%)
확률론적 분류조건부 확률
만남이 없는이메일
만남이 있는스팸 이메일
스팸 안에만남
확률론적 분류베이즈 이론과 조건 확률
P(A|B)는 사건B가 일어날 때 사건A의 확률
“만남"이라는 단어가 이전 스팸 이메일에서 사용됐을 확률을 우도(likelihood)라고 하고,
모든 이메일에 “만남"이 나타날 확률을 주변 우도(marginal likelihood)라고 함
확률론적 분류우도표
P(스팸 | 만남) = P(만남 | 스팸) * P(스팸) / P(만남) = (4 / 20) * (20/100) / (5/100) = 0.8
만남
빈도 Yes No 총합
스팸 4 16 20
일반 1 79 80
총합 5 95 100
만남
빈도 Yes No 총합
스팸 4/20 16/20 20
일반 1/80 79/80 80
총합 5/100 95/100 100
나이브 베이즈 알고리즘분류를 위해 베이즈 이론을 사용
장점 단점
단순하고 빠르며 효과적노이즈와 결측제이터가 있어도 잘 수행훈련에 대해 상대적으로 적은예제로 수행예측에 대한 추정된 확률을 얻을 수 있음
모든 속성은 독립적이라는 가정에 의존수치 속성에 대해서만 적용 가능수치 속성으로 구성된 많은 데이터셋에 부적합추정된 확률은 예측된 범주보다 덜 신뢰적
7. 회귀 분석
8. Clustering
9. Association Analysis
과정 정리