2016년 5월 17일

Basic Curriculum

Day 1 Day 2 Day 3 Day 4 Day 5
R소개 및 설치 기본 데이터 타입들과 특성 데이터 불러오기 For loop 전체적인 리뷰
기본 세팅과 룰 데이터 타입들을 위한 함수들 디렉터리의 개념 While loop What's More?
Variables Logical 값 세는 법 sort 및 order If, ifelse
데이터 타입들 소개와 연습 수학부호들과 응용 NA값 다루기 중첩 루프 혹은 if
Debug 팁 데이터 변형 데이터 쓰기 Custom function
유용한 웹사이트들 Subsetting 데이터 변형: dplyr, reshape2 시각화 패키지: ggplot2 패키지

Day 1 Day 2 Day 3 Day 4 Day 5
패키지의 개념과 설치 회귀 함수들: lm, glm 글자 다루기
실제 데이터들로 연습 고급 R 함수들
기본 통계 함수들

유명세를 타고 있는 데이터 분석툴

The top 10 tools by share of users were

  1. R, 46.9% share ( 38.5% in 2014)
  2. RapidMiner, 31.5% ( 44.2% in 2014)
  3. SQL, 30.9% ( 25.3% in 2014)
  4. Python, 30.3% ( 19.5% in 2014)
  5. Excel, 22.9% ( 25.8% in 2014)
  6. KNIME, 20.0% ( 15.0% in 2014)
  7. Hadoop, 18.4% ( 12.7% in 2014)
  8. Tableau, 12.4% ( 9.1% in 2014)
  9. SAS, 11.3 (10.9% in 2014)
  10. Spark, 11.3% ( 2.6% in 2014)

R이란 무엇인가

R은 S와 S-Plus 이후에 등장한 오픈 소스 통계 해석용 환경이다. S 언어는 1980년대 후반 AT&T 연구소에서 개발되었다. R 프로젝트는 1995년 뉴질랜드의 Auckland 대학교 통계학과의 Robert Gentleman 과 Ross Ihaka에 의해 시작되었으며 이들의 이름의 앞자를 따서 R 프로젝트로 명명되었다.

이 프로젝트는 급속도로 많은 사람들의 관심을 끌게 되었으며, 현재 R 코어 개발 팀과 전세계의 자원 개발자들에 의해 유지되고 있다. R 프로젝트 웹페이지는 R에 대한 메인 정보 사이트이다. 이 사이트에서 소프트웨어, 패키지 및 Document를 다운로드 할 수 있다.

R은 강력한 통계 프로그램이지만 우선적으로 프로그래밍 언어라 할 수 있다. 전세계의 개발자들이 수많은 루틴을 작성하고 있으며, 이들을 R 프로젝트 웹사이트에서 "패키지"의 형태로 무료로 제공받을 수 있다. 그러나, 기본 설치만으로도 대부분의 목적에 사용할 수 있는 강력한 도구를 포함하고 있다.

R의 장점

  • 복합적인 통계분석 패키지
    • 어떤 통계 기법을 사용하든 그에 맞는 R 패키지가 이미 나와 있다
  • 통계학자와 연구자들이 개발한 통계툴
  • 오픈소스: 누구나 패키지와 함수들을 수정하고 자기가 원하는데로 변형시킬 수 있다
  • 4800개가 넘는 패키지들
  • 글자를 읽는 것이 가능하다. 심지어 한국어도!
  • 훌륭한 데이터 조작패키지들: dplyr, reshape2
  • 이 패키지들을 이용해 raw data 들을 tidy data 로 바꿀수 있다.

Raw Data

Tidy Data

R의 장점 (Cont.)

  • 다양한 OS에서 사용가능: Linux, Mac, Windows 32, 64 bit
  • 간단한 txt파일에서부터 Comma-Separated Values (CSV), SAS, SPSS, Excel, Access, Oracle, MySQL, SQLite 에서 데이터 불러오기가 가능
  • PDF, JPG, PNG, SVG, HTML, PPT, WORD, 등등으로 데이터 쓰기 가능
  • 많은 블로그들에서 활발하게 펼쳐지는 질문들과 실시간에 가까운 개발
  • 타의 추종을 불허하는 그래픽 및 도표 기능: ggplot2, plotly

R의 단점

  • 메모리 관리
  • 속도
  • 어려운 접근성: 프로그래밍 언어
  • 다른 프로그래밍 언어랑 많이 다름

그러나 R은 고급 프로그래머 전용이 아닙니다.

R과 RStudio

  • R의…. 참으로 아쉬운 60년대 인터페이스
  • 많은 요구사항으로 R에 대한 통합개발환경(Integrated Development Environment, IDE) 를 제공하는 RStudio가 개발되었다.
  • R이 설치되어 있어야 RStudio가 설치된다.
  • 상당히 깔끔한 인터페이스 디자인과 "Shiny"를 통해 실시간 쌍방향 커뮤니케이션이 지원되는 웹 어플리케이션 개발이 가능하다.
  • HTML5, JavaScript, CSS도 활용할 수 있다.

R 설치

  1. r-project 클릭 혹은 구글에서 R 검색
  2. download R 클릭
  3. 스크롤 내려서 Korea 중 하나 선택
  4. OS에 맞는 Download R for.. 선택
  5. base 클릭
  6. Download R … for (Windows) 클릭

RStudio 설치

  1. RStudio 클릭 혹은 구글에서 RStudio 검색
  2. Download RStudio 혹은 Powerful IDE for R 클릭
  3. 스크롤을 내려 RStudio Desktop에서 Download RStudio Desktop 클릭
  4. Installers for Supported Platforms에서 맞는 OS를 선택

혹은 그냥…

R과 RStdio 소개

  • Console
    • Enter, Ctrl + L,
  • Source (R Script)
    • 메모장의 개념. Reproducibility(재현성)
    • Ctrl + Enter, Ctrl + S, Ctrl + O, Ctrl + Z, Ctrl + I (줄 맞추기)
    • Ctrl + D: 줄 지우기
  • Environment: 저장한 값들을 보여주는 곳
  • History: 실행했던 모든 기록들이 남는 곳
  • Files, Plots, packages, Help

Global Setting

  • 들여쓰기
  • 글자 크기
  • 테마, 폰트 설정
  • Source, Console, Environment, Plots 등등 위치 설정

Formatting Rules

본인과 다른 사람들이 읽기 편하게 하기 위해

  • 뛰어쓰기: 콤마뒤, +, -, ==, <-, etc.
  • 한 줄에 너무 길게 쓰지 말 것

예제

GOOD:

total <- sum(x[, 1])

total <- sum(x[1, 1])

x <- 5

x <- y + 3

BAD:

total <-sum(x[, 1])

total <- sum(x[1,1])

x = 5

x <- y+3

Google's R Style Guide

Variables

특정한 데이터를 저장해놓는다. 자주 쓰는 값을 저장해 놓아서 쓰기 편하다.

x <- 2
x
## [1] 2
x + 1
## [1] 3

y <- 10
y
## [1] 10
x + y
## [1] 12
y / x
## [1] 5
z <- "한국소비자원 만세"
z
## [1] "한국소비자원 만세"

<-, ==, = 의 차이점

<- 와 = 는 같은 의미: assign (일거리를 맡기다?)

variable 로 저장

temp <- 2
temp
## [1] 2
tmp = 1
tmp
## [1] 1

== 는 우리가 흔히 알고있는 "같다" 라는 의미

4 == 2
## [1] FALSE
temp == 2
## [1] TRUE

즐거운 퀴즈타임

…에 들어가기 전 막간을 이용해 수학 기호들을 알아보자

더하기: +

빼기: -

나누기: /

곱하기: *

괄호: ( )

문제

  1. 마음에 드는 숫자를 아무거나 정한후 mynumber1 에 저장!
  2. mynumber1 곱하기 2 한 후 mynumber2 에 저장!
  3. mynumber2 더하기 10 한 후 mynumber3 에 저장!
  4. mynumber3 나누기 2 한 후 mynumber4 에 저장!
  5. mynumber4 빼기 mynumber1 한 후 mynumber5 에 저장!

과연 mynumber5 는?

풀이

\[x = mynumber1\] \[x * 2 = 2x\] \[2x + 10\] \[(2x + 10) = 2(x + 5)\] \[2(x + 5) / 2 = x + 5\] \[x + 5 - x = 5\]

objects, ls(), Workspace, RData

  • Objects: 현재 저장해 놓은 variables 나 dataset 들 (ex. vectors, data frames)
  • ls() function: 현재 Workspace 에 저장되 있는 objects 들의 list 들을 나열
  • RData: Workspace 들을 저장해 놓은 파일. 매일 같은 데이터를 사용한다면 RData를 저장해 놓고 R 을 시작할 때마다 불러오는 것이 편하다.

Comments

# cars dataset 의 각 열의 요약
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00
# "인생이란 무엇인가"를 R로 표현해 보자
temp1 <- "인생이란"
temp2 <- "무엇인가"
paste0(temp1, " ", temp2)
## [1] "인생이란 무엇인가"

Comment 단축키

Ctrl + Shift + C

본격적으로 R Data Type 들을 알아봅시다

  1. Vectors (1차원)
  2. Matrices (2차원)
  3. Arrays (모든 차원)
  4. Lists
  5. Data Frames (2차원, 엑셀 시트)

그 전에 5분만 쉬고 합시다 ^^

R Data Types

  1. Vectors (1차원)
  2. Matrices (2차원)
  3. Arrays (모든 차원)
  4. Lists
  5. Data Frames (2차원, 엑셀 시트)

Vector

  • Vector: 연속적인 데이터
    • 같은 타입의 데이터
# Numeric (숫자)
temp <- 1
temp
## [1] 1
temp <- c(1, 2, 3, 4)
temp
## [1] 1 2 3 4

잠깐!

여기서 c 란? concatenate의 약자: 사슬같이 잇다

# Character Strings (글자)
temp <- "Hello World"
temp
## [1] "Hello World"
temp <- c("Hello", "World")
temp
## [1] "Hello" "World"

# Logical values (논리 변수?!)
temp <- TRUE
temp
## [1] TRUE
temp <- c(TRUE, FALSE, FALSE)
temp
## [1]  TRUE FALSE FALSE
# TRUE, FALSE 간략한 버전
temp <- c(T, F, F)
temp
## [1]  TRUE FALSE FALSE

# 다른 타입의 데이터들은 vector 내에서 자동으로 동일한 데이터로 변환된다.
temp <- c(1, "4", F)
temp
## [1] "1"     "4"     "FALSE"
# NA 값은 어느 타입의 vector 에도 들어가진다
temp <- c(1, "4", F, NA)
temp
## [1] "1"     "4"     "FALSE" NA
length(temp) # object 안에 몇 개의 element 가 들어가 있는지 알려준다
## [1] 4

variable 이름 바꾸기

haha <- temp # temp 를 haha 에 overwrite 한다
temp # temp를 지운게 아니기 때문에 아직 남아있다
## [1] "1"     "4"     "FALSE" NA
haha # haha 는 새로 만들어진 object 이다
## [1] "1"     "4"     "FALSE" NA
rm(temp) # remove: object 지우기
ls() # temp 가 object 목록에서 지워진걸 알 수 있다
##  [1] "both"    "dataset" "Euro"    "gg"      "haha"    "p"       "temp1"  
##  [8] "temp2"   "tmp"     "USD"     "x"       "y"       "z"

만들기 시간1

## [1] 65  1  0
## [1] "1"              "2"              "R이여 영원하라"
## [1] "1"             NA              "45"            "나는 누구인가"
## [1] "Philip K. Dick" "Mark Twain"

Matrices

A <- matrix(c(2, 4, 5, 8, 7, 9), # 메트릭스 구성 요소
            nrow = 2,            # 행의 숫자
            ncol = 3,            # 열의 숫자
            byrow = T)           # 행 방향으로 메트릭스를 채울것인가
A
##      [,1] [,2] [,3]
## [1,]    2    4    5
## [2,]    8    7    9
dim(A); class(A) # dim: object 의 행과 열의 갯수, # class: object 의 클래스
## [1] 2 3
## [1] "matrix"

만들기 시간2

##      [,1] [,2]
## [1,]    5    1
## [2,]    2    1
## [3,]    9   10
## [4,]    5   12
## [5,]    2   11

dim(B) = ?

Data Frames

엑셀 시트라고 생각하면 편하다

tempDF <- data.frame(col1 = c(1, 2, 3),
                     col2 = c("haha", "hoho", "hehe"),
                     IamColumn = c(5, "haha", NA))
tempDF
##   col1 col2 IamColumn
## 1    1 haha         5
## 2    2 hoho      haha
## 3    3 hehe      <NA>
class(tempDF)
## [1] "data.frame"

dim(tempDF)
## [1] 3 3
names(tempDF) # tempDF의 이름들을 구한다
## [1] "col1"      "col2"      "IamColumn"
colnames(tempDF) # tempDF의 열들의 이름들을 구한다
## [1] "col1"      "col2"      "IamColumn"
rownames(tempDF) # tempDF의 행들의 이름들을 구한다
## [1] "1" "2" "3"

만들기 시간3

##           변진섭 김건모                  김광석
## 1       희망사항   짱가      바람이 불어오는 곳
## 2 홀로 된다는 것 첫인상  잊어야 한다는 마음으로
## 3       숙녀에게   핑계 어느 60대 노부부 이야기

과연?

Matrix 와 Data Frame 의 차이점?

Matrix

  • 모든 행과 열들이 같은 데이터 타입이어야만 한다
A
##      [,1] [,2] [,3]
## [1,]    2    4    5
## [2,]    8    7    9
A[, 1] <- c("하하", "호호") # Matrix A의 첫번째 열을 "하하" 와 "호호" 로 바꾼다
A
##      [,1]   [,2] [,3]
## [1,] "하하" "4"  "5" 
## [2,] "호호" "7"  "9"

Matrix 의 장단점

Matrix 의 장점

  • 메모리 활용성
object.size(A) # 컴퓨터 내부에 저장된 메트릭스 object A 의 메모리
## 536 bytes
object.size(as.data.frame(A)) # A 를 데이터 프레임으로 변환후 저장된 메모리
## 2336 bytes
  • Linear Algebra… (선형대수학) 을 많이쓰는 공대생들한텐 필수!

Matrix 의 단점

  • 공대생빼곤 안 쓴다.. :P
  • 데이터 행과 열에 이름을 부여할 수 없다.

Data Frame

  • 행과 열들이 다른 데이터 타입이어도 된다.
  • 그러나 한 열에 다른 두가지 타입이 섞일순 없다.
tempDF
##   col1 col2 IamColumn
## 1    1 haha         5
## 2    2 hoho      haha
## 3    3 hehe      <NA>
tempDF$IamColumn # tempDF의 IamColumn 이름을 불러온다
## [1] 5    haha <NA>
## Levels: 5 haha

Data Frame 의 장점

  • 엑셀에 적응되 있는 사람들(대부분의 우리^^)한테 보기 쉽다.
  • 열에 이름을 부여할 수 있다.

열에 이름을 부여할 시 이용가치?!

Data Frame 의 단점

  • 메트릭스에 비해 소모하는 메모리가 크다.
  • 그 외엔 별로 없다 ^^

Array

Array 는 매트릭스랑 비슷하지만 2차원 보다 많은 차원을 가질 수 있다… 고 들었지만 쓰는 사람을 한 명도 못 봤다.

별로 활용가치가 없다. :P

List

  • 순서가 있다
  • 다양한 데이터들을 저장할 수 있다
  • 서로 관련이 없는 데이터들도 한 곳에 저장할 수 있다
  • 잡다한 것들을 한 곳에 집어넣을 수 있는 저장소라고 생각하면 편하다

a string, a numeric vector, a matrix, and a scaler

a <- c(1, 2, 3)
b <- matrix(c(1, 5, 4, 2, 3, 6, 9, 8), ncol = 4, nrow = 2, byrow = T)
w <- list(name = "Daniel", mynumbers = a, mymatrix = b, age = 26)
w
## $name
## [1] "Daniel"
## 
## $mynumbers
## [1] 1 2 3
## 
## $mymatrix
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    4    2
## [2,]    3    6    9    8
## 
## $age
## [1] 26

z <- list(name2 = "Jon Doe", mynumbers2 = c(7, 5, 3),
          mymatrix2 = A, age2 = 20)
z; length(z)
## $name2
## [1] "Jon Doe"
## 
## $mynumbers2
## [1] 7 5 3
## 
## $mymatrix2
##      [,1]   [,2] [,3]
## [1,] "하하" "4"  "5" 
## [2,] "호호" "7"  "9" 
## 
## $age2
## [1] 20
## [1] 4

만들기 시간4

## $name
## [1] "자기 이름"
## 
## $mynumbers
## [1] 1 2 3
## 
## $dataframe
##   col1 데이터분석툴       좋아하는영화
## 1    5            R               이창
## 2    6       Python 옛날 옛적 서부에서
## 3    2         SPSS   마이 페어 레이디
## 4    1          SAS   뜨거운 것이 좋아

이 리스트의 length 는?

() 와 [] 의 차이점

()

  • 함수 뒤에 나온다
  • 혹은 수학적으로도 쓰인다

[]

  • Subset (부분집합?!) 하는데 쓰인다.. Vector, Matrix, List, Data Frame 전부 부분집합이 가능한데…

How to Debug?

  • ?function 혹은 help(function)
  • googling

예를 들어서, string "this is a string" 의 글자 수를 찾는 function 을 알고 싶다.

  • Google 에서 "R how to find number of characters"

Google은 위대합니다

참고하면 좋은 R관련 웹페이지들