Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2024.01.28] chapter1. 빅데이터의 기초 지식 (2) - MY #2

Open
chominyeong opened this issue Jan 26, 2024 · 0 comments
Open

Comments

@chominyeong
Copy link
Owner

1-3 스크립트 언어에 의한 특별 분석과 데이터 프레임

스크립트 언어

  • R
  • Python ← 데이터 엔지니어 사이에서 인기가 높음
    • 다양한 분야 라이브러리 사용 가능, 외부 시스템의 API 호출, 데이터 전처리 용이
    • NumPy, SciPy, pandas

데이터 프레임

  • 스프레드시트에서 시트 자체를 하나의 객체로 취급
  • 데이터베이스에서 테이블 자체를 하나의 객체로 취급

웹 서버의 액세스 로그

  • 웹 서버의 액세스 로그는 데이터 웨어하우스와 BI 도구가 그대로 읽어들일 수 없다. → 파이선 정규식으로 파싱 필요

웹 서버의 액세스 로그
x.x.x.x - - [01/Jul/1995:00:00:01 -0400] "GET /history /apollo..." 200 6245
x.x.x.x - - [01/Jul/1995:00:00:05 -0400] "GET /shuttle /countd..." 200 3985

import re
import pandas as pd

# 정규표현식
pattern = re.compile('^\S+ \S+ \S+ \[(.*\)] "(.*)" (\S+) (\S+)$')

# 정규 표현으로 파싱하는 함수
def parse_access_log(path):
    for lin 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)

정규표현식
https://namhandong.tistory.com/65

  • 결과는 데이터프레임으로 나옴
    KakaoTalk_20240126_214343909

시계열 데이터 집계

import pandas as pd
df1 = pd.read_csv('access_log.csv', parse_dates=['time'])
df2 = df1.set_index('time')
df3 = df2['1995-07-01' : '1995-07-03']

df3.resample('ld').size() #1일분의 액세스 수 카운트
>> time
>> 1995-07-01 @@@
>> 1995-07-02 @@@
>> 1995-07-03 @@@

SQL 결과를 데이터프레임에 사용

import pandas as pd
import sqlalchemy
engine = sqlalchemy.create_engine('sqlite:///sample.db') # 데이터베이스에 접속

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)
>> time
>> 1995-07-01 @@@
>> 1995-07-02 @@@
>> 1995-07-03 @@@

  • SQLite로도 작성 가능



1-4 BI 도구와 모니터링

모니터링

  • 데이터의 변화 추적
    • 1개월, 1주일마다 정기적인 일정으로 동일한 집계를 반복하여 추이 관측
  • 월간 수입 지출 보고서 → 지출에 문제 발견 → 지출의 내역(상세하게 확인 가능)

KPI 모니터링

  • key performance indicator
  • 업계별 KPI의 예
    KakaoTalk_20240126_215715228
  • KPI 모니터링에 의해서 다음 행동이 가능한 것인가(actionable)를 판단
  • 행동을 결정할 때 객관적인 데이터를 근거하여 판단 : "데이터 기반(data-driven) 의사 결정"

Tableau Public

  • 태블로는 행과 열에 원하는 컬럼을 넣으면 특별한 코딩 지식 없이도 시각화가 가능하다.
  • 태블로와 같은 BI 도구는 고속의 집계 엔진을 내장하고 있어 수백만 레코드 정도의 스몰 데이터라면 순식간에 그래프를 그려준다.
  • 애드 혹 분석 등에서 대화형으로 데이터를 시각화하고 싶을 때 편리하다.
    image

  • 그러나 BI 도구로 원하는 결과를 얻기 위해서는 데이터프레임에 해당 컬럼이 존재하고, 원하는 type으로 데이터가 존재해야 한다.
  • 제대로 설계된 데이터가 없다면, 자신의 생각과 딱 맞는 화면을 만들 수 없다는 점이 BI 도구의 한계이다.
  • → 수작업으로 하려면 수작업으로 하셈
  • → 자동화하려는 경우에는 데이터 마트를 만든다.
    • 이 책에서는 "데이터 마트를 준비하고, 그것을 BI 도구로부터 열기" 방법을 사용한다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant