자연과학/컴퓨터과학

강의요약(Introduction to R)

Retyper 2022. 8. 6. 18:00

본 요약 handout 은 Datacamp 사이트 무료강의를 이수하며 직접 요약한 것이다.

 

 

Learn R, Python & Data Science Online

Learn Data Science from the comfort of your browser, at your own pace with DataCamp's video tutorials & coding challenges on R, Python, Statistics & more.

www.datacamp.com

 
사진1. 가장 쉬운 프로그래밍 언어중 하나인 R
 

강의 명 : Introduction to R

 

1장. 기본소개

R에서 주석은 # 이다.

변수(variable) 할당은 '<-' 로 한다.

변수만 입력하면 변수에 할당된 값을 출력한다.

# 주석
변수 <- 1
변수

 

class() 함수를 통해 변수에 저장된 데이터 타입을 알 수 있다. (ex. 수라면 numeric, 문자라면 character, 불린이라면 logical)

class(변수)

 

2장. 벡터

R에서 벡터(Vector)란 단일 타입의 자료들을 담은 1차원 배열을의미한다. 이때 c() 함수를 이용한다.(concatenating, combine)

벡터이름 <- c(수,수,수)
벡터이름 <- c("텍스트","텍스트","텍스트")

 

names() 함수를 사용하면 벡터의 데이터들에 이름을 부여할 수 있다. (ex, 벡터의 데이터가 "서울시", "강동구", "천호동" 이라면 "시" "구" "동" 이라고 이름을 부여할 수 있다.)

부여하는 name 보다 데이터개수가 많으면 초과된 자료들의 이름은 빈 값으로 부여되고,

부여하는 name 보다 데이터개수가 적으면 error가 난다.

벡터이름 <- c(수,수,수)
names(벡터이름) <- c("텍스트","텍스트","텍스트")

다른벡터이름 <- c("텍스트","텍스트","텍스트")
names(벡터이름) <- 다른벡터이름

 

sum() 함수를 사용하면 수로 이루어진 벡터안의 모든 값을 더한다.

mean() 함수를 사용하면 수로 이루어진 벡터안 모든 값의 평균을 구한다.

변수 <- c(수,수,수)
새변수 <- sum(변수)
새변수 <- mean(변수)

 

벡터의 특정 데이터 하나를 출력하고자 한다면 벡터와 대괄호[]를 사용하면된다.

이때 원소의 순서는 첫번째가 '1' 이다. (직관적으로 당연하지만 일반적인 다른 프로그래밍 언어에서는 그렇지 않다. 파이썬 과 C++에서는 '0' 이 첫번째를 의미한다.) 이름이 부여된 벡터라면 이름으로 선택할 수도 있다.

벡터이름 <- c(수,수,수)
변수이름 <- 벡터이름[1]
변수이름 <- 벡터이름["첫번째 데이터의 이름"]

 

여러개를 동시에 선택하고자 한다면 대괄호 안에 c() 함수를 사용해야 한다. 연속적인 순서대로 선택하길 원한다면 대괄호 안에 콜론:만 쓰면 된다.

벡터이름 <- c(수,수,수,수,수)
변수이름 <- 벡터이름[c(1,3,4)]
변수이름 <- 벡터이름[c("데이터의 이름","데이터의 이름")]
변수이름 <- 벡터이름[2:4]

 

비교 오퍼레이터(>,<,==,!=,<=,>=)를 이용해 불린 값을 출력할 수 있다. 변수에 새로 입력하여 불린벡터를 만들 수 있고 원래 벡터와 불린벡터를 이용해 비교 오퍼레이터로 취사 선택된 자료들만으로 이루어진 새 벡터를 만들 수 있다.

벡터 <- c(1, 2, 3)
불린백터 <- 벡터 > 2
취사선택벡터 <- 벡터[불린백터]

 

3장. 매트릭스

R에서 매트릭스(Matrix)란 단일 타입의 자료들의 행과 열로 이루어진 2차원 배열을 의미한다(행렬). 이때 matrix() 함수를 이용한다. 첫번째 인자로 데이터를 입력하고 두번째 인자 byrow를 통해 행렬에 데이터를 집어넣는 방향을 정할 수 있다(TRUE 일 경우 데이터들이 행방향으로 쌓인다). 세번째 인자 nrow를 통해 'm x n행렬'의 행 수 'm' 을 결정할수 있다. 이때 데이터의 개수가 딱 떨어져야 한다.

데이터 <- c(수,수,수,수,수,수)
매트릭스 <- matrix(데이터, byrow = TRUE, nrow = 2)

 

벡터처럼 매트릭스의 행과 열에도 각각 이름을 부여할 수 있다. rownames() 함수colnames() 함수를 사용하면 되는데, 이때 할당하는 벡터의 데이터 수가 매트릭스의 행이나 열보다 크거나 작으면 함수가 제대로 실행되지 않는다.

행이름벡터 <- c("텍스트","텍스트")
열이름벡터 <- c("텍스트","텍스트","텍스트")

rownames(매트릭스) <- 행이름벡터
colnames(매트릭스) <- 열이름벡터

 

rowSums() 함수를 이용하면 수로 이루어진 행렬에서 모든 행의 값을 더한 벡터를 얻을 수 있다.

colSums() 함수를 이용하면 수로 이루어진 행렬에서 모든 열의 값을 더한 벡터를 얻을 수 있다.

벡터이름 <- rowSums(매트릭스이름)
벡터이름 <- colSums(매트릭스이름)

 

cbind() 함수를 통해 매트릭스에 새 벡터나 새 매트릭스를 '새 열'로 추가할 수 있다. 이때 행의 수는 변하지 않기 때문에 추가하는 매트릭스나 벡터들은 맨처음 매트릭스의 행 수와 같아야 한다. rbind() 함수도 원리는 동일하며 '새 행'으로 추가한다.

최종매트릭스이름 <- cbind(원래매트릭스이름,추가할 매트릭스 이름 혹은 추가할 벡터 이름)
최종매트릭스이름 <- rbind(원래매트릭스이름,추가할 매트릭스 이름 혹은 추가할 벡터 이름)

 

대괄호[]를 이용하여 매트릭스를 슬라이싱 할 수 있다(부분 뽑아내기). 행과 열을 수로 입력하면 그자리에 해당하는 자료를 단일 자료, 벡터, 매트릭스 등으로 새로 만들 수 있다. 괄호에 '1:3'를 입력하면 첫번째 부터 세번째 까지만 선택할 수 있다. 괄호에 수를 입력하지 않으면 전체를 의미하게 된다.

새변수 <- 매트릭스[수,수]
새벡터 <- 매트릭스[수:수,수]
새매트릭스 <- 매트릭스[,수:수]

 

매트릭스와 단일 수의 사칙연산 적용이 가능하고, 매트릭스끼리의 연산도 가능하다. 수학의 행렬 연산과 유사하지만 곱셈과 나눗셈에서 차이가 있다. 수학적 행렬의 곱은 %*% 을 사용한다.

매트릭스 + 수
매트릭스 * 매트릭스
매트릭스 %*% 매트릭스

 

4장. 팩터

변수에는 다양한 종류가 있는데, 팩터에 대해 이해하기 위해서는 몇가지 변수에 대해 먼저 이해해야 한다.

 

categorical variable 범주형 변수 :  몇 개의 동일한 성질을 갖는 부류나 범위로 나눌 수 있는 변수. 보통 분류 척도에 따라 관찰한 변수를 가리킨다. (nominal categorical variable 명목 변수, ordinal categorical variable 서열 변수)

continuous variable 연속 변수 : 주어진 범위 내에서 모든 연속적인 값을 취할 수 있는 변수. 키, 몸무게 따위가 있다.  (interval continuous variable 등간 변수, ratio continuous variable 비율 변수)

변수 성질 최빈값 중앙값 평균 가능한 연산 예시
명목변수 확인분류 O X X = 혈액형
서열변수 순위비교 O O X = ≠ < > 순위
등간변수 간격비교 O O O = ≠ < > + - 온도
비율변수 절대비교 O O O = ≠ < > + - ×÷ 몸무게

 

열거형
컴퓨터 프로그래밍에서 열거형(enumerated type, enumeration), 이넘(enum), 팩터(factor ← R 프로그래밍 언어와 통계학의 범주형 변수에서 부르는 명칭)는 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. - 위키백과 -

 

factor() 함수를 이용하여 중복된 데이터를 제외시킨 집합으로 만들어 준다. 첫번째 인자로 데이터를 입력하고 두번째 인자 order를 통해 순서를 정할 수 있다(TRUE 일 경우 범주의 왼쪽이 최하순위, 오른쪽으로 갈수록 높은 순서를 갖는다.). 세번째 인자 levels를 통해 각 순위 을 결정할수 있다. 

 

명목변수팩터벡터 <- factor(데이터)
서열변수팩터벡터 <- factor(데이터, order = TRUE, levels = c(데이터의 원소, 데이터의 원소, 데이터의 원소))

 

서열을 정의한 서열팩터 속 원소들은 서로 비교해 볼 수 있다.(다음은 두번째와 다섯번째 원소를 비교하는 방법이다.)

서열변수팩터벡터 <- factor(데이터, order = TRUE, levels = c(데이터의 원소, 데이터의 원소, 데이터의 원소))
새 변수 <- 서열변수팩터벡터[2]
다른 새 변수 <- 서열변수팩터벡터[5]
새 변수 > 다른 새 변수

 

levels() 함수를 이용하여 범주의 이름을 확인하고 새롭게 정의할 수 있다. 이때 이름의 순서가 바뀌지 않도록 주의해야 한다.

levels(서열변수팩터)
levels(서열변수팩터) <- c("새범주이름", "새범주이름")

 

summary() 함수를 이용하여 변수의 정보에 대한 퀵 오버뷰를 확인할 수 있다. 이 함수는 매트릭스, 벡터, 팩터 등 다른 것들에도 사용할 수 있다.

summary(변수)

 

5장. 프레임

매트릭스에서는 모든 데이터의 타입이 하나의 타입이어야 했지만 프레임에서는 그렇지 않아도 된다. R 에서 프레임(Frame) 은 일반적인 데이터베이스의 테이블과 비슷한 역할을 한다(2차원 오브젝트들). data.frame() 함수를 이용하여 개별적인 벡터들을 하나의 프레임으로 만들 수 있다.

수 벡터 <- c(수,수,수)
불린 벡터 <- c(TRUE,FALSE,TRUE)
텍스트 벡터 <- c("텍스트","텍스트","텍스트")
프레임 <- data.frame(수 벡터,불린 벡터, 텍스트 벡터)

 

head() 함수와 tail() 함수로 프레임의 맨앞, 맨뒤 6개의 데이터행을 출력해 볼 수 있다.

head(프레임)
tail(프레임)

 

str() 함수로 프레임의 퀵 오버뷰를 확인해 볼 수 있다. (structure)

str(프레임)

 

대괄호[]를 이용하여 프레임을 슬라이싱 할 수 있다(부분 뽑아내기). 매트릭스에서의 슬라이싱과 방법은 동일하다. 추가적으로 프레임에서는 열의 이름으로 부분선택하는것도 가능하다.

새변수 <- 프레임[수,수]
새벡터 <- 프레임[수:수,수]
새프레임 <- 프레임[,수:수]
새변수 <- 프레임[수,"열이름"]

 

'$'와 열이름을 이용하여 해당열의 모든 데이터를 부분선택 할수도 있다. 물론 대괄호를 써도 동일하게 가능하다.

새벡터 <- 프레임$"열이름"

 

subset() 함수를 이용하여 조건을 부여한 부분선택을 할 수 있다. 괄호 속 subset = 에다가 열 이름과 원하는 조건을 연산자와 함께 넣으면 된다.

subset(프레임, subset = 열이름 == "텍스트")
subset(프레임, subset = 열이름 >= 수)

 

order() 함수를 이용하여 벡터의 수 데이터의 순서를 알 수 있다. 프레임의 데이터행들의 순서를 일련의 조건에 따라 순서대로 재정렬 하고자 한다면 다음과 같이 응용해 볼 수 있다. order 로 만든 새 벡터는 프레임 행 개수와 같은 크기의 벡터가 되고, 해당 열의 자료들 중 수가 낮은 것 부터 순서대로 그 순위를 저장한다. (ex. 33, 36, 35, 34 라면 1, 4, 3, 2가 벡터에 저장된다.)

새 벡터 <-  order(프레임$열이름)
프레임[새 벡터,]

 

6장. 리스트

매트릭스, 프레임과는 또 다르게 리스트는 데이터셋이면서도 한 열에 다른 타입의 데이터들을 함께 저장할 수 있다(수, 불린, 텍스트가 한 열에 따로따로 저장 가능한 것). 심지어 크기가 다른 벡터, 매트릭스, 프레임들도 리스트의 요소로서 저장될 수 있다. 이때 list() 함수를 이용한다.

리스트 <- list(벡터, 매트릭스, 프레임)

 

names() 함수를 통해 리스트의 각 데이터들에도 이름을 부여할 수 있다. 혹은 list() 함수를 만들때 바로 이름을 지정할 수도 있다.

names(리스트) <- c("텍스트","텍스트","텍스트")
리스트 <- list(새이름 = 저장할 오브젝트,새이름 = 저장할 오브젝트,새이름 = 저장할 오브젝트)

 

대괄호[]를 이용하여 리스트를 슬라이싱 할 수 있다. 이때 주의할점이 있는데, 대괄호를 한 번 사용하면 저장한 오브젝트는 한 개의 데이터를 가진 리스트가 된다. 리스트 속 데이터 자체를 따로 저장하고 싶다면 대괄호를 중복으로 사용해야한다. 리스트의 원소 속 단일 데이터를 추출하고자 한다면 옆에 괄호를 하나 더 사용하여 선택할수도 있다. (str() 함수를 사용하여 해당 오브젝트가 어떤 타입의 데이터셋인지 확인할 수 있다.)

리스트[수]
리스트[[수]]
리스트[["열이름"]]
리스트$열이름
리스트[["열이름"]][수]
리스트$열이름[수]
반응형