R에서 행렬(Matrix)과 배열(Array) 다루기

제공

안녕하세요! 데이터 분석의 세계에 뛰어들고 싶은데, 뭔가 막막한 기분 느껴본 적 있으세요? R 언어를 배우다 보면 행렬(Matrix)과 배열(Array) 때문에 꽤나 당황스러울 때가 있더라고요. 저도 그랬거든요. 복잡해 보이는 숫자들의 집합체, 도대체 어떻게 다뤄야 하는 걸까요? 걱정 마세요! 제가 바로 그 고민을 해결해 드리려고 왔어요. 이번 포스팅에서는 R에서 행렬과 배열을 마스터하는 비법을 알려드릴 거예요. 행렬 생성 및 기본 연산부터 시작해서, 행렬의 종류와 특징, 배열 생성 및 차원 이해하기, 그리고 실제 활용 예시까지 차근차근 짚어볼 거랍니다. 벌써 흥미진진하지 않나요? 함께 시작해 봐요!

 

 

행렬 생성 및 기본 연산

R에서 행렬을 만드는 건 생각보다 훨씬 쉬워요! 마치 레고 블럭 쌓듯이 원하는 모양대로 숫자들을 차곡차곡 쌓아 올리면 된답니다. 자, 그럼 matrix() 함수라는 마법 지팡이를 한번 휘둘러 볼까요? 뿅! ✨

matrix() 함수

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

이게 바로 matrix() 함수의 기본 주문이에요. 뭔가 복잡해 보이지만, 하나씩 뜯어보면 전혀 어렵지 않아요. data에는 행렬에 들어갈 숫자들을 넣어주면 돼요. 예를 들어 1부터 6까지의 숫자로 2×3 행렬을 만들고 싶다면 data = 1:6 이라고 입력하면 돼요. 마치 마법의 숫자 주머니 같죠? 😄

nrowncol은 각각 행과 열의 개수를 정하는 부분이에요. nrow = 2, ncol = 3이라고 입력하면 2행 3열짜리 행렬 틀이 뚝딱 만들어져요! 참 쉽죠? 😉

byrow는 숫자를 채워 넣는 방식을 정하는 옵션이에요. 기본값은 FALSE인데, 이 경우에는 열 방향으로 숫자가 채워져요. 만약 행 방향으로 채우고 싶다면 byrow = TRUE로 바꿔주면 된답니다. 이 작은 차이가 나중에 큰 변화를 가져올 수 있으니 꼭 기억해 두세요! 🧐

dimnames는 행과 열에 이름을 붙여주는 부분이에요. 예를 들어 학생들의 성적표를 행렬로 만들 때, 행에는 학생 이름을, 열에는 과목 이름을 넣어주면 보기 편하겠죠? dimnames = list(c("철수", "영희"), c("국어", "수학", "영어"))처럼 입력하면 돼요. 이름표를 붙여주는 것 같아서 재밌지 않나요? 😊

행렬 생성 예시

자, 이제 실제로 행렬을 만들어 볼까요? 1부터 9까지의 숫자로 3×3 행렬을 만들어 봅시다.

“`R
my_matrix <- matrix(1:9, nrow = 3, ncol = 3) my_matrix ```

짠! 마법처럼 3×3 행렬이 나타났어요! ✨ 이제 이 행렬을 가지고 놀아볼 시간이에요! 행렬의 덧셈, 뺄셈, 곱셈, 나눗셈, 전치, 역행렬… 흥미진진한 연산들이 우리를 기다리고 있어요! 😆

행렬의 기본 연산

행렬의 덧셈과 뺄셈은 아주 간단해요. 크기가 같은 두 행렬의 같은 위치에 있는 원소끼리 더하거나 빼면 된답니다. 마치 사과 3개에 사과 2개를 더하면 사과 5개가 되는 것처럼 말이죠! 🍎➕🍎=🍎🍎🍎🍎🍎

행렬의 곱셈은 조금 복잡해요. 앞 행렬의 행과 뒤 행렬의 열을 짝지어서 곱하고 더하는 과정을 반복해야 하거든요. 처음에는 어려울 수 있지만, 몇 번 연습하다 보면 금방 익숙해질 거예요! 💪

행렬의 나눗셈은 사실 역행렬을 곱하는 것과 같아요. 역행렬은 원래 행렬에 곱하면 단위행렬이 되는 특별한 행렬이에요. 마치 마법의 거울처럼 원래 행렬을 반대로 뒤집어 놓은 것 같죠? 🪞

전치행렬은 행과 열을 바꿔놓은 행렬이에요. 마치 거울에 비친 모습처럼 좌우가 바뀌는 것과 비슷해요. 🔄

R에서의 행렬 연산

자, 이제 R에서 이런 연산들을 어떻게 하는지 직접 해볼까요?

“`R
matrix_a <- matrix(1:4, nrow = 2) matrix_b <- matrix(5:8, nrow = 2) # 덧셈 matrix_a + matrix_b # 뺄셈 matrix_a - matrix_b # 곱셈 matrix_a %*% matrix_b # 전치 t(matrix_a) # 역행렬 solve(matrix_a) ```

R에서 행렬 연산은 정말 간단하죠? 마치 마법 주문을 외우는 것 같아요! ✨ 이제 여러분은 R 마법사가 되어 행렬의 세계를 자유롭게 탐험할 수 있게 되었어요! 앞으로 더욱 흥미진진한 마법들이 기다리고 있으니 기대해 주세요! 😉

 

행렬의 종류와 특징

자, 이제 R에서 행렬을 만드는 법도 알았으니, 다양한 종류의 행렬들을 좀 더 깊이 있게 파헤쳐 볼까요? 마치 보석처럼, 행렬도 종류에 따라 각기 다른 특징과 아름다움(?)을 가지고 있답니다! 각각의 특징을 잘 이해하면 R로 데이터를 분석할 때 훨씬 효율적이고 우아하게 작업할 수 있어요. 마법 같은 R의 세계로 더 깊이 들어가 봅시다~ ✨

먼저, 행렬은 크게 정방행렬, 대칭행렬, 삼각행렬, 대각행렬, 단위행렬, 영행렬 등으로 나눌 수 있어요. 이름만 들어도 뭔가 특별한 느낌이 팍팍 오지 않나요?!

1. 정방행렬 (Square Matrix)

가로와 세로의 크기가 같은 행렬을 말해요. 마치 정사각형처럼 반듯한 모양이죠. 예를 들어 2×2, 3×3, 10×10 행렬처럼요! 정방행렬은 행렬식(determinant)이나 역행렬(inverse matrix) 같은 중요한 개념들을 다룰 때 기본이 된답니다. 이런 개념들은 선형대수의 핵심이기도 하고, 데이터 분석에서도 굉장히 중요한 역할을 해요. 예를 들어, 회귀 분석에서 역행렬을 이용해서 계수를 추정하는 경우가 많답니다!

2. 대칭행렬 (Symmetric Matrix)

정방행렬 중에서도 주대각선을 기준으로 좌우가 똑같은, 마치 데칼코마니처럼 생긴 행렬이에요. A[i, j] = A[j, i] 라는 조건을 만족하는 거죠! 대칭행렬은 통계 분석, 특히 공분산 행렬(covariance matrix)에서 자주 등장해요. 데이터의 변수들 간의 관계를 나타내는 공분산 행렬은 항상 대칭행렬의 형태를 띠거든요. 신기하지 않나요? 🤔

3. 삼각행렬 (Triangular Matrix)

이 친구는 상삼각행렬과 하삼각행렬 두 종류로 나뉘어요. 상삼각행렬은 주대각선 아래의 모든 원소가 0인 행렬이고, 하삼각행렬은 주대각선 위의 모든 원소가 0인 행렬이에요. 이름처럼 삼각형 모양으로 0이 분포되어 있는 거죠! 뭔가 깔끔한 느낌?! 이런 삼각행렬은 행렬식을 계산하거나 연립방정식을 풀 때 아주 유용하게 쓰여요. 계산량을 확 줄여주는 효자템이라고 할 수 있죠! 😉

4. 대각행렬 (Diagonal Matrix)

주대각선 이외의 모든 원소가 0인 행렬이에요. 뭔가 심플하면서도 강력한 느낌이 들지 않나요? 마치 행렬계의 스파르타 같달까…? 대각행렬은 특히 행렬의 곱셈을 간단하게 만들어줘서 계산 효율을 높이는 데 큰 도움을 준답니다. 컴퓨터 계산에서 시간을 절약하는 건 정말 중요하잖아요! ⏱️

5. 단위행렬 (Identity Matrix)

대각행렬의 특별한 케이스로, 주대각선의 모든 원소가 1인 행렬이에요. 마치 숫자 1처럼, 어떤 행렬에 곱해도 그 행렬 자체를 그대로 돌려주는 특징이 있어요. 마치 마법의 거울 같죠?! 단위행렬은 역행렬을 구하거나 행렬 연산의 기준점으로 사용되는 등 정말 중요한 역할을 해요. 👑

6. 영행렬 (Zero Matrix)

모든 원소가 0인 행렬이에요. 이름 그대로, 텅 비어있는 느낌이죠? 😅 영행렬은 행렬 덧셈에서 0과 같은 역할을 해요. 어떤 행렬에 영행렬을 더해도 그 행렬 자체가 그대로 유지되죠.

이렇게 다양한 종류의 행렬들을 살펴봤는데요, 어떠셨나요? 각각의 행렬이 가진 고유한 특징들을 잘 이해하고 활용하면 R로 데이터를 다루는 능력이 훨씬 향상될 거예요! 앞으로 R을 사용하면서 이 친구들을 자주 만나게 될 테니, 꼭 기억해 두세요! 😉 다음에는 배열에 대해 알아볼 텐데, 기대되지 않나요? 그럼 다음 장에서 만나요! 👋

 

배열 생성 및 차원 이해하기

R에서 행렬은 다들 잘 다루시는 것 같으니, 이제 본격적으로 배열(Array)에 대해 파고들어 볼까요? 행렬은 2차원 데이터 구조잖아요? 그런데 배열은 훨씬 더 흥미로워요! 왜냐하면 1차원부터 n차원까지, 데이터를 담을 수 있는 그릇의 차원을 자유자재로 정할 수 있거든요! 마치 마법의 상자 같지 않나요? ^^

R에서 배열 만들기

자, 그럼 R에서 배열을 만드는 방법부터 알아볼게요. array() 함수, 기억나시죠? 이 함수를 이용하면 원하는 차원의 배열을 뚝딱 만들 수 있어요! 예를 들어, 1부터 24까지의 숫자를 가지고 2x3x4 배열을 만들고 싶다면, my_array <- array(1:24, dim = c(2, 3, 4))라고 입력하면 돼요. 참 쉽죠? 여기서 dim 인수는 배열의 차원을 지정하는 역할을 해요. c(2, 3, 4)는 각 차원의 크기를 나타내는 벡터고요! 2x3x4 배열은 2개의 행, 3개의 열, 그리고 4개의 층으로 이루어진 3차원 배열이라고 생각하면 돼요. 마치 2x3 크기의 행렬이 4개 겹쳐있는 모양이랄까요?

배열의 차원 확인하기

이렇게 생성된 배열의 차원을 확인하려면 dim(my_array) 함수를 사용하면 돼요. 그럼 [1] 2 3 4라는 결과가 짠! 하고 나타날 거예요. 각 숫자가 각 차원의 크기를 나타낸다는 거, 이제 아시겠죠?! 만약 배열의 전체 요소 개수가 궁금하다면? length(my_array) 함수를 사용해 보세요! 2x3x4 배열이니까 총 24개의 요소가 있다는 결과를 확인할 수 있을 거예요.

다양한 차원의 배열 이해하기

배열의 진짜 재미는 다양한 차원을 다룰 수 있다는 데 있어요. 1차원 배열은 벡터와 같고, 2차원 배열은 행렬과 같아요. 그럼 3차원, 4차원, 심지어 10차원 배열은 어떻게 상상해야 할까요? 🤔 사실 4차원 이상부터는 우리 머리로 시각적으로 표현하기가 쉽지 않아요. 하지만 개념적으로는 각 차원이 어떤 기준으로 데이터를 분류하는지 생각해 보면 이해하기 쉬워요.

예를 들어, 3차원 배열은 시간의 흐름에 따른 2차원 데이터의 변화를 나타낼 수 있어요. 4차원 배열은? 여기에 추가적인 기준, 예를 들어 여러 실험 그룹의 데이터를 더할 수 있겠죠? 이런 식으로 차원을 확장해가면서 더욱 복잡하고 다양한 데이터를 표현할 수 있답니다!

실용적인 배열 활용 예시

자, 이제 조금 더 실용적인 예시를 살펴볼까요? 가령, 여러분이 5개 도시의 3년간 월별 평균 기온 데이터를 가지고 있다고 해봅시다. 이 데이터는 어떻게 표현할 수 있을까요? 바로 5x12x3 배열을 사용하면 돼요! 도시, 월, 년 순서로 차원을 구성하면 데이터를 체계적으로 관리하고 분석할 수 있겠죠?!

배열 요소 접근하기

배열의 각 요소에 접근하는 방법도 알아두면 좋겠죠? my_array[1, 2, 3]처럼 대괄호 안에 각 차원의 인덱스를 콤마(,)로 구분하여 입력하면 해당 위치에 있는 요소 값을 가져올 수 있어요. 예를 들어, 위의 기온 데이터에서 서울의 2022년 1월 평균 기온을 알고 싶다면 (서울이 첫 번째 도시라고 가정하고, 년도 순서가 2021, 2022, 2023이라고 할 때), temperature_array[1, 1, 2]와 같이 접근할 수 있답니다.

배열의 일부분 추출하기

배열의 일부분만 추출하고 싶을 때는 어떻게 해야 할까요? 걱정 마세요! R은 아주 강력한 기능들을 제공하니까요! 예를 들어, temperature_array[1, , ]는 서울의 모든 월, 모든 년도의 평균 기온 데이터를 추출해요. temperature_array[, 1, ]는 모든 도시의 1월, 모든 년도의 평균 기온 데이터를 추출하고요. temperature_array[1:3, , 2]와 같이 범위를 지정할 수도 있고, temperature_array[c(1, 5), , ]처럼 특정 도시만 선택할 수도 있어요. 정말 편리하죠?

배열의 강력함과 유연성

배열은 행렬보다 복잡해 보일 수 있지만, 데이터를 다루는 데 있어서 훨씬 강력하고 유연한 도구예요. 다양한 차원을 활용하여 데이터를 구조화하고, R이 제공하는 다양한 함수들을 이용하여 원하는 정보를 손쉽게 추출하고 분석할 수 있답니다! 😊 이제 여러분도 R의 배열 마스터가 되어, 데이터 분석의 세계를 자유롭게 누비세요!

 

행렬과 배열의 활용 예시

자, 이제 드디어! R에서 행렬과 배열을 어떻게 활용하는지 알아볼 시간이에요. 사실 이 부분이 가장 재밌는 부분이기도 하죠! 마치 레고 블록을 가지고 멋진 작품을 만드는 것처럼 말이에요. ^^ 행렬과 배열은 데이터 분석, 머신 러닝, 이미지 처리 등 다양한 분야에서 활용되고 있어요. 정말 놀랍지 않나요? 그럼 구체적인 예시들을 함께 살펴보도록 해요!

1. 이미지 처리: 픽셀 조작의 마법!

혹시 디지털 이미지가 어떻게 구성되어 있는지 아시나요? 바로 픽셀(Pixel)이라는 작은 점들이 모여서 만들어진 거예요. 각 픽셀은 특정 색상 값을 가지고 있고, 이 값들을 행렬 형태로 저장하면 이미지를 표현할 수 있답니다! R에서는 jpeg, png 같은 패키지를 이용해서 이미지를 행렬 데이터로 불러올 수 있어요. 예를 들어, 256x256 크기의 컬러 이미지는 256x256x3 크기의 3차원 배열로 표현할 수 있죠. 3은 Red, Green, Blue (RGB) 색상 채널을 의미해요. 이렇게 이미지를 행렬/배열 데이터로 변환하면 밝기 조정, 필터 적용, 가장자리 검출 등 다양한 이미지 처리 작업을 수행할 수 있어요! 마치 마법 같죠? 행렬의 특정 원소 값을 변경하면 이미지의 특정 픽셀 색상을 바꿀 수도 있답니다.

2. 선형 회귀 분석: 데이터 속 관계 파악하기!

데이터 분석에서 가장 기본적이면서도 강력한 도구 중 하나가 바로 선형 회귀 분석이에요. 독립 변수와 종속 변수 사이의 선형 관계를 모델링하는 기법이죠. R에서는 lm() 함수를 이용해서 선형 회귀 분석을 수행할 수 있어요. 이때, 독립 변수와 종속 변수 데이터는 행렬 형태로 입력되고, lm() 함수는 최소 제곱법을 이용해서 회귀 계수를 계산해 줘요. 예를 들어, 집 크기, 위치, 건축 연도 등을 독립 변수로, 집값을 종속 변수로 설정하여 선형 회귀 모델을 만들 수 있어요. 이를 통해 집값에 영향을 미치는 요인들을 분석하고, 새로운 집의 가격을 예측할 수도 있죠!

3. 주성분 분석 (PCA): 고차원 데이터 단순화하기!

고차원 데이터를 분석하는 것은 꽤나 복잡한 작업이에요. 변수가 너무 많으면 데이터의 패턴을 파악하기 어렵고, 시각화하기도 힘들죠. ㅠㅠ 이럴 때 주성분 분석(PCA)이라는 기법을 사용하면 데이터의 차원을 줄여서 분석을 용이하게 할 수 있답니다! PCA는 데이터의 분산을 최대화하는 방향으로 새로운 축을 생성하고, 이 축들을 주성분(Principal Component)이라고 불러요. R에서는 prcomp() 함수를 이용해서 PCA를 수행할 수 있죠. 고차원 데이터를 행렬 형태로 입력하면, prcomp() 함수는 주성분과 각 주성분에 대한 데이터의 분산을 계산해 줘요. 이를 통해 데이터의 주요 특징을 파악하고, 노이즈를 제거하며, 시각화를 쉽게 할 수 있어요!

4. 추천 시스템: 취향 저격 아이템 찾기!

요즘 온라인 쇼핑몰이나 스트리밍 서비스에서 자주 볼 수 있는 추천 시스템! 사용자의 과거 구매 내역이나 평가 데이터를 기반으로 사용자가 좋아할 만한 아이템을 추천해 주는 시스템이죠. 행렬은 이러한 추천 시스템 구현에 핵심적인 역할을 해요. 사용자와 아이템 간의 관계를 나타내는 행렬을 생성하고, 이를 바탕으로 유사한 사용자를 찾거나 유사한 아이템을 추천할 수 있어요. 협업 필터링(Collaborative Filtering)이나 콘텐츠 기반 필터링(Content-based Filtering) 등 다양한 추천 알고리즘이 행렬 연산을 기반으로 하고 있답니다! R에서는 recommenderlab 패키지를 이용해서 다양한 추천 시스템을 구현할 수 있어요.

5. 마르코프 체인: 미래 상태 예측하기!

마르코프 체인은 현재 상태가 이전 상태에만 의존하는 확률적 모델이에요. 날씨 예측, 주가 예측, 웹 페이지 이동 예측 등 다양한 분야에서 활용되죠. 마르코프 체인은 상태 전이 확률을 나타내는 전이 행렬(Transition Matrix)로 표현할 수 있어요. 전이 행렬의 각 원소는 현재 상태에서 다음 상태로 전이할 확률을 나타내죠. R에서는 markovchain 패키지를 이용해서 마르코프 체인을 모델링하고 분석할 수 있답니다!

이 외에도 행렬과 배열은 수많은 분야에서 활용되고 있어요. 몬테카를로 시뮬레이션, 네트워크 분석, 유전 알고리즘 등등… 정말 무궁무진하죠?! R을 통해 행렬과 배열을 자유자재로 다룰 수 있다면 데이터 분석의 세계가 더욱 넓고 흥미롭게 펼쳐질 거예요! 앞으로도 R과 함께 다양한 활용법을 탐구해 보면 어떨까요?

 

R을 이용한 데이터 분석, 생각보다 어렵지 않죠? 마치 레고 블럭처럼, 행렬과 배열을 만들고 조합하며 원하는 결과를 만들어낼 수 있어요. 처음엔 조금 헷갈릴 수 있지만, 익숙해지면 정말 강력한 도구가 된답니다. 여러분도 이제 든든한 분석 도구를 손에 넣으셨으니, 더욱 흥미진진한 데이터 분석의 세계를 탐험해 보세요! 다음엔 더 재밌는 이야기로 함께해요. 분석 여정에 항상 응원할게요!

 


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다