Lec. 2 : Introduction to R Part 2 Big Data Analytics Short Course 17. 07. 04
R 의데이터구조 : Factor factor() : factor 생성하기 > region = c("a","a","b","c","d") > region [1] "A" "A" "B" "C" "D" > class(region) [1] "character" > region.fac = factor(region) > region.fac [1] A A B C D Levels: A B C D > class(region.fac) [1] "factor" 자료의 class 가바뀌는것을확인
R 의데이터구조 : Factor levels() factor 의구성을바꾸고싶을때사용 > region.fac [1] A A B C D Levels: A B C D > levels(region.fac) = c(1,2,3,4) > region.fac [1] 1 1 2 3 4 Levels: 1 2 3 4
R 의데이터구조 : Factor cut() : 연속형자료를범주화할때사용, ex) 나이, 온도,... > a = 1:8 > a [1] 1 2 3 4 5 6 7 8 > cut(a, breaks=c(0,3,6,10)) [1] (0,3] (0,3] (0,3] (3,6] (3,6] (3,6] (6,10] (6,10] Levels: (0,3] (3,6] (6,10] 이자료의범주를바꾸기 > x = cut(a, breaks=c(0,3,6,10)) > x [1] Low Low Low Mid Mid Mid High High Levels: Low Mid High
R 의데이터구조 : Factor ordered() : 범주형자료에순서를부여 > x [1] Low Low Low Mid Mid Mid High High Levels: Low Mid High 이경우에는 Low, Mid, High 에순서가없다. ordered() 로범주에순서를부여 > ordered(x) [1] Low Low Low Mid Mid Mid High High Levels: Low < Mid < High > ordered(x, levels=c("high", "Mid", "Low")) [1] Low Low Low Mid Mid Mid High High Levels: High < Mid < Low
R 의데이터구조 : Matrix matrix() : matrix 생성 > matrix(1:6, nrow=2, ncol=3) [1,] 1 3 5 [2,] 2 4 6 > matrix(1:6, nrow=2, ncol=3, byrow=t) [1,] 1 2 3 [2,] 4 5 6 length()? > a = matrix(1:6, nrow=2, ncol=3) > length(a) [1] 6
R 의데이터구조 : Matrix dim() : 행렬의차원 > a [1,] 1 3 5 [2,] 2 4 6 > dim(a) [1] 2 3 t() : 행렬을전치 > t(a) [,1] [,2] [1,] 1 2 [2,] 3 4 [3,] 5 6
R 의데이터구조 : Matrix 의계산 단일숫자의덧셈 > a + 1 [1,] 2 4 6 [2,] 3 5 7 벡터의덧셈 > a + c(10,100) [1,] 11 13 15 [2,] 102 104 106 배수가다른벡터의덧셈 > a + c(1,10,30,50) [1,] 2 33 6 [2,] 12 54 16 Warning message: In a + c(1, 10, 30, 50) : longer object length is not a multiple of shorter object length
R 의데이터구조 : Matrix 의계산 곱셈도덧셈과비슷하다. > a * 2 [1,] 2 6 10 [2,] 4 8 12 > a * c(10,100) [1,] 10 30 50 [2,] 200 400 600 %*% : 행렬의곱셈 > a %*% matrix(rep(0,6),nrow=3,ncol=2) [,1] [,2] [1,] 0 0 [2,] 0 0
R 의데이터구조 : Matrix diag() : diagonal components > x = c(7,3,4,5,6,2,3,1,1) > a = matrix(x, ncol=3) [1,] 7 5 3 [2,] 3 6 1 [3,] 4 2 1 > diag(a) [1] 7 6 1 eigen() : eigen values, eigen vectors > eigen(a) $values [1] 11.6032778 3.0000000-0.6032778 $vectors [1,] -0.7823145-0.5656854-0.38748709 [2,] -0.4879469 0.7071068 0.03654409 [3,] -0.3871587-0.4242641 0.92115052
R 의데이터구조 : Matrix 의계산 solve() : 역행렬 > solve(a) [1,] -0.19047619-0.04761905 0.6190476 [2,] -0.04761905 0.23809524-0.0952381 [3,] 0.85714286-0.28571429-1.2857143 > solve(a) %*% a
R 의데이터구조 : Matrix 행렬의 index : vector 와비슷하게접근, [ 행, 열 ] > a[1,2] [1] 5 > a[1,4] Error in a[1, 4] : subscript out of bounds > a[1,3] = 100 > a [1,] 7 5 100 [2,] 3 6 1 [3,] 4 2 1 > a[,3] = c(0,0,0) > a [1,] 7 5 0 [2,] 3 6 0 [3,] 4 2 0
R 의데이터구조 : Data Frame 특징 : 여러가지속성의자료를묶을수있다. data.frame() : data frame 을생성 > age = c(13,14,5,3,40,50,55,32,27) > gender = factor( c("f","m","m","m","f","f","m","f","f") ) > mydata = data.frame(age, gender) > class(mydata) [1] "data.frame" str(), head(), tail() : data frame 의구조를파악하는데도움 > str(mydata) 'data.frame': 9 obs. of 2 variables: $ age : num 13 14 5 3 40 50 55 32 27 $ gender: Factor w/ 2 levels "F","M": 1 2 2 2 1 1 2 1 1 > head(mydata) > tail(mydata)
R 에서의데이터정리 : 예제 플레잉카드덱 ( 포커카드 ) 만들기 구성 : Spade, Heart, Diamond, Club의문양과 A, 2~10, J, Q, K 이문제에서는 (A, 2~10, J, Q, K) 를 (1~13) 으로, (Spade, Heart, Diamond, Club) 를 (S, H, D, C) 로대체 Hint : rep(), data.frame() S 1 S 2 S 3 S 4 S 5 S 6 S 7 S 8... S 1 H 1 D 1 C 1 S 2 H 2 D 2 C 2...
R 의데이터구조 : Data Frame 의 index [,] 으로찾는방법, vector 비슷하다. > mydata[1,] age gender 1 13 F > mydata[,1] [1] 13 14 5 3 40 50 55 32 27 (data frame 이름 )$( 열이름 ) 으로찾기 > head(mydata) > mydata$age [1] 13 14 5 3 40 50 55 32 27
R 의데이터구조 : Data Frame 의 name names() : data frame 의열이름 > names(mydata) [1] "age" "gender" > names(mydata) = c("age", "Gender") > mydata$age NULL > mydata$age [1] 13 14 5 3 40 50 55 32 27 * 대소문자구분
R 의데이터구조 : Data Frame 의 index 예제 R 의기본내장데이터셋, cars 사용 > str(cars) 'data.frame': 50 obs. of 2 variables: $ speed: num 4 4 7 7 8 9 10 10 10 11... $ dist : num 2 10 4 22 16 10 18 26 34 17... cars 의 speed 는평균보다크고, dist 는평균보다작은데이터셋은? speed dist 27 16 32 28 16 40 29 17 32 30 17 40 32 18 42 36 19 36 39 20 32
R 의데이터구조 : Data Frame attach(), detach() > mydata = data.frame(age, gender) > rm("age","gender") > age Error: object 'age' not found > attach(mydata) > search() [1] ".GlobalEnv" "mydata" "tools:rstudio... > age [1] 13 14 5 3 40 50 55 32 27 > detach(mydata) > search() [1] ".GlobalEnv" "tools:rstudio... > age Error: object 'age' not found
R 의데이터구조 : List list : 여러가지속성데이터의조합 > mylist = list(vec = 1:10, mat = a, df = mydata) > mylist $vec [1] 1 2 3 4 5 6 7 8 9 10 $mat [1,] 1 3 5 [2,] 2 4 6 $df age gender 1 13 F 2 14 M... > class(mylist) [1] "list" 결과정리에유용함. 다수의속성을가진결과를하나로묶음
R 에서의데이터정리 : 결측값처리 결측값 (NA) 처리하기 > age = c(13,14,5,3,40,50,55,32,27, NA) > gender = factor( c("f","m","m","m","f","f","m","f","f","m")) > age [1] 13 14 5 3 40 50 55 32 27 NA > mydata = data.frame(age, gender) > mydata$age[mydata$age == NA] = 30 > mydata$age [1] 13 14 5 3 40 50 55 32 27 NA > mydata$age == NA [1] NA NA NA NA NA NA NA NA NA NA > is.na(mydata$age) [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE NA 를 30 으로바꾸기, 단인덱스 10 을이용하지말것
R 에서의데이터정리 : 결측값처리 TRUE 와 FALSE 기본적으로 TRUE = 1, FALSE = 0 이다. > TRUE + TRUE [1] 2 > FALSE + FALSE + FALSE [1] 0 추가로 0 이아닌숫자는 TRUE 로인식한다 > as.logical( c(1,2,3,4,0,0,-1) ) [1] TRUE TRUE TRUE TRUE FALSE FALSE TRUE
R 에서의데이터정리 : 정렬하기 한행혹은여러행을기준으로정렬 나이가적은순서대로전체데이터를정렬 > sort(mydata) Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 정의하지않은열들이선택되었습니다 > mydata age gender 1 13 F 2 14 M 3 5 M... > # order() 사용 age gender 4 3 M 3 5 M 1 13 F...
R 에서의데이터정리 : 예제 iris dataset : R 에기본으로내장되어있는 dataset 붓꽃의종류에대해서꽃받침과꽃잎의너비와길이로이루어진자료 > str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1... 1. Sepal.Length을범주화 : sepal<6 경우 = 1, sepal>=6 경우 = 0 2. setosa종중에서 sepal.width, petal.width가작은순서대로나열 3. species의범주를변경 : setosa는 se, versicolor는 ve, virginica는 vi 4. 열이름 ( 변수명 ) 을변경 : SL, SW, PL, PW, Species으로
R 에서의데이터정리 : 예제 airquality: R 에기본으로내장되어있는 dataset Daily air quality measurements in NY, May to September 1973. > str(airquality) 'data.frame': 153 obs. of 6 variables: $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA... $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194... $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6... $ Temp : int 67 72 74 62 56 66 65 59 61 69... $ Month : int 5 5 5 5 5 5 5 5 5 5... $ Day : int 1 2 3 4 5 6 7 8 9 10... 1. Ozone 의결측값 (NA) 갯수는? 2. 6 개변수들의결측값이없는행의갯수는? 3. Ozone 의 NA 를 999 로변경하기