일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- CNN10
- python
- ADsP
- EBS
- Great Minds
- 데이터분석전문가가이드
- 맛집
- 자료구조
- 정치학
- K-MOOC
- 조지프 나이
- 공부정리
- 당신이 몰랐던 진화론
- Baekjoon
- 누가 진정한 리더인가
- 백준
- Joseph Samuel Nye Jr.
- 빅데이터
- ADP
- 알고리즘
- Progate
- Hacker Rank
- 미분적분학
- 후기
- 데이터분석전문가
- 위대한 수업
- KMOOC
- MySQL
- Udemy
- 코테
Archives
- Today
- Total
ㅇ
[ADP_과목 4. 데이터 이해_제 1장 기초와 데이터 마트] 본문
* 다음 내용은 [데이터 분석 전문가 가이드] (2019년 개정판)을 읽고 정리한 내용입니다.
제 1절 R 기초
- 오픈소스 중 가장 빠르게 발전하고 보급되는 R과 개발환경인 R Studio 선택
- 분석도구 R의 특징
- 오픈소스로 무료로 사용할 수 있다
- 설치 용량이 적다
- 오픈소스 이므로 다양한 모듈을 무료로 지원받을 수 있다
- 최근 알고리즘이나 기술의 반영이 매우 빠른 편이다
- 공개 논문 및 자료가 많아 학습자료를 구하기 매우 쉽다
- 질의를 위한 공개 커뮤니티가 매우 활발하다
- 분석도구 R의 특징
1. 분석 환경의 이해
가. 통계 패키지 R
- 통계 분석 과정의 복잡한 계산과 시각화 기법을 쉽게 사용 가능한 무료 소프트웨어
- 행렬 계산 성능 측면에서 우수한 결과를 가진다
- 사용자들이 직접 제작한 패키지를 이용할 수 있다
- 강력한 시각화 요소를 갖고 있다
나. R의 역사
- 통계 프로그래밍 언어의 개발 이전
- 대부분의 통계 계산은 Fortran의 서브루틴을 통해 수행
- 1976년
- S 개발
- AT&T에의 Bell Labs Statistics Group에서 "to turn ideas into sotfware, quickly and faithfully." 목표로 자체 개발한 통계 프로그래밍 언어
- Statistical computing의 머리글자
- S 개발
- 1988년
- S의 문법 구조, 언어에 많은 변경, 객체라는 개념이 도입되었고 함수에서 매크로까지 변경된 전반적인 내용이 "The New S Language"라는 서적에 포함되어 출간되었다
- 이 변화로 기존 사용자들이 사용하고 있던 대부분의 코드를 새로 작성해야 했기 때문에, 사용자들이 좋아하지 않았다
- 1993년
- R
- 'Shcheme'이라는 언어로부터 랙시컬 스코프(정적 스코프) 개념을 도입한 또 다른 S 언어 프로그램
- R은 두 개발자의 이름(Ross, Robert)과, S보다 한 단계 발전되었다는 의미 (알파벳 순서: Q>R>S>T)
- R
- 1995년
- R이 Free Software Foundation의 GPL(GNU Public General License)로 인해 무료 공개
- R은 S와 중요한 차이점이 있음에도 불구하고, 대부분의 기존 S 코드를 실행할 수 있었다
- UNIX계열 플랫폼, Windows, Linux, Mac OS 지원
- 꾸준한 버전업을 거듭하여 가장 널리 사용되는 S언어 기반 프로그램
- 패키지를 통한 확장성 덕분에 가능성 또한 높게 평가되고 있다
다. R의 특징
- 그래픽 처리
- 매우 세부적인 부분까지 사용자가 직접 지정하여 섬세한 작업 수행가능
- 고해상도임에도 처리 시간이 매우 빠름
- 보고서 작성, 발표 자료 작성 시에 유용하게 사용
- 데이터 처리 및 계산 능력
- 벡터, 행렬, 배열, 데이터 프레임, 리스트 등 다양한 자료 구조를 지원하므로, 다양한 형태의 분석에 대응 가능
- 복잡한 구조 내의 개별 데이터에 접근하는 절차가 간단하므로, 큰 데이터 핸들링하기 간편
- 패키지
- 사용자들이 스스로 개발하는 새로운 함수들을, 패키지 형태로 사용가능
- 하나의 목적으로 제작되며, 해당 분석에 필요한 과정들을 수행할 수 있는 함수가 패키지에 포함
- 최신 이론, 기법 사용하기 쉽다
라. R Studio
- R을 사용하는 통합 개발 환경으로, 조금 더 간편하고 확장된 기능을 가지는 환경
- 변수에 바로 접근하여 값들을 확인, 수정 가능
- 스크립트를 관리하고 문서화하기 수월
- 무료로 다양한 운영체제를 지원
2. 기본 사용법
가. R과 R Studio 구성
-
R의 구성
- 메뉴 바
- 단축 아이콘 툴바
- R 콘솔
- 스크립트 창
-
R Studio의 구성
- 스크립트 창
- R 콘솔
- 환경 및 히스토리
- 환경: 선언된 변수, 함수, 데이터셋 등 정보
- 히스토리: 정상적으로 실행한 명령어
- 현재 문서가 저장되는 폴더, R에서 그린 그림, 불러온 패키지, 도움말 등...
나. R 패키지 설치하기
- 상단 메뉴바의 패키지툴을 클릭하고 패키지 설치하기... 를 클릭한다
- 명령어를 사용
- install.packages("패키지이름")
- libraray(패키지이름)
다. R 도움말
- 해당 함수에 대한 기본적 설명, 각 인수들에 대한 설명, 사용할 수 있는 옵션들의 목록과 다양한 예제 등이 준비
- R
- 브라우저를 통해 확인 가능
- R Studio
- 우측 하단의 Help탭에서 확인 가능
- 명령어를 사용
- ?par
- help(par)
라. R 언어와 문법
- S언어, C언어와 유사함
- >는 자동 생성되는 기호이므로, 코드에 따라 적지 않는다.
- # 이후는 주석
- R의 데이터 구조
- 벡터
- 하나의 스칼라값 혹은 하나 이상의 스칼라 원소들을 갖는 단순한 형태의 집합
- 원소에 숫자, 문자, 논리 연산자가 들어갈 수 있다
- 명령어 c는 concentration을 의미
- x = c(1, 10, 100)
- y <- c("사과", "배", "감")
- z <- c(TRUE, FALSE, FALSE)
- xy <- c(x, y)
> xy
[1] "1" "10" "100" "사과" "배" "감"
- 행렬
- 행과 열을 갖는, 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
- mx <- matrix(c(1,2,3,4,5,6), ncol = 2)
- rbind: 기존의 행렬에 행을 추가
- cbind: 기존의 행렬에 열을 추가
- 데이터 프레임
- 행렬과 유사한 2차원 목록 데이터 구조
- 다루기 쉽고, 한 번에 많은 정보를 담을 수 있다.
- 각 열이 서로 다른 데이터 타입을 가질 수 있다.
- mydat = data.frame(x, y, z)
> mydat
x y z
1 1 사과 TRUE
2 10 배 FALSE
3 100 감 FASLE
- mydat = data.frame(x, y, z)
- 외부 데이터 불러오기
- CSV파일 불러오기
- data1 <- read.table("~directory~filename.csv", header = T, sep=",")
- header = T 옵션 사용시, 첫 줄을 변수명으로 사용
- data1 <- read.csv("~directory~filenave.csv")
- data1 <- read.table("~directory~filename.csv", header = T, sep=",")
- txt파일 불러오기
- data1 <- read.table("~directory~filename.txt")
- txt 파일을 구분자, 형식을 잘 지켜 작성해야 한다
- 엑셀 파일 불러오기
- 엑셀 파일을 csv로 저장하여 불러오기
- 패키지를 이용하여 불러오기
- RODBC 이용하기
- > data1 <- odbcConnectExcel("~directory~filename")
> data <- sqlFetch(data1, "Sheet1")
> close(data1) - 워크시트 이름은 대소문자를 구분하므로 정확하게 써야 한다.
- 확장자는 생략한다.
- > data1 <- odbcConnectExcel("~directory~filename")
- RODBC 이용하기
- CSV파일 불러오기
- 벡터
- R의 기초 함수
- 수열 생성하기
- 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개가 되게 자동 증가하며 나열
- rep(a,b)
- 기초적인 수치 계산
- 벡터의 사칙연산 수행시, 벡터의 길이가 같아야 한다
- t(행렬): 전치행렬로 바꿔준다
- %*%: 행렬곱
- *: 스칼라곱
- solve(행렬): 행렬의 역행렬 계산
- mean(벡터): 평균
- var(벡터): 분산
- sd(벡터): 표준편차
- R 데이터 핸들링
- R은 객체지향의 언어이므로, 변수를 불러오거나, 변수 내 요소 참조하는것이 직관적이고 간단하다
- 벡터형 변수
- 벡터[n]은 벡터의 n번째 값을 가져와 준다
- 벡터[-n]은 벡터의 n번째 값을 제외한 값을 가져다 준다
- 벡터[c(a,b)]은 벡터의 a, b 번째 위치 값을 가져다 준다
- 행렬/데이터 프레임 형태의 변수
- 행렬/데.프[m, n], [-m , ], [ , -n]은 가능하나, [-m, -n]은 불가능
- 반복 구문과 조건문
- for 반복 구문
- 괄호 안의 조건 하에서 i값을 하나씩 증가시켜, 중괄호 안의 구문을 반복 실행
- for (i in n:m) {
+ print(i)
+ i+1
}
- for (i in n:m) {
- 괄호 안의 조건 하에서 i값을 하나씩 증가시켜, 중괄호 안의 구문을 반복 실행
- while 반복 구문
- 괄호 안의 조건 하에서 중괄호 안의 구문을 반복
- 구문의 종료 위해서는, 중괄호 내 구문에서 조건에 해당하는 변수를 변화시켜야 한다
- while(i < 5) {
+ print(i)
+ i = i+1
+ }
- while(i < 5) {
- if~else 조건문
- 특정 조건이 만족되는 경우, 이후의 구문을 실행
- else 이하의 조건을 이용해 또 다른 조건을 부여 가능
- sum = 5
if (sum == 10) print(sum)
- sum = 5
- for 반복 구문
- 사용자 정의 함수
- 사용자가 직접 복잡한 함수를 구성 가능
- 함수이름 = function(인수) {
+ ~~
}
- 함수이름 = function(인수) {
- 사용자가 직접 복잡한 함수를 구성 가능
- 기타 유용한 기능들
- paste
- 문자열을 하나로 붙여준다
- sep=""을 이용하면, 문자열 사이에 구분자를 삽입할 수 있다.
- substr
- 주어진 문자열에서 특정 문자열을 추출하는 기능
- 자료형 데이터 구조 변환
- as.data.frame()
- as.list()
- as.matrix()
- as.vector()
- as.factor()
- 문자열을 날짜로 변환
- Sys.Date(): 현재 날짜를 반환
- as.Date(): 날짜 객체로 변환한다.
- 날짜 기본 형식은, yyyy-mm-dd이지만, format="%~"를 이용하면 날짜 형식을 바꿀 수 있다.
- 날짜를 문자열로 변환
- format(데이터, 포맷)
- as.Character()
- %a: 요일
- %b: 월
- %m: 두 자리 숫자로 월
- %d: 두 자리 숫자로 일
- %y: 두 자리 숫자로 연도
- %Y: 네 자리 숫자로 연도
- paste
- 수열 생성하기
마. R 그래픽 기능
- 산점도 그래프
- x, y가 벡터라 가정,
plot(x, y)
- x, y가 벡터라 가정,
- 산점도 행렬
- pairs(원하는 그래프, main = "제목",
+ pch = 점 모양, bg = c(색 나열)[unclass(data$variable)])
- pairs(원하는 그래프, main = "제목",
- 히스토그램과 상자그림
- 자료 분포를 손쉽게 확인하는 방법
- 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
- DT <- data.table(x = c("a", "b"), v = rnorm(2))> DT
- DT2 <- data.table(data.frameName)
- 데이터 프레임도 데이터 테이블로 불러올 수 있다
- tables() 기능을 통해 데이터 테이블 형식의 데이터의 크기, size, 용량이 얼마인지 살펴볼 수 있다
- 데이터 프레임과 차이점
- key: x로 설정
- x에 의해 ordering된다
- index를 이용한 binary search를 이용하기에, 검색에 약 100배 빠르지만, 무조건 빨라지는 것은 아니다
- summary 또는 grouping 사용시, by옵션을 사용하면 빨라진다
- by = "변수, 나열, 쓰기"
제 3절 결측값 처리와 이상값 검색
1. 데이터 탐색
- 대략의 데이터 특성 파악 후, 다각도로 접근하기
가. 데이터 기초 통계
- head(데이터명, 숫자)
- 데이터에서 숫자 넣은 만큼 앞의 것만 출력, 숫자가 없으면 6줄이 기본
- 데이터에서 숫자 넣은 만큼 앞의 것만 출력, 숫자가 없으면 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)
반응형
'IT > ADP' 카테고리의 다른 글
[ADP_과목 4. 데이터 이해_제 3장 정형 데이터 마이닝] (0) | 2021.01.25 |
---|---|
[ADP_과목 4. 데이터 이해_제 2장 통계 분석] (0) | 2021.01.11 |
[ADP_과목 3. 데이터 분석 기획_제 2장 분석 마스터 플랜] (0) | 2020.11.02 |
[ADP_과목 3. 데이터 분석 기획_제 1장 데이터 분석 기획의 이해] (0) | 2020.10.12 |
[ADP_과목 2. 데이터 처리 기술 이해_제 2장 데이터 처리 기술_2] (0) | 2020.09.28 |
Comments