오늘은 데이터 분석 할 때 가장 많이 사용되는 분석 도구인 R에 대해 알아보려고 합니다.
R은 모두 오픈소스로 무료로 이용할 수 있는데요.
설치도 저용량인데다 고차원적인 계산이 가능하고 폭넓은 통계, 데이터시각화를 할 수 있는 환경을 가지고 있어서 데이터분석에서 보편적으로 사용됩니다. 특히 R은 데이터분석 준 전문가 자격증 취득에 필요한 분석도구이기도 합니다.
R이란?
뉴질랜드 통계학자인 로스 이하카와 캐나다 통계학자인 로버트 젠틀맨이 개발한 언어로 오픈소스 통계 및 데이터 분석 프로그램인데요.
R을 사용하기 위해서는 RStudio 를 다운받아야하는데요. R은 RStudio을 이용해서 데이터를 분석할 수 있습니다. 파이썬이 사용하는 언어가 C언어라면, R은 통계를 위한 프로그래밍 언어인 S 언어를 사용해서 빠르기는 파이썬이 보통 빠릅니다.
그럼 이제 R의 기본 문법에 대해 공부해봅시다.
R에 사용되는 연산자
- 대입 연산자: 변수에 값을 할당하는 건데요. 오른쪽 값을 왼쪽에 대입하거나 왼쪽 값을 오른쪽에 대입할 때 사용합니다.
- <- , <<- , = , -> , ->>
- 비교 연산자: 값을 비교할수도 있고, 문자나 참/거짓값도 비교할 수 있습니다. NA는 값이 없기 때문에 비교가 불가능하므로 NA를 반환합니다.
- == , < , > , != , <= , >= , is.character , is.numeric , is.logical , is.na , is.null
- 산술 연산자: 숫자형 계산은 산술 연산자로 가능합니다.
- + , – , * , / , %/% , %% , ^ , ** , exp()
- 기타 연산자: 기타연산자의 종류로는 부정연산자인 ! , AND연산자인 & , OR연산자인 |가 있습니다.
R의 데이터구조
R의 데이터 구조에는 벡터, 행렬, 배열, 리스트, 데이터프레임이 있는데요.
벡터는 1차원 데이터,
행렬은 2차원 구조를 가진 벡터입니다.
배열은 3차원 이상 구조를 가진 벡터이구요.
리스트는 유저가 필요한 걸 다 저장할 수 있는 자료구조입니다. 그래서 배열이나 행렬처럼 데이터가 모두 같은 타입이 아니어도 됩니다.
여기서 함정이 있는데요. 그럼, 행렬에 저장되는 데이터는 모두 같은 타입이어야하니까 숫자행렬에 문자를 추가할 수 없을까요? 정답은 아닙니다. 추가할 수 있습니다!! 대신, 숫자 행렬에 문자가 추가되는 경우에는 숫자행렬의 숫자들이 모두 문자 타입으로 변경되고, 문자가 추가되게 됩니다!
R에서 가장 보편적으로 많이 쓰이는 데이터프레임은 2차원 구조를 가지는 데이터 구조입니다. 행렬과 같은 모양이지만 각기 다른 데이터 타입이여도 괜찮습니다.
R의 함수
R에서 사용되는 기본함수먼저 알아보겠습니다.
- rm(): 변수 삭제
- Is(): 변수 리스트 보기
- print(): 데이터 콘솔창 출력
- rep(): 데이터 횟수 반복
- seq(): 시작값, 끝값, 간격으로 수열 생성
- paste(): 문자열 붙임
R에서는 통계함수가 많이 사용되는데요.
용어를 알아두시면 함수를 사용할 때 유용합니다.
- sum(합) / mean(평균) / median(중간값) / var(표준분산) / sd(표준편차) / max(최댓값) / min(최솟값) / range(최댓값,최솟값) / summary(요약값) / skewness(왜도) / kurtosis(첨도)
- 그외에 데이터프레임에서 데이터 이름을 변경할 때 사용하는 함수로는 : colnames / rownames 이며,
- $ 기호나 [] 기호를 이용하면 열의 데이터를 구할 때 용이합니다.
- 데이터 결합할 때 사용하는 함수로는 : rbind(행결합) , cbind(열 결합)이 있습니다. -> 즉, 두 벡터의 결합이므로 행렬인 matrix를 반환하게 됩니다.
그 외 통계분석에서 많이 사용되는,
연산함수에 대해서도 알아보겠습니다.
- 숫자 연산
- sqrt(제곱근) / abs(절댓값) / exp(e의 제곱수) / log(밑이 자연상수인 로그값) / log10(밑이 10인 로그값) / 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(적용)
- 정규분포에서 사용하는 함수
- dnorm(주어진값에서 함수값) / rnorm(정규분포에서 주어진 개수만큼 표본추출) / pnorm(주어진 값보다 작을 확률) / qnorm(주어진 넓이 값을 갖는 x값)
- rnorm(데이터개수, 평균, 표준편차)
- dnorm(주어진값에서 함수값) / rnorm(정규분포에서 주어진 개수만큼 표본추출) / pnorm(주어진 값보다 작을 확률) / qnorm(주어진 넓이 값을 갖는 x값)
- 표본추출
- runif(균일한 분포에서 표본추출) / sample(주어진 데이터에서 표본 추출)
- 날짜
- Sys.Date(연월일) / Sys.time(연월일시간) / as.Date(데이터>날짜형식으로) / format(날짜형식으로 변경) / as.POSIXct(타임스탬프->날짜&시간으로 변경)
- 산점도
- plot(산점도그리기) / abline(추가직선그리기)
- plot함수의 매개변수
- type(p:점, b:점과 직선, n:아무것도 표시X)
- xlim(x축의 범위설정이며 콤마로 범위표현), ylim(y축의 범위설정)
- xlab(x축의 이름 설정) / ylab(y축의 이름설정)
- main(산점도 이름 설정)
- abline(v: 수직선, h:수평선)
- col(색상선택 매개변수)
- plot함수의 매개변수
- plot(산점도그리기) / abline(추가직선그리기)
- 기타
- read.csv / write.csv(저장) / saveRDS(R파일 저장) / readRDS(불러오기)
- install.packages(패키지 설치) / library(패키지호출) / getwd(디렉터리 확인) / setwd(디렉터리 설정)
R 기초 예상문제
문제 1. R의 데이터 구조에 대한 설명으로 옳지 않은 것은?
① 벡터는 1차원 데이터 구조이다.
② 행렬은 모든 데이터가 같은 자료형이어야 한다.
③ 리스트는 서로 다른 자료형을 함께 저장할 수 있다.
④ 데이터프레임은 모든 열이 반드시 같은 자료형이어야 한다.
정답: ④
데이터프레임은 행과 열로 구성된 2차원 데이터 구조입니다. 행렬과 비슷하게 생겼지만, 숫자형·문자형·논리형처럼 서로 다른 자료형의 열을 함께 저장할 수 있습니다.
문제 2. 다음 R 코드의 실행 결과로 알맞은 것은?
x <- c(10, 20, 30, 40)
mean(x)
① 20
② 25
③ 30
④ 100
정답: ②
c() 함수는 여러 값을 하나의 벡터로 결합합니다. mean() 함수는 평균을 계산하므로 (10+20+30+40) ÷ 4의 결과인 25가 출력됩니다.
문제 3. R 함수에 대한 설명으로 옳은 것은?
① rbind()는 데이터를 열 방향으로 결합한다.
② head()는 데이터의 마지막 부분을 확인한다.
③ is.na()는 결측값 여부를 확인한다.
④ rm()은 새로운 변수를 생성한다.
정답: ③
is.na()는 데이터에 결측값인 NA가 포함되어 있는지 확인하는 함수입니다. rbind()는 행 방향 결합, head()는 데이터 앞부분 확인, rm()은 변수 삭제에 사용합니다.
