데이터 분석
- R기초와 데이터 마트
- R 기초
R: 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경/ GPL하에 배포되는 S프로그래밍 언어로 구현(GNU S)
R studio: 메모리에 변수가 어떻게 되어있는지, 타입무엇인지 볼수있따
Rattle: GUI가 패키지와 긴빌하게 결합돼 있어 정해진 기능만 사용가능
특징
1) 표준 플랫폼(S언어기반)
2) 모든 운영체제에서 사용가능
3) 메모리 저장방식
세션마다 저장함
4) 객체지향언어, 함수언어
병렬프로그래밍으로의 전환이 용이하다.
5) 오픈소스 프로그램
- R 기초 2
setwd("작업디렉토리")
도움말: help(함수), ?함수, RsiteSearch(함수명)
히스토리: history(), savehistory(file="파일명"), loadhistory(file="파일명")
콘솔 청소 :Ctrl+L
한줄 실행: Ctrl+R
여러줄실행: 그래그해서 Ctrl+R
주석처리: #
패키지 설치: install.package("패키지명")
배치 실행: 매일 돌아가야하는 프로그램을 프로세스에서 자동으로 구동하는 작업
1) 출력하기: print(), cat()
2) 값 할당: <- , <<-, =, ->
3) 변수 목록보기: ls(), ls.str()
4) 변수 삭제:rm(), rm(list=ls())
5) R함수 정의: function(x, y) {}
6) 지역변수: 단순 값 대입(함수가 종료되면 삭제됨)
7) 전역변수: <<- 사용
8) 조건문: if
9) 반복문: for, while, repeat
10) x<- c(1, 2, 3, 4)
11) 수열:
- 1:5,
- seq(from=0, to=20, by=2)
- seq(from=0, to=20, length.out=5)
12) 반복:
- rep(1, time=5)
- rep(1:4, each=2), rep(c, each=2)
13) 문자 붙이기
- A <- paste("a", "b", "c", sep="-")
- paste(A, c("e", "f"))
14) 문자열 추출
- substr("Bigdata", 1, 3)
15) 논리값: T(True), F(False)
16) 논리연산자: ==, !=, <, <=, >, >=
17) 원소선택: V[n]
- 연산
1) %/% 나눗셈 몫, %% 나머지, %*% 행렬곱
2) 평균: mean(x)
3) 합계 sum(x)
4) 중앙값: median(x)
5) 로그: log(x)
6) 표준편차: sd(x)
7) 분산: var(x)
8) 공분산: cov(x1, x2)
9) 상관계수: corr(x1, x2)
10) 변수 길이: length(x)
데이터 구조와 데이터 프레임
특징 |
Vector |
List |
Data Frame |
원소 자료형 |
동질적 |
이질적 |
이질적 |
원소위치 인덱싱 가능 |
|||
여러개 원소로 구성된 하위 데이터생성 가능 |
|||
원소 이름부여 가능 |
1) vector
2) List: L[[n]], L[["name"]], L$name
3) Data frame: SAS 데이터셋 모방
4) Matrix: 차원을 가진 벡터로 인식
dim(vec) <- c(2, 3)
rownames(mx) <- c("name1", "name2")
colnames(mx) <- c("col1", "col2")
5) Array: 3차원또는 n차원 확대된 행렬
6) Factor: 고유값이 요인수준(level)로 구성된 백터(범주형)
- Data frame
1) 데이터 행결합: rbind(df1, df2)
2) 열결합: cbind(df1, df2)
3) 조회: subset(df, selelct=변수, subset=변수>조건)
4) 병합: merge(df1, df2, by="열이름")
5) 열 이름 조회: colnames(df)
6) 행,열 선택:
- subset(df, select="열이름")
- subset(df, select=c("열이름1", "열이름2")
- subset(df, select ="열이름", subset="조건")
7) 자료형 변환
- as.character()
- as.complex()
- as.numeric()
- as.double()
- as.integer()
- as.logical()
- as.data.frame()
- as.list()
- as.matrix()
- as.vector()
8) 벡터 연산
(1) + - * /
(2) 함수 적용: sapply(변수, 연산함수
(3) 파일 저장
- write.csv(x, "df.csv")
- save(x, file="x.Rdata")
(4) 파일 읽기
- read.csv("df.csv")
(5) 파일 불러오기
- load("x.R")
- source("x.R")
(6) 삭제
- rm(x)
- rm(list=ls(all=T))
9) 요약: summary(df)
10) 조회: head(df)
11) 작업 종료: q()
12) 여러집단으로 분할: groups <- split(x, f)
13) lapply(결과를 리스트 형태로 반환)
14) sapply(결과를 벡터 또는 행렬로 반환
15) tapply(vec, factor, func): 데이터가 집단에 속해 있을때,
16) 행 집단: by(df, factor, func)
17) 뱅렬벡터, 리스트들: maply(factor, vec1, vec2, ve3, ...,)
18) 문자열 다루기
(1) 문자열 길이: nchar("단어") / length(vec): 벡터의 길이 반환
(2) 문자열 나누기: strsplit("문자열", "구분자")
(3) 문자열대체: sub(old, new, string) / gsub(old, new, string)
(4) outer("문자1", "문자2", patste, sep="")
19) 날짜
(1) Sys.Date(), as.Date()
(2) format(Sys.date(), format=%m%d%y)
(3) 요일: %a
축약된 월이름: %d
전체 월이름: %B
두자리 숫자 일조회: %d
두자리 숫자 월조회: %m
두자리 숫자 연도 조회: %y
네자리 숫자 연도 조회: %Y
- 데이터 마트
- 데이터웨어하우스와 사용자 사이의 중간층, 하나의 주제 또는 하나의 부서 중심의 데이터 웨어하우스
- 데이터 웨어하우스로 부터 복제되지만, 자체적으로 수집될수 있으며, 관계형 데이터 베이스나 다차원 데이터 베이스를 구축한다
- CRM 관련업무중 핵심: 고객데이터 마트 구축
1) 요약변수
수집된 정보를 분석에 맞게 종합한 변수
재활용성이 높다
합계, 횟수와 같이 간단한 구조 이므로 자동화 하여 상황에 맞게 구축가능
단점: 얼마 이상이면, 구매하더라도 기준값의 의미 해석이 애매할 수 있다. -> 연속형 변수로 그룹핑해 사용
예) 기간별 구매금액, 횟수여부 / 위클리쇼퍼 / 상품별 구매금액, 회수 여부/ 구매순서, 단어빈도, 행동변수, 드랜드 변수, 결측값과 이상값 처리, 구간화
2) 파생변수
특정 조건을 만족하거나 특정함수에 의해 만들어 의미를 부여한 변수
주관적
세분화, 고객행동 예측, 캠페인 반응 예측
특정 상황에만 유의하지 않게 대표성을 나타나게 할 필요가 있다.
예) 근무시간 구매지수, 주 구매 변수, 구매상품 다양성 변수, 선호하는 가격대 변수, 시즌 선호고객변수, 최대 가치 변수
3) reshape 활용
- melt()
melt(df, id=c("Month", "Day"), na.rm=T)
Month, Day 기준으로 뽑아줌
- cast(): 원하는 형태로 계산 또는 변형
cast(df, Day~Month~variable, func)
4) spldf 패키지: SAS의 proc sql과 같은 기능
5) plyr 패키지: apply함수를 기반으로 데이터와 출력변수를 동시에 배열로 치환하여 처리
split-apply-combine 방식
6) data.table 패키지
데이터 탐색, 연산, 병합에 유용
특정 col을 key값으로 색인을 저장후 데이터 처리
빠른 grouping과 ordering 제공
데이터 가공
1) Data Exploration
수치형 변수: 최대값, 최소값, 평균, 사분위수
명목형변수: 명목값, 데이터 개수
2) 변수 중요도
- klaR 패키지: 특정 변수가 주어졌을때, 클래스가 어떻게 분류되는지에 대한 에러율을 돌려주고 그래픽화
- greedy.wilks(): 세분화를 위한 stepwise forward 변수 선택을 위한 패키지
- Wilk's Lambda: 집단내 분산/ 총분산
- plineplot() 이용
* Petal.Width에 따라 Species 분포 알아보기
plineplot(Species ~. , data=iris[,c(1, 3, 5)], method="lda", x=rirs[,4], xlab="Petal.Width")
3) 변수 구간화
각 변수들을 구간화해서 구간별로 점수를 적용할 수 있다.
- binning: 연속형 변수를 범주형 변수로 변형하는 방식
- 의사결정나무: 세분화 또는 예측에 활용되는 의사결정나무 모형을 활용하여 입력변수들을 구간화 할수있다.
데이터 EDA(탐색적 자료 분석)
summary()
- 결측값 처리와 이상값 검색
결측값의 표현: NA, .,99999999, ' ', unknown, Not Answer 등
결측값 자체가 의미있는 경우가 있다.
- 특정 거래 자체가 존재하지 않는경우
- 인구 통계학적 데이터의 경우, 아주 부자거나 아주 가난한경우
결측값 처리가 전체 작업속도에 많은 영향을 준다.
- 이상값검색(꼭 제거해야하는 것은 아님)
- 결측값이 있는 자료의 평균 구하기
- na.rm을 통해 NA를 제거 할 수 있따.
결측값 처리방법
1) 단순대치법(Single Imputation)
- 레코드 삭제
- 평균대치법: 평균으로 대치
비조건부 평균대치법: 평균으로 대치
조건부 평균 대치법: 회귀분석을 활용한 대치법
- 단순확률 대치법: 평균 대치법에서 추정량 표준 오차의 과소 추정문제를 보완하고자 고안된 방법
Ho-deck, nearest-neighbour
2) 다중대치법: 단순대치법 여러번을 통해 가상적 완전 자료를 만드는 방법
대치, 분석, 결합
complete.cases(): 데이터내 레코드에 결측값이 있으면 F, 없으면 T 반환
ramdomforest는 결측치가 존재할 경우 바로 에러를 발생시킨다. rflmpute()를 통해 미리 대치한 후 사용해야 한다.
DMwR패키지: centralImputation(): NA값에 가운대 값으로 대치, 숫자 - 중위수, factor - 최빈값
DMwR패키지: knnLmputation(): k최근 이웃 분류 알고리즘을 사용하여 대치, k개 주벼 이웃까지의 거리를 고려하여 가중 평균한 값 사용
Amelia패키지: amelia(): time-series-cross-sectional data set(여러 국가에서 매년 측정된 자료에서 사용)
이상값 찾기와 처리
이상값
- 의도하지 않게 잘못 입력한 경우
- 분석 목적에 부합하지 않아 제거해야되는 경우
인식 방법
1) ESD: 평균으로 부터 3표준편차 떨어진값
2) 기하평균 - 2.5 x 표준편차 < data < 기하평균 + 2.5 x 표준편차
3) 4분위수 이용하여 제거
극단값 절단 방법
1) 기하평균을 이용한 제거 geo_mean
2) 하단, 상단 % 이용한 제거: 10% 절단 (상하위 5% 제거)
조정 방법: 상한값과 하한값을 벗어나는 값들을 하한, 상한 값으로 바꾸어 활용
'Archived > ADsP' 카테고리의 다른 글
[ADsP] 3과목 데이터 분석 - (3) 정형 데이터 마이닝 (0) | 2018.08.24 |
---|---|
[ADsP] 3과목 데이터 분석 - (2) 통계 분석 (0) | 2018.08.24 |
[ADsP] 2과목 오답정리 (0) | 2018.08.23 |
[ADsP] 2과목 데이터 분석 기획 - (2) 분석 마스터 플랜 (0) | 2018.08.23 |
[ADsP] 2과목 데이터 분석 기획 - (1) 데이터 분석 기획의 이해 (0) | 2018.08.23 |
댓글