1 R 기초

- R 장점 : 오픈소스, 가장 빠르게 발전, 보급됨

 

SAS

SPSS

R

프로그램 비용

유료, 고가

유료, 고가

오픈소스

설치용량

대용량

대용량

적음

다양한 모듈 지원 비용

별도 구매

별도 구매

오픈소스

최근 알고리즘 기술 반영

느림

다소 느림

매우 빠름

학습자료 입수의 편의성

유로 도서 위주

유로 도서 위주

공개 논문 자료 많음

질의를 위한 공개 커뮤니티

NA

NA

매우 활발

 

1. 분석 환경의 이해

 

1) 통계 패키지 R

- 복잡한 계산이나 시각화 기법을 사용할 있는 무료 소프트웨어

- 오픈 소스 무료 소프트웨어, 사용자 직접 제작한 패키지 사용 가능, 상용 소프트웨어 만큼 강력한 시각화

 

2) R 역사

- 'S' : 1975 "to turn ideas into software, quickly and faithfully." 통계 프로그램 C언어

- R : 1993 뉴질랜드 'Scheme' 개념의 다른 S 언어 프로그램

- 자유 소프트웨어 재단의 일반 공증 사용 허가서로 인한 무료 공개, S언어 사용 가능, Unix계역

 

3) R 특징

. 그래픽 처리

- 고해상도의 그래프와 그림, 매우 세부적인 부분까지 사용자 지정 가능, 빠른 처리시간

. 데이터 처리 계산 능력

- 백터, 행렬, 배열, 데이터 프레임, 리스트 등의 다양한 형태의 데이터 구조 지원

- 복잡한 구조 내의 개별 데이터에 접근하는 절차 간단 데이터 핸들링 간편

. 패키지

- 패키지 : 스스로 개발하는 새로운 함수, 특정 분석 기법을 사용

- 확장성 → 최근 이론이나 기법 사용하기 용이, 그래픽 처리 용이(고급 기능 사용가능)

 

4) R Studio

- 통합개발환경(IDE), 메모리에 저장되어 있는 변수 사용, 수정 용이

- 스크립트 문서화, 무료로 제공되는 운영체제

 

2. 기본 사용법

 

1) R R Studio 구성

. R 구성


① 메뉴 바 : R에서 사용할 수 있는 다양한 기본 기능들이 나열되

② 단축 아이콘 툴바  : 자주 사용하는 기능들의 단축 아이콘이 나열

 좌측부터 순서대로 스크립트 열기, 작업공간 불러오기, 작업공간 저장하기, 복사, 붙여넣기,  복사 후 붙여넣기, 현재 수행 중인 연산 중단, 인쇄하기

③ R 콘솔 : 콘솔은 R 명령어가 입력되고, 결과가 출력되는 R의 핵심적인 작업공간이다.

④ 스크립트 창 : 콘솔 창에서는 한 번에 한 줄의 명령어를 입력하고 바로 실행하여야 하기 때문에

긴 프로그래밍 코드를 작성하는 경우 사용하기가 불편하다.

이런 경우 별도로 실행시킬 수 있는 스크립트 창을 열어 여러 줄의 코드를 한 번에 작성하고

한 줄 씩 실행시킬 수 있으며 스크립트 창에 입력된 코드를 별도의 스크립트 파일로 저장할 수 있다 

 

. R Studio 구성


① 스크립트 창: 기존의 R 에서 별도로 열 수 있는 스크립트 창과 동일한 기능을 한다.

R에서 작성하여 저장한 스크립트를 불러올 수 있으며 여러 스크립트를 동시에 열어 작업할 수도 있다

② R 콘솔: 기존의 R에서 볼 수 있었던 콘솔창과 동일하다.

R 명령어를 실행한 결과가 콘솔 창에 나타나며 콘솔에 명령어를 입 력하여 실행할 수도 있다.

이 경우 한 줄 씩의 코드만 입력할 수 있다는 점에 유의하자.

③ 환경 및 히스토리 : 랩을 통해 환경 설정과 히스토리를 살펴볼 수 있다.

환경 창에서는 현재 실행중인 R 프로젝트에서 선언된 변수, 함수, 데이터셋 등의 정보를 살펴볼 수 있다.

히스토리 창에서는 현재까지 정상적으로 실행한 명령어들이 나열된다.

④ 현재 문서들이 저장되는 폴더나 R을 이용해 그린 그림들

 불러온 패키지들과 도움말 등을 별도의 한 영역에서 확인할 수 있다.

ctrl + Enter = run 버튼

 

2) R 패키지 설치하기

. 상단 메뉴바의 패키지 툴에서 패키지 설치하기 클릭

. 명령어로 패키지 설치하기

> install.packages("패키지이름")

불러오기

> library(패키지 이름)

 

3) R 도움말 (help)

- 해당 함수에 대한 기본적인 설명, 인수 설명, 옵션 목록 예제 : ?, help

> ?par

> help(par)

 

4) R 언어와 문법

- # : 주석

 

. R 데이터 구조

 

벡터

하나의 스칼라값, 하나 이상의 스칼라 원소를 갖는 단순한 형태 집합

원소 : 숫자, 문자, 논리 연산자 숫자는 숫자, 문자는 문자 벡터가

- 논리 연산자 → 숫자로 사용하려면 TRUE = 1, FALSE = 0

- 대소문자 구분하기에 모든 글자는 대문자로 기입

명령어 : C 'concentration(연결)'

> x = c(1, 20, 23, 40)

> y = c("사과", "바나나", "오렌지")

> z = c(TRUE, FALSE, TRUE)

> x <- c(1, 20, 23, 40)

> y <- c("사과", "바나나", "오렌지")

> z <- c(TRUE, FALSE, TRUE)

 

벡터와 벡터의 결합 : 숫자와 문자 벡터가 합쳐지면 문자형 벡터로 인식됨

> x <- c(1, 20, 23, 40)

> y <- c("사과", "바나나", "오렌지")

> xy <- c(x,y)

> xy
[1] "1"      "20"     "23"     "40"     "사과"  "바나나" "오렌지"

 

행렬

행과 열을 갖는 m * n 형태의 직사각형

명령어 : matrix(데이터를 묶은 벡터, ncol() or nrow() 옵션, byrow=T)

> mx = matrix(c(1,2,3,4,5,6), ncol=2)
> mx
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> mx = matrix(c(1,2,3,4,5,6), ncol=2, byrow = T)
> mx
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6

 

벡터 합쳐서 새로운 행렬 생성 가능

rbind : 기존의 행렬에 행을 추가하는 형태

cbind : 기존의 행렬에 열을 추가하는 형태

> r1=c(10,20)
> c1=c(20,20,20)
> rbind(mx,r1)
   [,1] [,2]
      1    2
      3    4
      5    6
r1   10   20

> cbind(mx,c1)
             c1
[1,] 1 2 20
[2,] 3 4 20
[3,] 5 6 20

명령어들을 이용해 데이터 프레임을 합치면 데이터 프레임 형태로 합침

 

데이터 프레임

행렬과 유사한 2차원 목록 데이터 구조, 행렬과 다르게 열이 서로 다른 타입 가질 있음

다루기가 쉽고 정보를 많이 담아 가장 많이 쓰임

명령어 : data.frame 여러 개의 벡터를 하나의 프레임으로 합침

> income = c( 100, 200, 150, 300, 900)
> car = c("kia", "hyundai", "kia", "toyota", "lexus" )
> marriage = c(FALSE, FALSE, FALSE, TRUE, TRUE )
> mydat = data.frame(income, car, marriage)
> mydat
  income     car marriage
1    100     kia    FALSE
2    200 hyundai    FALSE
3    150     kia    FALSE
4    300  toyota     TRUE
5    900   lexus     TRUE

 

. 외부 데이터 불러오기

 

CSV파일 불러오기

명령어 : read.table(header=T 줄을 변수명으로 지정, sep="," 쉼표로 구성된 파일임을 지정)

     read.csv 사용해도 가능 sep="," 구분자 표시 필요 없음

data1 <- read. table("D:\\DATA\\example.csv", header=T, sep=".")

\ 대신 \\ 사용함을 유의,  / 사용해도 무관

 

txt파일 불러오기

명령어 : read.table, sep="," 사용하지 않으면 텍스트 파일 불러오게됨

data2 < - read.table("D:\\DATA\\example.txt")

 

엑셀 파일 불러오기

- 엑셀을 csv 파일 형식으로 변경하여 불러오기

- RODBC 패키지 불러와서 엑셀 파일 가능하도록

> library(RODBC) # 패키지 열기

> new < - odbcConnectExcel(" c:\\data\\mydata" ) # 엑셀파일의 경로입력

> yourdata <- sqlFetch(new, "Sheet1") # 엑셀파일의 워크시트(sheet) 이름 입력

> close( new)

확장자를 생략하고 작성, 워크시트 대소문자 구분

 

. R 기초 함수

 

수열 생성하기

숫자를 반복해서 생성해줌

rep : 번째 인수 만큼 두번째 인수만큼 반복

> rep(1,3)
[1] 1 1 1
> rep(2:5, 3)
 [1] 2 3 4 5 2 3 4 5 2 3 4 5

 

seq : 번째 인수부터 1 증가하여 두번째 인수까지 수열 생성

 by = n 옵션 추가하여 n 증가 가능

 length = m 옵션 추가 전체 범위의 개수가 m 되도록 생성

> seq(1,3)
[1] 1 2 3
> 1:3                #seq 같은 방법
[1] 1 2 3
> seq(1, 11, by=2)
[1]  1  3  5  7  9 11
> seq(1, 11, length=6)
[1]  1  3  5  7  9 11
> seq(1, 11, length=8)
[1]  1.000000  2.428571  3.857143  5.285714  6.714286 8.142857  9.571429 11.000000

 

기초적인 수치 계산

사칙연산

> a=1:10
> a
 [1]  1  2  3  4  5  6  7  8  9 10
> a+a
 [1]  2  4  6  8 10 12 14 16 18 20
> a-a
 [1] 0 0 0 0 0 0 0 0 0 0
> a*a
 [1]   1   4   9  16  25  36  49  64  81 100
> a/a
 [1] 1 1 1 1 1 1 1 1 1 1

 

기본적은 벡터 생성 전치행렬 t(a) 1 3열로 변경하여 행렬 가능

명령어 : %*%

> a=c(2,7,3)
> a
[1] 2 7 3
> t(a)   #전치행렬
     [,1] [,2] [,3]
[1,]    2    7    3
> A=a%*%t(a)
> A
     [,1] [,2] [,3]
[1,]    4   14    6
                =  2,7,3 * 2       
[2,]   14   49   21
              =  2,7,3 * 7
[3,]    6   21    9
                =  2,7,3 * 3

 

행렬 * 연산 실행하면 단순 스칼라 결과

> mx=matrix(c(23,41,12,35,67,1,24,7,53), nrow=3)
> mx
     [,1] [,2] [,3]
[1,]   23   35   24
[2,]   41   67    7
[3,]   12    1   53
> 5*mx
     [,1] [,2] [,3]
[1,]  115  175  120
[2,]  205  335   35
[3,]   60    5  265

 

행렬의 역행렬 명령어 : solve

> solve(mx)
            [,1]        [,2]        [,3]
[1,] -0.35743822  0.18466969  0.13746848
[2,]  0.21069087 -0.09389813 -0.08300555
[3,]  0.07695411 -0.04004034 -0.01069087

 

평균 mean, 분산 var, 표준편차 sd

> a = 1:10
> mean(a)
#평균
[1] 5.5
> var(a) #분산
[1] 9.166667
> sd(a) #표준편차
[1] 3.02765

 

sum, 중앙값 median, 자연로그 log

> sum(a) #
[1] 55
> median(a) #중앙값
[1] 5.5
> log(a) #자연로그
 [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379
 [6] 1.7917595 1.9459101 2.0794415 2.1972246 2.3025851

 

서로 다른 벡터에 대한 공분산 cov, 상관계수 cor

> b=log(a) #자연로그값 생성
> cov(a,b)
#공분산
[1] 2.112062
> cor(a,b) #상관계수
[1] 0.9516624

 

summary 함수 : 사분위수, 최소값, 최대값, 중앙값, 평균

> summary(a)
   Min. 1st Qu.  Median    Mean  3rd Qu.    Max.
   1.00    3.25    5.50  
        5.50     7.75   10.00

 

. R 데이터 핸들링

: R 객체지향 언어, 변수내 요소 참조 직관적

 

벡터형 변수

문자형 변수를 [ n 번째] 지정해주면 해당하는 값만 불러옴

[ -n번째 ] 해당 원소만 제외하고 값을 불러옴

여러 원소 불러오고자 때는 c 명령어 사용하여 가능

> b[2] # 2번째 값만
[1] "b"
> b[-2] # 2번째 값만 빼고
[1] "a" "c" "d" "e"
> b[c(2,3)] # 2,3 번째 원소만 불러올때 C 명령어 사용
[1] "b" "c"

 

행렬/데이터 프레임 형태의 변수

데이터 프레임에 대해서도 특정 원소/요소 참조 가능

[ m번째, n번째 ] 값을 지정하거나 [-m, ] 또는 [ ,-n] 제외 가능

다만, [-m,-n]으로 지정하여 하나의 원소 제외 불가능

하나의 숫자 아니라 여러 숫자형 벡터도 적용 가능

> mydat[3,2] #3 2열의 값을 불러옴
[1] kia
Levels: hyundai kia lexus toyota
> mydat[,2] #2열의 값을 불러옴
[1] kia     hyundai kia     toyota  lexus 
Levels: hyundai kia lexus toyota
> mydat[4,] # 4행의 값을 불러옴
  income    car marriage
4    300 toyota     TRUE
> mydat[-3,] # 3행의 값만 빼고 불러옴
  income     car marriage
1    100     kia    FALSE
2    200 hyundai    FALSE
4    300  toyota     TRUE
5    900   lexus     TRUE
> mydat[,-2] # 2열의 값만 빼고 불러옴
  income marriage
1    100    FALSE
2    200    FALSE
3    150    FALSE
4    300     TRUE
5    900     TRUE

 

. 반복 구문과 조건문

 

for 반복 구문

for 조건 하에 i 값을 하나씩 증가시켜 { } 안의 구문을 반복 실행

> a = c() # a 벡터 생성
> for (i in 1:9){
+   a[i]
= i*i       #1~9까지의 곱을 이루게

+ }

> a
[1]  1  4  9 16 25 36 49 64 81

 

조건 : 1~100까지 i 1 증가하여 100 반복하여 더하기

> isum = 0
> for (i in i:100){
+   isum = isum+i
+ }
> cat("1~100 sum = ", isum, "
\n")
1~100 sum =  5014

 

while 반복 구문

for 구문과 다르게 괄호안의 조건이 만족 , 중괄호 안의 구문 반복

for 구문은 반복 횟수를 정하는 반면, while 구문은 정해지 않음

> x=1
> while(x<5){
+   x=x+1
+   print(x)
+ }
[1] 2
[1] 3
[1] 4
[1] 5

 

if~else 조건문

if 조건의 특정 조건이 만족되는 경우 구문 실행, 만족 안되면 else 이하의 조건 부여

> StatScore = c(88, 90, 78, 84, 76, 68, 50, 48, 33, 70 , 48, 66, 88, 96, 79, 65, 27, 88, 96,
+               33, 64, 48, 77, 18, 26, 44, 48, 68, 77 , 64, 88, 95, 79, 88, 49, 30 , 29, 10, 49, 88)
> over70 = rep(0,40)
          # 0 40개인 숫자 벡터
> for (i in 1:40) {
  
+ if(StatScore[i]>=70) over70[i]=1
     #70 이상이면 i 값을 1 변경 나머지는 0으로
+ else over70[i]=0 }
> over70
 [1] 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0
[27] 0 0 1 0 1 1 1 1 0 0 0 0 0 1
> sum(over70)
[1] 18

 

 

. 사용자 정의 함수

function : 사용자가 직접 복잡한 함수 구성 사용 가능

함수 이름 = function(x,y,z) 으로 인수 작성

> addto = function(a){
+   isum=0
+   for(i in 1:a){
+     isum=isum+i
+   }
+   print(isum)
+ }
> addto(100)
[1] 5050
> addto(50)
[1] 1275

 

 

. 기타 유용한 기능들

 

paste

- 입력받은 문자열을 하나로 붙여줌

- 'sep=' 옵션을 통해 붙이고자 하는 문자열 사이 구분자를 삽입

> number=1:10
> alphabet=c("a","b","c")
> paste(number, alphabet)
 [1] "1 a"  "2 b"  "3 c"  "4 a"  "5 b"  "6 c"  "7 a"
 [8] "8 b"  "9 c"  "10 a"
> paste(number, alphabet, sep = " to the ")
 [1] "1 to the a"  "2 to the b"  "3 to the c"
 [4] "4 to the a"  "5 to the b"  "6 to the c"
 [7] "7 to the a"  "8 to the b"  "9 to the c"
[10] "10 to the a"

 

substr

- 주어진 문자열에서 특정 문자열 추출

> substr("BigDataAnalysis", 1, 4)
[1] "BigD"
> country=c( "Korea" , "Japan" , "China" , "Singapore" , "Russia" )
> substr(country, 1,3)
[1] "Kor" "Jap" "Chi" "Sin" "Rus"

 

자료형 데이터 구조 변환

- 주어진 객체의 데이터 구조를 다른 구조로 변경 가능

 

as.data.frame(x) : 데이터 프레임 형식으로 변환

as.list(x) : 리스트 형식으로 변환

as.matrix(x) : 형렬 형식으로 변환

as.matrix 데이터 프레임을 행렬로 변환 가능, 숫자는 문자 강제변환

as.vector(x) : 벡터 형식으로 변환

as.factor(x) : 팩터 형식으로 변환

as.integer(x) : 정수형 벡터 변환

as.numeric(x) : 수치형 벡터로 변환

as.character(x) : 문자형 벡터로 변환

 

논리형 변환

as.numeric(TRUE / FALSE) = FALSE 0, TRUE1

as.logical(x) : 0이면 FALSE, 0 아닌 모든 값을 TRUE

> as.numeric(FALSE)
[1] 0
> as.numeric(TRUE)
[1] 1
> as.logical(0)
[1] FALSE
> as.logical(0.45)
[1] TRUE

 

문자열을 날짜로 변환

Data 객체 변환

as.Data() : 기본으로 yyyy-mm-dd 가정함, 다른 형으로 변경 'format='옵션활용

→ format="%m/%d/%Y" 형으로 변경 사용 가능, Y 대문자

Sys.Data() : 현재 날짜를 변환

> as.Date("2015-01-13")
[1] "2015-01-13"

> as.Date("01/13/2015",format="%m/%d/%Y")
[1] "2015-01-13"

> Sys.Date()
[1] "2018-08-22"

 

날짜를 문자열로 변환

format(데이터, 포맷)

as.character()

> format(Sys.Date())     #아래와 같은 형식으로 나타남, 형식 변환을 주고 싶음 포맷 안에 포맷 기준작성
[1] "2018-08-22"
> as.character(Sys.Date())
[1] "2018-08-22"
> format(Sys.Date(),format="%m/%d/%Y")
[1] "08/22/2018"

 

> format(Sys.Date(),'%a')   #요일
[1] "수"
> format(Sys.Date(),'%b')   #
[1] "8"
> format(Sys.Date(),'%m')   #, 두자리 숫자
[1] "08"
> format(Sys.Date(),'%d')   #, 두자리 숫자
[1] "22"
> format(Sys.Date(),'%y')    #연도, 두자리 숫자
[1] "18"
> format(Sys.Date(),'%Y')    #연도, 네자리 숫자
[1] "2018"

 

5) 그래픽 기능

낮은 단계 그래픽 : 설정, 색변경

높은 단계 그래픽 : 함수들을 이용해서 하나의 그래프 구현 패키지 활용 가능

R 스튜디오에서는 Plot 탭에서 확인 가능

 

. 산점도 그래프

plot(x,y) 또는 plot(y ~ x)

평면에 점을 찍어 표현

> height = c( 170,168,174, 175,188,165,165,190 ,173, 168,159,170,184,155,165)
> weight = c(68,65,74,77 ,92 ,63,67 ,95,72,69,60 ,69,73, 56,55 )
> plot(height, weight)

> plot(weight~height)


 

 

. 산점도 배열

pairs(변수, main = 최상단 제목표기, pch= 찍히는 점의 모양, bg=백그라운드 색상)

각각의 변수들에 대해서 각각의 산점도를 한눈에 있도록 행렬

> pairs(iris[1:4], main="Andreson's Iris Data",

pch=21, bg=c("red", "green3", "blue")[unclass(iris$Species)])

 


 

. 히스토그램과 상자그림

hist(벡터값, prob=T 상대도수 표시)

boxplot(벡터값)

> hist(StatScore)
> hist(StatScore, prob=T)
#상대도수 표시, 중간 그래프
> boxplot(StatScore
)

 


 

2 데이터 마트

 

모델링 : 데이터 마이닝에서 다양한 분석기법을 적용해 모델을 개발하는 과정

모델링 도구 : DB에서 직접 값을 가져다 변형할 있는 기능 제공

모델링 분석에 앞서 수집, 변형 과정 필요 정리된 데이터 개발하면 신속한 모델링 가능

데이터 마트 : 데이터의 부분, 특정 사용자가 관심 갖는 데이터를 담은 작은 규모의 데이터 웨어하우스

사용자의 요구 항목에 따라 체계적으로 분석하기 위한 다양한 정보를 담은 경영 활동을 도울 시스템

데이터 웨어하우스와는 사용자의 기능 제공 범위를 기준으로 구분함(데이터 웨어하우스는 정부기간)

 

1. R reshape 활용한 데이터 마트 개발

데이터 셋에 대한 일종의 변형 필요 , 데이터 재정렬 기법이 필요

밀집화(aggregation) : 복잡한 데이터를 축소하거나 재정렬, 엑셀 - 피벗테이블, 정보 손실 발생

reshape : 정보를 그대로 유지하는 것이 차이점

- melt : id 있는 변수를 기준으로 변수를 variable 이름의 데이터를 만들고, value 저장하여 표준형식 변환

- cast : melt 데이터를 ~ 이용해 y, x측의 변수 값으로 표시

> install.packages("reshape")
Installing package into ‘C:/Users/YGL_EDU/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)
trying URL '
https://cran.rstudio.com/bin/windows/contrib/3.5/reshape_0.8.7.zip'
Content type 'application/zip' length 168728 bytes (164 KB)
downloaded 164 KB

package ‘reshape’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\YGL_EDU\AppData\Local\Temp\RtmpycHm6F\downloaded_packages
> library(reshape)

> data("airquality")
> head(airquality)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6
> head(airquality, 10)
   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
10    NA     194  8.6   69     5  10
> names(airquality) #변수명(컬럼명) 확인
[1] "Ozone"   "Solar.R" "Wind"    "Temp"    "Month" 
[6] "Day"   
> names(airquality) = tolower(names(airquality)) # 변수명 대소문자 변경
> names(airquality)
[1] "ozone"   "solar.r" "wind"    "temp"    "month" 
[6] "day"   

 

> aqm = melt(airquality, id=c("month", "day"), na.rm=TRUE)
> aqm
    month day variable value
1       5   1    ozone  41.0
2       5   2    ozone  36.0
3       5   3    ozone  12.0
4       5   4    ozone  18.0
5       5   6    ozone  28.0
6       5   7    ozone  23.0

 

> a <- cast(aqm, day ~ month ~ variable)
> a
, , variable = ozone

month
day    5  6   7   8  9

 

 

, , variable = solar.r

month
day    5   6   7   8   9
  1  190 286 269  83 167

 

, , variable = wind

month
day     5    6    7    8    9
  1   7.4  8.6  4.1  6.9  6.9

 

, , variable = temp

month
day   5  6  7  8  9
  1  67 78 84 81 91

 

> b <- cast(aqm, month ~ variable, mean) #mean 함수 적용하여 평균값 산출
> b
  month    ozone  solar.r      wind     temp
1     5 23.61538 181.2963 11.622581 65.54839
2     6 29.44444 190.1667 10.266667 79.10000
3     7 59.11538 216.4839  8.941935 83.90323
4     8 59.96154 171.8571  8.793548 83.96774
5     9 31.44828 167.4333 10.180000 76.90000

 

> c <-cast(aqm, month~ . |variable, mean) # | 이용하여 산출물을 분리해서 표시
> c
$`ozone`
  month    (all)
1     5 23.61538
2     6 29.44444
3     7 59.11538
4     8 59.96154
5     9 31.44828

$solar.r
  month    (all)
1     5 181.2963
2     6 190.1667
3     7 216.4839
4     8 171.8571
5     9 167.4333

$wind
  month     (all)
1     5 11.622581
2     6 10.266667
3     7  8.941935
4     8  8.793548
5     9 10.180000

$temp
  month    (all)
1     5 65.54839
2     6 79.10000
3     7 83.90323
4     8 83.96774
5     9 76.90000

> d <- cast(aqm, month ~ variable, mean, margins = c("grand_row", "grand_col")) # margin 총계 구하기
> d
  month    ozone  solar.r      wind     temp    (all)
1     5 23.61538 181.2963 11.622581 65.54839 68.70696
2     6 29.44444 190.1667 10.266667 79.10000 87.38384
3     7 59.11538 216.4839  8.941935 83.90323 93.49748
4     8 59.96154 171.8571  8.793548 83.96774 79.71207
5     9 31.44828 167.4333 10.180000 76.90000 71.82689
6 (all) 42.12931 185.9315  9.957516 77.88235 80.05722

 

> e <- cast(aqm, day ~ month, mean, subset=variable=="ozone") # 오존에 대한 결과값만 subset 으로 확인
> e
   day   5   6   7   8   9
1    1  41 NaN 135  39  96
2    2  36 NaN  49   9  78
3    3  12 NaN  32  16  73
4    4  18 NaN NaN  78  91

 

> f <- cast(aqm, month ~ variable, range) # range 최소 X1, 최대 X2 동시에 표시해
> f
  month ozone_X1 ozone_X2 solar.r_X1 solar.r_X2 wind_X1 wind_X2 temp_X1
1     5        1      115          8        334     5.7    20.1      56
2     6       12       71         31        332     1.7    20.7      65

 

 

2. sqldf 이용한 데이터 분석

표준 SQL 사용되는 문장 처리 가능, 특수문자는 ' ' 묶어줘서 사용 가능

 

> install.packages("sqldf")
Installing package into ‘C:/Users/YGL_EDU/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)
trying URL '
https://cran.rstudio.com/bin/windows/contrib/3.5/sqldf_0.4-11.zip'
Content type 'application/zip' length 78176 bytes (76 KB)
downloaded 76 KB

package ‘sqldf’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\YGL_EDU\AppData\Local\Temp\RtmpycHm6F\downloaded_packages
> library(sqldf)
필요한 패키지를 로딩중입니다: gsubfn
필요한 패키지를 로딩중입니다: proto
필요한 패키지를 로딩중입니다: RSQLite
Warning message:
패키지 ‘sqldf’는 R 버전 3.5.1에서 작성되었습니다
> data("iris")
> sqldf("select*from iris")
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa

> sqldf("select*from iris limit 10")    # 10개만 보여주기 가능 head 에서 숫자 지정해서 보여주기와 같은 기능
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
7           4.6         3.4          1.4         0.3  setosa
8           5.0         3.4          1.5         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
10          4.9         3.1          1.5         0.1  setosa

> sqldf("select count(*) from iris where Species like 'se%'") # like 사용시  ' '작은 따옴표 붙여서 사용
  count(*)
1       50

 

3. plyr

데이터를 분리하고 처리한 다음, 다시 결합하는 데이터 처리 기능 제공

- apply : 데이터와 출력변수를 동시에 배열로 치환하여 처리할 있도록 도와줌

- multi-core

 

d = 데이터 프레임(data.frame), a = 배열(array), l = 리스트(list)

 

입력되는 데이터 형태

 

데이터 프레임

리스트

배열

데이터 프레임

ddply

ldply

adply

리스트

dlply

llply

alply

배열

daply

laply

aaply

dlply = 데이터 프레임으로 들어와서 리스트 형태로 출력되는

 

> set.seed(1)  # 난수 생성시에 일정하게 고정 시키는 역할
> d = data.frame(year=rep(2012:2014, each = 6), count =round(runif(9,0,20)))
> print(d)
   year count
1  2012     5
2  2012     7
3  2012    11
4  2012    18
5  2012     4
6  2012    18
7  2013    19
8  2013    13
9  2013    13
10 2013     5
11 2013     7
12 2013    11
13 2014    18
14 2014     4
15 2014    18
16 2014    19
17 2014    13
18 2014    13

runif = 생성할 난수의 개수, 최소값, 최대값

 

> ddply(d, "year", function(x){
+   mean.count = mean(x$count)
  # 평균값
+   sd.count = sd(x$count)
             # 표준편차
+   cv = sd.count/mean.count
        # 변동계수
+   data.frame(cv.count=cv)
+ })
  year  cv.count
1 2012 0.5985621
2 2013 0.4382254
3 2014 0.3978489

 

> ddply(d, "year", summarise, mean.count = mean(count)) #summarise 새로 생긴 변수 값만 보여줌
  year mean.count
1 2012   10.50000
2 2013   11.33333
3 2014   14.16667
> ddply(d, "year", transform, total.count = sum(count)) #transform 계산시 사용된 변수도 함께 보여줌
   year count total.count
1  2012     5          63
2  2012     7          63
3  2012    11          63
4  2012    18          63
5  2012     4          63
6  2012    18          63
7  2013    19          68
8  2013    13          68
9  2013    13          68
10 2013     5          68
11 2013     7          68
12 2013    11          68
13 2014    18          85
14 2014     4          85
15 2014    18          85
16 2014    19          85
17 2014    13          85
18 2014    13          85

 

4. 데이터 테이블

데이터 프레임과 유사하지만, 보다 빠른 그룹화와 순서화, 짧은 문장 지원이 가능

64비트 RAM 충분히 많을 효율적

행번호가 : 으로 되어 있고 데이터 프레임에서 데이터 테이블 형식으로 쉽게 변환

데이터 프레임보다 데이터 테이블로 생성하는 것이 빠르고 자료를 검색에도 빠름(무조건 빠른것은 아님)

데이터 프레임이 벡터 검색 방식이고 데이터 테이블은 인덱스를 활용한 바이너리 검색 방법

system.time 으로 검색 속도 있음

 

> install.packages("data.table")
Installing package into ‘C:/Users/YGL_EDU/Documents/R/win-library/3.5’
(as ‘lib’ is unspecified)
trying URL '
https://cran.rstudio.com/bin/windows/contrib/3.5/data.table_1.11.4.zip'
Content type 'application/zip' length 1829590 bytes (1.7 MB)
downloaded 1.7 MB

package ‘data.table’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
        C:\Users\YGL_EDU\AppData\Local\Temp\RtmpycHm6F\downloaded_packages
> library(data.table)
data.table 1.11.4  Latest news: http://r-datatable.com

다음의 패키지를 부착합니다: ‘data.table’

The following object is masked from ‘package:reshape’:

melt

Warning message:
패키지 ‘data.table’는 R 버전 3.5.1에서 작성되었습니다

 

> DT = data.table(x=c("b","b","b","a","a"), v=rnorm(5)) #rnorm 정규분포에서 5 난수 생성
> DT
   x            v
1: b -1.539950042
2: b -0.928567035
3: b -0.294720447
4: a -0.005767173
5: a  2.404653389

> data(cars)
> head(cars)
  speed dist
1     4    2
2     4   10
3     7    4
4     7   22
5     8   16
6     9   10
> CARS <- data.table(cars)
> head(CARS)
   speed dist
1:     4    2
2:     4   10
3:     7    4
4:     7   22
5:     8   16
6:     9   10

> tables()      # 테이블의 크기, 용량에 대해서 있다.
   NAME NROW NCOL MB       COLS KEY
1: CARS   50  
       2      0   speed,dist   
2:   DT  
     5          2      0          x,v   
Total: 0MB

> sapply(CARS,class)
    speed      dist
"numeric" "numeric"

> DT[2,] #2번행 조회 DT[2] 로도 검색 가능
   x         v
1: b -0.928567
> DT[DT$x=="b"]
   x          v
1: b -1.5399500
2: b -0.9285670
3: b -0.2947204

> setkey(DT,x)    #키가 x 정해지고 정렬되었다.
> DT
   x            v
1: a -0.005767173
2: a  2.404653389
3: b -1.539950042
4: b -0.928567035
5: b -0.294720447
> tables()              #키가 x 정해짐을 있음
   NAME NROW NCOL MB       COLS      KEY
1: CARS 
      50     2      0    speed,dist   
2:   DT   
        5      2      0            x,v         x
Total: 0MB
> DT["b",]
   x          v
1: b -1.5399500
2: b -0.9285670
3: b -0.2947204

> DT["b",mult="first"]    # 첫번째 결과
   x        v
1: b -1.53995
> DT["b",mult="last"]   # 마지막 결과
   x          v
1: b -0.2947204

 

3 결측값 처리와 이상값 검색

 

1. 데이터 탐색

1) 데이터 기초 통계

head(테이블이름) : 앞선 6줄만 먼저 보여줌

head(테이블이름, n) : 앞선 n줄만 보여줌, 원하는 개수 넣을 있음

str(테이블이름) : 데이터의 구조를 파악 가능

summary(테이블이름) : 기초 통계량 확인, 최소값, 최대값, 사분위값, 평균값, 중위값, 범주형이면 빈도수

cov(테이블 내의 범위) : 공분산

cor(테이블 내의 범위) : 상관계수

선형 상관관계 강도 파악

 

2. 결측값 처리

결측값도 의미있는 경우가 있음, 어떻게 처리하느냐가 전체 작업속도에 영향을

결측값 처리 패키지 : Amelia II, Mice, mistools

결측값 : NA

불가능한값 : NaN (0으로 나누는 경우 )

결측값 여부 확인 : is.na

Amilia imputation 사용하면 효율적으로 데이터 결측값을 변경할 있음

 

> y <- c(1,2,3,NA)
> is.na(y)
    # 결측값 여부
[1] FALSE FALSE FALSE  TRUE

 

> mydata[mydata$v1==99, "v1"]<-NA     # 99 NA 변경할때

> mydata[!complete.cases(mydata),]       #넓은 범위의 결측값을 삭제할

 

 

> x<-c(1,2,NA,3)
> mean(x)
                    #결측값이 포함되어 있다면 결과는 NA
[1] NA
> mean(x, na.rm=T)    # 결측값을 제외하기
[1] 2

 

3. 이상값 검색

전처리를 어떻게 할지 결정할 , 부정사용방지 시스템에서 규칙을 발견할 사용

관련 알고리즘 : ESD(평균으로 표준편차 만큼 떨어진 ), MADM

일반적으로 사분위값으로 판단 주요 변수 특성 파악, 부정사용방지 프로젝트는 집중적으로 봐야함

 

a1 : 의도하지 않게 잘못 입력한 경우

a2 : 의도하지 않게 입력되었으나 분석 목적에 부합하지 않아 제거해야 하는 경우, 수작업을 거래 정보 입력

a3 : 의도하지 않은 현상이지만 분석에 포함해야 하는 경우, 고객 행동분석

b1 : 의도된 이상값, 사기(fraud)

→ a1, a2 bad data, a3, b1 이상값

 

- 상자그림으로 식별 가능

> x=rnorm(100)
> boxplot(x)
> x=c(x, 19, 28, 30)
  #임의의 결측값 넣어줌
> outwith=boxplot(x)
> outwith$out
           #결측값 확인 가능
[1] 19 28 30

 

 

 

 

- outliers 패키지 사용

outliers() : 평균과 가장 차이가 있는

> library(outliers)
> set.seed(1234)
> y=rnorm(100)
> outlier(y)
   #평균과 가장 차이나는 출력
[1] 2.548991
> outlier(y, opposite = TRUE) #반대방향으로 가장 차이 나는
[1] -2.345698

 

> dim(y) = c(20,5) # 20, 5 행렬 생성
> outlier(y)
# 열의 평균과 가장 차이가 나는 열별로 출력
[1] 2.415835 1.102298 1.647817 2.548991 2.121117
> outlier(y, opposite = TRUE)
[1] -2.345698 -2.180040 -1.806031 -1.390701 -1.372302
> boxplot(y)


1 마스터 플랜 수립

 

1. 분석 마스터 플랜 수립 프레임워크

- 우선순위 설정 : 전략적 중요도, 비즈니스 성과 ROI, 분석과제의 실행 용이성

- 적용범위 방식 고려 : 업무 내재화 적용 수준, 별도의 분석 화면 일단 적용할지

 분석 데이터 /외부 적용 수준 고려, 분석 기술 적용 수준


 

- 정보전략계획 ISP(Information Strategy Planning) : 기업, 공공기관 시스템 중장기 로드맵 정의 절차

 

2. 수행 과제 도출 우선순위 평가

- 정의된 데이터 과제에 대한 실행 순서를 정하는

- 업무 영역별로 도출된 분석 과제를 평가기준에 따라 평가, 과제의 후행 관계 고려, 적용 순위 조정

- 전략적 중요도, 실행 용이성 기업에서 고려하는 중요 가치 기준에 따라 다양한 관점 우선순위 수립


 

- 과제 우선순위 평가기준

1) 전략적 중요도

- 전략적 필요성 : 전략적 목표 업무에 직접적이 연관관계가 밀접한 정도

    이슈 미해결 발생하게 위험 손실에 대한 정도

- 시급성 : 사용자 요구사항, 업무능률 향상을 위해 시급히 수행되어야 하는 정도

 향후 경쟁우위 확보를 위한 중요성 정도

2) 실행 용이성

- 투자 용이성 : 기간 인력 투입 용이성, 비용 투자 예산 확보 가능성

- 기술 용이성 : 적용 기술의 안정성 검증, 응용시스템, 하드웨어 유지보수 용이성

 개발 스킬 성숙도 신기술 적용성 정도

 

- 빅데이터 4V

- 투자비용측면 : 크기 - 저장에 따른 비용 투자

    다양성 - 유형에 따라 정형/비정형/반정형, 외부/내부/소셜 등을 입수하는 투자

   생성속도 - 빠르게 가공, 분석하는 기술 요구, 아키텍쳐의 변형에 따른 투자

- 비즈니스 효과 : 가치 - 데이터 분석 통한 달성하고자 하는 목표 가치 


 

- ROI 요소 고려한 우선순위 평가 기준

- 전략적 중요도에 따른 시급성이 가장 중요한 기준 : 현재 또는 미래 적정 시기 고려

- 분석순위를 고려한 난이도 : 비용, 범위 측면에서 적용하기 쉬운지, 어려운지

- 과제 범위를 시범과제 형태로 할지, 처음부터 크게 할지, 소스는 /외부 어디까지 쓸지


 

-포트폴리오 4분면 분석을 통한 과제 우선순위 선정 기법


- 우선적인 분석 과제 적용 3영역, 가장 늦은 것은 2영역

- '시급성' : 3 → 4 → 2

1영역은 경영진, 담당자의 의사결정에 따라 조정 가능 난이도 조율에 따라 3으로 변경

- '난이도' : 3 → 1 → 2

기본 시스템 영향 최소화, 별도 분리해서 난이도 조절하면 우선순위 조절 가능

- 분석과제를 일관적으로 할지, 부분적으로 할지에 따른 의사결정 필요


 

3. 이행계획 수립

1) 로드맵 수립

- 사분면 분석 이후 과제별 적용범위 방식을 고려하여 우선순위 최종 결정 단계적 구현 로드맵


2) 세부 이행계획 수립

- 폭포수 방식 또는 정련의 과정 반복하여 완성도 높힘, 혼합형 적용


 

2 분석 거버넌스 체계 수립

 

1. 거버넌스 체계 개요

- 의사결정 강조될수록 데이터 분석 활용을 위한 관리 중요해짐, 기업문화로 정착하고 분석 업무 고도화

- 거버넌스 체계

- Organization : 분석 기획, 관리 추진 조직

- Process : 과제 기획, 운영 프로세스

- System : 분석 관련 시스템, IT 시스템

- Data : 데이터 거버넌스

- Human Resource : 분석 관련 교육, 마인드 육성 체계

 

2. 데이터 분석 성숙도 모델 수준 진단

- 데이터 분석 수준 진단을 통해 무엇을 준비하고 보완해야 하는지 유형 분석 방향성 결정

- 경쟁력 확보를 위해 선택과 집중, 보완점 등의 개선방안 도출

 

1) 분석 준비도(Readiness)

  • 분석 업무 파악 : 발생한 사실 분석 업무, 예측 분석 업무, 시물레이션 분석 업무,

최적화 분석 업무, 분석 업무 정기적 개선

  • 인력 조직 : 분석 전문가 직무 존재, 분석 전문가 교육 훈련 프로그램, 관리자들의 기본적 분석 능력

전자 분석업무 총괄 조직 존재, 경영진 분석 업무 이해 능력

  • 분석 기법 : 업무별 적합한 분석기법 사용, 분석 업무 도입 방법론, 분석기법 라이브러리

분석기법 효과성 평가, 분석기법 정기적 개선

  • 분석 데이터 : 분석 업무를 위한 데이터 충분성/신뢰성/적시성

비구조적 데이터 관리, 외부 데이터 활용 체계, 기준 데이터 관리(MDM)

  • 분석 문화 : 사실에 근거한 의사결정, 관리자의 데이터 중시, 회의 등에서 데이터 활용

경영진의 직관보다 데이터, 데이터 공유 협업 문화

  • IT 인프라 : 운영시스템 데이터 통합, EAI/ETL 데이터 유통체계, 분석 전용 서버 스토리지

빅데이터 분석 환경, 통계 분석 환경, 비주얼 분석 환경

 

2) 분석 성숙도(Maturity)

- CMMI (Capability Maturity Model Integration) : 소프트웨어 공학에서 개발 능력과 조직 성숙도 파악

단계

도입단계

활용단계

확산단계

최적화단계

설명

분석을 시작하여

환경과 시스템 구축

분석 결과를

실제 업무 적용

전사 차원

분석 관리 공유

분석 진화하여

혁신 성과 향상에 기여

비즈니스

부문

실적분석 통계

정기보고 수행

운영데이터 기반

미래 결과 예측

시물레이션

운영 데이터 기반

전사 성과 실시간 분석

프로세스 혁신 3.0

분석 규칙 관리

이벤트 관리

외부 환경분석 활용

최적화 업무 분석

실시간 분석

비즈니스 모델 진화

조직/역량

부문

일부 부서에서 수행

담당자 역량 의존

전문 담당부서

분석기법 수행

관리자 분석 수행

전사 모든 부서 수행

분석 COE 조직 운영

데이터 사이언티스트 확보

데이터 사이언티스트 그룹

경영진 분석 활용

전략 연계

IT 부문

데이터 웨어하우스

데이터 마트

ETL/EAI

OLAP

실시간 대시보드

통계 분석 환경

빅데이터 관리 환경

시물레이션 최적화

비주얼 분석

분석 전용 서버

분석 협업환경

분석 Sandbox

프로세스 내재화

빅데이터 분석

 

3) 분석 수준 진단 결과

- 준비형 : 낮은 준비도, 낮은 성숙도 → 사전 준비가 필요한 유형

- 정착형 : 낮은 준비도, 약간의 성숙도 → 분석의 정착이 필요한 유형

- 도입형 : 분석기업은 부족하지만, 조직 인력은 준비가 되어 있음 데이터 분석 바로 도입 가능

- 확산형 : 6가지 분석 구성요소 모두 갖추고 부분적으로 도입해 지속적인 확산이 가능한 기업


 

3. 분석 지원 인프라 방안 수립

- 단위별로는 복잡하고 비용 증대란 부작용, 분석 마스터 플랜을 장기적으로 안정적 고려 필요


 

- 플랫폼 : 분석 서비스를 위한 응용 프로그램이 실행될 있는 기초 시스템, 환경 제공


 

4. 데이터 거버넌스 체계 수립

- 전사 차원의 데이터 관리체계필요 : 중복 비표준에 따른 오류, 활용 저하의 문제점

- 전사 차원의 모든 데이터에 대하여 표준화된 관리 체계 수립하고 운영을 위한 프레임워크, 저장소 구축

- 관리 대상 : 마스터 데이터, 메타 데이터, 데이터 사전

- 가용성, 유용성, 통합성, 보안성, 안정성 확보 가능

- 독자적 수행 또는 전사 차원의 IT 거버넌스나 EA 구성 요소로 구축

- 빅데이터 관리, 데이터 최적화, 정보보호, 생명주기 관리, 카테고리별 관리 책임자 지정

 

- 데이터 거버넌스 구성요소

- 원칙 : 데이터 유지 관리 위한 지침과 가이드, 보안, 품질기준, 변경관리

- 조직 : 데이터를 관리할 조직의 역할과 책임, 데이터 관리자, 데이터베이스 관리자, 데이터 아키텍트

- 프로세스 : 데이터 관리를 위한 활동과 체계, 작업절차, 모니터링 활동, 측정 활동

 

1) 데이터 표준화

- 데이터 표준 용어 설정 : 표준단어사전, 표준도메인사전, 표준 코드 구성, 상호점검 가능 프로세스

- 명명 규칙수립 : 언어별로 작성되어 매핑상태 유지

- 메타데이터 구축, 데이터 사전 구축 : 데이터 구조 체계 형성, 구조체계나 엔티티 관계 그래프 제공

2) 데이터 관리 체계

- 정합성 효율성을 위한 메타데이터와 데이터 사진의 관리 원칙 수립

- 항목별 상세 프로세스 생성, 관리, 운영을 위한 담당자 조직별 역할 책임 준비

- 데이터 생명 주기 관리 방안 수립 필요, 데이터 가용성 관리 비용 증대 문제 발생

3) 데이터 저장소 관리(Repository)

- 데이터 관리 체계 지원을 위한 워크플로우 관리용 응용 소프트웨어 지원

- 관리 대상 시스템과 인터페이스 통한 통제 필요

- 구조 변경에 따른 사전 영향 평가 수행, 효율적인 활용 가능

4) 표준화 활동

- 표준 준수 여부 주기적 점검, 모니터링 실시

- 안정적인 정착을 위한 계속적인 변화관리 주기적 교육 진행

- 표준화 개선 활동을 통한 실용성 증대

 

5. 데이터 조직 인력방안 수립

- 데이터 분석 조직

목표 : 기업의 경쟁력 확보를 위한 가치 발견, 최적화 목표

역할 : 업무 전반에 걸친 분석 과제 발굴, 의미있는 인사이트 찾아 실행하는 역할 수행

구성 : 다양한 분야의 지식과 경험을 가진 인력과 업무 담당자로 구성된 전사 또는 부서 조직


 

- 분석 조직 인력 구성 고려사항


 

- 분석 조직 구조

1) 집중형 조직구조

- 조직내 별도의 전담조직, 분석을 담당하여 전사의 분석 과제 우선순위 추진 가능

- 현업 부서와 분석 업무가 중복 또는 이원화 가능성

2) 기능 중심의 조직구조

- 일반적형태, 해당 업무 부서에서 직접 분석

- 전사적 관점의 핵심 분석 어려움, 특정 부서에 국한될 수도 중복될 수도 있음

3) 분산된 조직 구조

- 분석 조직 인력이 현업 부서에 배치함

- 전사적 차원의 우선순위 선정 수행 가능, 분석 결과 신속히 실무에 적용 가능


분석 전문 부서에 모아 인재들을 모아 구성, 조직 경쟁력 극대화 필요


 

6. 분석 과제 관리 프로세스 수립

- 과제 발굴 : 개별 조직이나 개인 아이디어 발굴, 과제화하여 풀로 관리하면서 프로젝트 선정

- 과제 수행 모니터링 : 팀을 구성하여 과제 실행, 지속적인 모니터링과 과제 결과 공유 개선

조직 분석 문화 내재화 경쟁력 확보 가능, 풀을 축적 관리 함으로 시행착오 최소화 가능


 

7. 분석 교육 변화 관리

- 분석 가치를 극대화, 내재화 하는 안정적인 추진기로 들어가기 위해서는 교육 마인드 육성 필요

- 분석 도입에 대한 문화적 대응


- 데이터 분석 방법 분석적 사고 교육


1 분석 기획 방향성 도출

분석기획 : 실제 분석 수행 , 수행할 과제의 정의 의도했던 결과를 도출할 있도록 관리할 사전 방안을 계획하는 작업

어떠한 목표(What) 달성하기 위해서(Why) 어떤 데이터를 가지고 어떤 방식으로(How) 수행할지 계획 수립

 

1. 분석 기획의 특징

-IT  기술 분석 기법에 치우치는 경향을 조심해야함, 균형잡힌 시각을 가지고 방향성 계획 수립

1) Math&Statistics

2) Information Technology

3) Domain Knowledge

 

- 분석의 대상(what) 분석의 방법(how) 따른 분석 주제 유형

1) 최적화(Optimization) : 분석 대상을 인지하고, 해결 방법도 알고 있는 경우

2) 솔루션(Solution) : 분석 대상은 인지했으나, 해결 방법을 모르는 경우

3) 통찰(Insight) : 분석 대상은 모르나, 기존 분석 방식 활용할 경우

4) 발견(Discovery) : 분석 대상도 모르고, 분석방법도 모르나 자체적으로 새롭게 도출 경우


최적화로 접근했지만 새로운 유형 발견하거나 새로운 솔루션 도출 하는 경우도 발생, 넘나듬

 

- 목표 시점 분석 기획 방안

- 과제 중심적인 접근 방식 : 과제 단위로 명확한 해결 위해 Quick - Win 방식

- 장기적인 마스터 플랜 방식 : 분석 문화 내재화를 위해 전사적이고 장기적 관점이 바람직함

- 문제해결을 위한 단기적인 접근방식과 분석과제 정의를 위한 중장기적인 마스터 플랜 접근 방식 융합

 

당면한 분석 주제의 해결

(과제 단위)

지속적 분석 문화 내재화

(마스터 플랜 단위)

1 목표

Speed & Test

Accuracy & Deploy

과제의 유형

Quick-Win

Long Term View

접근 방식

Problem Solving

Problem Definition

 

- 의미있는 분석 : 분석기술, IT 프로그래밍, 분석 주제 도메인 전문성, 의사소통, 마스터 플랜 도출

- 분석가 3가지 기본 역량 + 프로젝트 관리 역량, 리더십 역랑 필요

 

2. 분석 기획 고려사항

 

1) 가용한 데이터

: 데이터 확보가 필수적, 유형에 대한 분석이 우선시 되어야

- 정형데이터(DB 자료) / 비정형데이터(문자형) / 반정형데이터(스트리밍, 머신데이터 )

2) 적절한 유스케이스

: 바퀴를 재발명하지 마라, 기존에 구현되어있는 유사 솔루션 활용 공감대 얻음

3) 분석과제 수향을 위한 장애 요소

: 정확도를 위해 기간, 비용 상승 / 분석가만 이해하는 것이 아니라 사용자가 쉽게 사용할수 있는

: 실제 환경에서 갑작스러운 문제 발생에 대한 고려 / 일회성 분석이 아닌 조직 내재화를 위한 교육, 문화화


 

 

2 분석 방법론

 

1. 분석 방법론 개요

- 합리적의 의사결정이 장애물 : 고정관념, 편향된 생각, 프레이밍효과(동일한 상황에서 개인 판단이 변화)

체계화한 절차와 방법이 정리된 데이터 분석 방법론의 수립 필수적

: 상세한 절차, 방법, 도구와 기법, 템플릿과 산출물로 구성되어 어느정도 지식만 있음 활용 가능함

 

- 방법론 생성과정 : 선순환 과정을 통한 조직내 방법론 완성


 

- 방법론에 따른 다양한 모델

1) 폭포수 모델 : 순차적으로 진행하는 방법, 하향식모델, 단계 돌아가는 피드백 과정 수행

2) 나선형 모델 : 반복을 통한 점증적 개발 방법, 처음 시도하는 프로젝트 적용, 복잡도 상승 가능성

3) 프로토타입 모델

 

- 계층적 프로세스 모델

1) 단계(Phase) : 최상이 계층, 프로세스 그룹을 통해서 완성된 단계별 산출물 생성

  단계를 기준선으로 설정되어 관리, 버전관리 등을 통한 통재

2) 태스크(Task) : 단계는 태스크로 구성, 단위활동으로 물리적 또는 논리적 단위로 품질 검토 항목

3) 스텝(Step) : WBS(Work Breakdown Structure) 워크패키지에 해당

입력자료, 처리 도구, 출력자료로 구성된 단위 프로세스


 

2. KDD 분석 방법론

: Knowledge Discovery in Databases, 1996 Fayyad 체계적으로 정리한 데이터 마이닝 프로세스

: 데이터베이스에서 의미있는 지식 탐색하는 데이터 마이닝, 기계학습, 인공지능, 패턴인식, 시각과 응용가능

 

- 데이터 패턴 분석 절차

• 분석 대상 비즈니스 도메인의 이해

• 분석 대상 데이터셋 선택과 생성

• 데이터에 포함되어 있는 노이즈(Noise)와 이상값(Outlier) 등을 제거하는 정제작업이나 선처리

• 분석 목적에 맞는 변수를 찾고 필요시 데이터의 차원을 축소하는 데이터 변경

• 분석 목적에 맞는 데이터 마이닝 기법 선택

•분석 목적 에 맞는 데이터 마이닝 알고리즘 선택

• 데이터 마이닝 시행

데이터 마이닝 결과에 대한 해석

• 데이터 마이닝에서 발견된 지식 활용


 

1) 데이터셋 선택(Selection)

비즈니스 도메인에 대한 이해와 프로젝트 목표 설정

선택 프로세스를 통한 데이터 마이닝에 필요한 목표 데이터 구성, 요구되는 경우 반복 가능

2) 데이터 전처리(Preprocessing)

데이터셋에 포함되어 있는 잡음과 이상값, 결측치 식별, 필요시 제거 → 정제작업, 반복가능

3) 데이터 변환(Transformation)

분석 목적에 맞는 변수를 선택, 데이터의 차원 축소, 마이닝 가능한 데이터 셋으로 변경하는 프로세스 수행

4) 데이터 마이닝(Data Mining)

분석 목적에 맞는 데이터 마이닝 기법 알고리즘 선택 데이터 패턴 찾거나 분류 또는 예측 작업 시행

필요에 따라 전처리, 변환 프로세스 병행 가능

5) 데이터 마이닝 결과 평가(Interpretation/Evaluation)

결과에 대한 해석과 평가, 분석 목적과의 일치성 확인, 전체과정 반복 수행 가능

 

3. CRISP-DM 분석 방법론

: Cross Industry Standard Process for Data Mining, 1996 유럽연합 프로젝트에서 시작

: 계층적 프로세스 모델로 4 레벨 구성

 

1) 단계 : 최상위 레벨, 일반화 태스크를 단계별로 포함

2) 일반화 태스크 : 데이터 마이닝의 단일 프로세스를 완전하게 수행하는 단위

3) 세분화 태스크 : 일반화 태스크를 구체적으로 수행하는 레벨

ex) 데이터 정제의 일반화 태스크 범주형 또는 연속형 데이터 정제로 구체화 세분화 실행

4) 프로세스 실행 : 데이터 마이닝을 위한 구체적인 실행


 

- 프로세스 6단계 (폭포수 모델과 같은 일방향 아님, 단계 피드백 통해서 단계별 완성도 높힘)

1) 업무 이해

도메인 지식을 데이터 분석을 위한 문제 정의로 변경, 초기 프로젝트 계획 수립

- 업무 목적 파악, 상황 파악, 데이터마이닝 목표 설정, 프로젝트 계획 수립

2) 데이터 이해

데이터 수집, 속성 이해하기 위한 과정, 품질에 대한 문제점 식별, 인사이트 발견

- 초기 데이터 수집, 데이터 기술분석, 데이터 탐색, 데이터 품질 확인

3) 데이터 준비

적합한 데이터 셋을 편성하는 단계, 많은 시간 소요

- 분석용 데이터 선택, 데이터 정제, 분석용 데이터셋 편성, 데이터 통합, 데이터 포맷팅

4) 모델링

모델링 기법, 알고리즘 선택, 파라미터 최적화 단계, 필요한 경우 데이터 준비 단계 반복

테스트용 프로세스와 데이터셋으로 평가하여 모델 과적합 등의 문제 발견, 대응 방안마련

- 모델링 기법 선택, 모델 테스트 계획 설계, 모델 작성, 모델 평가

5) 평가

프로젝트 목적에 부합하는지 평가, 데이터 마이닝 결과를 수용할 최종 판단하는 과정

- 분석결과 평가, 모델링 과정 평가, 모델 적용성 평가

6) 전개

업무에 적용하기 위한 계획 수립, 모니터링과 유지보수 계획 마련

도메인, 데이터 품지, 운영 모델 등에 따라 생명주이 다양 상세한 전개 계획 필요 종료

- 전개 계획 수립, 모니터링과 유지보수 계획 수립, 프로젝트 종료보고서 작성, 프로젝트 리뷰


 

4. 빅데이터 분석 방법론

 

빅데이터를 분석하기 위한 방법론 : 계층적 프로세스 모델(단계-태스크-스탭)


 

1) 분석 기획

. 비즈니스 이해 범위 실행 : 비즈니스 이해, 도메인 문제점 파악

- 비즈니스 이해 : 도메인 이해, 업무 전문가의 지식 필요, 문제점 파악 필요

- 프로젝트 범위 설정 : 범위를 명확하게 설정, 모든 관계자 이해 일치, 프로젝트 범위 정의서 SOW

. 프로젝트 정의 계획 수립 : 프로젝트 범위 확정 단계, 진행의 기준선 설정

- 데이터 분석 프로젝트 정의 : 목표, KPI 등을 구체화한 정의서 작성, 평가 기준 설정

- 프로젝트 수행 계획 수립 : 수행 계획서 WBS 작성(목적, 배경, 기대효과, 방법, 일정, 조직, 방안 )

. 프로젝트 위험 계획 수립 : 인프라 구축 병행, 기존 시스템과 인터페이스 동반 등의 위험 요소

- 데이터 분석 위험 식별 : 산출물, 정리자료, 전문가 판단을 활용 위험식별, 우선순위 설정

- 위험 대응 계획 수립 : 위험 관리 계획서 (회피, 전이, 완화, 수용 구분된 대응 방안 수립)

 

2) 데이터 준비

. 필요 데이터 정의 : 모든 사람이 함께 작성

- 데이터 정의 : 다양한 원천 데이터 소스로부터 데이터 정의서 작성

- 데이터 획득방안 수립 : 데이터 수집에 따른 구체적 방안 수립 (/외부 데이터 획득 방안)

. 데이터 스토어 설계 : 프로젝트 별로 필요한 데이터 정의하여 전사 차원의 스토어 설계

- 정형 데이터 : 구조화된 형식, DBMS 사용, 논리적 물리적 설계 구분하여 설계

- 비정형 데이터 : 하둡, NoSQL사용, 논리적 물리적 설계 구분하여 설계

. 데이터 수집 정합성 점검 : 품질 통제와 품질 보증 프로세스 수행

- 데이터 수집 저장 : 크롤링 ETL도구, API, 스크립트 프로그램 이용, 데이터 스토어 저장

- 데이터 정합성 점검 : 품질점검을 통한 정합성 확보, 보완작업 진행

 

3) 데이터 분석 : 수립된 프로젝트 목표를 달성하기 위해, 적당한 데이터셋이 없음 준비단계 반복 수행

. 분석용 데이터 준비 : 데이터셋 준비

- 비즈니스 확인 : 프로젝트 목표 확인, 비즈니스 파악

- 정형, 비정형 데이터 추출 분석 가능하도록 구조화된 형태로 구성, 작업공간에 분리

. 텍스트 분석 : 비정형 데이터 존재할 경우, 정형데이터와 통합 모델링 수행

- 텍스트 데이터 확인 추출 : 비정형 데이터 데이터 스토어 확인 추출

- 텍스트 데이터 분석 : 용어 사전 확보, 텍스트 시각화 도구 활용 의미 전달 명확

. 탐색적 분석

- 탐색적 데이터 분석 : 기초통계랑 산출, 데이터 자체 특성(중심성, 분포성, 산포성) 기초자료 준비

- 데이터 시각화 : 시스템화를 위한 시각화, 사용자 인터페이스, 프로토타입 활용

. 모델링 : 가정설정을 통해 통계 모델을 만들거나, 기계학습을 이용한 수행 모델 만드는

- 데이터 분할 : 데이터 셋을 훈련용과 테스트용으로 분할, 교차검증, 앙상블 기법 적용

- 데이터 모델링 : 분류, 예측, 군집 등의 모델 만들어 운영 시스템 적용, 통합 모델링 수행

- 모델 적용 운영 방안 : 알고리즘 설명서 작성, 의사코드 수준의 상세한 작성 필요, 모니터링

. 모델평가 검증

- 모델 평가 : 정의서 평가 기준에 따라 객관적 평가, 별도이 데이터 활용해서 분석

- 모델 검증 : 검증용 데이터 이용 모델 검증 작업 실시, 보고서 작성, 운영용 데이터로 최종 검증

. 모델적용 운영방안 수립

 

4) 시스템 구현

. 설계 구현 : 소프트웨어 개발 생명주기 SDLC 기업내 시스템 방법론 커스터마이징하여 적용

- 시스템 분석 설계 : 응용시스템 구축 설계 프로세스 진행

- 시스템 구현 : BI 패키징 활용, 운영시스템의 커스터마이징 통해 설계된 모델 구현

. 시스템 테스트 운영 : 운영중인 시스템에 적용하거나 프로토타입을 구현하고자 하는 경우

- 시스템 테스트 : 단위/통합/시스템 테스트 실시, 객관성과 완전성 확보

- 시스템 운영 계획 : 운영자, 사용자를 대상으로 필요한 교육을 실시하고 시스템 운영계획 수립

 

5) 평가 전개

. 모델 발전 계획 수립 : 모델의 생명주기 설정하고 주기적 평가 실시, 업데이트 자동화 방안

- 모델 발전 계획 : 지속적인 운영과 기능 향상을 위한 발전계획 수립, 계속성 확보

. 프로젝트 평가 보고 : 분석 기획 단계의 목적 달성 여부 평가, 자산화 진행

- 프로젝트 성과 평가 : 정량적, 정성적 성과로 나눠 성과 평가서 작성

- 프로젝트 종료 : 최종 보고서 작성, 지식 자산화 실행, 의사소통 절차에 따른 보고

 

3 분석 과제 발굴

 

- 하향식 접근 방법(Top Down Approach)

문제가 먼저 주어지고 해답을 찾기 위해 과정이 체계적으로 단계화 되어 수행하는 방식

전통적으로 수행되던 분석 과제 발굴 방식, 하지만 기업환경에서 문제를 사전 정의가 어려워짐

인사이트 도출과 시행착오를 통한 개선이 필요해짐

- 상향식 접근 방법(Bottom Up Approach)

정의가 어려운 경우 데이터를 기반으로 문제 재정의, 해결방안 탐색하고 지속적으로 개선하는 방향

하양식에서 상향식으로 유용성이 점차 증가하고 있는 추세

 


 

- 디자인 사고 프로세스(IDEO)

가능한 옵션 도출하는 상향식의 발산 단계와 분석하고 검증하는 하향식의 수렴 단계 반복적 수행

상호보완, 동적인 환경에서 가치 있는 최적의 의사결정 방식

 


 

 

1. 하향식 접근법

- 현황 분석, 인식된 문제점, 전략으로부터의 기회나 문제 탐색하고

해당 문제를 데이터의 문제로 정의

해결방안 탐색

데이터 분석의 타당성 평가, 분석과제 도출


 

 

1) 문제 탐색 단계

전체적인 관점의 기준 모델 활용 - 비즈니스 모델, 외부 참조 모델

문제를 해결함으로써 발생하는 가치에 중점을 두는 것이 중요

 

. 비즈니스 모델 기반 문제 탐색

- 비즈니스 모델이란 활용, 가치 창출 누락 없이 도출 가능

- 업무, 제품, 고객 단위 문제 발굴 + 규제와 감시, 지원 인프라의 영역으로 기회 추가로 도출


- 업무 : 제품 및 서비스를 생산하기 위해서 운영하는 내부 프로세스 및 주요 자원 관련 주제 도출

예) 생산 공정 최적화, 재고량 최소화 등

- 제품 : 생산 및 제공하는 제품·서비스를 개선하기 위한 관련 주제 도출

예) 제품의 주요 기능 개선,  서비스 모니터링 지표 도출 등

- 고객 : 제품·서비스를 제공받는 사용자 및 고객 이를 제공하는 채널의 관점에서 관련 주제 도출

예) 고객 Call 대기 시간 최소화, 영업점 위치 최적화 등

- 규제와 감사 : 제품 생산 및 전달 과정 프로세스 중에서 발생는 규제 및 보안의 관점에서 주제 도출

예) 제공 서비스 품질의 이상 징후 관리, 새로운 환경 규제 시 예상되는 제품 추출 등

- 지원 : 인프라 분석을 수행하는 시스템 영역 및 이를 운영 ·관리하는 인력의 관점에서 주제 도출

예) EDW 최적화, 적정 운영 인력 도출 등

 

 

- 혁신 : 새로운 문제의 발굴 장기적인 접근을 위해서 기업이 현재 수행하고 있는 비즈니스 뿐만 아니라

    환경과 경쟁 구도의 변화 역량의 재해석을 통한 '혁신'관점에서 분석 기회를 추가 도출

    거시적 관점, 경쟁자 동향, 시장의 니즈 변화, 역량의 재해석 새로운 관점 접근 필요

1) 거시적 관점 : 메가트렌드, 사회 경제적 요인 STEEP

- 사회, 기술, 경제, 환경, 정치

2) 경쟁사의 동향 : 대체재와 신규 진입자 등의 관점 확대하여 분석 기회 발굴의 폭을 넓힘

- 대체재, 경쟁자, 신규 집입자

3) 시장의 니즈 탐색 : 고객과 접촉하는 채널, 의사결정에 영향을 미치는 영향자들에 대한 관점

- 고객, 채널, 영향자들

4) 역량의 재해석 : 보유한 역량 + 해당 조직에 영향을 끼치는 파트너

- 내부역량, 파트너와 네트워크

 

 

. 외부 참조 모델 기반 문제 탐색

- 벤치마킹, 새로운 문제 발굴을 위해서는 동종 환경의 기존 수행한 분석 과제 살펴보기

- 후보 그룹을 통해 'Quick&Easy'방식으로 브래인스토밍을 통해 빠르게 도출

- 산업을 불문하고 분석 사례를 기반으로 분석하고 기회 고려

 

. 분석 유즈 케이스 정의

- 동종 사례를 통해 찾아낸 분석 기회들을 구체적인 과제로 만들기 위해

- 문제에 대한 설명, 발생하는 효과 명시하여 향후 데이터 분석 문제로의 전환 적합성 평가에 활용

 

2) 문제 정의 단계

- 식별된 비즈니스 문제를 데이터의 문제로 변환하여 정의하는 단계

- 필요한 데이터 기법을 정의하기 위한 데이터 분석의 문제로 변환 수행

- 최종 사용자 관점에서 이루어져야함


3) 해결방안 탐색 단계

- 정의된 데이터 분석 문제를 해결하기 위한 다양한 방법 모색

- 소요되는 예산 활용 가능한 도구에 따른 다각도 고려 필요

- 인력을 채용하거나 분석 전문 업체 활용

 

4) 타당성 검토 단계

- 도출된 분석 문제나 가설에 대한 대안을 과제화 하기 위해 다각적인 타당성 분석 수행

. 경제적 타당성

- 비용대비 편익 관점의 접근, 분석 비용에 대한 경제적 가치 산출

. 데이터 기술적 타당성

- 데이터 존재여부, 분석 시스템 환경, 분석 역량 필요

- 기술적 타당성 분석에 따른 역량 확보 방안 사전에 수립 필요 = 비즈니스 지식 + 기술적 지식

- 평가 과정을 거쳐 가장 우월한 대안을 선택, 정의서 형태로 명시하는 후속작업 시행 입력물 활용

 

2. 상향식 접근법

- 경험적 과거 데이터를 무작정 결합하여 상향식으로 정보 혹은 지식을 얻고자 하는 분석 패러다임

- 다양한 원천 데이터로부터 분석을 통하여 통찰력과 지식을 얻는 방법

 

- 기존 하향식 접근법의 한계를 극복하기 위한 분석 방법론

- 기존의 논리적인 단계별 접근법 기반한 문제 해결방식은 최근의 환경에 적합하지 않음

- 디자인 사고 접근법 - 현장 관찰과 감정이입, 대상의 관점으로 전환 수행 / why 아닌 what 관점

- 프로세스 : Empathize → Define → Ideate → Prototype → Test

- 비지도 학습 : 데이터 자체의 결합, 연관성, 유사성 등을 중심으로 데이터의 상태를 표현

ex) 장바구니분석, 군집분석, 기술통계 프로파일링

- 지도 학습 : 데이터 분석 실시, 분류, 추측, 예측, 최적화를 통해 사용자 주도 하에 분석 실시, 지식 도출

- 통계적 분석과 달리 인과관계 뿐만 아니라 상관관계 또는 연관 분석 통한 역추적 방식

 

- 시행착오를 통한 문제 해결

- 프로토타이핑 접근법 : 일단 분석을 시도해보고 결과를 확인해 가면서 반복적으로 개선해 나가는 방식

- 비록 완전하지 못해도 신속하게 해결책이나 모형 제시, 문제를 명확하게 인식, 식별, 구체화

- 프로세스 : 가설생성 디자인 실험 실제환경 테스트 통찰(인사이트) 도출 가설 확인

- 불명확성 감소, 의도했던 결과 도출할 있는 성공 가능성 상승

- 한번의 분석이 아닌 동적 환경에서 최대한 빨리 결과 보여주고, 지속적 반복 수행함

- 필요성

- 문제에 대한 인식 수준 : 새로운 문제일 경우 구체화 하는데 도움

- 필요 데이터 존재 여부의 불확실성 : 데이터 집합이 모두 존재하지 않을 경우 반복 순환적인 협의과정

- 데이터 사용 목적의 가변성 : 지속적으로 변화는 가치에 대하여 목적과 범위 확대 가능

 

3. 분석과제 정의

- 분석과제 정의서 : 향후 프로젝트 입력물로 사용, 이해관계자가 방향 설정, 성공여부 판단하는 자료

필요한 소스 데이터, 분석방법, 입수 분석 난이도, 분석수행주기, 검증 오너십, 과정등

분석 데이터 소스는 비구조적 데이터와 오픈 데이터까지 확장하여 상세하게 작성


 

4 분석 프로젝트 관리 방안

 

- 분석 과제의 주요 5가지 특성 주요 관리 영역

1) 데이터 사이즈 : 분석하고자 하는 데이터 고려한 관리 방안

2) 데이터 복잡도 : BI프로젝트와 달리 다양한 시스템에 원천 데이터 통합 분석 모델 선정 중요

3) 스피드 : 시나리오 측면의 속도 고려, 단위-배치형, 실시간-사기를 탐지, 실시간 수행을 위한 테스트

4) 분석의 정확도와 복잡도 : 복잡하면 정확도가 올라가지만 해석이 어려움, 기준점을 사전에 정의해야함

5) Accuracy & Precision : Accuracy는 모델과 실제값 차이가 적은 정확도, 분석적 활용 측면

 Precision는 모델을 지속적으로 반복했을 때의 편차수준, 안정성 측면


 

1. 분석 프로젝트의 특성

- 분석가 목표 : 분석 정확도 상승, 조율을 수행하는 조정자의 역할

- 프로젝트 관리 : 도출된 분석 과제를 구현하여 원하는 결과 얻고 원활하게 활용하는 전체적 과정 고려

- 프로토타이빙 방식의 어자일 프로젝트 관리 방식에 대한 고려 : 재해석을 통한 지속적 반복 정교화

- 분석과제 정의서를 기반으로 지속적인 개선 변경을 두고 기간내의 가능한 최선의 결과 도출

 

2. 분석 프로젝트 관리 방안

- 프로젝트 관리 지침


 

- 프로젝트 영역별 주요 관리 항목


+ Recent posts