Presentation is loading. Please wait.

Presentation is loading. Please wait.

소프트웨어시스템 실습 다차원 데이터 구성 및 OLAP

Similar presentations


Presentation on theme: "소프트웨어시스템 실습 다차원 데이터 구성 및 OLAP"— Presentation transcript:

1 소프트웨어시스템 실습 다차원 데이터 구성 및 OLAP
학기

2 Multi-Dimensional Data
Decision Making을 위해 특별히 설계된 ‘subject’ 중심적인 데이터 저장소로서 다양한 ‘view’에서 관찰 분석이 가능 subject (measure) -> ‘fact’ 테이블 view -> ‘dimension’ 테이블

3 분석을 위한 DB의 구성 ? 해당 좌표에 분석대상을 저장 measures 분석의 관점 dimensions

4 Multi-Dimensional DB 구축
Multi-dimensional DB (n차원 배열형태) 로 구축 Product dimension measures dollars_sold units_sold dollars_cost Store dimension Date dimension

5 Multi-Dimensional DB 구축
관계형 데이터베이스에서 MDB(Data Warehouse)의 구축

6 Multi-Dimensional DB 스키마
관계형 데이터베이스에서 DW의 구축 : Star schema model measures

7 Multi-Dimensional DB 구축
Relational DB로 구축 ‘Time’ Dimension 테이블 time_key day_of_week month quarter year holiday_flag ‘Product’ Dimension 테이블 ‘Store’ Dimension 테이블 measures time_key (FK) product_key store_key dollars_sold units_sold dollars_cost ‘Sales’ Fact 테이블

8 Multi-Dimensional DB 구축
measures dollars_sold units_sold dollars_cost

9 Multi-Dimensional DB 활용
연산: Slicing 특정 차원을 고정시켜놓고 다른 차원들의 데이터를 관찰 예: ‘EverMore’ 지점을 고정하여, data, product 차원에서 판매 현황 관찰

10 Multi-Dimensional DB 활용
연산: Dicing 각 차원 마다 범위를 설정하여 보다 제한된 cube를 생성 예: Time 차원 범위: 208년 4월 Product 차원 범위: Food 카테고리 Store 차원 범위: Florida

11 Multi-Dimensional DB 활용
연산: Drill-down (“Show me more detail”) 상위 수준의 요약정보로부터 시작하여 단계적으로 관련된 구체 데이터를 추적하는 과정 예: 2014년 분기별 판매량 정보 2014년 월별 판매량 정보 연산: Roll-up drill-down의 반대 연산

12 Multi-Dimensional DB 활용
연산: Pivoting (or Rotating) n개 차원의 방향을 전환 새로운 차원의 삽입하면서 수행할 수도 있음

13 Multi-Dimensional DB 스키마

14 Multi-Dimensional DB 구축: R의 활용
product 차원 테이블: prod_table time 차원 테이블: month_table location 차원 테이블: state_table state_table <- data.frame(key=c("CA", "NY", "WA", "ON", "QU"), name=c("California", "new York", "Washington", "Ontario", "Quebec"), country=c("USA", "USA", "USA", "Canada", "Canada")) month_table <- data.frame(key=1:12, desc=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"), quarter=c("Q1","Q1","Q1","Q2","Q2","Q2","Q3","Q3","Q3","Q4","Q4","Q4")) prod_table <- data.frame(key=c("Printer", "Tablet", "Laptop"), price=c(225, 570, 1120))

15 Multi-Dimensional DB 구축: R의 활용
Fact 테이블의 구축: random하게 measure 데이터 생성 gen_sales <- function(rec_num) { # Generate ‘fact’ data randomly loc <- sample(state_table$key, rec_num, replace=T, prob=c(2,2,1,1,1)) time_month <- sample(month_table$key, rec_num, replace=T) time_year <- sample(c(2012, 2013), rec_num, replace=T) prod <- sample(prod_table$key, rec_num, replace=T, prob=c(1, 3, 2)) unit <- sample(c(1,2), rec_num, replace=T, prob=c(10, 3)) # 판매 개수 amount <- unit * prod_table[prod, ]$price # 판매금액 = 개수 * 단가 sales <- data.frame(month=time_month, year=time_year, loc=loc, prod=prod, unit=unit, amount=amount) sales <- sales[order(sales$year, sales$month),] # 시간에 따라 fact data의 sorting row.names(sales) <- NULL return(sales) } loc <- sample(state_table$key, rec_num, replace=T, prob=c(2,2,1,1,1)) 샘플링 대상 샘플링 횟수 중복허용 샘플링 확률

16 vector 또는 data.frame의 정렬
sales <- sales[order(sales$year, sales$month), ] 1차 정렬 차 정렬 x <- c(10, 50, 40, 30, 5) order(x) # 를 출력 5번째 값 < 1번째 값 < 4번째 값 < 3번째 값 < 2번째 값 x <- x[c(5,1,4,3,2)] # => x <- x[order(x)]

17 Multi-Dimensional DB 구축: R의 활용
‘Sales’ Fact 테이블의 생성 sales_fact <- gen_sales(500) head(sales_fact)

18 Multi-Dimensional DB 구축: R의 활용
library(sqldf) sqldf("select * from state_table") 표준 SQL 문장 처리 sqldf("select s.key, sum(amount) from sales_fact f, state_table s where f.loc=s.key group by s.key ")

19 Multi-Dimensional DB 구축: R의 활용

20 Multi-Dimensional DB 구축: R의 활용
다차원 Multi-dimensinal DB(cube)의 생성 revenue_cube <- tapply(sales_fact$amount, sales_fact[ , c("prod", "month", "year", "loc")], FUN=function(x){return(sum(x))})

21 tapply 연습 vector SQL의 “group by” 연산과 유사 첫 인자 vector와 동일한
길이의 index (factor) SQL의 “group by” 연산과 유사

22 Multi-Dimensional DB 구축: R의 활용
dimnames(revenue_cube)

23 Multi-Dimensional DB Operations
OLAP operations Slice Dice Rollup Drilldown Pivot

24 Multi-Dimensional DB Operations
Slicing # cube data in Jan, 2012 revenue_cube[, "1", "2012",] revenue_cube["Tablet", "1", "2012",] cube 차원 순서 : "prod", "month", "year", "loc "

25 Multi-Dimensional DB Operations
Dicing scube <- revenue_cube[c("Tablet","Laptop"), c("1","2","3"), , c("CA","NY")] # dicing scube[ , "1", , "CA"] # 작은 size의 cube에서 질의 cube 차원 순서 : "prod", "month", "year", "loc "

26 Multi-Dimensional DB Operations
Roll-up 관찰하고 싶지 않은 차원을 없애기 위해 집계함수(aggregation function) sum 을 이용 예: year, prod, loc 차원에 대해 데이터 관찰 -> loc 차원 없애고, year, prod 차원에 대해 데이터 관찰  cube 차원 순서 : "prod", "month", "year", "loc " apply(revenue_cube, c("year", "prod"), FUN=function(x) {return(sum(x, na.rm=TRUE))}) (n차원) array FUN함수를 적용하게 되는 기준 컬럼

27 Multi-Dimensional DB Operations
Drill-down 차원의 추가 또는 차원 하향 레벨링을 통해 세밀하게 데이타 관찰 예: 각 product에 대한 매년 판매량 관찰 -> 매달 판매량 관찰 apply(revenue_cube, c("year", "month", "prod"), FUN=function(x) {return(sum(x, na.rm=TRUE))})

28 Multi-Dimensional DB Operations
Pivoting  예: year vs. month (또는 month vs. year) 차원에 대한 판매량 관찰 예: product vs. location (또는 location vs. product) 차원에 대한 판매량 관찰 apply(revenue_cube, c("year", "month"), FUN=function(x) {return(sum(x, na.rm=TRUE))}) apply(revenue_cube, c("prod", "loc"), FUN=function(x) {return(sum(x, na.rm=TRUE))})


Download ppt "소프트웨어시스템 실습 다차원 데이터 구성 및 OLAP"

Similar presentations


Ads by Google