다양한 대시보드 옵션 (TIL 30)

석형원·2024년 5월 11일

TIL

목록 보기
30/52

✏️ 오늘 학습한 내용

1. 다양한 시각화 툴
2. Superset
3. 대시보드 제작 예시
4. Superset 설치
5. Redshift 설정 및 차트 생성
6. 정리


🔎 다양한 시각화 툴

📃 시각화 툴이란?

  • 대시보드 혹은 BI(Business Intelligence)툴이라고 부르기도 함

  • KPI (Key Performance Indicator), 지표, 중요한 데이터 포인트들을 데이터를 기반으로 계산/분석/표시해주는 툴

  • 데이터 기반 의사결정

    • 데이터 기반 결정 (Data-Driven Decision)

    • 데이터 참고 결정 (Data-Informed Decision)

  • 현업 종사자들이 데이터 분석을 쉽게 할 수 있도록 하는 툴

시티즌 데이터 애널리스트, 사이언티스트란?

데이터 인력이 아닌 현업에 있는 사람들이 대시보드를 직접 만들고 지표를 정의해서 팀에 필요한 일들을 중앙에 있는 데이터 팀을 통하지 않고 수행하는 사람들

📃 시각화 툴의 종류

  • Excel, Google Spreadsheet : 가장 많이 쓰이는 시각화 툴

  • Python, R : 데이터 특성 분석 (EDA)에 적합

  • Mode Analytics : 오픈 소스 기반에 EDA에 적합


  • Looker - 구글
  • Tableau - 세일즈포스
  • Power BI - 마이크로소프트

    위 3가지는 정말로 제대로 된 지표를 보고 KPI를 확인하기 위한 대시보드


  • Apache Superset - 오픈소스 기반
  • ReDash - 오픈소스 기반

    위 2가지도 Power BI와 비슷한 기능을 제공하지만 오픈소스인 만큼 기능에 한계가 있습니다.


  • Google Studio : 구글 클라우드의 시각화 툴
  • AWS Quicksight : AWS의 기본 시각화 툴

    이 2가지는 기능이 정말 떨어짐

📃 Looker

  • 2012년 미국 캘리포니아 산타크루즈에서 시작

  • 구글이 2019년 6월에 $2.6B에 인수

    • 지금은 구글 클라우드의 일부
  • 특징

    • LookML이 자체언어로 데이터 모델을 만드는 것으로 시작
    • 내부 고객뿐만 아니라 외부 고객을 위한 대시보드 작성가능
    • 고가의 라이센스 정책을 갖고 있으나 굉장히 다양한 기능 제공

📃 ReDash

  • 오픈소스로 시작

  • Superset과 상당히 흡사

    • 더 강력한 Query Editor를 제공하지만 사용자 권한 관련 기능이 부족
  • 2020년에 Databrick이 인수

📃 Mode Analytics

  • 2013년에 샌프란시스코에서 창업됨

  • SQL, R, Python 등을 기반으로 데이터 분석 가능

    • 보다 테크니컬한 인력을 대상으로한 애널리틱스 기능 제공
    • KPI 대시보드라기 보다는 EDA (Exploratory Data Analysis) 툴에 가까움

📃 어떤 시각화 툴을 선택할 것인가?

  • Looker 혹은 Tableau가 가장 많이 사용되는 추세

  • 중요한 포인트는 셀프서비스 대시보드를 만드는 것

    • 안 그러면 매번 사람의 노동이 필요해짐

      • 60 ~ 70%의 질문을 셀프 서비스 대시보드로 할 수 있다면 대 성공
    • 사용하기 쉬워야 더욱 많은 현업 인력들이 직접 대시보드를 만들 수 있습니다.

      • 데이터 민주화 (Data Democratization)

      • 데이터 탈중앙화 (Data Decentralization)

      • 데이터 품질이 중요해짐에 따라 데이터 거버넌스가 필요

    • 이런 측면에서 Looker가 좋은 선택이지만 비쌈


🔎 Superset

Airbnb에서 시작된 오픈소스

  • Airflow를 만든 Maxim이란 사람이 같이 시작한 오픈소스
    • 현재 Airbnb의 전사 대시보드가 Superset
  • 상용화 서비스도 시작

📃 Superset이란?

  • 다양한 형태의 visualization과 손쉬운 인터페이스 지원

  • 대시보드 공유 지원

  • 엔터프라이즈 수준의 보안과 권한 제어 기능 제공

  • SQLAlchemy와 연동

    • 다양한 데이터베이스 지원
  • Druid.io와 연동하여 실시간 데이터의 시각화도 가능

  • API와 플러그인 아키텍처 제공으로 인한 확장성이 좋음

📃 Superset 구조와 용어

  • Flask와 React JS로 구성됨

  • 파이썬으로 만들어짐

  • 기본으로 sqlite메타데이터 데이터베이스로 사용
    ( sqlite는 병렬성이 떨어지기에 사실 상 사용하지 않음 )

  • Redis를 캐싱 레이어로 사용

  • SqlAlchemy가 백엔드 DB 접근에 사용

  • Database/Dataset

    • Database : 관계형 데이터베이스 ( Redshift와 같은 어떤 DB 엔진을 의미 )
    • Dataset : 테이블
  • Dashboard/Chart

    • Dashboard는 하나 이상의 Chart로 구성

🔎 대시보드 제작 예시

하나의 대시보드 안에서 2개의 차트를 생성해보려고 합니다.

  • Database로 Redshift를 사용

  • 채널별 Monthly Active User 차트

    • 입력 테이블(Dataset)은 analytics.user_session_summary
  • Monthly Cohort 차트

    • 입력 테이블은 analytics.cohort_summary

📃 MAU 차트 입력

입력 테이블로 Redshift의 user_session_summary를 사용하도록 하겠습니다.

# CTAS로 user_session_summary를 생성
CREATE TABLE analytics.user_session_summary AS
SELECT usc.*, t.ts
FROM raw_data.user_session_channel usc
LEFT JOIN raw_data.session_timestamp t ON t.sessionid = usc.sessionid

📃 구글 스프레드 시트를 사용한 MAU 시각화

Python에서 gspread라는 모듈을 통해 구글 스프레드 시트 조작을 코드할 수 있습니다.

Redshift에서 아래 쿼리를 실행하고
그 결과를 mau.csv로 저장합니다.

SELECT
 LEFT(ts, 7) "month",
 COUNT(DISTINCT userid) mau
FROM analytics.user_session_summary
GROUP BY 1
ORDER BY 1;
  • 이 파일을 Googele Spreadsheet로 로딩

  • 차트 기능을 사용해 시각화

📃 코호트 분석이란?

  • 코호트(Cohort)란?
    ( 같은 속성을 가진 사용자를 의미 )
    • 특정 속성을 바탕으로 나뉘어진 사용자 그룹
    • 일반적으로 같은 속성은 사용자의 서비스를 등록(or 방문)한 월(날짜)을 의미
  • 코호트 분석이란?
    • 코호트를 기반으로 다음을 계산
    • 사용자의 이탈률, 잔존률, 총 소비금액 등
  • 코호트 기반 사용자 잔존률 (Retention)
    • 보통 월 기반을 시각화해서 보는 것이 일반적

서비스를 사용한 사람이 시간이 지남에 따라 어떤 형태로 재방문을 하고 어떤 형태로 돈을 사용하는지를 분석하여 이탈률, 잔존률, 총 매출 금액 등을 파악

📃 Cohort 차트 입력

Cohort 분석을 위해 Redshift에 cohort_summary라는 테이블을 생성해주겠습니다.

CREATE TABLE analytics.cohort_summary as
 SELECT cohort_month, visited_month, cohort.userid
 FROM (
 SELECT userid, date_trunc('month', MIN(ts)) cohort_month
 FROM raw_data.user_session_channel usc
 JOIN raw_data.session_timestamp t ON t.sessionid = usc.sessionid
 GROUP BY 1
 ) cohort
 JOIN (
 SELECT DISTINCT userid, date_trunc('month', ts) visited_month
 FROM raw_data.user_session_channel usc
 JOIN raw_data.session_timestamp t ON t.sessionid = usc.sessionid
 ) visit ON cohort.cohort_month <= visit.visited_month and cohort.userid = visit.userid;

📃 구글 스프레드 시트를 사용한 코호트 시각화

Redshift에서 아래 쿼리를 실행하고
그 결과를 cohort.csv로 저장합니다.

SELECT
 DATEDIFF(month, cohort_month, visited_month) month,
 cohort_month,
 COUNT(userid) users
FROM analytics.cohort_summary
GROUP BY 1, 2
ORDER BY 1, 2;
  • 이 파일을 Googele Spreadsheet로 로딩

  • 피봇 테이블 기능을 사용해 시각화


🔎 Superset 설치

설치하는 방법에는 2가지 방법이 있습니다.
1. Docker 이용 설치

  1. Preset.io에 있는 서비스 사용
  • Docker에 익숙하고 개인 컴퓨터 사용이 충분하다면 Docker가 더 좋습니다.
    • Superset 오픈소스를 그대로 쓰는 형태
  • Preset.io는 무료 Starter 플랜이 있기는 하지만 회사 이메일이 있는 경우만 사용 가능합니다.
    • Superset 오픈 소스를 기반으로 변경된 버전을 사용하는 형태. 하지만 오픈소스 버전과 크게 다르진 않습니다.

-> 저는 Docker를 사용해서 진행하겠습니다.

📃 Docker란 무엇인가?

예를 들어, MySQL을 다른 OS에서 설치하려면 다양한 변수가 존재합니다.

-> 이 경우, 설치 과정이 OS와 OS의 버전에 따라 달라지게 됩니다. 그렇기 때문에 다양한 다수의 다른 소프트웨어들의 설치가 동반되는 것이 일반적입니다.

Docker

특정 프로그램과 그 프로그램을 실행하는데 필요한 기타 소프트웨어들을 하나의 패키지로 만듦으로써 해당 프로그램의 개발과 사용을 도와주는 오픈소스 플랫폼 입니다.

  • Docker Image : 이 패키지를 파일 시스템 형태로 만드는 것

  • Docker Registry : Docker Image 공유소

  • Docker Container : Docker Image를 실행 시킨 것
    ( 사전에 Docker Engine이 실행되어 있어야 합니다. )

Docker란?

  • Docker Image

    • 단순히 응용 프로그램 뿐만 아니라 그 프로그램이 필요로 하는 모든 다른 환경까지 포함한 소프트웨어 패키지
  • Docker Container

    • Docker Image를 Docker Engine에서 실행한 것을 지칭
    • Docker Engine만 실행하면 그 위에서 다양한 소프트웨어들을 충돌없이 실행 가능

📃 Redshift 연결

Redshift 연결 정보

Host: learnde.~.ap-northeast-2.redshift.amazonaws.com

  • Port: 5439
  • Database: dev
  • ID: ...
  • Password: ...

사용할 Redshift 테이블 정보

  • raw_data.user_session_channel
  • raw_data.session_timestamp
  • raw_data.session_transaction
  • analytics.user_session_summary
  • analytics.cohort_summary

📃 Docker로 Superset 설치

  • Docker 메모리 할당
    ( Setting -> Resources )

    • 맥에선 6GB가 필요
    • 윈도우에선 8GB가 필요

      wsl2 옵션을 사용하고 있으므로 메모리를 제한하기 위해서는 c:\Users\사용자명 위치에 .wslconfig 파일을 생성해주어야합니다.

      [wsl2]
      memory=8GB
      processors=4
      swap=0
  • Superset의 Docker 기반 설치 문서 참조

    https://superset.apache.org/docs/installation/docker-compose/

  • 원하는 경로에 Superset Github repo를 클론
    git clone https://github.com/apache/superset.git

  • superset 폴더로 이동해서 아래 명령을 수행

cd superset

git checkout 1.4.0

docker-compose -f docker-compose-non-dev.yml pull
# superset 실행
docker-compose -f docker-compose-non-dev.yml up

docker-compose -f docker-compose-non-dev.yml up에서 SECRET_KEY 에러가 발생하는 경우

superset/superset/config.py에서
SECRET_KEY = ...를 복사해서
superset/docker/pythonpath_dev/supersetconfig.py에 값을 붙여넣어주면 해결이 됩니다.

  • http://localhost:8088 로 웹 UI 로그인

    • admin:admin 사용
  • 이후에 다시 실행을 하기 위해선, Docker -> Actions에서 시작 버튼을 눌러주면 됩니다.


🔎 Redshift 설정 및 차트 생성

  • 사용하는 Superset의 버전 2.1.0

📃 Database Connection 설정

📃 user_session_summary 테이블을 Dataset으로 추가

  1. Datasets 메뉴 : import된 Dataset을 선택 가능 (연산을 할 때마다 읽어오는 방식)
  2. (+DATASET) 클릭
  3. user_session_summary 테이블 선택
  4. CREATE DATASET AND CREATE CHART : 차트 생성 화면으로 이동

📃 MAU 차트 생성

  1. Chart type의 #Popular 태그에서 Line Chart를 선택하고 차트 생성

  2. MAU 차트를 생성

  • X-AXIS : x축을 ts(timestamp)으로 함
  • TIME GRAIN : Month, 월 별로 차트를 생성
  • METRICS : Y값으로 사용할 값을 SQL로 지정
  • DIMENSIONS : channel, 채널 별로도 보고 싶으면 디멘션을 사용해 추가 그래프를 생성

📃 Superset의 차트 옵션

  • Big Number, Big Number with Trendline

    중요한 KPI를 Summary해서 보여줄 때 유용
    ( 시간을 두고 어떻게 변하는 지 )
    월 간 매출이나 지난 18개월 매출이 어떻게 변화하고 있는지 보여주기 용이
    WoW : Weak of Weak

📃 cohort_summary 테이블을 Dataset으로 추가

  1. Datasets 메뉴 : import된 Dataset을 선택 가능 (연산을 할 때마다 읽어오는 방식)
  2. (+DATASET) 클릭
  3. chort_summary 테이블 선택
  4. CREATE DATASET AND CREATE CHART : 차트 생성 화면으로 이동

📃 Cohort 차트 생성 (1)

  1. Chart type의 #Popular 태그에서 Pivot Chart를 선택하고 차트 생성

  2. MAU 차트를 생성

  • Columns : visited_month (x축 : 방문 월 = 첫 방문 + 재방문 )
  • Rows : cohort_month (y축 : 첫 방문 월, 같은 달에 들어온 사람을 하나의 cohort로 봄)
  • Time Grain : Month : 단위 월
  • Metrics : COUNT(*) : 사용자 수

📃 Cohort 차트 생성 (2)

위에서 만든 차트와의 차이는 Columns 뿐 입니다.
Columns이 연도 월이 아니라 일관되게 볼 수 있도록 조정한 차트입니다.
cohort_month 이후 몇 번째 방문한 사람인지 한 눈에 보기 쉽습니다.
( retention 계산하기가 쉬워짐 )

  • Columns : DATEDIFF(month, cohort_month, visited_month)
    ( cohort_month와 visited_month간의 차이를 계산, 단위는 Month )

📃 대시보드 생성

KPI Dashboard란 이름의 대시보드를 생성

  • Cohort 차트 크기 조정 - EDIT DASHBOARD

  • 대시보드에 MAU 차트 추가

    • Charts 메뉴에 들어가 MAU chart를 선택 -> SAVE -> SAVE & GO TO DASHBOARD

🔎 정리

  • 클라우드 데이터웨어하우스의 기능은 대동소이

    • 하지만 다양한 관점에서 봤을 때 Snowflake, BigQuery, Redshift의 순으로 추천
      ( 비용의 제약이 없는 경우, Snowflake는 비쌈 )
    • 가변비용 모델이 일반적으로 고정비용 모델보다 더 큰 데이터 처리 가능
    • 작은 회사이고 비용이 중요하다면 Redshift 가변비용이 더 좋음
  • 데이터 거번넌스

    • 데이터 품질 유지와 개인정보 보호를 보장하기 위한 프로세스
  • 대시보드

    • 기술적인 분석 중심 대시보드 기술과 아닌 것 존재
  • 후자가 Tableau, Looker, Power BI, Superset 등등 -> KPI/지표 대시보드

  • 전자는 Mode Analytics, Python Notebook, Excel 등등

profile
데이터 엔지니어를 꿈꾸는 거북이, 한걸음 한걸음

0개의 댓글