1. 데이터 이해
1-1. 데이터의 이해
1-2. 데이터의 가치와 미래
1-3. 가치 창조를 위한 데이터 사이언스와 전략 인사이트
2. 데이터 분석 기획
2-1. 데이터 분석 기획의 이해
2-2. 분석 마스터 플랜
3. 데이터 분석
3-1. R 기초와 데이터 마트
3-1-1. R 프로그래밍 기초
3-1-2. 데이터마트
3-2. 통계분석
3-3. 정형 데이터 마이닝
R 프로그래밍 기초
#R 소개
(1) R 소개
- R은 오픈소스 프로그램으로 통계, 데이터마이닝을 위한 언어이다.
- 윈도우, 맥, 리눅스 OS에서 사용 가능하다.
- 객체 지향 언어이며 함수형 언어이다. 즉, 통계 기능뿐만 아니라 일반 프로그래밍 언어처럼 자동화하거나 새로운 함수를 생성하여 사용 가능
- 객체 지향 언어는 필요한 부분을 프로그래밍으로 골라 추출하여 활용이 가능하다.
- 함수형 언어는 깔끔하고 단축된 코드, 매우 빠른 수행 속도, 디버깅 노력 감소, 병렬 프로그래밍의 전환이 용이하다는 특징을 가진다.
(1) R Studio
- 메모리에 변수가 어떻게 되어있는 지와 타입이 무엇인지를 볼 수 있고 스크립트 관리와 도큐먼테이션이 편리하다.
- 스크립트용 프로그래밍으로 어렵지 않고 쉽게 자동화가 가능하다.
#R 프로그래밍 기초
(1) 패키지(Package)
- R 함수, 데이터 및 컴파일된 코드의 모임
- 패키지 자동설치: install.packages("패키지")
- 패키지 수동설치: install.packages("패키지명", "패키지 위치")
(2) 스크립트로 프로그래밍 된 파일 실행
- source("파일명.R")
- pdf( ): 그래픽 출력을 pdf 파일로 지정
(3) 배치모드
- 사용자와 인터랙션이 필요하지 않은 방식으로, 매일 실행되어야 하는 프로그램에서 프로세스를 자동화할 때 유용하다.
- 배치파일 실행 명령: batch.R 실행파일이 있는 위치에서 윈도우 창에 "R CMD BATCH batch.R" 명령어 실행
(4) R 명령어
print( ) |
출력 형식을 지정할 필요 없음. 한 번에 하나의 객체만 출력 |
cat( ) |
여러 항목을 묶어서 연결된 결과로 출력. 복합적 데이터 구조(행렬, list 등)를 출력 불가 |
" <-, <<-, =, ->" |
대입 연산자 |
ls( ) |
변수 목록보기 |
rm( ) |
변수 삭제하기 |
c( ) |
벡터 생성하기 |
- 벡터의 원소 중 하나라도 문자가 있으면 모든 원소의 자료형은 문자형태로 변환
지역변수 |
단순히 값을 대입하기만 하면 지역변수로 생성. 함수가 종료되면 지역변수는 삭제됨 |
조건부 실행문 |
if문 |
반복 실행문 |
for문, while문, repeat문 |
전역변수 |
"<<-"를 사용하여 전역변수를 변경할 수 있지만 추천하지 않음 |
수열 |
"시작값 |
반복 |
rep( ) 함수는 숫자나 변수의 값들을 반복해서 생성 가능. |
문자열 붙이기 |
paste( ) 함수 |
문자열 추출 |
substr(문자열, 시작점, 끝점) 함수는 문자열의 특정 부분을 추출 가능 |
논리값 |
T는 True, F는 False |
- 논리연산자
== |
같다 |
!= |
같지 않다 |
<, <= |
작다, 작거나 같다 |
>, >= |
크다, 크거나 같다 |
· 벡터의 원소 선택하기: V[n], n은 원소의 자릿수, 논리형 벡터, 벡터의 이름.
· 벡터의 원소 제외하기: V[-n], n은 제외하고자 하는 원소의 자릿수
(5) 벡터의 연산
[, [[ |
인덱스 |
$ |
요소, 변수 뽑아내기 |
^ |
지수 계산. 예) 5^2 = 25 |
-, + |
단항 마이너스, 플러스 부호 |
: |
수열 생성 |
%/% |
나눗셈 결과의 몫 반환 |
%% |
나눗셈 결과의 나머지 반환 |
%*% |
행렬 곱 |
*, / |
곱하기, 나누기 |
+, - |
더하기, 뻬기 |
! |
논리 부정. !T = F |
& |
논리 "and". |
| |
논리 "or". |
~ |
식(formula) |
->, ->> |
오른쪽 대입 |
= |
오른쪽을 왼쪽으로 대입 |
<-, <<- |
오른쪽을 왼쪽으로 대입 |
? |
도움말 |
(6) 기초통계 명령어
mean(변수) |
변수의 평균 산출 |
sum(변수) |
변수의 합계 산출 |
median(변수) |
변수의 중앙값 산출 |
log(변수) |
변수의 로그값 산출 |
sd(변수) |
변수의 표준편차 산출 |
var(변수) |
변수의 분산 산출 |
cov(변수1, 변수2) |
변수 간 공분산 산출 |
cor(변수1, 변수2) |
변수 간 상관계수 산출 |
length(변수) |
변수의 길이를 값으로 산출 |
#입력과 출력
- 테이블로 된 데이터 파일 읽기 (변수 구분자 포함): read.table("파일이름", sep="구분자")
- CSV 데이터 파일 읽기(변수 구분자는 쉼표): read.csv("파일이름", header=T)
- CSV 데이터 파일로 출력(변수 구분자는 쉼표): write.csv(행렬 또는 데이터프레임, "파일이름", row.names=F)
#데이터 프레임과 데이터 구조
(1)벡터(Vector)
- 벡터들은 동질적이다: 한 벡터의 원소는 모두 같은 자료형을 가진다.
- 벡터는 위치로 인덱스된다: V[2]는 V벡터의 2번째 원소이다.
- 벡터는 인덱스를 통해 여러 개의 원소로 구성된 하위 벡터를 반환할 수 있다.: V[c(2, 3)]은 V 벡터의 2번째, 3번째 원소로 구성된 하위벡터
- 벡터 원소들은 이름을 가질 수 있다.
기능 |
R 코드 |
벡터에 |
v <- c(v, newItems) v[length(v)+1] <- newItems |
벡터에 |
append(vec, newvalues, after=n) |
요인 생성 |
f <- factor(v) f <- factor(v, levels) |
여러 벡터를 |
comb <- stack(list(v1=v1, v2=v2)) |
벡터 내 |
V[c(1, 3, 5, 7)] V[-c(2, 4)] |
(2)리스트(List)
- 리스트는 이질적이다: 여러 자료형의 원소들이 포함될 수 있다.
- 리스트는 위치로 인덱스된다: L[[2]]는 L 리스트의 2번째 원소이다.
- 리스트에서 하위 리스트를 추출할 수 있다.: L[c(2, 3)]은 L 리스트의 2번째, 3번째 원소로 이루어진 하위 리스트
- 리스트의 원소들은 이름을 가질 수 있다.: L[["Moe"]]와 L$Moe는 둘 다 "Moe"라는 이름의 원소를 지칭한다.
기능 |
R 코드 |
리스트 생성 |
L <- list(x, y, z) L <- list(valuename1=vec, valuename2= data) |
리스트 |
L[[n]]: n번째 원소 L[c(n1, n2, … nk)]: 목록 |
이름으로 |
L[["name"]] L$name |
리스트에서 |
L[["name"]] <- NULL |
NULL 원소를 리스트에서 제거 |
L[sapply(L, is.null)] <- NULL L[is.na(L)] <- NULL |
(3)행렬(Matrix)
- R에서는 차원을 가진 벡터로 인식
기능 |
R 코드 |
행렬 생성 |
matrix(데이터, 행개수, 열개수) e <- matrix(1:20, 4, 5) |
차원 |
dim(행렬) |
대각행렬 |
diag(행렬) |
전치행렬 |
t(행렬) |
역행렬 |
solve(matrix) |
행렬곱 |
행렬 %*% 행렬 |
행 이름 부여 |
rownames(행렬) <- c("행이름") |
열 이름 부여 |
colnames(행렬) <- c("열이름") |
행렬 연산 |
행렬 + 행렬, 행렬 - 행렬 행렬 + 상수, 행렬 - 상수, 행렬*상수 |
행렬에서 행, 열 선택하기 |
vec <- matrix[1, ] vec <- matrix[, 3] |
(4) 단일값(scalars)
- R에서는 원소가 하나인 벡터로 인식/처리
(5) 배열(Arrays)
- 행렬이 3차원 또는 n차원까지 확장된 형태
- 주어진 벡터에 더 많은 차원을 부여하여 생성
(6) 요인(Factors)
- 벡터처럼 생겼지만, R에서는 벡터에 있는 고유값(unique value)의 정보를 얻어 내는데, 이 고유값들을 요인의 수준(level)이라고 한다.
(7) 데이터프레임(Data frame)
- 데이터 프레임 리스트의 원소는 벡터 또는 요인이다. 벡터와 요인은 데이터 프레임의 열이다.
- 벡터와 요인들은 동일한 길이이다.
- 동일한 벡터와 요인들은 데이터프레임을 사각형으로 만든다.
- 열에는 이름이 있어야 한다.
- 각각의 열에 대해 문자형인지 수치형인지 자동적으로 구분되어 편리
- 데이터프레임은 메모리 상에서 구동된다.
R 코드 |
|
데이터프레임 생성 |
data.frame(벡터, 벡터, 벡터) |
행결합 |
rbind(dfrm1, dfrm2) newdata <- rbind(data, row) |
열결합 |
cbind(dfrm1, dfrm2) newdata <- cbind(data, col) |
데이터프레임 조회 |
dfrm[dfrm$gender="m"] dfrm[dfrm$변수1>4 & dfrm$변수 2>5, c(변수3, 변수4)]
dfrm[grep("문자", dfrm$변수1, ignore.case=T), c("변수2, 변수3")]
subset(dfrm, select=변수, subset=조건) |
데이터 선택 |
lst1[[2]], lst1[2], lst1[2,], lst1[, 2] lst1[["name"]], lst1$name lst1[c("n1", "n2", .., "nk")] |
데이터 병합 |
merge(df1, df2, by="공통열") |
열이름 조회 |
colnames(데이터프레임) |
행, 열 선택 |
subset(dfm, select=열이름) subset(dfm, select=c(열이름1, 열이름2, 열이름n)) subset(dfm, select=열이름, subset(조건)) |
이름으로 열 제거 |
subset(dfm, select=-"열이름") |
열이름 변경 |
colnames(dfm) <- newcolname |
NA 행 삭제 |
df <- na.omit(dfm) |
데이터프레임 |
cbind_dfm <- cbind(dfm1, dfm2) rbind_dfm <- rbind(dfm1, dfm2) |
(8) 데이터 구조 및 자료형 변환
기능 |
R 코드 |
자료형 변환 |
as.character( ) as.integer( ) |
구조 변환 |
as.data.frame( ) |
(9) 데이터 구조 변경
기능 |
R 코드 |
벡터 → 리스트 |
as.list(vector) |
벡터 → 행렬 |
1열짜리 행렬: cbind(vector) 또는 as.matrix(vector)
1행짜리 행렬: rbind(vector) n * m 행렬: matrix(vector, n, m) |
벡터 → |
1열짜리 데이터프레임: as.data.frame(vector)
1행짜리 데이터프레임: as.data.frame(rbind(vector)) |
리스트 → 벡터 |
unlist(list) |
리스트 → 행렬 |
1열짜리 행렬: as.matrix(list) 1행짜리 행렬: as.matrix(rbind(list)) n * m 행렬: matrix(list, n, m) |
리스트 → |
리스트 원소들이 데이터의 열이면: as.data.frame(list)
리스트 원소들이 데이터의 행이면: rbind(list[[1]], list[[2]]) |
행렬 → 벡터 |
as.vector(matrix) |
행렬 → 리스트 |
as.list(matrix) |
행렬 → |
as.data.frame(matrix) |
데이터프레임 → 벡터 |
1열짜리 데이터프레임: dfm[[1]] 또는 dfm[, 1]
1행짜리 데이터프레임: dfm[1, ] |
데이터프레임 → 리스트 |
as.list(dfm) |
데이터프레임 |
as.matrix(dfm) |
(10) 벡터의 기본 연산
기능 |
R 코드 |
벡터 연산 |
벡터1 + 벡터2 벡터1 - 벡터2 벡터1 * 벡터2 벡터1 ^ 벡터2 |
함수 적용 |
sapply(벡터, 연산함수) |
파일저장 |
write.csv(변수이름, "파일이름") save(변수이름, file=".RData") |
파일읽기 |
read.csv("파일이름") load("파일.R") source("파일.R") |
데이터 삭제 |
rm(변수) rm(list=ls()) |
#데이터 변형
(1) 데이터 변형
기능 |
R 코드 |
요인으로 |
v <- c(24, 23, 52) w <- c(87, 86, 92) f <- factor(c("A", "B", "C") |
벡터를 여러 |
groups <- split(v, f) groups <- split(w, f) groups <- unstack(data.frame(v, f)) |
데이터프레임을 |
sp <- split(Car93$MPG.city, Cars93$Origin) |
리스트의 각 |
lapply(결과를 리스트로 반환) list <- lapply(list, func)
sapply(결과를 벡터 또는 행렬로 반환) vec <- sapply(list, func) |
행렬에 함수 적용 |
m <- apply(mat, 1, func) m <- apply(mat, 2, func) |
데이터프레임에 |
dfm <- lapply(dfm, func) dfm <- sapply(dfm, func) dfm <- apply(dfm, func): 데이터프레임이 동질적인 경우만(모두 문자 or 숫자) 활용 가능. 데이터프레임을 행렬로 변환 후 함수 적용 |
대용량 데이터에 함수 적용 |
cors <- sapply(dfm, cor, y=targetVariable) mask <- (rank(-abs(cors)) <= 10) best.pred <- dfm[, mask] lm(targetVariable ~ bes.pred) |
집단별 함수 적용 |
tapply(vec, factor, func) |
병렬 벡터, |
mapply(factor, v1, …, vk) mapply(factor, list1, …, list k) |
(2) 문자열, 날짜 다루기
기능 |
R 코드 |
문자열 길이 |
nchar("단어") |
문자열 연결 |
paste("word1", "word2", sep="-") |
부분 문자열 추출 |
substr("statistics", 1, 4) |
구분자로 문자열 추출 |
strsplit(문자열, 구분자) |
하위 문자열 대체 |
sub(old, new, string) gsub(old, new, string) |
쌍별 조합 |
mat <- outer(문자열1, 문자열2, paste, sep="") |
현재 날짜 반환 |
Sys.Date( ) |
날짜 객체로 변환 |
as.Date( ) format(Sys.Date(), format=%m%d%y) |
날짜 조회 |
format(Sys.Date(), "%a") 요일 format(Sys.Date(), "%b") 월 format(Sys.Date(), "%B") 월
format(Sys.Date(), "%d") 일 format(Sys.Date(), "%m") 월 format(Sys.Date(),"%y") 연도 format(Sys.Date(), "%Y") 연도 |
날짜 일부 추출 |
d <- as.Date("2014-12-25") p <- as.POSIXlt(d) p$yday start <- as.Date("2014-12-01") end <- as.Date("2014-12-25") seq(from=start, to=end, by=1) |
(참고 사이트)
'Certificates > ADsP' 카테고리의 다른 글
[ADsP D-20] 연습 문제 풀이 (21회) (0) | 2020.11.04 |
---|---|
[ADsP] 데이터마트 (0) | 2020.08.23 |
[ADsP] 주성분 분석 (0) | 2020.08.22 |
[ADsP] 다차원 척도법 (0) | 2020.08.22 |
[ADsP] 분석 마스터 플랜 (1) | 2020.08.21 |
댓글