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 로 계속
20여년간 외식전문기업에서 디지털전화과 혁신에 관한 일을 하면서 경험하게 된 다양한 이야기를 나만의 방식으로 풀어 내고자 한다. 외식기업 뿐 아니라 소상공인 모두 지속가능한 성장을 위해서 이제는 반드시 필요 한 것이 디지털 기술의 활용이며 우리의 변화가 필요 하다.
피드 구독하기:
댓글 (Atom)
다양한 채널의 블로그 작성으로 집중이 좀 안되기도 하고 나의 회사를 운영하고 관리 하다 보니 회사의 블로그로 작성 해보는 것은 어떤가 하고 하나로 옮겨 봅니다. (주)다이닝웨이브 - 블로그 바로가기
-
웹/앱 리뉴얼 프로젝트를 진행 중에 내부에서 처리해야할 프로세스상 로직이 있었는데 오라클(데이터베이스) 단계에서 처리가 곤란하게 되어 외부서비스(웹)의 특정 URL/URI를 호출해야 되는 경우가 생겼다. 구글링으로 검색을 해도 상세히 설명 된 곳이 별...
-
# Reference URL - http://struts.apache.org/docs/tutorials.html 아래 문서는 내부 구성원을 위한 간략한 설정 및 설치를 위한 정보 공유에 목적이 있으며 IT의 구성 환경에 따라 달라 질 수 있으...
-
주로 윈도우에서 RStudio를 사용할 때는 잘 몰랐는데 이동성 때문에 Mac Ari/Book에서 사용하는 경우 한글 깨짐현상이 발생 하기도 한다. 이럴때 해야 하는 여러가지 방법이 있는데 그중에 내가 사용한 내용을 공유하고자 한다. 우선은 RS...
댓글 없음:
댓글 쓰기