[Fast campus] Data Science with R 1기 - 이부일 강사님

공부하면서 배운 내용 복습 겸 정리하는 곳입니다.


외부 데이터 : txt, csv, excel(xls, xlsx) 


1. 텍스트 데이터 : txt

  (1) 구분자(Separator) : 공백 하나(blank, white space)

1
2
3
데이터명 = read.table(file  = "파일위치/파일명.txt",
                     header = TRUE,
                     sep    = " "
cs


  (2) 구분자(Separator) : comma(,)

1
2
3
데이터명 = read.table(file   = "파일위치/파일명.txt",
                     header = TRUE,
                     sep    = ","
cs


  (3) 구분자(Separator) : 탭(tab)

1
2
3
데이터명 = read.table(file   = "파일위치/파일명.txt",
                     header = TRUE,
                     sep    = "\t"
cs



2. CSV(Comma Separated Value)

# 엑셀의 특수한 형태

1
2
3
데이터명 = read.table(file   = "파일위치/파일명.txt",
                     header = TRUE,
                     sep    = "\t"
cs


3. 엑셀 : xls, xlsx

# R의 기본 기능에서는 못 읽어 옴

# 추가 기능(패키지(Package))을 설치 - install.packages("패키지명")

# 패키지 로딩하기, 구동하기 - library(패키지명)

1
2
3
4
5
6
> install.packages("readxl")
package ‘readxl’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\JungChul\AppData\Local\Temp\RtmpG8Gy4u\downloaded_packages
> library(readxl)
cs

  # 패키지 설치 명령어 후 successfully 메시지가 나오면 설치 완료

  # 패키지는 항상 코드 가장 위( 다른 pc에서 실행 할 수도 있으니 install.packages명령어도 같이 적어두기 )

  # 패키지 내 함수를 사용할 때는 '패키지명::함수' 형태로 사용하자

1
2
3
데이터명 = readxl::read_excel(path="파일위치/파일명.xlsx",
                             sheet=index or "시트명",
                             col_names=TRUE)
cs


[Fast campus] Data Science with R 1기 - 이부일 강사님

공부하면서 배운 내용 복습 겸 정리하는 곳입니다.


IV. 배열(Array)
  # 다차원
  # vector, 행렬의 확장
  # 벡터의 특징( Recycling Rule, Vectorization ) 그대로 적용됨
  # array(vector, dim=)
1
2
> array(1:10, dim=10)
 [1]  1  2  3  4  5  6  7  8  9 10
cs
  # dim에 1개의 숫자
  # 1차원 형태를 지닌 벡터의 결과

1
2
3
4
5
> array(1:10, dim=3:4)
     [,1[,2[,3[,4]
[1,]    1    4    7   10
[2,]    2    5    8    1
[3,]    3    6    9    2
cs
  # dim에 3,4 => 2개의 숫자
  # 2차원 형태를 지닌 행렬의 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> array(1:10, dim=c(3,4,2))
, , 1
 
     [,1[,2[,3[,4]
[1,]    1    4    7   10
[2,]    2    5    8    1
[3,]    3    6    9    2
 
, , 2
 
     [,1[,2[,3[,4]
[1,]    3    6    9    2
[2,]    4    7   10    3
[3,]    5    8    1    4
cs
  # dim에 숫자 3,4,2 => 3개의 숫자
  # 3행 4열 2높이 => 3차원


V. 데이터 프레임(Data.Frame)
  # 행, 열로 구성. 2차원
  # 여러 개의 데이터 유형을 가질 수 있음 
  # 단, 하나의 열은 하나의 데이터 유형만 가짐 
  # data.frame(벡터1, 벡터2, 행렬, ...)
1
2
3
4
5
6
7
8
9
10
11
> id = 1:5
> gender = c("m""m""m""f""m")
> address = c("구파발""강동""압구정""수원""용인")
> survey = data.frame(id, gender, address)
> survey
  id gender address
1  1      m  구파발
2  2      m    강동
3  3      m  압구정
4  4      f    수원
5  5      m    용인
cs


VI. 리스트(List)
  # 분석한 결과를 저장할 때에 많이 사용하는 형태
  # 가장 유연한 데이터 형태
  # 리스트의 원소로 vector, factor, matrix, array, data.frame, list를 가질 수 있다.
  # list(vector, factor, matrix, array, data.frame, list, ...)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
> v1 = 1:10
> v2 = 1:3
> v3 = c("ch""nu""lo")
> v4 = c(TRUEFALSE)
> m1 = cbind(v1, v2)
> result = list(v1, v2, v3, v4, m1, survey)
> result
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10
 
[[2]]
[11 2 3
 
[[3]]
[1"ch" "nu" "lo"
 
[[4]]
[1]  TRUE FALSE
 
[[5]]
      v1 v2
 [1,]  1  1
 [2,]  2  2
 [3,]  3  3
 [4,]  4  1
 [5,]  5  2
 [6,]  6  3
 [7,]  7  1
 [8,]  8  2
 [9,]  9  3
[10,] 10  1
 
[[6]]
  id gender address
1  1      m  구파발
2  2      m    강동
3  3      m  압구정
4  4      f    수원
5  5      m    용인
 
cs

  리스트의 슬라이싱
  # 리스트의 슬라이싱은 [ ] , [[ ]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> a1 = result[1]
> a2 = result[[1]]
> a1
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10
 
> a2
 [1]  1  2  3  4  5  6  7  8  9 10
 
> b1 = result[4]
> b2 = result[[4]]
> b1
[[1]]
[1]  TRUE FALSE
 
> b2
[1]  TRUE FALSE
cs

  # 대괄호 1개 사용 : 결과는 list

  # 대괄호 2개 사용 : numeric, character, logical, list로 나타남.

 


[Fast campus] Data Science with R 1기 - 이부일 강사님

공부하면서 배운 내용 복습 겸 정리하는 곳입니다.


II. 요인(Factor)

  # 벡터의 일종

  # 차이점 : 집단(group)으로 인식함

  # 1차원 - 하나의 열로 구성

  # 벡터는 집단으로 인식하지 않음

  # factor(vector, labels=, levels=, ordered=) 


  bt(blood type) 예제

1
2
3
> bt = c("ab""ab""a""a""b")
> bt
[1"ab" "ab" "a"  "a"  "b"
cs


  bt를 factor로 바꿔보자

1
2
3
4
> bt_factor <- factor(bt)
> bt_factor
[1] ab ab a  a  b 
Levels: a ab b
cs

  # Levels : a ab b => 3개의 집단(a, ab, b)으로 인식함    


  bt_factor2 - labels

1
2
3
4
5
> bt_factor2 <- factor(bt, 
                       labels = c("A형","AB형","B형"))
> bt_factor2
[1] AB형 AB형 A형  A형  B형 
Levels: A형 AB형 B형
cs

  # labels : 데이터 값과 결과가 바뀜


  bt_factor3 - levels

1
2
3
4
5
> bt_factor3 <- factor(bt,
                       levels = c("b","ab","a"))
> bt_factor3
[1] ab ab a  a  b 
Levels: b ab a
cs

  # levels : 집단의 순서 - 데이터 자체는 바뀌지 않지만 b, ab, a 순으로 Levels이 바뀌게 됨


  bt_factor4 - labels, levels

1
2
3
4
5
6
> bt_factor4 <- factor(bt,
+                      levels = c("b","ab","a"),
+                      labels = c("B형","AB형","A형"))
> bt_factor4
[1] AB형 AB형 A형  A형  B형 
Levels: B형 AB형 A형
cs

  # 2개의 argument 같이 사용할 시 labels의 값들은 levels에 대응되도록 사용해야 한다


  bt_factor5

1
2
3
4
5
6
7
> bt_factor5 <- factor(bt, 
+                      levels  = c("b","ab","a")
+                      labels  = c("A형","AB형","B형"),
+                      ordered = TRUE)
> bt_factor5
[1] AB형 AB형 B형  B형  A형 
Levels: A형 < AB형 < B형
cs

  # ordered : 특정한 결과값을 의미있게 구분할 때 사용 => 부등호가 나타남


 factor의 속성

  (1) levels(요인)

1
2
> levels(bt_factor)
[1"a"  "ab" "b" 
cs

  (2) ordered(요인)

# 집단의 순서가 의미 있도록 변경

1
2
3
> ordered(bt_factor)
[1] ab ab a  a  b 
Levels: a < ab < b
cs

# bt_factor의 속성을 ordered=TRUE로 만들어 주겠다는 것



III. 행렬(Matrix)

  # 행(row)와 열(column)로 구성되어 있음

  # 2차원 (행, 열)

  # 벡터의 확장 -> 1차원에서 2차원으로

  # 벡터의 규칙이 대부분 적용( Recycling Rule, Vectorization )


  1. 행렬을 만드는 방법

(1) rbind(벡터1, 벡터2, ...)  /  cbind(벡터1, 벡터2, ...)

1
2
3
4
5
6
7
> v1 = 1:3
> v2 = 4:6
> M1 = rbind(v1, v2)
> M1
   [,1[,2[,3]
v1    1    2    3
v2    4    5    6
cs

# rbind : row를 기준으로 벡터를 결합하여 생성

# cbind : column을 기준으로 벡터를 결합하여 생성


(2) matrix(vector, nrow=, ncol=, byrow=)

1
2
3
4
> matrix(1:4, nrow=2, ncol=2)
     [,1[,2]
[1,]    1    3
[2,]    2    4
cs

# R에서 행렬은 열(column)이 우선으로 채워진다.


1
2
3
4
> matrix(1:4, nrow=2, ncol=2, byrow=TRUE)
     [,1[,2]
[1,]    1    2
[2,]    3    4
cs

# byrow = TRUE는 행(row)을 우선으로 행렬을 채우는 것



  2. 행렬의 슬라이싱

     # 행렬[ 행index, 열index ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
> M3
     [,1[,2]
[1,]    1    2
[2,]    3    4
 
> M3[1]    # 1행
[11 2
 
> M3[2]    # 2행
[13 4
 
> M3[1:2]  #1,2행 
     [,1[,2]
[1,]    1    2
[2,]    3    4
 
> M3[ ,1 ]    # 2열
[11 3
 
> M3[ ,1:2 ]  # 1,2열
     [,1[,2]
[1,]    1    2
[2,]    3    4
 
> M3[1,2]   # 1행, 2열
[12
 
cs

  


3. 행렬의 덧셈과 뺄셈

# 형태(shape)가 동일해야 한다. 

# 2x3 은 2x3 끼리만 연산 가능

1
2
3
4
5
6
7
8
9
10
11
12
> A <- matrix(1:4, nrow=2, ncol=2)
> B <- matrix(5:8, nrow=2, ncol=2)
 
> A + B
     [,1[,2]
[1,]    6   10
[2,]    8   12
 
> A - B
     [,1[,2]
[1,]   -4   -4
[2,]   -4   -4
cs


# A*B -> 행렬의 곱셈? 

1
2
3
4
> A * B
     [,1[,2]
[1,]    5   21
[2,]   12   32
cs

# A*B는 단순히 index가 같은 값 끼리 연산하는 것으로 행렬의 곱셈은 아니다.


  4. 행렬의 곱셈

# A_r1,c1 %*% B_r2,c2

# 조건 : c1 = r2 -> 곱하고자 하는 A의 열과 B의 행의 개수가 같아야 한다.

# 최종 결과는 r1xc2 matrix

1
2
3
4
5
6
> A = matrix(1:4, nrow=2, ncol=2)
> B = matrix(5:8, nrow=2, ncol=2)
> A %*% B
     [,1[,2]
[1,]   23   31
[2,]   34   46
cs



  5. 역행렬(Reverse Matrix)

# 조건 1 : 정방행렬(Square Matrix) - 행과 열의 개수가 같음

# 조건 2 : 행렬식이 0이 아니어야 함

ex) 

A( a11, a12

    a21, a22)

# 조건 1 : 2x2 행렬

# 조건 2 : (a11 x a22) - (a12 x a21) != 0

# 조건 2가지가 성립하므로 역행렬 결과는

A( a22, -a12

    -a21, a11)

# 위의 결과에 1/(a11 x a22) - (a12 x a21) 을 곱해줌

# solve() 함수를 사용하여 역행렬을 구함 

1
2
3
4
5
6
7
8
9
10
11
> A1 = matrix(1:4, nrow=2, ncol=2)
> A1
     [,1[,2]
[1,]    1    3
[2,]    2    4
 
> A2 = solve(A1)
> A2
     [,1[,2]
[1,]   -2  1.5
[2,]    1 -0.5
cs


# A1과 A2(A1의 역행렬)을 곱하면 단위행렬이 나옴

1
2
3
4
> A1 %*% A2
     [,1[,2]
[1,]    1    0
[2,]    0    1
cs


# 방정식 계산

2x + y = 3

-x + 3y = 10

1
2
3
4
5
6
> B1 = matrix(c(21-13), nrow=2, ncol=2)
> B2 = matrix(c(310), nrow=2, ncol=1)
> solve(B1) %*% B2
         [,1]
[1,] 2.714286
[2,] 2.428571
cs

 


  6. 전치행렬(Transpose Matrix)

# 행과 열을 바꿈

# t(행렬)

1
2
3
4
5
6
7
8
9
> A
     [,1[,2]
[1,]    1    3
[2,]    2    4
 
> t(A)
     [,1[,2]
[1,]    1    2
[2,]    3    4
cs


+ Recent posts