1. Business Intelligence (BI) : 경영상의 의사결정에 도움이 됨. Data Discovery (데이터 시각화)
2. Data Mining : 통계 / ML Algorithm을 사용하며, 데이터로부터 가치 있는 정보를 찾는다.
그렇다면 왜 Big Data가 정착되었는가에 대해서부터 설명하고자 한다.
1. 분산 시스템에 의한 데이터 처리의 고속화
빅데이터 라는 단어가 자주 등장하게 된 이유이다. 빅데이터가 취급이 어렵다는 이야기를 많이 듣고 실제로도 그렇다. 이유는 무엇일까?
1. 데이터의 분석 방법을 모름
2. 데이터 처리에 수고와 시간이 걸림
두 가지 이유가 존재하는데, 두 번째 이유에 대해서만 우선 설명하고자 한다.
빅데이터 기술 요구
Hadoop
"다수의 컴퓨터에서 대량의 데이터를 처리" 하기 위한 System
원래 Google에서 개발된 분산 처리 Framework인 "MapReduce"를 참고하여 제작
MapReduce -> Hadoop 제작 -> SQL과 같은 Query 언어를 Hadoop에서 실행하기 위해 Hive 개발
NoSQL
빈번한 읽기 / 쓰기 및 분산 처리에 강점
key-value store : 다수의 key-value 연관지어 저장
document store : JSON과 같은 복잡한 데이터 구조 저장
wide-column store : 여러 key를 사용하여 높은 확장성 제공
Hadoop과 NoSQL DataBase 조합
NoSQL DataBase에 기록하고, Hadoop으로 분산 처리
현실적인 비용으로 대규모 데이터를 처리할 수 있게 됨
분산 시스템의 비즈니스 이용 개척
데이터 분석을 기반으로 하는 EDW / DWH 도입
대량의 데이터(Big Data) 를 보존 & 집계하기 위해 Hadoop, Hive 사용
<예전의 데이터 웨어하우스>
<데이터 웨어하우스의 증가>
직접 할 수 있는 데이터 분석 폭 확대
Cloud Serivce와 Data Discovery로 가속하는 빅데이터의 활용으로 데이터 분석의 대역이 넓어졌다.
Small data 기존 기술을 이용해서 취급할 수 있는 작은 데이터 Record 수 : 수백만 ~ 수천만, 데이터 양 : GB까지의 양을 뜻한다.
Data Discovery 기초 지식 대화형을 데이터를 시각화하여 가치 있는 정보를 찾으려고 하는 Process로, 셀프서비스용 BI 도구가 이에 해당한다. BI (Business Intelligence) Tool : ex) Tableau 등.. Apache Sparker 같은 새로운 분산 시스템용 Framework 보급,, (효율 좋음)
2. 빅데이터 시대의 데이터 분석 기반
빅데이터 기술?
분산 시스템을 활용해서 데이터를 가공해 나가는 구조이다.
1️⃣ 데이터 파이프라인
차례대로 전달해나가는 데이터로 구성된 System 으로 처음에는 간단한 구성이지만, 하고 싶은 일이 증가함에 따라 System은 점차 복잡해지고 어떻게 조합시킬지가 문제이다.
데이터 수집부터 Workflow 관리까지가 데이터 파이프라인의 형성 과정이다.
2️⃣ 데이터 수집
데이터 전송 (data transfer)은 bulk형과 Stream 형으로 나뉜다.
Bulk형은 이미 어딘가에 존재하는 데이터를 정리해 추출하는 방법으로, DB와 파일 서버 등에서 정기적으로 데이터를 수집하는 데 사용한다.
Stream형은 차례차례로 생성되는 데이터를 끊임없이 계속해서 보내는 방법으로, 모바일 Application, Embedded 장비 등에서 널리 데이터를 수집한다.
3️⃣ Stream 처리와 Batch 처리
기존의 경우, 데이터 웨어하우스에서 Bulk 형을 주로 사용하였으나, 요즘은 Stream 형 방법이 주류가 되었는데 그 이유는 모바일 Application 이 많아지면서 실시간으로 처리하는 요구가 많아졌기 때문이다
장기적인 데이터 분석을 위해서는 대량의 데이터를 저장하고 처리하는 데 적합한 분산 시스템이 좋다 (Batch Processing)
4️⃣ 분산 스토리지
수집된 데이터는 distribute storage에 저장한다. 여기서 말하는 분산 스토리지란 여러 컴퓨터와 Disk로부터 구성된 스토리지 시스템이다.
데이터를 저장하는 방법은 이 포스팅에선 두 가지만 설명하도록 하겠다.
1. Object storage : 한 덩어리로 모인 데이터에 이름을 부여해서 파일로 저장하는 형식으로, Amazon S3를 예시로 들 수 있다.
2. NoSQL : 많은 데이터 읽기/쓰기가 가능한 데이터 저장 방법이다.
5️⃣ 분산 데이터 처리
나중에 분석하기 쉽도록 데이터를 가공해서 그 결과를 외부 데이터베이스에 저장하는 처리 방식이다.
데이터 집계에 있어서 SQL을 사용하는 것에 익숙해야 한다.
데이터 집계에 SQL을 사용하는 것에는 두 가지가 존재한다.
1. Query Engine 도입 : Hive, Interactive query engine
2. 외부의 데이터 웨어하우스 제품 이용 : ETL process (Extract - Transform - Load (Data Warehouse))
6️⃣ Workflow 관리
전체 파이프라인 동작을 관리하는 것으로, 파이프라인이 복잡해지면 한 곳에서 제어하지 않을 경우에 전체 움직임의 파악이 어렵다.
오류 발생 시의 처리와 다시 처리하기 위한 기능이 필요하다. 왜냐하면 빅데이터는 크던 작던 시스템 장애가 발생하기 쉽기 때문이다.
ETL Process
ELT Process
데이터 웨어하우스와 데이터 마트
< 데이터 파이프라인의 기본형 >
Data Lake (데이터 레이크) 데이터 웨어하우스에 넣을 수 없는 것도 존재한다. (.txt, Binary file 등) 그래서 모든 데이터를 원래의 형태로 축적해두고 나중에 필요에 따라 가공하는 구조가 필요한데, 그 장소를 데이터 레이크라고 한다.
데이터 형식은 자유지만 대부분의 경우는 .csv 나 .json 등의 범용적인 텍스트 형식을 사용한다.
< Data Lake 를 중심으로 하는 데이터 파이프라인 >
데이터 레이크와 데이터 마트
필요한 데이터는 데이터 마트에 정리한다.
Data Lake는 단순한 Storage로, 데이터를 가공하지 않는다.
그래서, 분산 데이터 처리 기술을 사용해 데이터 분석에 필요한 데이터를 가공, 집계하고 데이터 마트로 추출한 후에 데이터 분석 진행이 가능하다.
데이터 분석 기반 단계적으로 발전
데이터 분석에 필요한 기술은 다방면에 걸쳐 있기 때문에 주로 팀을 이루어서 작업한다.
1. Data Engineer : System 구축 및 운용, 자동화
2. 데이터 분석가 : 데이터에서 가치 있는 정보 추출
< 데이터 엔지니어와 데이터 분석가의 역할 분담 >
혼자 아니면 둘이 시작하는 경우가 대부분이므로, Small start 하여 확장성을 높임.
애드 혹 분석 및 대시보드 도구
Ad hoc 분석 : 수작업으로 데이터를 집계하는 "일회성 데이터 분석"
즉, SQL Query를 직접 작성 후에 실행한다. Excel 그래프 만들기 등 모든 수작업을 의미한다.
애드 혹 분석에서는 데이터 마트를 만들지 않은 채 데이터 레이크와 데이터 웨어하우스에 직접 연결하는 경우가 많음. (바로 확인하려고!)
정기적으로 그래프와 보고서를 만들고 싶을 때, Dashboard Tool을 흔히 사용함.
Dashboard Tool
일부는 데이터 마트가 없어도 동작하도록 설계되는데, 설정한 스케줄에 따라 데이터 레이크와 데이터 웨어하우스에 접속해 Query를 실행하고 그 결과로부터 그래프를 생성한다.
즉, 애드혹 분석 에서는 다음과 같은 상황일 때 사용한다.
1. 저장할 수 있는 데이터 용량에 제한이 없을 것.
2. 데이터를 효율적으로 추출할 수단이 있을 것
결론은 데이터 파이프라인의 큰 흐름이 변하지 않는다는 것.
데이터 마트와 워크플로 관리
복잡한 데이터 분석에서는 먼저 데이터 마트를 구축한 후에 분석하거나 시각화하도록 한다.
데이터 마트는 특히 시각화에 BI 도구를 사용할 경우, 집계 속도를 높이기 위해 데이터 마트가 거의 필수적으로 구축해야 한다.
데이터 마트를 구축하는 것은 배치 처리로 자동화되는 경우가 많기 때문에 실행 관리를 위해 Workflow 관리 도구를 사용한다.
데이터를 수집하는 목적
<데이터 이용 목적 예시>
1️⃣ 데이터 검색
필요할 때 신속하게 검색할 수 있도록 해야 한다.
시스템에는 실시간 데이터 처리나 검색 엔진을 사용하여 Keyword를 찾는 기능이 필요함.
2️⃣ 데이터 가공
업무 시스템의 일부로서 데이터 처리 결과를 이용하고 싶은 경우 가공한다.
자동화는 필수적으로 해야 한다.
Workflow 관리를 도입하여 꼼꼼하게 테스트를 반복적으로 실행해서 시스템을 구축한다.
3️⃣ 데이터 시각화
시행착오의 연속이며, 확실한 해답이 없음.
데이터를 시각적으로 봄으로써 알고 싶은 정보를 얻는 경우 시각화함.
Computer System
Mission-Critical System (기간계 시스템)
Business 근간에 중요한 시스템으로, 완벽하게 테스트를 반복하고 신중하게 운용한다.
실행 과정을 Log나 DB에 기록한다.
Information System (정보계 시스템)
정지되어도 영향 범위가 제한되어 있어 엄격하지 않다.
데이터를 복사한다. (없으면 정보계 시스템은 기간계 시스템에 연결하지 못한다)
데이터 분석 시스템은 정보계 시스템이다.
"데이터" : 기간계 시스템 + 정보계 시스템
확증적 데이터 분석과 탐색적 데이터 분석
확증적 데이터 분석
가설을 세우고 검증
통계학적 모델링에 의한 데이터 분석
탐색적 데이터 분석
데이터를 보면서 의미를 파악
데이터를 시각화하여 사람의 힘으로 의미를 파악함.
스크립트 언어에 의한 특별 분석과 데이터 프레임
"데이터" 는 다양한 장소에 존재한다. 수집하는 과정에서 Script 언어를 자주 사용한다.
데이터 처리와 스크립트 언어
데이터 수집을 하는 데 원시 데이터 그대로 BI 도구로 읽을 수 없어 Preprocessing(전처리) 이 필요한 데이터가 존재 (File Server에서 다운로드 하는 경우 또는 인터넷 경유의 API로부터 다운로드)
Script 언어를 사용해 전처리함.
Script 언어
R : 통계 분석을 위해 개발된 언어
Python : 범용성 Good ( 외부 시스템 API 호출, 복잡한 문자열 처리 가능), 수치 계산용 라이브러리, 머신러닝 프레임워크 (Pandas 많이 사용)
DataFrame
표 형식의 데이터를 추상화한 객체
가로 / 세로 2차원 배열
Script 언어 안에서 데이터 가공과 집계가 가능한 형태이다.
JSON, txt Data도 DataFrame으로 변환하면 Excel과 크게 다르지 않다.
<Web Server Access Log 예시>
import re
import pandas as pd
# 로그의 각 행에 매치하는 정규 표현
pattern = re.compile('^\S+ \S + \S+ \[(.*)\] "(.*)" (\S+) (\S+)$')
# 정규 표현으로 파싱하는 함수 (일치하지 않은 행은 그냥 버림)
def parse_access_log(path):
for line in open(path):
for m in pattern.finditer(line):
yield m.groups()
# 로그 파일을 읽어서 데이터프레임으로 변환
columns = ['time', 'request', 'status', 'bytes']
pd.DataFrame(parse_access_log('access_log'), columns=columns)
pandas DataFrame은 메모리 상에서 전개되기 때문에 수백만 행 정도의 스몰 데이터라면 매우 빠른 데이터,,
time : 표준적인 시간 포맷으로 바꾸려면 to_datatime() 함수를 사용하면 된다.
데이터 전처리에 사용할 수 있는 Pandas 함수
ix
조건에 일치하는 데이터만을 검색
drop
지정한 행 (혹은 Column) 삭제
rename
Index value (or Column name) 변경
dropna
값이 없는 행 (혹은 Column) 삭제
fillna
값이 없는 셀을 지정한 값으로 치환
apply
각 Column(혹은 각 행)에 함수 적용
시계열 데이터 (Time-series data)를 대화식으로 집계
Pandas 에는 Time-series Data를 취급하기 위한 다양한 기능이 존재함.
pandas는 스몰 데이터 기술을 사용하는데, 분산 시스템이 아니어서 빅데이터를 읽어들이면 메모리 부족 오류가 발생하거나 장시간 기다려야 한다.
빅데이터 기술과 구분하는 형태로 사용한다.
# CSV file load (시간으로 Parsing)
import pandas as pd
df1 = pd.read_csv('access_log.csv', parse_dates=['time'])
# 시간을 Index 지정
df2 = df1.set_index('time')
# 인덱스에 의한 시간 filtering
df3 = df2['1995-07-01' : '1995-07-03']
# 1일분의 access 수 count
df3.resample('id').size()
DataFrame 분석에서는 새로운 변수에 차례대로 값을 대입하면서 데이터를 가공한다.
Ad hoc 분석에서는 시행착오를 거치며 몇 번이고 데이터 처리를 반복하기 때문에 이러한 변수를 잘 사용하면 조금씩 데이터 분석을 진행할 수 있음.
SQL 결과를 DataFrame으로 활용
DataFrame은 Query를 실행한 결과로도 만들 수 있음.
복잡한 데이터 집계에는 SQL을 사용하여 DataFrame에 의한 대화형 데이터 처리의 혜택이 있음.
import pandas as pd
import sqlalchemy
engine = sqlalchemy.create_engine('sqlite:///sample.db')
# 쿼리를 실행해서 DataFrame으로 변환
query = '''
SELECT substr(time, 1, 10) time, count(*) count
FROM access_log
WHERE time BETWEEN '1995-07-01' AND '1995-07-04'
GROUP BY 1 ORDER BY 1
'''
pd.read_sql(query, engine)
실행 결과를 확인하는 부분에서는 DataFrame 사용한다.
DataFrame은 표 형식의 모든 데이터를 손쉽게 다룰 수 있음. (그래서 폭넓게 이용!)
import pandas as pd
import sqlalchemy
engine = sqlalchemy.create_engine('sqlite:///sample.db')
# 쿼리 실행해서 DataFrame 변환
query = '''
SELECT substr(time, 1, 10) time, count (*) count
FROM access_log
WHERE time BETWEEN '1995-07-01' AND '1995-07-04'
GROUP BY 1 ORDER BY 1
'''
pd.read_sql(query, engine)
BI 도구와 Monitoring
"데이터 탐색" 에 있어서 우선 큰 그림을 파악한 후에 점차 세부사항으로 깊이 들어가는 것이 중요
spreadsheet에 의한 monitoring
monitoring : 계획적으로 데이터의 변화 추적
데이터를 자신의 다음 행동을 결정하기 위한 재료로서 살펴봄.
숫자의 의미를 제대로 이해하려면 숫자로는 나타낼 수 없는 사전 지식이 필요함.
따라서, 사람에 의한 판단이 필요함.
2017년 1월
2017년 2월
2017년 3월
수입
59,900
63,300
72,400
지출
44,300
47,500
56,500
이익
15,600
15,800
15,900
이익률
26%
25%
22%
데이터에 근거한 의사 결정
KPI (Key Performance Indicator) : 프로젝트의 현황을 파악하기 위한 숫자로 업계마다의 중요한 지표
Monitoring 에서 의식하고 싶은 것은 "행동 가능한 것" 인가임.
결과에 따라 자신의 다음 행동이 결정될지의 여부를 파악.
자신의 행동을 결정할 때 객관적인 데이터를 근거하여 판단하는 것을 데이터 기반 (Data-Driven) 의사 결정,,
1️⃣ 월간 보고서
스프레드시트는 중요한 지표 정리 보고서 작성에 이용됨.
스프레드시트가 어려운 부분이 존재
1. 보고서 입력하는 숫자를 어디선가 계산 : 데이터 웨어하우스 배치 처리 (Workflow 자동화 가능)
2. 상세한 내역 조사 (BI 도구 사용)
변화 파악 후 세부 사항 이해
Tableau public : 주로 블로그 등에서 공개하는 데이터를 위해 만들어져 있음,, (회사 내 데이터 분석에 적합하지 않음)
BI 도구는 고속의 집계 엔진을 내장하고 있어 수백만 레코드 정도 Small Data 라면 순식간에 그래프를 그려줌.
특히, Ad hoc 분석 등에서 대화형으로 데이터를 시각화하고 싶을 때 편리함.
Monitoring 기본 전략 및 BI 도구
데이터의 움직임을 Monitoring 하기 위한 기본적인 전략은 정기적인 보고를 통해 중요한 변화 파악
원인을 알고 싶은 경우, 원인이 되는 데이터로 돌아와 재집계를 반복하면서 살펴봄.
원하는 대로 집계 결과를 얻으려면 "시각화하기 쉬운 데이터"를 만들어야 함.
수작업과 자동화해야 할 것의 경계 판별
1️⃣ 수작업으로 할 수 있는 것은 수작업으로 진행
자신이 알고 싶은 정보를 자신만 보고자 한다면 외형을 전혀 고려하지 않고, 이미 있는 데이터를 그대로 사용해 화면을 만드는 것으로 충분
2️⃣ 자동화하려는 경우 데이터 마트를 생성
자주 Update 되는 데이터와 다수의 사람에게 공유되는 데이터 등 중요성이 높은 것은 차례대로 자동화해 나감.