본문 바로가기
취미/자격증

[데이터분석 전문가/준전문가] 과목 4 - 1장 - R 기초와 데이터 마트 1

by Physics 2020. 11. 20.
728x90

제 1절 R 기초


1. 분석환경의 이해

가. R의 특징

• 그래픽 처리
• 데이터 처리 및 계산 능력 
• 패키지

라. R 언어와 문법

1) R의 데이터 구조: 벡터, 행렬, 데이터 프레임 

(a) 벡터 
• 벡터 데이터 구조는 하나의 스칼라값, 혹은 하나 이상의 스칼라 원소들을 갖는 단순한 형태의 집합 
• 벡터 데이터에 들어갈 수 있는 데이터 타입: 숫자, 문자, 논리 연산자 
   - 벡터 데이터에 숫자만 있는 경우: 숫자형 벡터 
   - 벡터 데이터에 문자만 있는 경우: 문자형 벡터 
   - 벡터 데이터에 논리 연산자만 있는 경우: 논리 연산자 벡터 
   - 문자형벡터와 숫자형 벡터가 결합이 될 경우, 합쳐진 벡터는 문자형 벡터가 된다. 
• R에서 다루는 구조 중에서 가장 단순한 형태이며, c*를 이용하여 선언가능 
• 기본적으로 R에서 벡터를 생성할 때에는 열백터가 만들어진다.  
 *c : connection 

※ 행렬과 벡터의 원소들은 모두 동일한 데이터 타입을 가져야만 한다. 만약, 원소 중에 문자열 데이터가 있다면, 나머지 모든 원소들도 문자열 데이터로 변환된다. 
※ R은 대문자와 소문자를 구문하여 인식함 

※ 값의 할당: =, <- 

> x <- c(1,10,24,40)
> y = c("apple", "banana", "orange")
> z = c(TRUE, FALSE, FALSE)

 

(b) 행렬 
• 행렬: 행과 열을 갖는 mxn 형태의 직사각형에 데이터를 나열한 데이터 구조 
• 행렬의 선언: 명령어 matrix 
   - 첫번째 인수: 행렬에 들어가는 데이터들을 묶어놓은 벡터가 할당 
   - 두번째 인수: ncol/nrow 
     (1) ncol : 열의 수를 지정 (defalut) 
     (2) nrow: 행의 수를 지정  
   - 기본적으로 값들은 열을 우선 채우는 방향으로 입력이 됨
   - 만약 행을 우선 채우는 방향을 원할 경우, byrow=T 옵션을 추가함 

> mx = matrix(c(1,2,3,4,5,6), ncol=2)
> mx 
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6


rbind, cbind 명령어

    

(c) 데이터 프레임
• 데이터 프레임:
    - 행렬과 유사한 2차원 목록 데이터 구조 

    - 다루기 쉽고 한번에 많은 정보를 담을 수 있어서 R에서 가장 널리 사용됨 
    - 행렬과 다르게 각 열이 서로 다른 데이터 타입을 가질 수 있음 
    - data, frame을 이용하면 여러 개의 벡터를 하나의 데이터 프레임으로 합쳐 입력할 수 있음 

> income = c(100, 200, 150, 300, 900)                 # 숫자형 벡터
> car = c("kia", "hyundai", "kai", "toyota", "lexus") # 문자형 벡터
> marriage = c(FALSE, FALSE, FALSE, TRUE, TURE)       # 논리형 벡터
> mydat = data.frame(income, car, marriage)           # 데이터 프레임으로 합치기 
> mydat
  income     car marriage
1    100     kia    FALSE
2    200 hyundai    FALSE
3    150     kai    FALSE
4    300  toyota     TRUE
5    900   lexus     TRUE

 

2) 외부 데이터 불러오기: csv, txt, xls/xlsx 파일

(a) CSV 파일 불러오기 
read.table 명령어를 사용하면 csv 파일을 불러올 수 있음 
   - 옵션1) header=T : csv 파일의 첫 줄을 변수명으로 지정 
   - 옵션2) sep=',' : 데이터가 쉽표로 구분된 데이터 파일임을 지정 
   ※ read.table 명령어를 이용할 때에는 파일 경로에 \가 아닌 \\를 사용해야 함. 
read.csv 명령어
• 예시

data <- read.table("D\\DATA\\example.csv", header=T, sep=",")

 

3) R의 기초 함수

(1) 수열 생성하기 
rep(a, b) 함수: 첫 번째 인수를 두 번째 인수만큼 반복하는 숫자 벡터를 생성

> rep(1,3)
[1] 1 1 1

 

seq() 함수
  - 아무런 옵션이 없는 경우, 첫 번째 인수부터 두 번째 인수까지 1씩 증가하는 수열을 생성 
  - 옵션 1) by=n : 첫 번째 인수부터 두 번째 인수까지 n씩 증가하는 수열을 생성 
  - 옵션 2) length=m : 전체의 수열의 갯수가 m개가 되도록 자동적으로 증가하는 수열 생성 
  ※ seq(a,b) 명령어는 간단하게 a:b로 쓸 수 있음

# 간단한 seq의 예
> seq(1,3)      
[1] 1 2 3
# seq를 간단히 쓸 때
> 1:3               
[1] 1 2 3
# seq의 옵션인 by의 예시
> seq(1,11, by = 2)
[1]  1  3  5  7  9 11
# seq의 옵션인 length의 예시
> seq(1,11, length=11)
 [1]  1  2  3  4  5  6  7  8  9 10 11

 

(2) 기초적인 수치 계산 
• R에서는 기본적으로 벡터와 벡터 간 사칙연산이 가능하며, 이때 반드시 벡터 간의 길이는 동일해야한다. 
간단한 행렬과 관련된 연산들 
   - t(matrix): matrix의 전치행렬을 계산함 
   - %*%: 두 행렬간 행렬곱을 실시 
   - * : 단순한 스칼라곱 
   - solve(matrix) : matrix의 역행렬을 계산 
• 통계처리와 관련된 함수들 
   - mean(list) : 입력한 벡터의 평균값 계산 
   - var(list) : 입력한 백터의 분산 계산 
   - sd(list) : 입력한 백터의 표준편차 계산 
   - sum(list) : 입력한 벡터터들의 합 계산 
   - median(list) : 입력한 백터들의 중앙값 계산 
   - cov(list1, list2) : 서로 다른 두 벡터에 대한 공분산 계산 
   - cor(list1, list2) : 서로 다른 두 벡터에 대한 상관계수 계산 
   - summary(list) : 주어진 벡터에 대해 각 사분위수와 최소값, 최대값, 평균값을 계산함  

4) 데이터 핸들링
<vector>[n] : 벡터 데이터 내에서 앞에서 n번째 원소에 해당하는 값을 추출 
<vector>[-n] : 벡터 데이터 내에서 n번째 원소만 제외한 나머지 원소들을 추출
<vector>[n1, n2] : 벡터 데이터 내에서 n1번째와 n2번째 원소에 해당하는 값을 추출  
<matrix>[m,n] : 행렬 데이터 내에서 m행 n열에 존재하는 원소를 추출 
<matrix>[m,] : 행렬 데이터 내에서 m행 데이터를 모두 추출
<matrix>[,n] : 행렬 데이터 내에서 n열 데이터를 모두 추출

<matrix>[-m,] : 행렬 데이터 내에서 m행을 제외한 나머지 데이터를 추출 
<matrix>[,-n] : 행렬 데이터 내에서 n열을 제외한 나머지 데이터를 추출 

5) 반복 구문과 조건문

6) 사용자 정의 함수

7) 반복 구문과 조건문
paste

    - 입력받은 문자열을 하나로 붙여줌 
    - sep= 옵션을 통해 붙이고자 하는 문자열들 사이에 구분자를 삽입시킬 수 있음 

> numeric=1:10
> alphabet=c("a","b","c")
> paste(numeric, alphabet)
 [1] "1 a"  "2 b"  "3 c"  "4 a"  "5 b"  "6 c"  "7 a"  "8 b"  "9 c"  "10 a"
> paste(numeric, alphabet, sep=" to the ")
 [1] "1 to the a"  "2 to the b"  "3 to the c"  "4 to the a"  "5 to the b"  "6 to the c"  "7 to the a"  "8 to the b" 
 [9] "9 to the c"  "10 to the a"

•substr
  - 주어진 문자열에서 특정 문자열을 추출하는 기능 
  - 복잡하거나 길게 추출되는 결과를 간소하게 줄일 수 있음 
  - 데이터셋을 일정한 규격으로 정제하는데에 유용하게 사용할 수 있음 

> substr("1234567890",1,4)
[1] "1234"
> contry=c("Korea", "Japan", "China", "Singapore","Russia")
> substr(contry,1,3)
[1] "Kor" "Jap" "Chi" "Sin" "Rus"

• 자료형 데이터 구조 변환
※R에서의 객체의 데이터 형태: 문자형 변수, 실수형 변수, 논리 연산자, Factor, 데이터 프레임  
- 아래의 명령어를 통해 주어진 객체의 데이터 형태를 변환할 수 있음 
- as.data.frame(x) : 데이터 프레임 형식으로 변환 
- as.list(x): 리스트 형식으로 변환 
- as.matrix(x): 행렬 형식으로 변환 
- as.vector(x): 벡터 형식으로 변환 
- as.factor(x): Factor 형식으로 변환
- as.integer(x) : 실수 x를  정수형 데이터로 변환 
- as.numeric(x) : 주어진 문자형 데이터를 수치형 벡터로 변환
    (a) 만약, 문자와 같이 숫자로 변환할 수 없는 경우, NA가 뜸
    (b) 논리형 데이터를 수치형으로 변환하는 경우, FALSE → 0 그리고 TRUE → 1 
- as.character(x) : 주어진 데이터를  문자형 데이터로 변환하는 경우 
- as.logical(x): 주어진 데이터를 논리형 데이터로 변환 
   (a) 0인 경우에만 FALSE를 반환 
   (b) 그 이외의 모든 경우에 대해서는 TRUE로 반환 

•문자열을 날짜로 변환 
- 문자열을 날짜로 변환하는 함수는 크게 2가지로 나누어진다: Sys.Date(), as.Date() 
- Sys.Date() : 현재 날짜로 반환 
- as.Date() : 날짜 객체로 반환 
   (a) 기본적으로 as.Date()에 입력되는 문자열의 형식은 "yyyy-mm-dd"이다. 
   (b) 만일 "mm/dd/yy"의 형식일 경우 다음과 같은 옵션을 지정해주어야 한다: 'format=%m/%d/%Y'

> as.Date("2015-01-13")
[1] "2015-01-13"
> as.Date("01/13/2015")
Error in charToDate(x) : 문자열이 표준서식을 따르지 않습니다
> as.Date("01/13/2015", format='%m/%d/%Y')
[1] "2015-01-13

•날짜를 문자열로 변환 : format("Data", "Format") 
- format에서 옵션을 사용하면, 요일이나 날짜만 간단하게 추출이 가능하다 

> format(Sys.Date(), '%a') # 요일을 출력 [1] "금" > format(Sys.Date(), '%b') # 월을 출력 [1] "11" > format(Sys.Date(), '%m') # 두자리 숫자로 월을 출력 [1] "11" > format(Sys.Date(), '%d') # 날짜를 출력 [1] "20" > format(Sys.Date(), '%Y') # 네자리로 된 년도를 출력 [1] "2020" > format(Sys.Date(), '%y') # 두자리로 된 년도를 출력 [1] "20"

마. R의 그래픽 기능

1) 산점도 그래프 
• x변수와 y변수의 값을 한 눈에 알아볼 수 있도록 평면에 점을 찍어 표현한 그래프
• 산점도 그래프를 그리는 함수: plot(list_x,list_y) 

2) 산점도 행렬 
• 산점도 행렬: 여러가지 변수들에 대해서 각각의 산점도를 한 눈에 살펴볼 수 있도록 확장된 산점도 행렬 
• 산점도 행렬 명령어: pairs()
   - 옵션 1) main=  : 그래프의 최상단에 제목을 표기 
   - 옵션 2) pch=  : 그래프 상에 찍히는 점의 모양을 변경 
   - 옵션 3) bg= : 산점도 행렬 간 데이터의 색상을 변경 

3) 히스토그램과 상자그림 
hist(list, prob=T) : 히스토그램을 plotting 
   - 옵션 1) prob=T : 상대도수를 표시할 수 있도록 변경 
boxplot(list) : list에 대한 상자 그림을 출력


 

 

728x90

댓글