매트릭스

강림·2023년 12월 10일
0

Data Analysis

목록 보기
3/13
post-thumbnail

1. 매트릭스

1. 매트릭스의 개념

  • 1차원 데이터 : ‘몸무게’ 데이터와 같은 단일 주제의 데이터 → 벡터
  • 2차원 데이터 : ‘키’, ‘몸무게’, ‘나이’ 와 같은 여러 주제의 데이터
    • → 매트릭스, 데이터프레임

  • 매트릭스(matrix): 데이터 테이블의 모든 셀의 값들이 동일한 자료형
  • 데이터프레임(data frame): 자료형이 다른 컬럼들로 구성

2. 매트릭스 만들기

2.1 기본적인 매트릭스 만들기

  • 2차원 테이블 형태의 자료 구조로, 매트릭스의 모든셀에 저장되는 값은 동일한 자료형이어야 함
z <- matrix(1:20, nrow=4, ncol=5)
z # 매트릭스 z의 내용을 출력

z <- matrix(1:20, nrow=4, ncol=5)
z
[,1][,2] [,3][,4] [,5][1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20

2.2 매트릭스에 저장될 값들을 행 방향으로 채우기

z2 <- matrix(1:20, nrow=4, ncol=5, byrow=T)
z2 # 매트릭스 z2의 내용을 출력

z2 <- matrix(1:20, nrow=4, ncol=5, byrow=T)
z2 # 매트릭스 z2의 내용을 출력
[,1][,2] [,3][,4] [,5][1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20

2.3 기존 매트릭스에 벡터를 추가하여 새로운 매트릭스 만들기

x <- 1:4 # 벡터 x 생성
y <- 5:8 # 벡터 y 생성
z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
m1 <- cbind(x,y) # x와 y를 열 방향으로 결합하여 매트릭스 생성
m1 # 매트릭스 m1의 내용을 출력
m2 <- rbind(x,y) # x와 y를 행 방향으로 결합하여 매트릭스 생성
m2 # 매트릭스 m2의 내용을 출력
m3 <- rbind(m2,x) # 매트릭스 m2와 벡터 x를 행 방향으로 결합
m3 # 매트릭스 m3의 내용을 출력
m4 <- cbind(z,x) # 매트릭스 z와 벡터 x를 열 방향으로 결합
m4 # 매트릭스 m4의 내용을 출력

x <- 1:4 # 벡터 x 생성
y <- 5:8 # 벡터 y 생성
z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
m1 <- cbind(x,y) # x와 y를 열 방향으로 결합하여 매트릭스 생성
m1 # 매트릭스 m1의 내용을 출력
x y
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
m2 <- rbind(x,y) # x와 y를 행 방향으로 결합하여 매트릭스 생성
m2 # 매트릭스 m2의 내용을 출력
[,1][,2] [,3][,4]
x 1 2 3 4
y 5 6 7 8
m3 <- rbind(m2,x) # 매트릭스 m2와 벡터 x를 행 방향으로 결합
m3 # 매트릭스 m3의 내용을 출력
[,1][,2] [,3][,4]
x 1 2 3 4
y 5 6 7 8
x 1 2 3 4
m4 <- cbind(z,x) # 매트릭스 z와 벡터 x를 열 방향으로 결합
m4 # 매트릭스 m4의 내용을 출력
x
[1,] 1 5 9 13 17 1
[2,] 2 6 10 14 18 2
[3,] 3 7 11 15 19 3
[4,] 4 8 12 16 20 4

3. 매트릭스에서의 값 추출

3.1 인덱스값을 이용하여 매트릭스에서의 값 추출하기

  • 매트릭스에서 특정 위치에 있는 값을 추출하는 방법은 벡터와 유사

  • 값들의 위치를 나타내는 인덱스를 사용하는데, 2차원상에서 위치를 지정하려면 2개 필요

z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
z # 매트릭스 z의 내용 출력
z[2,3] # 2행 3열에 있는 값
z[1,4] # 1행 4열에 있는 값
z[2,] # 2행에 있는 모든 값
z[,4] # 4열에 있는 모든 값

z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
z # 매트릭스 z의 내용 출력
[,1][,2] [,3][,4] [,5][1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
z[2,3] # 2행 3열에 있는 값
[1] 10
z[1,4] # 1행 4열에 있는 값
[1] 13
z[2,] # 2행에 있는 모든 값
[1] 2 6 10 14 18
z[,4] # 4열에 있는 모든 값
[1] 13 14 15 16

3.2 매트릭스에서 여러 개의 값을 동시에 추출하기

z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
z # 매트릭스 z의 내용 출력
z[2,1:3] # 2행의 값 중 1~3열에 있는 값
z[1,c(1,2,4)] # 1행의 값 중 1, 2, 4열에 있는 값
z[1:2,] # 1, 2행에 있는 모든 값
z[,c(1,4)] # 1, 4열에 있는 모든 값

z <- matrix(1:20, nrow=4, ncol=5) # 매트릭스 z 생성
z # 매트릭스 z의 내용 출력
[,1][,2] [,3][,4] [,5][1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
z[2,1:3] # 2행의 값 중 1~3열에 있는 값
[1] 2 6 10
z[1,c(1,2,4)] # 1행의 값 중 1, 2, 4열에 있는 값
[1] 1 5 13
z[1:2,] # 1, 2행에 있는 모든 값
[,1][,2] [,3][,4] [,5][1,] 1 5 9 13 17
[2,] 2 6 10 14 18
z[,c(1,4)] # 1, 4열에 있는 모든 값
[,1][,2]
[1,] 1 13
[2,] 2 14
[3,] 3 15
[4,] 4 16

4. 매트릭스의 행과 열에 이름 지정

4.1 매트릭스의 행과 열에 이름을 지정하는 방법

score <- matrix(c(90,85,69,78, 
 85,96,49,95, 
 90,80,70,60), 
 nrow=4, ncol=3) 
score 
rownames(score) <- c('John','Tom','Mark','Jane’) 
colnames(score) <- c('English','Math','Science’) 
score

score <- matrix(c(90,85,69,78,

  •               85,96,49,95, 
  •               90,80,70,60), 
  •             nrow=4, ncol=3) 
    score
    [,1][,2] [,3][1,] 90 85 90
    [2,] 85 96 80
    [3,] 69 49 70
    [4,] 78 95 60
    rownames(score) <- c('John','Tom','Mark','Jane')
    colnames(score) <- c('English','Math','Science')
    score
    English Math Science
    John 90 85 90
    Tom 85 96 80
    Mark 69 49 70
    Jane 78 95 60

4.2 행과 열에 지정한 이름을 이용하여 매트릭스값 추출하기


score['John','Math'] # John의 수학 성적
score['Tom',c('Math','Science')] # Tom의 수학, 과학 성적
score['Mark',] # Mark의 모든 과목 성적
score[,'English'] # 모든 학생의 영어 성적
rownames(score) # score의 행의 이름
colnames(score) # score의 열의 이름
colnames(score)[2] # score의 열의 이름 중 두 번째 값

score['John','Math'] # John의 수학 성적
[1] 85
score['Tom',c('Math','Science')] # Tom의 수학, 과학 성적
Math Science
96 80
score['Mark',] # Mark의 모든 과목 성적
English Math Science
69 49 70
score[,'English'] # 모든 학생의 영어 성적
John Tom Mark Jane
90 85 69 78
rownames(score) # score의 행의 이름
[1] "John" "Tom" "Mark" "Jane"
colnames(score) # score의 열의 이름
[1] "English" "Math" "Science"
colnames(score)[2] # score의 열의 이름 중 두 번째 값
[1] "Math"

2. 데이터프레임

1. 데이터프레임의 개념

  • 숫자형 벡터, 문자형 벡터 등 서로 다른 형태의 데이터를 2차원 데이터 테이블 형태로 묶을 수 있는 자료구조
  • 외관상으로는 매트릭스와 차이가 없지만 매트릭스에 저장되는 모든 값들이 동일한 자료형인 것과는 달리 데이터프레임에는 서로 다른 자료형의 값들이 함께 저장

2. 데이터프레임 만들기

city <- c("Seoul","Tokyo","Washington") # 문자로 이루어진 벡터
rank <- c(1,3,2) # 숫자로 이루어진 벡터
city.info <- data.frame(city, rank) # 데이터프레임 생성
city.info # city.info의 내용 출력

city <- c("Seoul","Tokyo","Washington") # 문자로 이루어진 벡터
rank <- c(1,3,2) # 숫자로 이루어진 벡터
city.info <- data.frame(city, rank) # 데이터프레임 생성
city.info # city.info의 내용 출력
city rank
1 Seoul 1
2 Tokyo 3
3 Washington 2

  • 데이터프레임은 여려 개의 벡터를 세로 방향으로 묶어 놓은 개념

3. iris 데이터셋

  • R에서 제공하는 실습용 데이터셋 중의 하나로 데이터프레임으로 되어 있음
  • 150 그루의 붓꽃에 대해 4개 분야의 측정 데이터와 품종 정보를 결합하여 만든 데이터셋

iris[,c(1:2)] # 1, 2열의 모든 데이터
iris[,c(1,3,5)] # 1, 3, 5열의 모든 데이터
iris[,c("Sepal.Length","Species")] # 1, 5열의 모든 데이터
iris[1:5,] # 1~5행의 모든 데이터
iris[1:5,c(1,3)] # 1~5행의 데이터 중 1, 3열의 데이터

3. 매트릭스와 데이터프레임 다루기

1. 데이터셋의 기본 정보 확인

1.1 iris 데이터셋의 기본 내용 확인하기

  • 매트릭스와 데이터프레임은 모두 2차원 형태의 데이터를 저장하는 자료구조이기 때문에 다루는 방법이 대부분 동일
  • 데이터프레임인 iris 데이터셋을 대상로 학습을 하지만 여기서 배우는 내용은 매트릭스에도 동일하게 적용
dim(iris) # 행과 열의 개수 출력
nrow(iris) # 행의 개수 출력
ncol(iris) # 열의 개수 출력
colnames(iris) # 열 이름 출력, names( )와 결과 동일
head(iris) # 데이터셋의 앞부분 일부 출력
tail(iris) # 데이터셋의 뒷부분 일부 출력

dim(iris) # 행과 열의 개수 출력
[1] 150 5
nrow(iris) # 행의 개수 출력
[1] 150
ncol(iris) # 열의 개수 출력
[1] 5
colnames(iris) # 열 이름 출력, names( )와 결과 동일
[1] "Sepal.Length" "Sepal.Width" "Petal.Length"
[4] "Petal.Width" "Species"
head(iris) # 데이터셋의 앞부분 일부 출력
Sepal.Length Sepal.Width Petal.Length
1 5.1 3.5 1.4
2 4.9 3.0 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
5 5.0 3.6 1.4
6 5.4 3.9 1.7
Petal.Width Species
1 0.2 setosa
2 0.2 setosa
3 0.2 setosa
4 0.2 setosa
5 0.2 setosa
6 0.4 setosa
tail(iris) # 데이터셋의 뒷부분 일부 출력
Sepal.Length Sepal.Width Petal.Length
145 6.7 3.3 5.7
146 6.7 3.0 5.2
147 6.3 2.5 5.0
148 6.5 3.0 5.2
149 6.2 3.4 5.4
150 5.9 3.0 5.1
Petal.Width Species
145 2.5 virginica
146 2.3 virginica
147 1.9 virginica
148 2.0 virginica
149 2.3 virginica
150 1.8 virginica

1.2 iris 데이터셋의 추가적인 내용 확인하기

str(iris) # 데이터셋 요약 정보 보기
iris[,5] # 품종 데이터 보기
unique(iris[,5]) # 품종의 종류 보기(중복 제거) 
table(iris[,"Species"]) # 품종의 종류별 행의 개수 세기

2. 매트릭스와 데이터프레임에서 사용하는 함수

2.1 행별, 열별 합계와 평균 계산

colSums(iris[,-5]) # 열별 합계
colMeans(iris[,-5]) # 열별 평균
rowSums(iris[,-5]) # 행별 합계
rowMeans(iris[,-5]) # 행별 평균

2.3 행과 열의 방향 전환

z <- matrix(1:20, nrow=4, ncol=5)
z
t(z) # 행과열 방향 전환

z <- matrix(1:20, nrow=4, ncol=5)
z
[,1][,2] [,3][,4] [,5][1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
t(z) # 행과열 방향 전환
[,1][,2] [,3][,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20

2.4 조건에 맞는 행과 열의 값 추출

IR.1 <- subset(iris, Species=="setosa") 
IR.1 
IR.2 <- subset(iris, Sepal.Length>5.0 & 
Sepal.Width>4.0) 
IR.2 
IR.2[, c(2,4)] # 2, 4열의 값만 추출

2.5 매트릭스와 데이터프레임에 산술연산

a <- matrix(1:20,4,5) 
b <- matrix(21:40,4,5) 
a 
b 
2*a # 매트릭스 a에 저장된 값들에 2를 곱하기
b-5 
2*a + 3*b 
a+b 
b-a 
b/a 
a*b 
a <- a*3 
b <- b-5

a <- matrix(1:20,4,5)
b <- matrix(21:40,4,5)
a
[,1][,2] [,3][,4] [,5][1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
b
[,1][,2] [,3][,4] [,5][1,] 21 25 29 33 37
[2,] 22 26 30 34 38
[3,] 23 27 31 35 39
[4,] 24 28 32 36 40
2a # 매트릭스 a에 저장된 값들에 2를 곱하기
[,1][,2] [,3][,4] [,5][1,] 2 10 18 26 34
[2,] 4 12 20 28 36
[3,] 6 14 22 30 38
[4,] 8 16 24 32 40
b-5
[,1][,2] [,3][,4] [,5][1,] 16 20 24 28 32
[2,] 17 21 25 29 33
[3,] 18 22 26 30 34
[4,] 19 23 27 31 35
2
a + 3b
[,1][,2] [,3][,4] [,5][1,] 65 85 105 125 145
[2,] 70 90 110 130 150
[3,] 75 95 115 135 155
[4,] 80 100 120 140 160
a+b
[,1][,2] [,3][,4] [,5][1,] 22 30 38 46 54
[2,] 24 32 40 48 56
[3,] 26 34 42 50 58
[4,] 28 36 44 52 60
b-a
[,1][,2] [,3][,4] [,5][1,] 20 20 20 20 20
[2,] 20 20 20 20 20
[3,] 20 20 20 20 20
[4,] 20 20 20 20 20
b/a
[,1][,2] [,3][,4]
[1,] 21.000000 5.000000 3.222222 2.538462
[2,] 11.000000 4.333333 3.000000 2.428571
[3,] 7.666667 3.857143 2.818182 2.333333
[4,] 6.000000 3.500000 2.666667 2.250000
[,5][1,] 2.176471
[2,] 2.111111
[3,] 2.052632
[4,] 2.000000
a
b
[,1][,2] [,3][,4] [,5][1,] 21 125 261 429 629
[2,] 44 156 300 476 684
[3,] 69 189 341 525 741
[4,] 96 224 384 576 800
a <- a*3
b <- b-5

3. 매트릭스와 데이터프레임의 자료구조 확인

3.1 매트릭스와 데이터프레임의 자료구조 확인

class(iris) # iris 데이터셋의 자료구조 확인
class(state.x77) # state.x77 데이터셋의 자료구조 확인
is.matrix(iris) # 데이터셋이 매트릭스인지를 확인하는 함수
is.data.frame(iris) # 데이터셋이 데이터프레임인지를 확인하는 함수
is.matrix(state.x77) 
is.data.frame(state.x77)

class(iris) # iris 데이터셋의 자료구조 확인
[1] "data.frame"
class(state.x77) # state.x77 데이터셋의 자료구조 확인
[1] "matrix" "array"
is.matrix(iris) # 데이터셋이 매트릭스인지를 확인하는 함수
[1] FALSE
is.data.frame(iris) # 데이터셋이 데이터프레임인지를 확인하는 함수
[1] TRUE
is.matrix(state.x77)
[1] TRUE
is.data.frame(state.x77)
[1] FALSE

  • state.x77의 자료구조는 배열(array)중에서 2차원 배열인 매트릭스(matrix)이다

3.2 매트릭스와 데이터프레임의 자료구조 변환

# 매트릭스를 데이터프레임으로 변환
st <- data.frame(state.x77) 
head(st) 
class(st) 
# 데이터프레임을 매트릭스로 변환
iris.m <- as.matrix(iris[,1:4]) 
head(iris.m) 
class(iris.m)

매트릭스를 데이터프레임으로 변환

st <- data.frame(state.x77)
head(st)
Population Income Illiteracy
Alabama 3615 3624 2.1
Alaska 365 6315 1.5
Arizona 2212 4530 1.8
Arkansas 2110 3378 1.9
California 21198 5114 1.1
Colorado 2541 4884 0.7
Life.Exp Murder HS.Grad Frost
Alabama 69.05 15.1 41.3 20
Alaska 69.31 11.3 66.7 152
Arizona 70.55 7.8 58.1 15
Arkansas 70.66 10.1 39.9 65
California 71.71 10.3 62.6 20
Colorado 72.06 6.8 63.9 166
Area
Alabama 50708
Alaska 566432
Arizona 113417
Arkansas 51945
California 156361
Colorado 103766
class(st)
[1] "data.frame"

데이터프레임을 매트릭스로 변환

iris.m <- as.matrix(iris[,1:4])
head(iris.m)
Sepal.Length Sepal.Width Petal.Length
[1,] 5.1 3.5 1.4
[2,] 4.9 3.0 1.4
[3,] 4.7 3.2 1.3
[4,] 4.6 3.1 1.5
[5,] 5.0 3.6 1.4
[6,] 5.4 3.9 1.7
Petal.Width
[1,] 0.2
[2,] 0.2
[3,] 0.2
[4,] 0.2
[5,] 0.2
[6,] 0.4
class(iris.m)
[1] "matrix" "array"

4. 데이터프레임의 열 추출

iris[,"Species"] # 결과=벡터. 매트릭스와 데이터프레임 모두 가능
iris[,5] # 결과=벡터. 매트릭스와 데이터프레임 모두 가능
iris["Species"] # 결과=데이터프레임. 데이터프레임만 가능
iris[5] # 결과=데이터프레임. 데이터프레임만 가능
iris$Species # 결과=벡터. 데이터프레임만 가능
profile
DRUDGER

0개의 댓글