해당 블로그는 아래 책을 참고하여 작성되었습니다.
0. 이 장에서 다룰 내용
데이터를 시각화하는 환경을 정비하여 대량의 데이터를 효율적으로 탐색 할 수 있도록 준비
- 크로스 집계
- 열 지향 스토리지에 의한 고속화
1. 크로스 집계
1.1. 테이블 종류
데이터 시각화에 용이하도록 테이블 형태로 데이터를 가공하고 집계
트랜젝션 테이블에서 크로스 테이블로 변환하는 과정을 "크로스 집계"라고 함
1) 크로스 테이블
행 (상품명) - 열 (날짜) 별 데이터가 한 셀에 저장된 형태
상품이나 날짜가 추가될 때마다 행, 열을 자유롭게 늘려나갈 수 있지만 데이터베이스로 사용하기에는 어려움이 있다.
데이터 베이스에서는 행추가는 자유롭지만, 열추가는 어려움
2021-01 | 2021-02 | 2021-03 | |
상품 A | 57,100 | 67,300 | 58,100 |
상품 B | 34,900 | 49,800 | 91,100 |
-> 엑셀 pivot table 기능으로 만들 수 있음
2) 트랜잭션 테이블
데이터베이스에 저장하는 형태로 행(세로)만 증가
매출 월 | 상품명 | 금액 |
2021-01 | 상품 A | 57,100 |
2021-01 | 상품 B | 34,900 |
2021-02 | 상품 A | 67,300 |
2021-02 | 상품 B | 49,800 |
(+) 룩업 테이블
엑셀의 VLookup() 함수 활용
위의 트랜젝션 테이블에서 상품 A의 상품 카테고리가 궁금할 경우에 어떻게 하면 될까?
위 테이블에 상품명 옆에 상품 카테고리 열을 추가해도 되지만, 해당 정보가 매번 필요한게 아니라면 카테고리 열을 추가한다면 데이터 효율이 떨어진다. 이럴때는 상품명 별 카테고리를 정리해둔 테이블을 Vlookup() 함수를 사용하여 참고할 수 있다. 이 때 참고되는 테이블을 룩업 테이블이라고 한다.
상품명 | 상품 카테고리 |
상품 A | 식료품 |
상품 B | 전자제품 |
1.2. 집계 방식
1) BI 도구 활용: Tableau에 데이터 연결하여 쉽게 집계하여 볼 수 있음
- Rows, Columns, Aggregation 에 들어갈 속성 지정하여 크로스 집계
2) Pandas 활용: 스크립트 활용한 방식
merge() , pivot_table()
import pandas as pd
#파일 읽기
df1 = pd.read_excel('경로 및 파일명')
df2 = pd.read_excel('경로 및 파일명(룩업테이블)')
# 테이블 결합
df = pd.merge(df1,df2,on = '상품 id')
# 크로스 집계: 점포 별 일자 별 매출 sum
df.pivot_table(매출, 점포 id, 매출일, aggfunc='sum')
집계 결과 테이블 예시
2020-01 | 2020-02 | 2020-03 | |
점포 A | 1,000,000 | 1,200,000 | 999,000 |
점포 B | 990,000 | 1,000,000 | 1,123,000 |
3) SQL 활용: 데이터베이스에서 대량의 데이터 다루기
BI 툴과, pandas로는 수백만 레코드 이상의 데이터는 다루기 어려운데, 이때는 SQL로 데이터베이스에 접근하여 집계함수를 사용하여 데이터양을 1차적으로 줄여준다.
예시 ) 일자별로 저장되어 있는 데이터를 월 별로 집계하여 추출하기
SELECT date_trunc('month','day') as '매출일',
'점포 id',
sum('매출')
FROM '판매 이력'
GROUP BY '매출일','점포_id'
-> SQL 의 실행 결과는 트랜잭션 테이블 형태로 데이터가 추출된다. 1차적으로 줄어든 양의 데이터를 원하는 형태의 크로스 테이블로 만들어서 효과적으로 시각화를 할 수 있다.
* 데이터 마트
[ 데이터 집계 -> 데이터 마트 -> 시각화 ] 과정에서 데이터 마트의 크기는 정보양과 효율이 트레이드오프 관계에 있다.
필요에 따라서 어떤 정보를 얼만큼 남길것인지를 결정해야하며, 최종적으로 '데이터 마트의 크기'에 따라 시스템 구성이 결정된다.
2. 열 지향 스토리지에 의한 고속화
대용량 데이터를 신속하게 집계하기 위한 집계 효율이 높은 데이터베이스의 구조
2.1. 배경
데이터의 양이 증가함에 따라 데이터 집계에 걸리는 시간이 길어지며, 이를 데이터 처리의 지연이 길어진다라고 한다.
데이터 처리의 지연이 길어지면, 작업이 멈추거나 느려지므로 지연을 줄이기 위한 기술이 필요하다.
2.2. 열 지향 데이터베이스 접근
열 지향이란 컬럼단위로 데이터를 압축하여 디스크 I/O를 줄이는 개념을 말한다. 쿼리에 필요한 최소한의 데이터만을 가져오는 것이다.
1) 행 지향 데이터베이스 (row-oriented): Oracle Database, MySQL 같은 일반적인 RDB
새 레코드(행)을 추가할 때 파일의 끝에 빠르게 작성할 수 있다.
매일 발생하는 대량의 트랜잭션을 지연 없이 처리하기 위해 데이터 추가를 효율적으로 할 수 있도록 하는 것이 특징이다.
2) 열 지향 데이터베이스 (column-oriented):Teradata, Amazon Redshint 등
데이터분석에 특정 컬럼만 필요한 경우가 있다. 예를 들어 점포의 총 매출액이 필요할 때 고객 정보는 필요없다. 위에 행 지향 데이터베이스에서는 이런 경우에 필요하지 않은 정보까지 불러오게 된다.
열 지향 데이터베이스에서는 컬럼 단위로 데이터를 정리하여, 로드시 디스크 I/O를 줄인다.
2.3. MPP 데이터베이스
MPP (Massive parallel processing): 대규모 병렬 처리
열 지향 데이터베이스에서는 디스크에서 대량의 데이터를 읽어오기 때문에 1번의 쿼리 실행이 길어진다. 이를 고속화 하기 위한 병렬화 이다.
MPP에서는 하나의 쿼리를 다수의 작은 태스크로 분해하고 이를 가능한 한 병렬로 실행한다.
다음 블로그에서는 집계한 데이터로 효율적으로 시각화 하기 위한 데이터 마트를 어떻게 만드는지 살펴볼 예정이다.
참고
help.tableau.com/current/pro/desktop/en-us/buildexamples_text.htm
'Today I Learned > 데이터 엔지니어링' 카테고리의 다른 글
1장 - 빅데이터 기초 (빅데이터를 지탱하는 기술 정리를 시작하며) (0) | 2021.01.08 |
---|