데이터사이언티스트를위한 R-1: R intro. & Objects Jinseog Kim Dongguk University jinseog.kim@gmail.com 2017-03-14 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 1 / 35
About R 1 Language for statistical computing and graphics 2 S (AT&T Bell lab.): John Chambers et al. 3 Ihaka and Gentleman at the University of Auckland developed R firstly. 4 Currently, R Development Core Team is developing & maintaining R. 5 Many packages (9422) for statistical computing & graphics see https://www.r-project.org/about.html inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 2 / 35
RStudio Desktop & Server for Linux 1 RStudio: cross-platform open source IDE 2 RStudio-server enables multiusers to remotely access RStudio using a web browser. inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 3 / 35
R/RStudio 의설치 https://www.r-project.org/ https://www.rstudio.com/products/rstudio/download/ inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 4 / 35
inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를 Figure 위한 1:RSTUDIO R-1: R intro. & Objects 2017-03-14 5 / 35 Rstudio 개발자를위한통합환경 (IDE)
Starting R x <- 1 x R consol with RGui or Rstudio ## [1] 1 x <- "hello" x ## [1] "hello" inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 6 / 35
R 의기초용어및유틸리티 object: R 에서자료, 함수, 연산자등객체, 메모리에저장 ls() : 객체들의리스트 x <- 1 y <- 1:10 ls() ## [1] "x" "y" rm(): R 객체를삭제 rm(x,y) ls() ## character(0) inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 7 / 35
R 의기초용어및유틸리티 R 작업공간 (R workspace): R 을이용하여작업하는동안만들어지는객체 (object) 들의모임 (collection) help(): R 객체들에대한도움말을출력, 대신에? 객체명을사용할수있음 help(ls)?ls 작업디렉토리 (working directory) getwd() ## [1] "/home/jskim/work/r-education" #setwd("d:/share/lectures/r-note") 작업공간 (workspace) 저장, 작업디렉토리에는.RData 라는파일이생성된다. save.image() inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 8 / 35
R 의기초용어및유틸리티 R 패키지 : R 의확장기능이용 R 패키지추가설치 search() search() 는설치된 R 패키지들을확인하는명령 ## [1] ".GlobalEnv" "package:cairo" "package:knitr" ## [4] "package:stats" "package:graphics" "package:grdevices" ## [7] "package:utils" "package:datasets" "package:methods" ## [10] "Autoloads" "package:base" inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 9 / 35
R 의기초용어및유틸리티 library(): R 에설치된모든패키지및설명 library() library(package_name): 패키지를현재 R 세션으로로딩 library(mass) # MASS 패키지를로드 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 10 / 35
R 의기초용어및유틸리티 install.packages(): R 에새로운패키지설치 install.packages("stringr") help(),? : 함수및객체에대한도움말 help("ls")?ls inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 11 / 35
기타 객체명표시방법 : 문자, _,., 숫자의조합라인코멘트 : # comments a <- 1 b_1 <- 10 # <- 는 left assignment inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 12 / 35
R 객체 (R objects) R 객체에는아래와같은종류들이있음 1 atomic( 상수 ) 2 vector( 벡터 ) 3 matrix( 행렬 ) 4 list( 리스트 ) 5 data.frame( 데이터프레임 ) 6 function( 함수 ) 7 operator( 연산자 )... R 객체중데이터객체 : atomic, vector, matrix, data.frame 데이터객체 (data object) inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 13 / 35
atomic( 상수 ) 데이터객체의유형 (type) atomic( 상수 ) 데이터객체 1 정수형 (integer) 2 실수형 (double) 3 문자형 (character) 4 논리형 (logical) 5 복소수형 (complex number) Special symbol/values NA : 결측치 Inf, -Inf : 무한대 ( 소 ) (1/0) NaN : Not a Number (0/0) inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 14 / 35
atomic( 상수 ) 데이터객체예제 실수형 (double) / 정수형 (integer) typeof(10l) ## [1] "integer" typeof(10) ## [1] "double" 문자형 (character) typeof("hello World") ## [1] "character" 논리형 (logical) typeof(2 < 4) ## [1] "logical" inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 15 / 35
벡터 (vector) 벡터는하나이상의원소로이루어진자료벡터를구성하는각원소는그유형 (data type) 이동일해야함 (1,2, a, b ) 는잘못된벡터벡터의생성 c(,...,) : 벡터또는상수의연결 : - 연속된정수벡터를생성하는연산자 x1 <- c(1,2,3,4) x3 <- c("aaa", "Baa", "Kim") #character vector x2 <- 10:15 y <- c(x1, 0, x2); y ## [1] 1 2 3 4 0 10 11 12 13 14 15 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 16 / 35
numeric, double, integer, character: 속성이 numeric, double, integer, 혹은 character 인벡터를괄호안의수만큼할당함 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 17 / 35 벡터의생성함수 rep : 반복 rep(2, 10) ## [1] 2 2 2 2 2 2 2 2 2 2 rep(c(1,2), each=5) ## [1] 1 1 1 1 1 2 2 2 2 2 seq : 등차수열생성 seq(0, 1, length=11) ## [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1 에서 9 까지 2 씩증가하는숫자로이루어진벡터를만듬 seq(1, 9, by = 2) ## [1] 1 3 5 7 9
벡터의클래스 numeric: 연속형 factor: 범주형 ordered: 순서있는범주형 Table 1:R 객체의저장모드및스토리지클래스 R code mode(x) class(x) x<-c(1:10) numeric numeric x<-factor(1:10) numeric factor x<-ordered(1:10) numeric ordered factor inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 18 / 35
벡터의 component 를접근 인덱스또는 component 이름이용 x <- c(1, 10, 7) x[c(2:3)] ## [1] 10 7 y <- c(a=1, b=10, c=7) y[c("a", "c")] ## a c ## 1 7 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 19 / 35
matrix( 행렬 ) 2차원자료의저장 : 행 (row) 과열 (column) 으로구성됨 2 3 5 A = 12 31 5 5 13 7 6 35 72 A <- matrix(c(2,12,5,6,3,31,13,35,5,5,7,72), ncol=3); A ## [,1] [,2] [,3] ## [1,] 2 3 5 ## [2,] 12 31 5 ## [3,] 5 13 7 ## [4,] 6 35 72 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 20 / 35
matrix( 행렬 ) 의생성 : matrix() 함수이용 X1 <- matrix(1:20, nrow=2, ncol=5); X1 ## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 3 5 7 9 ## [2,] 2 4 6 8 10 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 21 / 35
matrix( 행렬 ) 의생성 : 대각행렬 (diagonal matrix) 생성 X2 <- diag(1, 5); X2 ## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 0 0 0 0 ## [2,] 0 1 0 0 0 ## [3,] 0 0 1 0 0 ## [4,] 0 0 0 1 0 ## [5,] 0 0 0 0 1 X2 <- diag(10) X2 <- diag(1:10) X2 <- diag(c(1,3,5,7,9)) inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 22 / 35
대각원소 (diagonal elements) 의추출 diag(x2) ## [1] 1 3 5 7 9 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 23 / 35
행렬 / 벡터의결합 열단위결합 x <- c(1,2,3); y <- c(4,5,6) cbind(x,y) ## x y ## [1,] 1 4 ## [2,] 2 5 ## [3,] 3 6 행단위결합 rbind(x,y) ## [,1] [,2] [,3] ## x 1 2 3 ## y 4 5 6 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 24 / 35
행렬연산 곱 (elementwise product) x <- matrix(c(1:6), ncol=3); x ## [,1] [,2] [,3] ## [1,] 1 3 5 ## [2,] 2 4 6 y <- matrix(c(1,-1,2,3,2,-1), ncol=3); y ## [,1] [,2] [,3] ## [1,] 1 2 2 ## [2,] -1 3-1 x*y ## [,1] [,2] [,3] ## [1,] 1 6 10 ## [2,] -2 12-6 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 25 / 35
행렬연산 t(x) 전치행렬 (transpose matrix) ## [,1] [,2] ## [1,] 1 2 ## [2,] 3 4 ## [3,] 5 6 행렬곱 (matrix product) z <- t(x)%*%y; z ## [,1] [,2] [,3] ## [1,] -1 8 0 ## [2,] -1 18 2 ## [3,] -1 28 4 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 26 / 35
행렬연산 역행렬 (matrix inversion) A 가 n n 행렬일때, 아래를만족하는 n n 행렬 B 가존재하면 B 를 A 의역행렬이라고하고 A 1 로표시함 AB = BA = I n(identity) A <- matrix(c(1,2,3,3,0,1,5,4,2), ncol=3); A ## [,1] [,2] [,3] ## [1,] 1 3 5 ## [2,] 2 0 4 ## [3,] 3 1 2 solve(a) ## [,1] [,2] [,3] ## [1,] -0.13333333-0.03333333 0.4 ## [2,] 0.26666667-0.43333333 0.2 ## [3,] 0.06666667 0.26666667-0.2 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 27 / 35
리스트 (list) List 는서로다른 R 오브젝트들을원소 (component) 로가지는오브젝트리스트의원소 상수 / 벡터행렬 / 데이터프레임함수등모든 R 오브젝트 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 28 / 35
리스트의생성 list() 를이용 list(name_1=object_1,..., name_m=object_m) name_1... name_m 은콤포넌트의이름 object_1... 은콤포넌트값 예 : Lst <- list(name="fred", wife="mary", child.ages=c(4,7,9)) Lst ## $name ## [1] "fred" ## ## $wife ## [1] "mary" ## ## $child.ages ## [1] 4 7 9 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 29 / 35
리스트구성요소접근 [[ ]] Lst[[1]] ## [1] "fred" 구성요소이름이있는경우 (named list) Lst[["name"]]; # or Lst$name ## [1] "fred" 서브리스트 (sub-list) Lst[2:3] ## $wife ## [1] "mary" ## ## $child.ages ## [1] 4 7 9 콤포넌트의개수 : length() inseoglength(lst) KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 30 / 35
리스트의결합 c() : 벡터의생성또는결합과동일 list1 <- list(a1=1, b1=1:3) list2 <- list(a2=c("kim", "Park")) c(list1, list2) ## $a1 ## [1] 1 ## ## $b1 ## [1] 1 2 3 ## ## $a2 ## [1] "Kim" "Park" inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 31 / 35
데이터프레임 (data frame) 테이블형태의데이터객체컬럼은벡터, 펙터 (factor) 등서로다른속성을가질수있음변수 ( 열 ) 는길이는모두동일 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 32 / 35
데이터프레임생성 1 data.frame() 함수 name <- c("kim","lee","park","oh") sex <- c('f','m','f','m') income <- c(100,102,300,204) d1 <- data.frame(name=name, gender=sex, incom=income) d1 ## name gender incom ## 1 kim f 100 ## 2 lee m 102 ## 3 park f 300 ## 4 Oh m 204 1 as.data.frame(): 리스트나행렬을데이터프레임으로변환 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 33 / 35
데이터프레임관련함수 앞줄 / 끝줄요약보기 head(d1, 2) #tail(d1) ## name gender incom ## 1 kim f 100 ## 2 lee m 102 변수명출력 / 변수명지정 names(d1) ## [1] "name" "gender" "incom" names(d1)[3] <- "income" 데이터차원출력 nrow(d1) # number of rows ## [1] 4 ncol(d1) # number of columns inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 34 / 35
데이터프레임예제 (iris data) head(iris, 3) ## Sepal.Length Sepal.Width Petal.Length Petal.Width Species ## 1 5.1 3.5 1.4 0.2 setosa ## 2 4.9 3.0 1.4 0.2 setosa ## 3 4.7 3.2 1.3 0.2 setosa names(iris) ## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" ## [5] "Species" dim(iris) ## [1] 150 5 nrow(iris); ncol(iris) ## [1] 150 ## [1] 5 inseog KimDongguk Universityjinseog.kim@gmail.com 데이터사이언티스트를위한 R-1: R intro. & Objects 2017-03-14 35 / 35