이번 글에서도 저번 글에 이어 R의 변수와 데이터 타입 및 구조에 대해 이어 내용을 설명하려고 합니다.
저번 글에서는 데이터 구조 중에서 데이터프레임까지 설명을 했으며, 이번 글에서는 배열(array), 데이터의 요약, 데이터 타입 확인 및 활용 함수에 대한 설명이 이루어질 예정입니다.
R의 데이터 종류(구조)
배열 (Array)
배열(Array)은 R에서 다차원 데이터를 저장하기 위한 데이터 구조로, 동일한 데이터 타입의 데이터를 2차원 이상의 형태로 저장할 수 있습니다. 배열은 행렬의 확장된 개념으로, 행렬이 2차원인 것과 달리 배열은 3차원, 4차원 등 여러 차원을 가질 수 있습니다. 배열은 주로 다차원 데이터를 처리하거나 분석할 때 사용됩니다.
배열의 생성
배열은 array() 함수를 사용하여 생성합니다. 이 함수는 데이터와 각 차원의 크기를 지정하여 배열을 만듭니다.
# 3차원 배열 생성 (2x3x4)
my_array <- array(1:24, dim = c(2, 3, 4))
print(my_array)
# 출력:
# , , 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
주요 매개변수:
- data: 배열에 저장할 데이터를 지정합니다. 벡터 형태로 입력되며, 데이터가 차례로 배열에 채워집니다.
- dim: 각 차원의 크기를 지정합니다. c(행, 열, ... , n차원) 형태로 입력합니다.
배열의 속성
- 차원 확인: dim() 함수를 사용하여 배열의 차원을 확인할 수 있습니다.
- 차원의 이름 지정: dimnames() 함수를 사용하여 각 차원의 이름을 지정할 수 있습니다.
- 길이: length() 함수는 배열의 전체 요소 개수를 반환합니다.
# 차원 확인
dim(my_array)
# 출력: 2 3 4 (2행, 3열, 4층)
# 차원의 이름 지정
dimnames(my_array) <- list(c("Row1", "Row2"), c("Col1", "Col2", "Col3"), c("Slice1", "Slice2", "Slice3", "Slice4"))
print(my_array)
# 출력:
# , , Slice1
#
# Col1 Col2 Col3
# Row1 1 3 5
# Row2 2 4 6
#
# , , Slice2
#
# Col1 Col2 Col3
# Row1 7 9 11
# Row2 8 10 12
# ...
# 배열의 길이 확인
length(my_array)
# 출력: 24
배열의 인덱싱과 슬라이싱
배열의 특정 요소에 접근하거나, 서브셋을 추출하는 방법은 행렬과 유사합니다. 배열의 각 차원에 대해 인덱스를 지정하여 요소에 접근할 수 있습니다.
# 1차원, 2열, 3층의 요소에 접근
my_array[1, 2, 3]
# 출력: 15
# 2차원의 모든 요소 선택
my_array[ , , 2]
# 출력:
# [,1] [,2] [,3]
# [1,] 7 9 11
# [2,] 8 10 12
# 1차원의 2열을 모든 층에서 선택
my_array[1, 2, ]
# 출력: 3 9 15 21
배열의 연산
배열에서도 벡터와 행렬처럼 다양한 연산을 수행할 수 있습니다. 요소별 연산은 벡터화된 방식으로 수행됩니다.
# 배열의 모든 요소에 2를 더함
my_array_plus_two <- my_array + 2
print(my_array_plus_two)
# 출력:
# , , 1
#
# [,1] [,2] [,3]
# [1,] 3 5 7
# [2,] 4 6 8
#
# , , 2
#
# [,1] [,2] [,3]
# [1,] 9 11 13
# [2,] 10 12 14
# ...
배열의 결합
배열을 결합할 때는 abind() 함수를 사용할 수 있습니다. 이 함수는 여러 배열을 특정 차원에서 결합합니다.
# 예제 배열 생성
array1 <- array(1:8, dim = c(2, 2, 2))
array2 <- array(9:16, dim = c(2, 2, 2))
# 배열 결합 (3차원 기준으로 결합)
library(abind)
combined_array <- abind(array1, array2, along = 3)
print(combined_array)
# 출력:
# , , 1
#
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
#
# , , 2
#
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
#
# , , 3
#
# [,1] [,2]
# [1,] 9 11
# [2,] 10 12
#
# , , 4
#
# [,1] [,2]
# [1,] 13 15
# [2,] 14 16
배열과 행렬의 차이점
배열은 행렬과 유사하지만, 행렬은 2차원 구조에만 해당하고, 배열은 2차원 이상의 다차원 구조를 포함할 수 있다는 점이 다릅니다. 또한 배열은 더 복잡한 데이터 구조를 표현하는 데 유용합니다.
데이터의 요약
수치형 데이터일 경우나 범주형 데이터일 경우에 따라 요약하는 방식이 다르며,(=사용하는 함수가 다르다.) 밑에서 이에 대한 내용에 대해 자세히 설명하겠습니다.
수치형 데이터 요약 및 시각화
수치형 데이터는 연속적이거나 이산적인 숫자 값을 가지며, 데이터의 중심 경향과 변동성을 파악하는 데 중점을 둡니다. 수치형 데이터를 요약할 때는 데이터의 중심 경향(예: 평균, 중앙값)과 분포(예: 표준편차, 사분위수)를 나타내는 통계량을 사용합니다. 또한, 데이터를 시각적으로 표현하여 분포를 이해하는 데 도움을 줍니다.
주요 함수 및 시각화 도구:
- mean()
- 설명: 데이터의 산술 평균을 계산합니다.
- 사용 예시:
data <- c(10, 20, 30, 40, 50)
mean(data)
# 출력: 30
- sd()
- 설명: 데이터의 표준편차를 계산하여 데이터가 평균으로부터 얼마나 퍼져 있는지를 나타냅니다.
- 사용 예시:
sd(data)
# 출력: 15.81139
- range()
- 설명: 데이터의 최소값과 최대값을 반환합니다.
- 사용 예시:
range(data)
# 출력: 10 50
- quantile()
- 설명: 데이터의 사분위수를 계산합니다. 데이터 분포의 25%, 50%(중앙값), 75% 지점을 나타냅니다.
- 사용 예시:
quantile(data)
# 출력:
# 0% 25% 50% 75% 100%
# 10.00 22.50 30.00 37.50 50.00
- cor()
- 설명: 두 수치형 변수 간의 상관관계를 계산합니다. 상관계수는 -1에서 1 사이의 값을 가지며, 1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계를 나타냅니다.
- 사용 예시:
x <- c(1, 2, 3, 4)
y <- c(2, 4, 6, 8)
cor(x, y)
# 출력: 1 (완전 양의 상관관계)
- summary()
- 설명: 데이터의 다양한 요약 통계를 한 번에 제공합니다(최소값, 1사분위수, 중앙값, 평균, 3사분위수, 최대값).
- 사용 예시:
summary(data)
# 출력:
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 10.0 22.5 30.0 30.0 37.5 50.0
- histogram()
- 설명: 데이터의 분포를 히스토그램으로 시각화합니다. 히스토그램은 데이터가 어떻게 분포되어 있는지를 나타내는 데 유용합니다.
- 사용 예시:
hist(data, main = "Histogram of Data", xlab = "Value")
- boxplot()
- 설명: 데이터의 분포를 상자 그림(Boxplot)으로 시각화합니다. 중앙값, 사분위수, 그리고 이상치를 시각적으로 표현합니다.
- 사용 예시:
boxplot(data, main = "Boxplot of Data", ylab = "Value")
- stripchart()
- 설명: 데이터의 분포를 점으로 표현한 차트입니다. 작은 데이터셋에서 개별 데이터 포인트를 시각적으로 나타낼 때 유용합니다.
- 사용 예시:
stripchart(data, method = "jitter", main = "Stripchart of Data", xlab = "Value")
범주형 데이터 요약 및 시각화
범주형 데이터는 몇 가지 고정된 범주(Category)로 나뉘며, 숫자로 표현되지 않고 각 범주가 의미를 지닙니다. 범주형 데이터를 요약할 때는 각 범주의 분포와 빈도를 나타내는 통계량을 사용합니다. 이를 통해 데이터가 각 범주에 어떻게 분포되어 있는지, 특정 범주가 차지하는 비율이 어떤지를 이해할 수 있습니다.
주요 함수 및 시각화 도구:
- table()
- 설명: 범주형 데이터에서 각 범주에 속하는 값의 빈도를 계산합니다.
- 사용 예시:
gender <- factor(c("male", "female", "female", "male", "female"))
table(gender)
# 출력:
# gender
# female male
# 3 2
- summary()
- 설명: 범주형 데이터의 요약을 제공하며, 각 범주의 빈도를 보여줍니다.
- 사용 예시:
summary(gender)
# 출력:
# female male
# 3 2
- barplot()
- 설명: 각 범주의 빈도를 막대그래프로 시각화합니다. 범주별로 데이터가 얼마나 분포되어 있는지 쉽게 확인할 수 있습니다.
- 사용 예시:
barplot(table(gender), main = "Barplot of Gender", xlab = "Gender", ylab = "Frequency")
- pie()
- 설명: 각 범주의 비율을 원형 그래프로 시각화합니다. 범주형 데이터의 전체에서 각 범주가 차지하는 비율을 보여줍니다.
- 사용 예시:
pie(table(gender), main = "Pie Chart of Gender")
- dotchart()
- 설명: 각 범주의 빈도를 점으로 표현한 차트입니다. 범주별 비교를 시각적으로 표현하는 데 유용합니다.
- 사용 예시:
dotchart(table(gender), main = "Dotchart of Gender", xlab = "Frequency")
수치형 데이터와 범주형 데이터는 각기 다른 특성을 지니며, 이를 요약하고 시각화하는 방법도 다릅니다. 수치형 데이터는 평균, 표준편차, 상관관계 등의 통계량을 통해 데이터를 요약하고, 히스토그램이나 박스플롯으로 시각화합니다. 반면, 범주형 데이터는 빈도와 비율을 통해 요약하며, 막대그래프나 원형 그래프로 시각화합니다. 이와 같은 요약 및 시각화 도구들은 데이터의 특성과 분포를 이해하는 데 중요한 역할을 합니다.
데이터 타입 확인 및 활용
class() 함수
- 용도: 변수의 데이터 타입(클래스)을 확인하는 함수입니다.
- 예시:
class(num1) # 출력: "numeric"
class(name) # 출력: "character"
class(gender) # 출력: "factor"
typeof() 함수
- 용도: 데이터의 기본 유형(세부적인 타입)을 확인할 수 있는 함수입니다.
- 예시:
typeof(num1) # 출력: "double" (numeric은 R에서 기본적으로 double형)
typeof(name) # 출력: "character"
typeof(gender) # 출력: "integer" (factor는 내부적으로 integer로 저장)
as 함수
- 용도 : 데이터 타입을 변환하기 위해 사용하는 함수입니다.
- 예시:
as.numeric("5.5") # 5.5 (numeric으로 변환)
as.character(42) # "42" (character로 변환)
as.logical(0) # FALSE (logical로 변환)
이번 글에서는 R에서 다차원 데이터를 처리하는 배열의 생성과 활용 방법, 그리고 데이터의 요약과 시각화를 통해 데이터를 이해하는 방법을 살펴보았습니다. 또한, 다양한 데이터 타입을 확인하고 변환하는 방법을 알아보았으니, 이를 바탕으로 데이터 분석의 기본기를 다져보기시기를 바랍니다.
감사합니다.
'프로그래밍 언어 > R' 카테고리의 다른 글
07. R에서의 기본 연산자 이해 (산술, 비교, 논리, 결측값 처리 연산자) (0) | 2024.08.22 |
---|---|
06. R 프로그램에서 파일 읽기 및 쓰기 (0) | 2024.08.20 |
04. R의 변수와 데이터 타입 및 구조 2️⃣ (리스트, 행렬, 데이터프레임) (0) | 2024.08.15 |
03. R의 변수와 데이터 타입 및 구조 1️⃣ (변수와 데이터 타입, 팩터, 벡터) (0) | 2024.08.13 |
02. R package 기초 (0) | 2024.08.10 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!