[ADP_과목 4. 데이터 이해_제 1장 기초와 데이터 마트] 본문

IT/ADP

[ADP_과목 4. 데이터 이해_제 1장 기초와 데이터 마트]

호랑구야 2020. 11. 30. 09:00

* 다음 내용은 [데이터 분석 전문가 가이드] (2019년 개정판)을 읽고 정리한 내용입니다.

1 R 기초

  • 오픈소스 중 가장 빠르게 발전하고 보급되는 R과 개발환경인 R Studio 선택
    • 분석도구 R의 특징
      • 오픈소스로 무료로 사용할 수 있다
      • 설치 용량이 적다
      • 오픈소스 이므로 다양한 모듈을 무료로 지원받을 수 있다
      • 최근 알고리즘이나 기술의 반영이 매우 빠른 편이다
      • 공개 논문 및 자료가 많아 학습자료를 구하기 매우 쉽다
      • 질의를 위한 공개 커뮤니티가 매우 활발하다

 

1. 분석 환경 이해

. 통계 패키지 R

  • 통계 분석 과정의 복잡한 계산과 시각화 기법을 쉽게 사용 가능한 무료 소프트웨어
  • 행렬 계산 성능 측면에서 우수한 결과를 가진다
  • 사용자들이 직접 제작한 패키지를 이용할 수 있다
  • 강력한 시각화 요소를 갖고 있다

 

. R 역사

  • 통계 프로그래밍 언어의 개발 이전
    • 대부분의 통계 계산은 Fortran의 서브루틴을 통해 수행
  • 1976년
    • S 개발
      • AT&T에의 Bell Labs Statistics Group에서 "to turn ideas into sotfware, quickly and faithfully." 목표로 자체 개발한 통계 프로그래밍 언어
      • Statistical computing의 머리글자
  • 1988년
    • S의 문법 구조, 언어에 많은 변경, 객체라는 개념이 도입되었고 함수에서 매크로까지 변경된 전반적인 내용이 "The New S Language"라는 서적에 포함되어 출간되었다
    • 이 변화로 기존 사용자들이 사용하고 있던 대부분의 코드를 새로 작성해야 했기 때문에, 사용자들이 좋아하지 않았다
  • 1993년
    • R
      • 'Shcheme'이라는 언어로부터 랙시컬 스코프(정적 스코프) 개념을 도입한 또 다른 S 언어 프로그램
      • R은 두 개발자의 이름(Ross, Robert)과, S보다 한 단계 발전되었다는 의미 (알파벳 순서: Q>R>S>T)
  • 1995년
    • R이 Free Software Foundation의 GPL(GNU Public General License)로 인해 무료 공개
  • R은 S와 중요한 차이점이 있음에도 불구하고, 대부분의 기존 S 코드를 실행할 수 있었다
  • UNIX계열 플랫폼, Windows, Linux, Mac OS 지원
  • 꾸준한 버전업을 거듭하여 가장 널리 사용되는 S언어 기반 프로그램
  • 패키지를 통한 확장성 덕분에 가능성 또한 높게 평가되고 있다

 

. R 특징

  1. 그래픽 처리
    • 매우 세부적인 부분까지 사용자가 직접 지정하여 섬세한 작업 수행가능
    • 고해상도임에도 처리 시간이 매우 빠름
    • 보고서 작성, 발표 자료 작성 시에 유용하게 사용
  2. 데이터 처리 계산 능력
    • 벡터, 행렬, 배열, 데이터 프레임, 리스트 등 다양한 자료 구조를 지원하므로, 다양한 형태의 분석에 대응 가능
    • 복잡한 구조 내의 개별 데이터에 접근하는 절차가 간단하므로, 큰 데이터 핸들링하기 간편
  3. 패키지
    • 사용자들이 스스로 개발하는 새로운 함수들을, 패키지 형태로 사용가능
    • 하나의 목적으로 제작되며, 해당 분석에 필요한 과정들을 수행할 수 있는 함수가 패키지에 포함
    • 최신 이론, 기법 사용하기 쉽다

 

. R Studio

  • R을 사용하는 통합 개발 환경으로, 조금 더 간편하고 확장된 기능을 가지는 환경
  • 변수에 바로 접근하여 값들을 확인, 수정 가능
  • 스크립트를 관리하고 문서화하기 수월
  • 무료로 다양한 운영체제를 지원

 

 

2. 기본 사용법

. R R Studio 구성

  1. R 구성

    1. 메뉴 바
    2. 단축 아이콘 툴바
    3. R 콘솔
    4. 스크립트 창
  2. R Studio 구성

    1. 스크립트 창
    2. R 콘솔
    3. 환경 및 히스토리
      • 환경: 선언된 변수, 함수, 데이터셋 등 정보
      • 히스토리: 정상적으로 실행한 명령어
    4. 현재 문서가 저장되는 폴더, R에서 그린 그림, 불러온 패키지, 도움말 등...

 

. R 패키지 설치하기

  1. 상단 메뉴바의 패키지툴을 클릭하고 패키지 설치하기... 를 클릭한다
  2. 명령어를 사용
    • install.packages("패키지이름")
    • libraray(패키지이름)

 

. R 도움말

  • 해당 함수에 대한 기본적 설명, 각 인수들에 대한 설명, 사용할 수 있는 옵션들의 목록과 다양한 예제 등이 준비
  • R
    • 브라우저를 통해 확인 가능
  • R Studio
    • 우측 하단의 Help탭에서 확인 가능
    • 명령어를 사용
      • ?par
      • help(par)

 

. R 언어와 문법

  • S언어, C언어와 유사함
  • >는 자동 생성되는 기호이므로, 코드에 따라 적지 않는다.
  • # 이후는 주석
  • R의 데이터 구조
    1. 벡터
      • 하나의 스칼라값 혹은 하나 이상의 스칼라 원소들을 갖는 단순한 형태의 집합
      • 원소에 숫자, 문자, 논리 연산자가 들어갈 수 있다
      • 명령어 c는 concentration을 의미
        • x = c(1, 10, 100)
        • y <- c("사과", "배", "감")
        • z <- c(TRUE, FALSE, FALSE)
        • xy <- c(x, y)
          > xy
          [1] "1" "10" "100" "사과" "배" "감"
    2. 행렬
      • 행과 열을 갖는, m*n형태의, 직사각형에 데이터를 나열한 데이터 구조
      • 행을 우선 채우고 싶으면, byrwo = T 옵션 추가하면 된다.
        • mx <- matrix(c(1,2,3,4,5,6), ncol = 2)
          > mx
               [ ,1] [ ,2]
          [1, ]   1   4
          [2, ]   2   5
          [3, ]   3   6
      • rbind: 기존의 행렬에 행을 추가
      • cbind: 기존의 행렬에 열을 추가
    3. 데이터 프레임
      • 행렬과 유사한 2차원 목록 데이터 구조
      • 다루기 쉽고, 한 번에 많은 정보를 담을 수 있다.
      • 각 열이 서로 다른 데이터 타입을 가질 수 있다.
        • mydat = data.frame(x, y, z)
          > mydat
               x     y       z
          1  1    사과   TRUE
          2  10     배   FALSE
          3  100   감   FASLE
    4. 외부 데이터 불러오기
      • CSV파일 불러오기
        • data1 <- read.table("~directory~filename.csv", header = T, sep=",")
        • header = T 옵션 사용시, 첫 줄을 변수명으로 사용
        • data1 <- read.csv("~directory~filenave.csv")
      • txt파일 불러오기
        • data1 <- read.table("~directory~filename.txt")
        • txt 파일을 구분자, 형식을 잘 지켜 작성해야 한다
      • 엑셀 파일 불러오기
        • 엑셀 파일을 csv로 저장하여 불러오기
      • 패키지를 이용하여 불러오기
        • RODBC 이용하기
          • > data1 <- odbcConnectExcel("~directory~filename")
            > data <- sqlFetch(data1, "Sheet1")
            > close(data1)
          • 워크시트 이름은 대소문자를 구분하므로 정확하게 써야 한다.
          • 확장자는 생략한다.
  • R 기초 함수
    1. 수열 생성하기
      • rep(a,b)
        • a를 b만큼 반복
      • seq(a,b)
      • a:b
        • a에서 b까지 나열
      • seq(a, b, by=n)
        • a에서 b까지 n씩 증가하며 나열
      • seq(a, b, length = n)
        • a에서 b까지 전체 갯수가 n개가 되게 자동 증가하며 나열
    2. 기초적인 수치 계산
      • 벡터의 사칙연산 수행시, 벡터의 길이가 같아야 한다
      • t(행렬): 전치행렬로 바꿔준다
      • %*%: 행렬곱
      • *: 스칼라곱
      • solve(행렬): 행렬의 역행렬 계산
      • mean(벡터): 평균
      • var(벡터): 분산
      • sd(벡터): 표준편차
    3. R 데이터 핸들링
      • R은 객체지향의 언어이므로, 변수를 불러오거나, 변수 내 요소 참조하는것이 직관적이고 간단하다
      • 벡터형 변수
        • 벡터[n]은 벡터의 n번째 값을 가져와 준다
        • 벡터[-n]은 벡터의 n번째 값을 제외한 값을 가져다 준다
        • 벡터[c(a,b)]은 벡터의 a, b 번째 위치 값을 가져다 준다
      • 행렬/데이터 프레임 형태의 변수
        • 행렬/데.프[m, n], [-m , ], [ , -n]은 가능하나, [-m, -n]은 불가능
    4. 반복 구문과 조건문
      1. for 반복 구문
        • 괄호 안의 조건 하에서 i값을 하나씩 증가시켜, 중괄호 안의 구문을 반복 실행
          • for (i in n:m) {
            + print(i)
            + i+1
            }
      2. while 반복 구문
        • 괄호 안의 조건 하에서 중괄호 안의 구문을 반복
        • 구문의 종료 위해서는, 중괄호 내 구문에서 조건에 해당하는 변수를 변화시켜야 한다
          • while(i < 5) {
            + print(i)
            + i = i+1
            + }
      3. if~else 조건문
        • 특정 조건이 만족되는 경우, 이후의 구문을 실행
        • else 이하의 조건을 이용해 또 다른 조건을 부여 가능
          • sum = 5
            if (sum == 10) print(sum)
    5. 사용자 정의 함수
      • 사용자가 직접 복잡한 함수를 구성 가능
        • 함수이름 = function(인수) {
          + ~~
          }
    6. 기타 유용한 기능들
      1. paste
        • 문자열을 하나로 붙여준다
        • sep=""을 이용하면, 문자열 사이에 구분자를 삽입할 수 있다.
      2. substr
        • 주어진 문자열에서 특정 문자열을 추출하는 기능
        • 자료형 데이터 구조 변환
          • as.data.frame()
          • as.list()
          • as.matrix()
          • as.vector()
          • as.factor()
      3. 문자열을 날짜로 변환
        • Sys.Date(): 현재 날짜를 반환
        • as.Date(): 날짜 객체로 변환한다.
        • 날짜 기본 형식은, yyyy-mm-dd이지만, format="%~"를 이용하면 날짜 형식을 바꿀 수 있다.
      4. 날짜를 문자열로 변환
        • format(데이터, 포맷)
        • as.Character()
        • %a: 요일
        • %b: 월
        • %m: 두 자리 숫자로 월
        • %d: 두 자리 숫자로 일
        • %y: 두 자리 숫자로 연도
        • %Y: 네 자리 숫자로 연도

 

. R 그래픽 기능

  • 산점도 그래프
    • x, y가 벡터라 가정,
      plot(x, y)
  • 산점도 행렬
    • pairs(원하는 그래프, main = "제목",
      + pch = 점 모양, bg = c(색 나열)[unclass(data$variable)])
  • 히스토그램과 상자그림
    • 자료 분포를 손쉽게 확인하는 방법
    • hist(벡터, prob = T)
    • prob = T: 상대도수 표시
    • boxplot(벡터)

 

 

 


 

제 2절 데이터 마트

  • 모델링: 다양한 분석기법을 적용해 개발하는 과정
  • 모델링에 앞서 데이터를 수집, 변형하는 과정이 필요
  • 데이터 마트: 데이터의 한 부분으로, 특정 사용자가 관심을 갖는 데이터를 담은 비교적 작은 규모의 데이터 웨어하우스사용자의 요구 항목에 따라 체계적으로 분석하여, 기업의 경영 활동을 돕기 위한 시스템

 

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

  • 데이터는 어떤 계층 또는 수준으로 그룹화를 시킬 수 있거나, 다양한 관점에서 살펴볼 필요 있다.
  • reshape
    • 데이터 재정렬을 위한 기법, 정보는 그대로 유지함
    • 밀집화 기법을 이용하여, 복잡한 데이터를 단순하고 사용하기 편리한 상태로 축소, 재정렬 가능
    • 대표적 기법: Excel의 Pivot Table 기능, 간단명료하지만, 많은 정보를 손실
    • melt 단계
      • id에 있는 변수를 기준으로, 나머지 각 변수를 variable이름의 데이터로 만든다
      • 결측값을 제거하기 위해, na.rm = TRUE로 설정
      • melt_Data <- melt(dataFrameName, id = c(원하는 변수들, ...), na.rm = TRUE)
    • cast 단계
      • 엑셀의 피벗팅하듯 자료를 변환
      • cast(melt_Data, y축 기준 변수 ~ x축 기준 변수 ~ variable)
        • 각 변수와 관련된 자료를 y, x축 기준 변수 맞추어 정렬해 보여준다
      • cast(melt_Data, y축 기준 변수 ~ x축 기준 변수, 적용할 수학 함수)
        • y축 기준 변수에 맞추어, x축 기준 변수의 수학함수 결과를 나열한다
      • cast(melt_Data, y축 기준 변수 ~ . |x축 기준 변수, 적용할 수학 함수)
        • y축 기준 변수에 맞추어, x축 기준변수에 맞추어 수학함수 결과를 각각 나열한다
      • cast(melt_Data, y축 기준 변수 ~ x축 기준 변수, 적용할 수학 함수, margins = c("grand_row", grand_col))
        • 행과 열에 대해 소계를 산출
      • cast(melt_Data, y축 기준 변수 ~ x축 기준 변수, 적용할 수학 함수, subset = variable == 특정 변수)
        • 특정 변수만 처리할 경우에 사용
      • cast(melt_Data, y축 기준 변수 ~ x축 기준 변수, range)
        • min은 "_X1"으로  max는 "_X2"라는 suffix를 붙여 동시에 표시해줌, 

 

 

2. sqldf 이용한 데이터 분석

  • 표준 SQL에서 사용되는 문장이 모두 가능
  • 특수문자가 입력된 경우, ''로 묶어주면 테이블처럼 간단히 처리 가능
  • sqldf("sql내용")
  • limit 숫자: head와 같은 기능
  • like문장 사용시, ''를 이용

 

 

3. plyr

  • 데이터를 분리하고 처리, 다시 결합하는 등 데이터 처리기능을 제공
  • apply 함수와 multi-core 사용 함수 사용하면, 매우 간단하고 빠르게 처리 가능
  • 데이터와 출력변수를 동시에 배열로 치환하여 처리
  • ABply()
    • A: 입력하는 데이터 형태
    • B: 출력하는 데이터 형태
      • d: data.frame
      • a: array
      • l: list
  • summarise 옵션 사용시, 새로 생긴 변수만 출력
  • transform 옵션 사용시, 계산에 사용된 변수도 출력

 

 

4. 데이터 테이블

  • 빠른 그룹화, 순서화, 짧은 문장 지원 측면에서 강점
  • 64bit 환경의, RAM이 충분히 많을 때는 효율적
  • 행 번호가 :으로 프린트되어 행번호와 첫 번째 열을 분리하여 보기가 쉽다
    • DT <- data.table(x = c("a", "b"), v = rnorm(2))> DT
      >   x   v
      1:  a  0.452
      2:  b  0.387
  • DT2 <- data.table(data.frameName)
    • 데이터 프레임도 데이터 테이블로 불러올 수 있다
  • tables() 기능을 통해 데이터 테이블 형식의 데이터의 크기, size, 용량이 얼마인지 살펴볼 수 있다
  • 데이터 프레임과 차이점
    • key: x로 설정
    • x에 의해 ordering된다
    • index를 이용한 binary search를 이용하기에, 검색에 약 100배 빠르지만, 무조건 빨라지는 것은 아니다
  • summary 또는 grouping 사용시, by옵션을 사용하면 빨라진다
    • by = "변수, 나열, 쓰기"

 


 

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

1. 데이터 탐색

  • 대략의 데이터 특성 파악 후, 다각도로 접근하기

 

. 데이터 기초 통계

  • head(데이터명, 숫자)
    • 데이터에서 숫자 넣은 만큼 앞의 것만 출력, 숫자가 없으면 6줄이 기본
  • str(데이터명)
    • 데이터 구조 파악
  • summary(데이터명)
    • 데이터의 기초통계량 확인
    • 연속형 변수: 4분위수, 최소값, 최대값, 중앙값, 평균 등
    • 범주형 변수: 각 범주에 대한 빈도수
  • cov(데이터[,])
    • 공분산
    • 연속형 변수: 공분산행렬 통해 변수 간 선형 상관관계 강도 확인 가능
  • cor(데이터[,])
    • 상관계수
    • 연속형 변수: 상관계수행렬 통해 변수 간 선형 상관관계 강도 확인 가능

 

 

2. 결측값 처리

  • 결측값 처리 관련 패키지: Amelia II, Mice, mistools 등 여러가지 존재
  • 결측값을 NA(not available)로 처리
  • 불가능한 값을 NaN(not a number)으로 처리
  • 결측값 입력하려면 NA 이용
  • is.na 통해 결측값 여부 확인 가능
  • 특정값을 결측값을 입력한 경우, 변환해 처리가능
    • data[data$v1 == 99, "v1"] <- NA
  • 결측값 문제 처리 방법
    • 해당값 제외
      • mean(x, na.rm = T)
    • 일반적인 방법인, 결측값을 포함하는 레코드를 삭제
      • 결측치가 넓게 분포된 경우, 정보 획득에 문제 발생 가능
      • data[!complete.cases(data),]
    • Ameli 사용
      • 변수들간 관계 이용하여 imputation 만드는 방법 
      • data2 <- amelia(data, m = 숫자, ts = "", cs = "")
        • m: 몇 개의 imputation 데이터 세트 만들지 결정하는 값
        • ts: 시계열에 대한 정보
        • cs: cross-sectional 분석에 포함될 정보

 

 

3. 이상값 검색

  • 전처리를 어떻게 할 지와 부정사용방지 시스템(FDS)에서 규칙 발견하는 데 사용 가능
  • 이상값의 종류
    • a1) 의도하지 않게 잘못 입력한 경우
    • a2) 의도하지 않게 입력됐으나 분석 목적에 부합하지 않아 제거해야 하는 경우
    • a3) 의도되지 않은 현상이지만 분석에 포함해야 하는 경우
    • b1) 의도된 이상값
    • a1, a2는 bad data
    • a3, b1은 이상값으로, b1은 높은 경우로 사기이다
  • ESD(Extreme Studentized Deviation) 알고리즘
    평균으로부터 k*표준편차만큼 떨어져 있는 값들을 이상값으로 판단하고, 일반적인 k는 3이다
    그러나 이상값으로부터 매우 민감한 단점이 있다.
  • 실전에서 이상값 찾기에 너무 많은 시간 할애하지 않는 것을 추천한다
    • 1차 판단: 평균과 중위수 값을 통해, Q1, Q3를 보기
    • 2차 판단: 주요 변수별로 플롯해 보며 특성을 파악한다
    • 부정사용방지 프로젝트에서는 많은 시간 할당이 필요하다
    • 불량이나 분실일 경우, 의도적으로 정해진 고객명을 사용할 때 있으므로, 비즈니스 규칙을 잘 알아내는 것이 중요하다. 그러나 해당 기준에 드러나지 않은 것은 무시하고 진행해야 한다.
  • outliers패키지 이용
    • 평균과 가장 큰 차이가 있는 값을, 이상값 가능성 큰 값으로 간주해 찾아주는 것
    • opposite = TRUE 옵션 사용시, 반대편으로 평균과 가장 큰 값을 찾아줌
    • outlier(데이터, opposite = TRUE)
반응형
Comments