1 - 1. 빅데이터의 정착
- Hadoop: 다수의 컴퓨터에서 대량의 데이터를 처리하기 위한 프레임워크, MapReduce 혹은 Hive 등을 올려서 썼음.
- NoSQL: RDB 외의 DB들. 아래를 포함한 다양한 종류 가짐. (일반적으로) RDB보다 고속의 읽기, 쓰기를 지원하며 분산처리 지원.
1. key-value store: 말그대로 키 밸류 형식 저장
2. document store: JSON과 비슷한 복잡한 데이터를 저장하기 위함
3. wide-column store: 여러 키를 사용하여 고확장성 지원
1 - 2. 빅데이터 시대의 데이터 분석의 기반
- 데이터 파이프라인: 일반적으로, 차례대로 전달해나가는 데이터로 구성된 시스템을 말함
- 기간계 시스템(mission-critical system): 비즈니스 근간에 관련된 중요 시스템, 마비 될 시 업무 전체가 멈추므로 테스트를 반복하여 매우 신중하게 운영
- 정보계 시스템(information system): 사내 커뮤니케이션 혹은 의사 결정 등을 위한 시스템, 기간계 시스템보다는 그 영향이 적고 운영 정책도 일반적으로 널널함.
- 위 둘을 잘 구분하고 혼합하지 않는게 중요 => ex) 사내 커뮤니케이션 시스템이 기간계와 붙으면 추후 업데이트가 힘듬.
- 일반적으로 데이터 분석계는 정보계 시스템으로서 분리되어야 효율적으로 운영됨 => 일반적으로 기간계 시스템의 로그, DB 등을 복사하여 저장, 처리하는 방식으로 서로 연결됨. (복사하지 않으면 안됨. 부하를 주면 안됨)
- 따라서 데이터 분석 시스템은 우선 데이터를 복사해서 적재하는 것으로부터 시작함. => 이 때 항상 같은 원본 데이터에 액세스 가능한지는 보장될지 모르므로 삭제는 하지 않는 방향이 좋음.
- Confimatory Data Analysis: 가정을 세우고 그를 검증하기 위한 데이터 분석
- Exploratory Data Analysis: 데이터를 봐가면서 그 의미를 분석
- 빅데이터 기술은 빅데이터일 때 사용하는 의미가 있다.
1 - 3. [속성 학습] 스크립트 언어에 의한 특별 분석과 데이터 프레임
- re 라이브러리 사용
# 데이터 준비를 위해 다운로드한 데이터 (나사로 들어오는 네트워크 트래픽 로그라는듯?)
mkdir sample_log_data &&
cd sample_log_data &&
wget -O log_file.gz "http://ita.ee.lbl.gov/traces/NASA_access_log_Jul95.gz" &&
gunzip log_file.gz
# 예제코드
import re
import pandas as pd
pattern = re.compile(r'^\S+ \S+ \S+ \[(.*)\] "(.*)" (\S+) (\S+)$')
def parse_access_log(path):
for line in open(path, encoding="latin1"):
for m in pattern.finditer(line):
yield m.groups()
columns = ['times', 'request', 'status', 'bytes']
pd.DataFrame(parse_access_log('log_file'), columns=columns)
- times 컬럼 정제 및 csv로 보관
# 데이터 클리닝 및 확인
df = pd.DataFrame(parse_access_log('log_file'), columns=columns)
df['times'] = pd.to_datetime(df['times'], format='%d/%b/%Y:%X', exact=False)
df.head(2)
- 대표적 pandas의 데이터 전처리 관련 함수 목록
- ix: 조건으로 필터링
- drop: 삭제
- rename
- dropna
- fillna
- apply
- 또한 pandas를 이용하여 시계열 데이터도 다뤄볼 수 있음. => 보통 시간을 인덱스로 지정한다고 함. => 아래와 같이 가능
import pandas as pd
df1 = pd.read_csv('access_log.csv', parse_dates=['times'])
df2 = df1.set_index('times')
df3 = df2['1995-07-01' : '1995-07-03']
df3.size # 결과: 643689
- pandas로 DB랑 연결하고 데이터를 읽고 쓰기
# 구글 코랩에는 이미 sqlite3가 내장되어 있어서 따로 설치할 필요 X
import sqlite3
import pandas as pd
# SQLite 데이터베이스 생성 (파일 기반, 'test.db' 생성됨)
conn = sqlite3.connect("test.db")
# 커서(cursor) 생성
cursor = conn.cursor()
# Pandas DataFrame을 SQLite 테이블에 삽입
df.to_sql("sample_log", conn, if_exists="append", index=False)
# SQL 쿼리를 실행하고 결과를 Pandas DataFrame으로 반환
query = """
SELECT *
FROM sample_log
WHERE times BETWEEN '1995-07-01' AND '1995-07-03'
"""
df_sql = pd.read_sql("SELECT * FROM sample_log", conn)
# 결과 출력
df_sql.head()
1 - 4. BI 도구와 모니터링
- KPI: Key Performance Indicator, 업계 혹은 회사, 팀 내의 주요 지표 => DAU, MAU, Retention, Average Revenue Per Paid User(ARPPU), CTR(Click Through Rate), CPC(Cost Per Click), CPA(Cost Per Acquisition) 등.
- KPI에서 중요한 점: actionable한가? 좋고 나쁨을 확실히 판단할 수 있는가? => 목표 수립 후 예상과 다르다면 좋든 나쁘든 분석과 행동이 필요. => 'data driven decision making'
- BI툴은 정기적인 보고로 주요 변화 파악을 위한 툴 => 이상한 변화가 있다면 재집계 등으로 이유 파악
- 시각화 자체는 어렵지 않으나, 시각화를 위한 형태의 데이터가 준비되어야함.
1 - 5. 요약
- Hadoop, NoSQL 등의 기술의 대두 => 기존 DW대체
- 클라우드 서비스, BI툴 보급 => 데이터 수집, 쿼리 엔진, 워크플로우 관리 등으로 이루어진 '빅데이터' 기술 분야 시작
- DL: 일단 적재하는 싼 스토리지 => 분산 처리 시스템에서 처리 => DM: BI 툴 등으로 액세스하여 분석 결과 표현