Skip to content

R활용 자료구조, 기술통계 #

Find similar titles

15회 업데이트 됨.

Edit
  • 최초 작성자
    Tuohy
  • 최근 업데이트
    Tuohy

Structured data

Category
Statistics

자료구조와 기술통계 #

자료구조 #

R의 데이터 구조 #

Image

이미지 출처: rfriend.tistory.com

1. 벡터(vector) #

R에서 가장 기본적인 데이터 구조로, factor, matrix, data.frame을 구성하는 기본단위이다. 함수 c()를 이용하며 값의 할당은 "<-" 혹은 "="을 사용한다. 또한 다음과 같은 3가지 형태로 주로 사용된다.

1. 수치형(numeric)
x = c(2, 3, 5)

2. 논리형(logical)
y = c(TRUE, FALSE, TRUE, FALSE, FALSE)

3. 문자형(chracter)
z = c("aa", "bb", "cc", "dd", "ee")

또한 벡터 내의 개수는 "length()"함수를 통해 확인 가능하며, 대괄호를 이용하여 벡터의 일부분을 선택할 수도 있다.

1. 벡터의 개수
length(c("aa", "bb", "cc", "dd", "ee"))
[1] 5

2. 벡터의 인덱싱
s = c("aa", "bb", "cc", "dd", "ee") 
s[3]
[1] "cc"

2. 요인(factor) #

성별과 같은 질적 데이터(명목형 또는 순서형)를 다룰 수 있는 데이터 구조로, level로 이루어진 vector라고 할 수 있다.

data_numeric = c(1, 1, 2, 2, 2)
data_factor = factor(data_numeric)

print( data_factor )
[1] 1 1 1 2 2
Levels : 1 2

data_gender = factor(data_numeric, labels = c('male', 'female'))
print( data_gender )
[1] male male female female female
Levels : male female

3. 행렬(matrix) #

2차원 데이터를 표현하기 위한 데이터 구조로, matrix()함수를 사용하여 구성할 수 있다. matrix(데이터벡터, nrow = 행의 수, ncol = 열의 수, byrow = TRUE/FALSE) 단, 행렬(matrix)를 이루는 모든 구성요소(numeric, character, logical)가 모두 동일한 유형의 데이터이어야만 한다.

mat = matrix(1:9, nrow = 3, ncol = 3, byrow = FALSE)
print( mat )

     [,1] [,2] [,3]
[1,]  1    4    7
[2,]  2    5    8
[3,]  3    6    9

만약 데이터의 구성요소가 다를 경우, 우선순위(character > numeric > logical)에 따라서 데이터 형이 하나로 변환된다.

x = c(1, 3, 5, -4, 10)
y = c('one', 'two', 'three', 'four', 'five')
z = c(T, T, F, F, F)

mat = as.matrix(data.frame(x, y, z))
mat
       x    y       z      
[1,] " 1" "one"   " TRUE"
[2,] " 3" "two"   " TRUE"
[3,] " 5" "three" "FALSE"
[4,] "-4" "four"  "FALSE"
[5,] "10" "five"  "FALSE"

4. 배열(array) #

배열(Array)는 동일한 유형의 데이터가 2차원 이상으로 구성된 구조를 말한다. 행렬(matrix)의 경우는 동일한 유형을 가진 데이터의 2차원 데이터 구조라면, 배열은 행렬을 층층이 쌓아놓은 2차원 이상의 구조이다.

# 1~24까지의 숫자를 '2 x 3 행렬'로 해서 '4층' 짜리의 데이터 구조를 만들어라
a1 <- array(1:24, c(2,3,4))

> 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

, , 3
     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

, , 4
     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

# 1~24까지의 숫자를 '3 x 4' 행렬로 해서 '2층'짜리의 데이터 구조를 만들어라
a2 <- array(1:24, c(3,4,2))

5. 데이터 프레임(data.frame) #

행렬(matrix)와 동일하게 2차원 데이터를 표현하기 위한 데이터 구조로, data.frame()함수를 사용하여 구성할 수 있다. data.frame(vector1, vector2, ...) 다음과 같이 데이터 프레임 구조를 생성할 수 있으며, 데이터 프레임의 input이 되는 모든 vector는 모두 길이가 같아야 한다. 하지만 각 column은 길이가 같은 독립적인 vector 들이기 때문에 모든 vector의 구성요소가 모두 동일할 필요는 없다(다시 말하면, column 내부에서의 형태만 같으면 된다).

x = c(1, 3, 5, -4, 10)
y = c('one', 'two', 'three', 'four', 'five')
z = c(T, T, F, F, F)

df = data.frame(x, y, z)

> class(df[,1])
'numeric'
> class(df[,2])
'factor'
> class(df[,3])
'logical'

6. 리스트(List) #

리스트는 벡터, 행렬, 배열, 데이터 프레임 등과 같은 서로 다른 구조를 모두 묶은 객체라고 할 수 있다.

x = c(1, 3, 5, -4, 10)  # vector
y = matrix(1:6, 3, byrow=TRUE) # Matrix
z = array(1:24, c(3,4,2)) # Array
w = data.frame(cust_id = c(1, 2, 3, 4), last_name = c("Kim", "Lee", "Choi", "Park")) # Data Frame
L = list(x, y, z, w)

# [[1]]는 Vector(x), [[2]]는 Matrix(y), [[3]]는 Array(z), [[4]]는 Data Frame(w)가 묶인 것임

기술통계 #

모집단(Population)과 표본(Sample) #

모집단 #

모집단(Population)은 연구 대상이 되는 집단 전체를 의미한다.

표본 #

표본(Sample)은 연구 대상인 모집단의 특성을 조사하기 위해 추출된 모집단의 일부분이다.

Image

이미지 출처: rfriend.tistory.com

기술통계 #

기술통계란 관측한 데이터를 도표로 정리하거나 통계량(예 : 평균, 분산, 상관계수 등)을 정리한 것으로서 관측한 현상의 특징을 기술하는 것이다.

데이터 확인 #

1. head() : 데이터의 상위 6개에 대한 값을 보여줌.
2. tail() : 데이터의 하위 6개에 대한 값을 보여줌.
3. class(): 데이터의 속성만을 표시해줌.
4. some() : 데이터를 랜덤으로 확인할 수 있음(참고로 some()함수는 car package 안에 있음).
5. str() : 데이터구조, 데이터 길이, 변수의 개수, 변수명, 속성, 변수값 미리보기 등을 제공  
6. dim() : dataframe의 길이를 관측할 때 사용하며, 행과 열의 개수를 출력함.

데이터 요약 #

R 명령어 설명
표본수 length(x) 선택한 표본의 수
평균 mean(x)
분산 var(x) 관찰치의 퍼진 정도
표준편차 sd(x) 관찰치의 퍼진 정도를 나타내는 또 하나의 지표, 표본분산의 제곱근

참고 : 중위수(median), 사분위수(Quantiles) #

자료의 분포가 좌우대칭이 아니거나 이상치(outlier)가 있는 경우, 평균 값은 극단적으로 크거나 극단적으로 작은 값에 의해 영향을 받게 된다. 이를 해결하기 위해 중위수(median)값과 사분위수(Qualiles)값을 사용한다.

자료를 순서대로 나열하였을 때 정중앙 즉, 50%에 위치하는 수를 중위수(median)으로 정의하고, 25%에 위치하는 수가 Q1, 75%에 위치하는 수가 Q3이다. 만약 벡터가 홀수 개로 구성되어 있으면, 정 가운데 값을 중앙값으로 가져오지만 벡터가 짝수개의 데이터로 구성되어 있으면 정 가운데의 양쪽 두개의 값을 가져다가 평균을 내서 중앙값을 계산한다. R 에서는 fivenum()이나 quantile() 함수를 통해 데이터의 사분위수를 구할 수 있다.

Image

이미지 출처: wellbeingatschool.org.nz

summary() 함수 #

최소값(min), 사분위값(quantile), 중앙값(median), 평균(mean), 최대값(max) 값을 깔끔하게 한눈에 볼수 있도록 출력한다.

기술통계함수의 시각화 #

1. 히스토그램(histogram) #

가장 대표적인 그래프 중 하나로, 특정 변수의 관측값의 빈도 분포를 직관적으로 확인할 수 있다. 히스토그램의 사용방법은 hist()함수를 사용한다.

hist(data$length, breaks = 50)

Image

출처 : R을 이용한 누구나 하는 통계분석 by 안재형

2. 박스도표(boxplot) #

상자그림(boxplot)은 자료로부터 얻은 통계량인 요약수치를 가지고 수치적 자료로 표현하는 그래프이다. R에서는 boxplot()함수를 통해 실행할 수 있다.

Image

출처 : R을 이용한 누구나 하는 통계분석 by 안재형

참고로, 사분위간 범위가 상자의 길이이며, 중앙값은 상자 중간의 선으로 표현된다. 선은 최대값과 최소값까지 표현하고, 그 밖의 점들은 특이점이다.

3. 분위수-분위수 도표(QQ plot) #

정규성 검정을 확인하는 방법 중의 하나인 QQ plot은 특정변수에 포함되어 있는 관측값들이 정규분포에 가까운지를 확인할 수 있는 그래프이다.

y <- rt(200, df = 5); qqnorm(y); qqline(y, col = 2)

Image

출처 : R을 이용한 누구나 하는 통계분석 by 안재형

정규성을 확인하는 방법은 qqline()함수를 통해 산점도 점들이 대각선에 가깝게 선형을 이루면 정규성을 띈다고 평가하고, 그렇지 않으면 정규성을 띄지 않는다고 판단한다.

참고 #

R, Python 분석과 프로그래밍 (by R Friend)
후성유전체 정보 분석 및 워크샵(2018.01)
R을 이용한 누구나 하는 통계분석

0.0.1_20230725_7_v68