본문 바로가기
Certificates/ADsP

[ADsP] R 프로그래밍 기초

by Air’s Big Data 2020. 8. 23.

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(문자열, 시작점, 끝점) 함수는 문자열의 특정 부분을 추출 가능

논리값

 TTrue, FFalse

- 논리연산자

==

같다

!=

같지 않다

<, <=

작다, 작거나 같다

>, >=

크다, 크거나 같다

 

· 벡터의 원소 선택하기: 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번째 원소로 구성된 하위벡터

- 벡터 원소들은 이름을 가질 수 있다.

기능

코드

벡터에
데이터
추가

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"라는 이름의 원소를 지칭한다.

기능

코드

리스트 생성

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

 

dim 활용 예시

(3)행렬(Matrix)

- 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)

- 데이터 프레임 리스트의 원소는 벡터 또는 요인이다. 벡터와 요인은 데이터 프레임의 열이다.

- 벡터와 요인들은 동일한 길이이다.

- 동일한 벡터와 요인들은 데이터프레임을 사각형으로 만든다.

- 열에는 이름이 있어야 한다.

- 각각의 열에 대해 문자형인지 수치형인지 자동적으로 구분되어 편리

- 데이터프레임은 메모리 상에서 구동된다.

기능

코드

데이터프레임 생성

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) 데이터 구조 및 자료형 변환

기능

코드

자료형 변환

as.character( )

as.integer( )

구조 변환

as.data.frame( )
as.list( )
as.matrix( )

 

(9) 데이터 구조 변경

기능

코드

벡터 → 리스트

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) 벡터의 기본 연산

기능

코드

벡터 연산

벡터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) 문자열, 날짜 다루기

기능

코드

문자열 길이

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)

 

 

(참고 사이트)

https://0utlier.tistory.com/41

'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

댓글