Post

[Data] [빅데이터를 지탱하는 기술] 정리하기 - 2-3 애드 혹 분석과 시각화 도구

빅데이터를 지탱하는 기술 시리즈로 2장 3절, 애드 혹 분석과 시각화 도구를 정리했습니다.

[Data] [빅데이터를 지탱하는 기술] 정리하기 - 2-3 애드 혹 분석과 시각화 도구

개요

안녕하세요.

이번 글에서는 “빅데이터를 지탱하는 기술” 이라는 책의 2장 3절, “애드 혹 분석과 시각화 도구”를 정리했습니다.


Jupyter Notebook에 의한 애드 혹 분석 - 노트북에 분석 과정 기록

어떤 데이터 분석이라도 원하는 데이터와 집계 시간을 알기 어려우므로 보통 애드 혹 분석에서 시작합니다.

다양한 도구가 있지만 이 절에서는 Jupyter Notebook을 이용하겠습니다.

Jupyter Notebook은 오픈 소스 대화형 도구로 스크립트 언어 실행에 사용됩니다.

Jupyter Notebook을 시작하면 웹 브라우저 실행하며 사용 언어를 선택해 새 노트북(Notebook)을 생성합니다.

파이썬 스크립트와 외부 명령어를 실행할 수 있고 마크다운 형식으로 주석, 사진, 수식 등을 작성할 수 있습니다.

웹 애플리케이션이지만 일반적으로 로컬 호스트에서 가동하는 경우도 적지 않아요.

다양한 이유가 있겠지만 애드 혹 분석의 잦은 파일 읽고 쓰기로 인한 업로드와 다운로드 시간 문제가 있구요.

또한 노트북 자체는 JSON 파일이므로 로컬 파일로 처리하기 원할한 것도 여러 이유 중 하나입니다.

[그림 1] 노트북 초기 화면 [그림 1] 노트북 초기 화면

노트북에 의한 워크플로 - 일련의 태스크를 한꺼번에 실행하기

수작업으로 실행하는 워크플로에 실행할 수 있습니다.

외부 명령어 실행도 !로 해당 명령어를 시작한다면 가능합니다.

예를 들어 seaborn 라이브러리를 설치 후 iris 데이터셋을 사용하고 싶다면 다음과 같이 실행할 수 있습니다.

1
2
3
4
5
6
7
8
9
[1]: !pip install pandas numpy matplotlib seaborn
[2]: import pandas as pd
     import numpy as np
     import random as rnd
     import seaborn as sns
     import matplotlib.pyplot as plt
     %matploblib inline
[3]: df_iris_origin = sns.load_dataset("iris")
     df_iris_origin.head()

[그림 2] 노트북 워크플로 [그림 2] 노트북 워크플로

자동화의 필요성이 떨어진다면 Jupyter Notebook을 중심으로 애드 혹 분석 환경을 갖추는 것이 중요합니다.

그 이후 수작업으로 힘든 시기가 왔을 때 자동화로 변환해도 늦지 않습니다.

노트북 내에서의 시각화

Jupyter Notebook은 그래프 라이브러리를 지원합니다.

대표적으로 matplotlib를 꼽을 수 있는데요.

시각화에 프로그래밍을 사용하므로 적응하기까지 시간이 소요되지만 유사한 그래프를 다시 만드는 경우 매우 유용합니다.

마우스 조작을 이용한 대화형 차트를 원한다면 스프레드시트나 BI 도구를 고려해봅시다.

다음은 seaborn에서 iris 데이터셋을 가져와 산점도 그래프를 그린 예시입니다.

1
sns.scatterplot(x="sepal_length", y="sepal_width", data=df_iris_origin)

[그림 3] 노트북 그래프 [그림 3] 노트북 그래프

대시보드 도구 - 정기적으로 집계 결과를 시각화하기

대시보드 도구는 새로운 그래프 추가에 용이합니다.

따라서 최선의 집계 결과를 빠르게 확인할 수 있죠.

반면 BI 도구는 대화형 데이터 탐색에 뛰어납니다.

그러므로 상세한 표시로 전환하거나 집계 기반이 되는 로우 데이터를 탐색하기 좋습니다.

Redash - SQL에 의한 쿼리의 실행 결과를 그대로 시각화

다수의 데이터 소스를 지원하는 파이썬 기반 대시보드 도구입니다.

가장 먼저 RDBMS, 파일, DW 등의 데이터 소스를 등록합니다.

등록한 데이터 소스 쿼리를 실행해 표와 그래프를 생성할 수 있으며 이를 대시보드에 추가하는 방식으로 작성합니다.

1개의 쿼리에서 1개 또는 여러 개의 그래프를 만들 수 있습니다.

이렇게 등록한 쿼리를 정기적으로 실행하고 그 결과를 Redah의 데이터베이스에 저장합니다.

Hive에서 1시간 주기로 쿼리를 한다면 Redash는 마지막으로 실행한 집계 결과를 표시하므로 데이터 마트의 필요성이 줄어듭니다.

Redash의 특징은 다음과 같습니다.

  1. 구조를 알기 쉽습니다.
  2. SQL로 쿼리를 작성하고 공유하기 위한 콘솔로써 기능할 수 있습니다.
  3. BI 도구 만큼 대량의 처리는 어렵습니다.
  4. 각 쿼리는 그래프에 필요한 수십 ~ 수백 행 레코드만 반환하고 이를 그래프 수만큼 반복합니다. 따라서 대시보드의 증가에 따라 백엔드 데이터베이스의 부하도 늘어납니다.

저는 다음의 github 저장소(https://github.com/getredash/setup)에서 docker compose을 통해 데모를 실행했습니다.

[그림 4] redash 초기 화면 [그림 4] redash 초기 화면

데이터 마트는 필요 없어질까?

컴퓨터 성능에 따라 집계 속도가 빨라지면서 충분한 리소스를 바탕으로 데이터 마트의 필요성에 의문이 생기고 있습니다.

하지만 현실에서는 성능을 위해 시스템 부하를 낮출 필요가 있습니다.

예를 들어 데이터 웨어하우스와 데이터 레이크 내부에 중간 테이블을 생성하고 이를 데이터 마트로 활용하는거죠.

따라서 시스템을 구성할 때 성능과의 균형을 충분히 고민해야 합니다.

만약 데이터 웨어하우스에서 커다란 배치를 처리할 때마다 BI 도구가 멈춘다면 어떨까요??

데이터 마트는 안정적인 성능을 요구하므로 대시보드 전용 데이터베이스의 설치도 하나의 해결책이 될 수 있습니다.

Superset - 화면상에서 마우스 조작만으로 그래프 생성

대화형 대시보드 작성을 위한 파이썬 기반 웹 애플리케이션입니다.

화면상에서 마우스 조작으로 그래프를 생성합니다.

Superset은 내장 스토리지 시스템이 없어 데이터 집계를 외부 데이터 저장소에 의존합니다.

이러한 데이터 저장소 중 시계열 데이터에 대응한 열 지향 스토리지 Druid를 지원하는데요.

스트리밍형 데이터 전송과 조합해 실시간 정보를 다룰 수 있습니다.

Druid를 이용하지 않는다면 지연이 적은 RDB나 MPP 데이터베이스를 통한 고속화가 필요합니다.

BI 도구와 마찬가지로 시각화를 위한 데이터 마트가 중요합니다.

또한 본격적인 도입 이전에 워크플로 관리 도구에 대한 고민이 필요합니다.

redash와 마찬가지로 github 저장소(https://github.com/apache/superset)에서 docker compose를 이용해 실행했습니다.

[그림 5] superset 샘플 화면 [그림 5] superset 샘플 화면

CSV 파일에 의한 간이적인 데이터 마트

한편 CSV 파일을 이용한 임시 데이터 마트도 여러 방안 중 하나입니다.

CSV 파일의 읽고 쓰기는 거의 모든 분석 도구 및 시각화 도구에서 지원합니다.

그리고 스몰 데이터의 처리에는 오히려 로컬 호스트가 가장 빠릅니다.

게다가 네트워크 I/O나 디바이스 I/O도 거의 없습니다!

Kibana - Elasticsearch의 프론트 엔드에서 실시간으로 작성

Kibana는 자바스크립트 기반의 대화식 시각화 도구입니다.

검색 엔진인 Elasticsearch의 프론트 엔드로 개발되어 도입 시 ES가 필수입니다.

ES의 데이터 소스에는 대응하지 않아 RDB 등에 직접 사용은 어렵고 데이터 스토어로 ES를 채용하는 게 일반적입니다.

텍스트 데이터 검색에 강하지만 SQL을 이용한 복잡한 데이터 분석에는 취약합니다.

[그림 6] kibana 샘플 화면 [그림 6] kibana 샘플 화면

BI 도구 - 대화형 대시보드

BI 도구는 몇 개월 단위의 장기적인 데이터 추이를 시각화하거나 집계의 조건을 세부적으로 조정할 수 있습니다.

이러한 분석을 위한 데이터 가공을 쉽게 찾을 수 있습니다.

유사한 상품을 하나의 그룹으로 정리하거나 IP 주소를 위치 정보로 변환하는 등의 작업이 그 예시입니다.

하지만 하나의 대시보드에 표시할 수 있는 정보에는 한계가 있습니다.

그러므로 표시하는 표이터를 화면으로 추려낼 수 있도록 디자인합시다!

하나의 데이터를 다각적으로 분석하기

대화형 대시보드의 경우 바탕이 되는 데이터를 모두 포함하는 하나의 테이블을 작성합니다.

보통 전체 숫자를 파악할 수 있는 것과 주요 지표를 정리한 것으로 구성됩니다.

BI 도구의 시각화 내용을 늘릴 때는 데이터 웨어하우스의 테이블만으로 부족한 경우가 많습니다.

이에 대응하기 위해서는 배치 처리를 통해 데이터 마트를 작성합니다.

[그림 7] 하나의 테이블에서 다수의 대시보드 작성하기 [그림 7] 하나의 테이블에서 다수의 대시보드 작성하기


마무리하며

이번 글에서는 애드 혹 분석과 시각화에 대해 살펴보았습니다.

대부분의 분석은 애드 혹 분석에서 시작합니다.

이후 수동으로 집계가 어려운 시점에 redash, superset, kibana나 BI 도구 등을 통해 자동화를 도입합니다.

저희 회사의 경우 retool이라는 로우 코드 툴을 사용 중입니다.

덕분에 다른 기술에 대해 조금씩 맛볼 수 있는 절이었습니다. :)

이 글이 조금이나마 도움이 되셨으면 합니다.

감사합니다. 😀


참고 문헌

This post is licensed under CC BY 4.0 by the author.