2024 ADsP 데이터분석 준전문가 시험공부 7일차/20
[03과목-01장]
01 R 기초
1. R 설치 및 기본 사용법
(1) R 설치
① 다양한 통계 분석 프로그램
- SAS, SPASS, S-Link, R, Python
② 통계 및 데이터 분석 프로그램 R
- R은 뉴질랜드 통계학자인 로스 아하카와 캐나타 통계학자인 로버트 젠틀맨에 의하여 1995년에 제작된 언어
***설치 생략***
2. R 기본 문법
(1) 연산자
① 대입 연산자
대입 연산자 | 내용 |
<-, <<-, = | 오른쪽 값을 왼쪽에 대입 |
->, ->> | 왼쪽 값을 오른쪽에 대입 |
② 비교 연산자
비교 연산자 | 내용 |
== | 두 값이 같은지 비교 |
<, > | 초과, 미만을 비교 |
!= | 두 값이 다른지를 비교 |
<=, => | 이상, 이하를 비교 |
is.character | 문자형인지 아닌지를 비교 |
is.numeric | 숫자형인지 아닌지를 비교 |
is.logical | 논리형인지 아닌지를 비교 |
is.na | NA인지 아닌지를 비교 |
is.null | NULL인지 아닌지를 비교 |
③ 산술 연산자
산술 연산자 | 내용 |
+ | 두 숫자의 덧셈 |
- | 두 숫자의 뺄셈 |
* | 두 숫자의 곱셈 |
/ | 두 숫자의 나눗셈 |
%/% | 두 숫자의 나눗셈의 몫 |
%% | 두 숫자의 나눗셈의 나머지 |
^, ** | 거듭제곱 |
exp() | 자연상수의 거듭제곱 |
④ 기타 연산자
기타 연산자 | 내용 |
! | 부정 연산자 |
& | AND 연산자 |
| | OR 연산 |
(2) R 데이터 구조 ★
① 벡터
: 타입이 같은 여러 데이터를 하나의 행으로 저장하는 1차원 데이터 구조
> v4 <- c(3, TRUE, FALSE)
> v4
[1] 3 1 0 #출력값
> v1 <- C(1 : 6)
> v1
[1] 1 2 3 4 5 6 #출력값
② 행렬
: 2차원 구조를 가진 벡터. 행렬에 저장된 모든 데이터는 같은 타입(아니면 자동으로 변환)
> m1 <- matrix( c(1 : 6), nrow = 2)
> m1
[,1] [,2] [,3]
[,1] 1 3 5
[,2] 2 4 6
> m2 <- matrix( c(1 : 6), ncol = 2)
> m2
[,1] [,2]
[,1] 1 4
[,2] 2 5
[,3] 3 6
- matrix를 사용하여 행렬을 만들 경우 행렬의 값들이 열로 저장. byrow 옵션에 True 설정하면 행으로 저장
> m3 <- matrix( c(1 : 6), nrow = 2, byrow = T)
> m3
[,1] [,2] [,3]
[,1] 1 2 3
[,2] 4 5 6
- dim 함수 사용 시 행의 개수와 열의 개수를 지정하여 행렬로 변환 가능
> v1 <- c(1 : 6)
> dim(v1) <- c(2, 3)
> v1
[,1] [,2] [,3]
[,1] 1 3 5
[,2] 2 4 6
③ 배열
: 3차원 이상의 구조를 갖는 벡터. (모두 같은 타입)
- array를 사용하여 배열을 만들 수 있으나 몇 차원의 구조를 갖는지 dim 옵션에 명시해야 함
> a1 <- array(c(1 : 12), dim = c(2, 3, 2))
> a1
, , 1
[,1] [,2] [,3]
[,1] 1 3 5
[,2] 2 4 6
, , 2
[,1] [,2] [,3]
[,1] 7 9 11
[,2] 8 10 12
- 벡터에 차원 지정
> a2 <- c(1 : 12)
[1] 1 2 3 4 5 6 7 8 9 10 11 12
> dim(a2) <- c(2, 3, 2)
④ 리스트
: 데이터 타입, 데이터 구조에 상관없이 사용자가 원하는 모든 것을 저장할 수 있는 자료구조
> L <- list()
> L[[1]] <- 5
> L[[2]] <- c(1 : 6)
> L[[3]] <- matrix(c(1 : 6), nrow = 2)
> L[[4]] <- array(c(1 : 6), dim = c(2, 3, 2))
> L
#출력값
[[1]]
[1] 5
[[2]]
[1] 1 2 3 4 5 6
[[3]]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[[4]]
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
⑤ 데이터프레임
: 데이터 분석을 위한 2차원 구조를 갖는 관계형 데이터 구조. 가장 많이 활용되는 구조 (서로 다른 타입 가능)
> v1 <- c(1, 2, 3)
> v2 <- c('a', 'b', 'c')
> df1 <- data.frame(v1, v2)
> df1
v1 v2
1 1 a
2 2 b
3 3 c
+ 파이썬, 자바, C 등 많은 언어는 배열의 시작 인덱스 값이 0이지만, R의 벡터는 시작 인덱스 값이 1
(3) R 내장 함수
① 기본 함수
함수 | 내용 | 함수 | 내용 |
help() 또는 ? | 함수들의 도움말 보기 | rm() | 대입 연산자에 의해 생성된 변수 삭제 |
paste() | 문자열을 이어 붙임 | ls() | 현재 생성된 변수들의 리스트 보여줌 |
seq() | 시작값, 끝값, 간격으로 수열 생성 | print() | 값을 콘솔창에 출력 |
rep() | 주어진 데이터를 일정 횟수만큼 반복 |
> help(paste)
> ?paste
> paste("This is", "a pen")
[1] "This is a pen"
> seq(1, 10, 2)
[1] 1 3 5 7 9
> rep(1, 5)
[1] 1 1 1 1 1
> a <- 1
> a
[1] 1
> rm(a)
> a
Error: object 'a' not found
print(10)
[1] 10
② 통계 함수 ★
함수 | 내용 | 예시 |
sum | 입력된 값의 합을 구한다. | sum(vector1) |
mean | 입력된 값의 평균을 구한다. | mean(vector1) |
median | 입력된 값의 중앙값을 구한다. | median(vector1) |
var | 입력된 값의 표본 분산을 구한다. | var(vector1) |
sd | 입력된 값의 표본 표준편차를 구한다. | sd(vector1) |
max | 입력된 값의 최댓값을 구한다. | max(vector1) |
min | 입력된 값의 최솟값을 구한다. | min(vector1) |
range | 입력된 값의 최댓값과 최솟값을 구한다. | range(vector1) |
summary | 입력된 값의 요약값을 구한다. | summary(vector1) |
skewness | 입력된 값의 왜도을 구한다. | skewness(vector1) |
kurtosis | 입력된 값의 첨도을 구한다. | kurtosis(vector1) |
(4) R 데이터 핸들링
① 데이터 이름 변경
- 행렬, 배열, 데이터프레임과 같이 2차원 이상의 데이터 구조에서 가능
> m1 <- matrix(c(1 : 6), nrow = 2)
> colnames(m1) <- c('c1', 'c2', 'c3')
> rownames(m1) <- c('r1', 'r2')
> m1
c1 c2 c3
r1 1 3 5
r2 2 4 6
② 데이터 추출
> v1 <- c(3, 6, 9, 12)
> v1[2]
[1] 6
> m1 <- matrix(c(1 : 6), nrow = 3)
> m1[2, 2]
[1] 5
> colnames(m1) <- c('c1', 'c2')
> m1[, 'c1']
[1] 1 2 3
> rownames(m1) <- c('r1', 'r2', 'r3')
> m1['r3', 'c2']
[1] 6
> v1 <- c(1:6)
> v2 <- c(7:12)
> df1 <- data.frame(v1, v2)
> df1$v1
[1] 1 2 3 4 5 6
> df1$v2[3]
[1] 9
③ 데이터 결합
- 벡터, 행렬, 데이터프레임 결합가능
- rbind : 행으로 결합
- cbind : 열로 결합
(5) 제어문
① 반복문
- for문과 while문
for (i in 1:3){
print(i)
}
- 파이썬이랑 거의 비슷
② 조건문
if (조건문) {
print('조건 만족 시 출력 내용')
} else{
print('조건 불만족 시 출력 내용')
}
③ 사용자 정의 함수
- 자주 사용되는 구문을 필요할 때마다 작성하지 않고 하나의 함수로 명명하여 필요할 때 사용
④ 주석
- #으로 표시
(6) 통계분석에 자주 사용되는 R 함수
① 숫자 연산
함수 | 내용 |
sqrt | 주어진 수의 제곱근을 구한다. |
abs | 주어진 수의 절댓값을 구한다. |
exp | 자연상수 e의 제곱수를 구한다. |
log | 밑이 자연상수인 로그 값을 구한다. |
log10 | 밑이 10인 로그 값을 구한다. |
pi | 원주율을 의미하는 pi 값인 3.141592를 나타낸다. |
round | 주어진 수의 반올림 값을 구한다. |
ceiling | 주어진 수를 올림한다. |
floor | 주어진 수를 내림한다. |
② 문자 연산
함수 | 내용 |
tolower | 주어진 문자열을 소문자로 바꾼다. |
toupper | 주어진 문자열을 대문자로 바꾼다. |
nchar | 주어진 문자열의 길이를 구한다. |
substr | 문자열의 일부분을 추출한다. |
strsplit | 문자열을 구분자로 나누어 쪼갠다. |
grepl | 문자열에 주어진 문자가 있는지 확인한다. |
gsub | 문자열의 일부분을 다른 문자로 대체한다. |
③ 벡터 연산
함수 | 내용 |
length | 주어진 벡터의 길이를 구한다. |
paste | 주어진 벡터를 구분자를 기준으로 결합한다. |
cov | 두 수치 벡터의 공분산을 구한다. |
cor | 두 수치 벡터의 상관계수를 구한다. |
table | 데이터의 개수들을 구한다. |
order | 벡터의 순서를 구한다. |
④ 행렬 연산
함수 | 내용 |
t | 전치행렬을 구한다. |
diag | 대각행렬을 구한다. |
%*% | 두 행렬을 곱한다. |
⑤ 데이터 탐색
함수 | 내용 |
head | 데이터의 앞 일부분을 보여준다. |
tail | 데이터의 뒤 일부분을 보여준다. |
quantile | 수치 벡터의 4분위수를 보여준다. |
⑥ 데이터 전처리 ★
함수 | 내용 |
subset | 데이터에서 조건식에 맞는 데이터를 추출 |
merge | 두 데이터를 특정 공통된 열을 기준으로 병합 |
apply | 데이터에 열(또는 행)별로 주어진 함수를 적용 |
⑦ 정규분포(기본값은 표준 정규 분포로 mean = 0, sd = 1이다)
함수 | 내용 |
dnorm | 정규 분포의 주어진 값에서 함수 값을 구한다. |
rnorm | 정규 분포에서 주어진 개수만큼 표본을 추출한다. |
pnorm | 정규분포에서 주어진 값보다 작을 확률 값을 구한다. |
qnorm | 정규 분포에서 주어진 넓이 값을 갖는 x값을 구한다. |
⑧ 표본추출
함수 | 내용 |
runif | 균일 분포에서 주어진 개수만큼 표본을 추출한다. |
sample | 주어진 데이터에서 주어진 개수만큼 표본을 추출한다. |
⑨ 날짜
함수 | 내용 |
Sys.Date | 연, 월, 일을 출력 |
Sys.time | 연, 월, 일, 시간을 출력 |
as.Date | 주어진 데이터를 날짜 형식으로 변환 |
format | 원하는 날짜 형식으로 변경 |
as.POSIXct | 타임스탬프를 날짜 및 시간으로 변환 |
⑩ 산점도
함수 | 내용 |
plot | 주어진 데이터의 산점도를 그린다. |
abline | 산점도에 추가 직선을 그린다. |
⑪ 파일 읽기 쓰기
함수 | 내용 |
read.csv | csv 파일을 불러온다. |
write.csv | 주어진 데이터를 csv 파일로 저장한다. |
saveRDS | 분석 모델 및 R 파일을 저장한다. |
readRDS | 분석 모델 및 R 파일을 불러온다. |
⑫ 기타
함수 | 내용 |
install.packages | 패키치를 설치한다. |
library | 설치된 패키지를 호출한다. |
getwd | 작업 디렉터리를 확인한다. |
setwd | 작업 디렉터리를 설정한다. |