일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JNJ 주식
- 미국주식
- 스플렁크
- 알트리아
- 도미노피자
- 자격증
- 애브비
- 미국 배당주
- DPZ
- 매수
- 정보처리기사 필기
- 전자계산기 구조
- 분석
- 데이터분석
- 서울교통공사
- 빅데이터
- 미국 주식
- 준전문가
- 분석기획
- 장기투자
- ABBV
- ADsP
- 정보처리기사 데이터베이스
- at&t
- 매도
- It
- 2019년
- 서교공
- 존슨앤존슨
- 배당주
- Today
- Total
My Log
[ADsP #8] 데이터 분석 1장 - R 기초와 데이터마트(2) 본문
* 시작하기에 앞서 본 게시물에 포함된 내용은 한국데이터산업진흥원에서 발행한 [데이터 분석 전문가 가이드, 2019년 2월 8일 개정]
에 근거한 것임을 밝힙니다.
1. 데이터 마트
가. 데이터 마트란?
- 데이터의 한 부분으로서 특정 사용자가 관심을 갖는 데이터들을 담은 비교적 작은 규모의 데이터 웨어하우스
- 데이터 웨어하우스의 일부 데이터를 가지며 특정 사용자를 대상으로 한다. (사용자의 기능 및 제공 범위가 다름)
나. reshape
- 기존 데이터 구조를 column-wise하게 전환
- 크게 melt와 cast단계로 구분
1) melt : id 값을 기준으로 하여 나머지 변수에 대한 데이터를 생성
> 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
...
117 5 1 solar.r 190.0
118 5 2 solar.r 118.0
... ...
2) cast : 엑셀에서 피벗팅을 하듯이 자료 변형
(margin 옵션 : 행과 열의 소계 산출 / subset 옵션 : 특정변수만 처리 / range 옵션 : min, max값 표시)
> a <- cast ( aqm , day ~ month ~ variable )
> a
, , variable = ozone
month
day 5 6 7 8 9
1 41 NA 135 39 96
2 36 NA 49 9 78
...
, , variable = solar.r
month
day 5 6 7 8 9
1 190 286 269 83 167
2 118 287 248 24 197
... ...
다. sqldf
- sqldf 패키지를 통해 표준 SQL에서 사용되는 문장이 모두 가능
- 데이터 이름에 "."같은 특수문자가 들어간 경우 '' 로 묶어주면 테이블처럼 간단히 처리 가능
# 패키지 설치
> install.packages("sqldf")
> library(sqldf)
> data(iris)
> sqldf ( "select * from iris" )
> sqldf ( "select * from iris limit 10" ) # 첫 10개 행 조회
> sqldf ( "select count(*) from iris where Species like 'se%'" ) # Species 속성값이 'se'로 시작하는 개수 출력
라. plyr
- 데이터를 분리하고 처리한 다음, 다시 결합하는 등 가장 필수적인 데이터 처리기능 제공
- apply 함수에 기반해 데이터와 출력변수를 동시에 배열로 치환하여 처리하는 패키지
- apply 함수와 multi-core 사용 함수를 이용하면 for를 사용하지 않고 간단하고 빠르게 처리가능
- ply() 함수는 앞에 두 개의 문자를 접두사로 가지는데, 첫 번째 문자는 입력데이터, 두 번째 문자는 출력 데이터 형태이다.
˙d : 데이터 프레임
˙a : 배열
˙l : 리스트
˙ 예) ddply : 데이터 프레임을 입력받아 어떤 처리를 한 후 데이터 프레임으로 출력
- summarise 옵션 : 평균이나 합 등을 계산해주고, 새로 생긴 변수만 보여줌
- transform 옵션 : 평균이나 합 등을 계산해주고, 계산에 사용된 변수도 출력
마. 데이터 테이블
- 데이터 프레임과 유사하지만 보다 빠른 그룹화와 순서화, 짧은 문장 지원 측면에서 더 매력적
- 무조건 빠른 것이 아니므로, 특성에 맞게 사용해야 함 (64비트 환경에서 RAM이 충분히 많을 때 효율적)
- "data.table" 패키지 설치
> DT = data.table ( x = c ( "b", "b", "b", "a", "a" ) , v = rnorm(5) )
> DT
x v
1: b -0.12353
2: b 0.37592
3: b -0.10953
4: a 0.08614
5: a 0.99806
> tables() # 크기, key 여부, 용량 파악
> sapply(DT, class) # x, v의 type 파악
> setkey(DT, x) # x를 key로 지정 (DT 출력시 x값에 따라 오름차순 정렬)
- 데이터 프레임과의 차이
˙행 번호가 콜론(:)으로 프린트되어 첫 번째 열을 쉽게 구분
˙자료 검색시 index를 이용한 바이너리 검색 수행 (데이터 프레임은 모든 자료를 비교해 찾는 벡터 검색 방식)
2. 결측값 처리 및 이상값 검색
가. 데이터 탐색
- 데이터를 분석하기 전에 대략적인 데이터의 특성 및 통찰을 얻기 위해 다각도로 탐색한다.
1) head(data, n) : 데이터 일부 확인
2) str(data) : 데이터의 구조 파악
3) summary(data) : 데이터의 기초통계량 확인
4) cov, cor : 공분산과 상관계수 확인
나. 결측값(Missing Data) 처리
- 결측값 처리에 많은 시간을 소모하는 것은 비효율적이다.
- 결측값은 삭제, 대표값으로 대체, 변수간의 관계를 이용해 imputation 하는 방법이 존재한다.
- R 에서는 Amelia II, Mice, mistools 등 여러 패키지를 활용하여, 결측값 처리를 자동화하고 효율성을 향상시킨다.
- R 에서 결측값은 NA(Not Available)로 처리한다.
cf) '0으로 나눈 값'처럼 불가능한 값은 NaN(Not a Number)으로 처리
1) 결측값 확인하기
> y <- c ( 1 , 2 , 3 , NA)
> is.na(y)
[1] FALSE FALSE FALSE TRUE
2) 특정값을 결측값으로 변환
> mydata [ mydata$v1==99, "v1" ] <- NA # mydata의 v1속성에서 '99'인 값을 결측값으로 변환
3) 결측값 제외
> x <- c ( 1 , 2 , NA , 3 )
> mean(x) # 평균 산출 시 결측값으로 인해 데이터 처리 불가
[1] NA
> mean(x, na.rm=T) # 결측값 제거옵션을 True로 설정하여 결측값 제외 후 계산
[1] 2
4) 결측값이 포함된 관측치 삭제
> mydata [ !complete.cases(mydata) , ]
다. 이상값(Outlier) 검색
- 분석에서 전처리를 어떻게 할지 결정할 때와 부정사용방지 시스템(FDS)에서 규칙을 발견하는데 사용
- 일정 기간을 할애해 분석 기준을 수립하고, 기준에 따라 드러나지 않은 것은 무시하고 진행해야 함
- 관련 알고리즘 : ESD, MADM 등
- 분류
1) bad data
˙의도하지 않게 잘못 입력한 경우
˙의도하지 않게 입력됐으나 분석 목적에 부합하지 않아 제거해야 하는 경우
2) 이상값
˙의도되지 않은 현상이지만 분석에 포함해야 하는 경우
˙의도된 이상값(fraud)
- 이상값을 찾기 위해 많은 시간을 쓰는 것은 비효율적 (단, 부정사용방지 프로젝트에서는 많은 시간을 할당)
- summary로 평균, 중간값, Q1, Q3 값을 보면서 1차 판단 -> (시간 여유가 있다면) 주요 변수별로 plot하여 특성 파악
- outliers 패키지를 사용해 평균과 가장 큰 차이가 있는 값을 알 수도 있다.
'자격증 기록 > ADsP(데이터분석 준전문가)' 카테고리의 다른 글
[ADsP #10] 데이터 분석 2장 - 통계 분석 (2) (0) | 2019.08.22 |
---|---|
[ADsP #9] 데이터 분석 2장 - 통계 분석 (1) (0) | 2019.08.19 |
[ADsP #7] 데이터 분석 1장 - R 기초와 데이터마트(1) (0) | 2019.08.11 |
[ADsP #6] 데이터 분석 기획 2장 - 분석 마스터 플랜 (0) | 2019.08.05 |
[ADsP #5] 데이터 분석 기획 1장 - 데이터 분석 기획의 이해 (0) | 2019.08.04 |