2014년 5월 19일 월요일

[Using R] R Language Basic #2 - Sample Data

R Language Basic #2 - Sample Data

Reference #1 - Sample Data Review 


5.  List (복합 백터 생성함수)
LIST() 함수는 두개의 워크시트에 데이터를 관리한느 방식으로 이해할 수 있다. 예를 들어 현재 운영이 되고 있는 식자재 값과 식자재가 상승한 가격의 데이터를 가지고 입력하는 경우 LIST를 활용할 수 있다.

> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, 9940)
> cost.post <- c(1530, 1650, 2570, 5910, 5310, 8900, 10600)
> cost1 <- list(Before=cost.pre, After=cost.post)
> cost1
$Before
[1] 1100 1560 1570 4980 5300 7780 9940

$After
[1]  1530  1650  2570  5910  5310  8900 10600

> str(cost1)
List of 2
 $ Before: num [1:7] 1100 1560 1570 4980 5300 7780 9940
 $ After : num [1:7] 1530 1650 2570 5910 5310 8900 10600

- cost1의 구조를 살표 보면 나오는 것처럼 값의 접근을 위하여 cost1$Before 를 활용하여 해당하는 열의 값을 불러 올 수 있다.

> summary(cost1)
       Length Class  Mode
Before 7      -none- numeric
After  7      -none- numeric

List() 함수 괄호안에 쓰여지는 TAG = VALUE의 형태는 이후 생성되는 데이터 접금 이름과 값에 대한 설정을 의미 한다. 위의 경우 Before, After 를 사용하였다.


> cost2 <- list(cost.pre, cost.post)
> cost2
[[1]]
[1] 1100 1560 1570 4980 5300 7780 9940

[[2]]
[1]  1530  1650  2570  5910  5310  8900 10600

> str(cost2)
List of 2
 $ : num [1:7] 1100 1560 1570 4980 5300 7780 9940
 $ : num [1:7] 1530 1650 2570 5910 5310 8900 10600

- 상위의 LIST 열에 대한 이름을 지정하지 않는 경우는 cost2$cost.pre 를 활용 할 수 없고 단순히 cost2[1], cost2[2]를 활용하여 읽어 낼 수 있다.

> summary(cost2)
     Length Class  Mode
[1,] 7      -none- numeric
[2,] 7      -none- numeric



6. Data Frames (데이터 프레임)

앞으로 우리의 과정과 데이터 분석을 위한 데이터 저장/수집되는 경우의 가장 많은 부분을 차지하는 형태의 데이터 타입 일 것이다. 데이터 프레임이라는 용어는 DataSet 또는 관계형데이터베이스의 테이블과도 비슷한 형태를 띄게 된다. 동일한 길이의 벡터 또는 요인(Factors)들의 세로방향 목록을 말하는데 각 목록의 동일위치에 있는 데이터는 동일 실험단위 또는 관찰단위에서 얻어진 것이라고 할 수 있다. 데이터 프레임의 한 행을 가리킬 때 CASE나 RECORD라는 용어를 사용하기도 한다.

> dataset.cost1 <- data.frame(Before=cost.pre, After=cost.post)

> dataset.cost1
  Before After
1   1100  1530
2   1560  1650
3   1570  2570
4   4980  5910
5   5300  5310
6   7780  8900
7   9940 10600

> str(dataset.cost1)
'data.frame': 7 obs. of  2 variables:
 $ Before: num  1100 1560 1570 4980 5300 7780 9940
 $ After : num  1530 1650 2570 5910 5310 8900 10600

> summary(dataset.cost1)
     Before         After    
 Min.   :  1100   Min.   : 1530
 1st Qu.:1565   1st Qu.: 2110
 Median :4980   Median : 5310
 Mean   :4604   Mean   : 5210
 3rd Qu.:6540   3rd Qu.: 7405
 Max.   :9940   Max.   :10600


> dataset.cost2 <- data.frame(cost.pre, cost.post)

> dataset.cost2
  cost.pre cost.post
1     1100      1530
2     1560      1650
3     1570      2570
4     4980      5910
5     5300      5310
6     7780      8900
7     9940     10600

> str(dataset.cost2)
'data.frame': 7 obs. of  2 variables:
 $ cost.pre : num  1100 1560 1570 4980 5300 7780 9940
 $ cost.post: num  1530 1650 2570 5910 5310 8900 10600

> summary(dataset.cost2)
    cost.pre      cost.post  
 Min.   :1100   Min.   : 1530
 1st Qu.:1565   1st Qu.: 2110
 Median :4980   Median : 5310
 Mean   :4604   Mean   : 5210
 3rd Qu.:6540   3rd Qu.: 7405
 Max.   :9940   Max.   :10600

DataFrame 은 List와 거의 비슷하게 생성하는 것을 사용할 수 있다. 그러나 이름지정하지 않은 경우 값의 인덱스 위치 값을 입력해야 하는 반면 데이터 프레임은 생성시 사용된 변수(입력된 팩터값 변수)의 이름을 사용하여 가능 하다.


7. Indexing (벡터 요소의 색인화)

위에서 생성된 벡터값을 개별 요소별로 접근하는 것을 색인화(Indexing)이라고 하는데 이 방법을 이요하면 하나의 벡터에서 일부분을 추출하거나 제외 할 수 있는 작업이 가능 하다. R에서 사용되는 소괄호 " () " 은 함수의 인자를 입력할 때 주로 사용하고 대괄호 " [ ] " 은 벡터나 행렬의 구성요소를 가리키는 색인 위치나 조건을 입력할 때 주로 사용한다.

> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, 9940)
> cost.post <- c(1530, 1650, 2570, 5910, 5310, 8900, 10600)

> cost.pre
[1] 1100 1560 1570 4980 5300 7780 9940

> cost.pre[2]
[1] 1560

> cost.pre[c(1, 3, 5)]
[1] 1100 1570 5300

> cost.pre[-c(1, 3, 5)]
[1] 1560 4980 7780 9940

> cost.pre[4:6]
[1] 4980 5300 7780

특정 위치값의 값을 추출할 때는 c() 을 사용하여 해당 색인값을 지정하고 앞에 " - " 를 붙인
cost.pre[-c(1, 3, 5)] 와 같은 것은 1, 3, 5번째 값을 제외한 내용을 추출하라는 명령이다. 기본적인 사항이지만 향후 데이터 가공하는 작업에서는 많이 사용되는 것으로 생각된다. 또한 특정 색인위치의 값을 변경하는 경우에도 사용할 수 있다.

> cost.pre[1] <- 4500


8. Conditional Selection(요소의 조건부 선택) 

대괄호 " [ ] " 안에 관계(비교)연산자와 논리연산자를 사용하여 행렬의 구성요소를 가리키는 조건을 입력할 수 있다.

> cost.pre <- c(1100, 1560, 1570, 4980, 5300, 7780, NA)
> cost.post <- c(1530, 1650, NA, 5910, 5310, 8900, 10600)

> cost.post < 2000
[1]  TRUE  TRUE    NA FALSE FALSE FALSE FALSE

> cost.pre[cost.post < 2000]
[1] 1100 1560   NA

> cost.pre[cost.post > 1500 & cost.post < 7000]
[1] 1100 1560   NA 4980 5300

> length(cost.pre)
[1] 7

> is.na(cost.pre)
[1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

- 관계형데이터베이스에선 NULL 이라는 용어로 사용되는 값을 의미한다. 값이 존재하지 않을 경우 TRUE 값을 리턴 한다.

> !is.na(cost.pre)
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE

- 상위함수에서 " ! " 을 붙이는 경우는 그 반대의 경우로 표현하라고 이해 하면 된다.

> length(cost.pre[!is.na(cost.pre)])
[1] 6

기본적으로 연산자에 대한 부등기호를 한번더 정리 해보도록 하자

- 관계연산자 :
 x < y : x가 y 보다 작은 경우
 x > y : x가 y 보다 큰 경우
 x == y : x와 y가 같은 경우
 x <= y : x가 y 보다 작거나 같은 경우
 x >= y : x가 y 보다 크거나 같은 경우
 x != y : x와 y가 같지 않은 경우

- 논리연산자 : AND/그리고( & ) , OR/또는 ( | ) , NOT/아니다 ( ! )


9. Indexing of Data Frames (데이터프레임 요소의 색인화)

데이터프레임 형태의 구조가 가장 많을 것이라고 기존의 포스팅에서 설명한 바 있다. 데이터프레임 요소의 색인화는 대괄호(" [] " )를 사용하여 2차원 배열과 같은 형태로 이뤄지면 이전에서 설명한 색인화와 동일한 형태이니 간단한 샘플 소스를 보면 이해가 쉬울 것으로 생각 된다.


> Name <- c("토니", "매드", "모락", "시추안", "포쿡", "식당돈")
> Training <- c("Yes", "No", "Yes", "No", "Yes", "No")
> Sweetness <- c(8, 9, 9, 4, 5, 5)
> Saltiness <- c(4, 2, 2, 6, 1, 4)
> sensory <- data.frame(Name, Training, Sweetness, Saltiness)

> sensory
    Name   Training Sweetness Saltiness
1   토니       Yes         8              4
2   매드        No         9               2
3   모락       Yes         9              2
4 시추안       No         4              6
5   포쿡       Yes         5              1
6 식당돈       No         5              4

> str(sensory)
'data.frame': 6 obs. of  4 variables:
 $ Name     : Factor w/ 6 levels "매드","모락",..: 5 1 2 3 6 4
 $ Training : Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1
 $ Sweetness: num  8 9 9 4 5 5
 $ Saltiness: num  4 2 2 6 1 4

> summary(sensory)
     Name   Training   Sweetness       Saltiness  
 매드  :1     No :3      Min.   :4.000     Min.   :1.000
 모락  :1     Yes:3    1st Qu.:5.000    1st Qu.:2.000
 시추안:1                Median :6.500   Median :3.000
 식당돈:1                Mean   :6.667    Mean   :3.167
 토니  :1                  3rd Qu.:8.750    3rd Qu.:4.000
 포쿡  :1                  Max.   :9.000     Max.   :6.000

- 샘플 데이터로 만들어진 데이터 프레임을 확인 할 수 있다. str() 함수는 데이터프레임의 각 항목의 데이터 구조 형태를 볼 수 있고 summary() 함수는 데이터프레임의 각항목별 최저/최대값과 중간값, 평균등을 요약형태로 볼 수 있으며 향후 데이터 가공 작업시 유용하게 사용할 수 있다.

> sensory[5, 2]
[1] Yes
Levels: No Yes

> sensory[5,]
  Name Training Sweetness Saltiness
5 포쿡      Yes         5         1

> sensory[, 1]
[1] 토니   매드   모락   시추안 포쿡   식당돈
Levels: 매드 모락 시추안 식당돈 토니 포쿡

> condition <- sensory$Training == "Yes"
> sensory[condition,]
  Name Training Sweetness Saltiness
1 토니      Yes         8         4
3 모락      Yes         9         2
5 포쿡      Yes         5         1

> sensory[sensory$Sweetness > 5,]
  Name Training Sweetness Saltiness
1 토니      Yes         8         4
2 매드       No         9         2
3 모락      Yes         9         2

데이터 프레임의 개별 요소 값을 접근하기 위해서는 기본적인 " [ 행, 열 ] " 이라는 구조로 사용이 가능 하다. 또한 [행, ], [ , 열] 을 사용하여 지정하지 않은 경우는 모든 행과 모든 열을 가리키게 된다.


#3 Sample Data 로 계속

댓글 없음:

댓글 쓰기

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...