기록 블로그

프로그래머스 데브코스-데이터 엔지니어/TIL(Today I Learned)

05/26 35일차 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (5)

usiohc 2023. 5. 26. 17:12

대시보드, BI


주요 메모 사항


시각화 툴이란?

  • 대시보드 혹은 BI(Business Intelligence)툴이라고 부르기도 함
  • KPI (Key Performance Indicator), 지표, 중요한 데이터 포인트들을 데이터를 기반으로 계산/분석/표시해주는 툴
  • 결국은 결정권자들로 하여금 흔히 이야기하는 데이터 기반 의사결정을 가능하게함
    • 데이터 기반 결정 (Data-Driven Decision)
    • 데이터 참고 결정 (Data-Informed Decision)
  • 현업 종사자들이 데이터 분석을 쉽게 할 수 있도록 해줌

 

시각화 툴 종류

  • Excel, Google Spreadsheet: 사실상 가장 많이 쓰이는 시각화 툴
  • Python: 데이터 특성 분석(EDA: Exploratory Data Analysis)에 더 적합
  • Looker (구글)
  • Tableau (세일즈포스)
  • Power BI (마이크로소프트)
  • Apache Superset (오픈소스)
  • Mode Analytics, ReDash
  • Google Studio
  • AWS Quicksight

 

Looker

  • 2012년 미국 캘리포니아 산타크루즈에서 시작
  • 구글이 2019년 6월에 $2.6B에 인수
    • 지금은 구글 클라우드의 일부
  • 특징
    • LookML이 자체언어로 데이터 모델을 만드는 것으로 시작
    • 내부 고객뿐만 아니라 외부 고객을 위한 대시보드 작성가능
    • 고가의 라이센스 정책을 갖고 있으나 굉장히 다양한 기능 제공

 

 

Tableau

  • 2002년 미국 캘리포니아 마운틴뷰에서 시작하여 2013년 상장
  • 세일즈포스가 2019년 6월에 $15.7B에 인수함
  • 특징
    • 다양한 제품군 보유. 일부는 사용이 무료
    • 제대로 배우려면 시간이 꽤 필요하지만 강력한 대시보드 작성가능
    • Looker가 뜨기 전까지 오랫동안 마켓 리더로 군림

 

 

ReDash

  • Superset과 상당히 흡사
    • 더 강력한 쿼리 에디터 제공하지만 사용자 권한 관련 기능은 부족
  • 2020년에 Databricks가 인수함

 

 

Mode Analytics

  • SQL, R, Python 등을 기반으로 데이터 분석 가능
    • 조금더 테크니컬한 인력을 대상으로한 애널리틱스 기능 제공
    • KPI 대시보드라기 보다는 EDA (Exploratory Data Analysis) 툴에 가까움

 

 

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

  • Looker 혹은 Tableau가 가장 많이 사용되는 추세
    • 두 툴 모두 처음 배우는데 시간이 필요함
    • Tableau의 가격이 더 싸고 투명하며 무료 버전도 존재해서 공부가 가능

 

  • 중요한 포인트는 셀프서비스 대시보드를 만드는 것
    • 안 그러면 매번 사람의 노동이 필요해짐
      • 60-70%의 질문을 셀프서비스 대시보드로 할 수 있다면 대성공
    • 또한 사용하기가 쉬워야 더 많은 현업 인력들이 직접 대시보드를 만들 수 있음
      • 데이터 민주화 (Data Democratization), 데이터 탈중앙화 (Data Decentralization)
      • 데이터 품질이 점점 더 중요해지며 데이터 거버넌스가 필요한 이유가 됨!
    • 이런 측면에서는 Looker가 더 좋은 선택이지만 가격이 상당히 비쌈

 

 


Superset

  • Airflow를 만든 Maxim이란 사람이 같이 시작한 오픈소스
  • 상용화 서비스도 시작됨
    • Maxim이 직접 창업
    • https://preset.io/
      • 여기에 무료 어카운트 생성 후 실습

 

특징

  • 다양한 형태의 visualization와 손쉬운 인터페이스 지원
  • 대시보드 공유 지원
  • 엔터프라이즈 수준의 보안과 권한 제어 기능 제공
  • SQLAlchemy와 연동- 다양한 데이터베이스 지원
  • Druid.io와 연동하여 실시간 데이터의 시각화도 가능
  • API와 플러그인 아키덱처 제공으로 인한 확장성이 좋음

 

 

Superset 구조와 용어

  • Flask와 React JS로 구성됨
  • 기본으로 sqlite을 메타데이터 데이터베이스로 사용
  • Redis를 캐싱 레이어로 사용
  • SqlAlchemy가 백엔드 DB 접근에 사용됨
  • Database/Dataset
    • Database == 관계형 데이터베이스 (예: Redshift)
    • Dataset == 테이블
  • Dashboard/Chart
    • Dashboard는 하나 이상의 chart로 구성

 

 


만들어볼 두 개의 차트와 하나의 대시보드

  • Database로 Redshift 사용
  • 채널별 Monthly Active User 차트
    • 입력 테이블(Dataset)은 analytics.user_session_summary
  • Monthly Cohort 차트
    • 입력 테이블(Dataset)은 analytics.cohort_summary

 

 

MAU 차트 입력: 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 시각화

  • 아래 SQL의 결과을 다운로드 받아 mau.csv로 저장
SELECT
 LEFT(ts, 7) "month",
 COUNT(DISTINCT userid) mau
FROM analytics.user_session_summary
GROUP BY 1
ORDER BY 1;
  • 이 파일을 Google Spreadsheet로 로딩
  • 이를 차트 기능을 사용해서 시각화 수행

 

 

 

 

 

 

코호트 분석이란?

 

  • 코호트(Cohort)란?
    • 특정 속성을 바탕으로 나뉘어진 사용자 그룹
    • 보통 속성은 사용자의 서비스 등록월

 

  • 코호트 분석이란?
    • 코호트를 기반으로 다음을 계산
    • 사용자의 이탈률, 잔존률, 총 소비금액 등

 

  • 코호트 기반 사용자 잔존률 (Retention)
    • 보통 월기반으로 시각화해서보는 것이 일반적

 

 

Cohort 차트 입력: cohort_summary

  • 먼저 아래 써머리 테이블을 Redshift 단에 생성 - 이미 만들어져 있음
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;

 

구글 스프레드시트로 해보는 코호트 시각화

  • 아래 내용을 다운로드 받아서 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;
  • 이 파일을 Google Spreadsheet로 로딩
  • 이를 피봇 테이블 기능을 사용해서 시각화 수행

 

  • Python에서는 gspread라는 모듈을 통해 구글 스프레드시트 조작을 코드로 가능

 


Docker 이용 설치 vs. Preset.io에 있는 서비스 사용

  • Docker에 익숙하고 개인컴퓨터 사양이 충분히 좋다면 Docker가 더 좋음
    • 이 경우는 Superset 오픈소스를 그대로 쓰는 형태
  •  Preset.io는 무료 Starter 플랜이 있기는 하지만 회사 이메일이 있는 경우에만 사용 가능 -> 현재는 학생도 가능한듯?
    • Superset 오픈소스를 기반으로 변경된 버전을 사용하는 형태. 하지만 오픈소스 버전과 크게 다르지 않음
  • 두 가지 설정 방법을 일단 모두 설명
    • Preset 셋업
    • Docker Superset 셋업
    • (세번째 방법은) 리눅스 서버에 설치하는 것
  • 차트/대시보드 생성 방식은 Superset 기준으로 설명

 

 

Docker?

  • 예를 들어 MySQL을 다른 OS에서 설치하려면 다양한 변수가 존재
    • 즉 설치 과정이 OS와 OS의 버전에 따라 달라지게 됨
    • 다양한 다수의 다른 소프트웨어들의 설치가 동반되는 것이 일반적임
  • Docker는 특정 프로그램과 (그 프로그램을 실행하는데) 필요한 기타 소프트웨어들을 하나의 패키지로 만듬으로써 해당 프로그램의 개발과 사용을 도와주는 오픈소스 플랫폼
    • 이 패키지를 먼저 파일 시스템 형태로 만드는데 이를 Docker Image라고 함
      • 이 Image는 다른 이들과 공유가능
      • Docker Image 공유소를 Docker Registry(Docker Hub)라고 부름
    • Docker Image를 실행시킨 것을 Docker Container라고 부르며 이 안에서 해당 프로그램이 실행됨
      • 이 때 Docker Engine이 먼저 실행되어 있어야함

 

  • Docker Image
    • 단순히 응용 프로그램 뿐만 아니라 그 프로그램이 필요로 하는 모든 다른 환경까지 포함한 소프트웨어 패키지
    • Docker Registry에 가면 다양한 Docker Image들을 찾아볼 수 있음
  • Docker Container
    • Docker Image를 Docker Engine에서 실행한 것을 지칭
    • Docker Engine만 실행하면 그 위에서 다양한 소프트웨어들을 충돌없이 실행 가능

 


Preset.io 생성부터 데모하기

  • Preset에서 Workspace는 하나의 Superset에 해당하고 여러 Workspace를 넘나드는 사용자와 팀 설정이 가능
    • 즉, 데이터베이스/데이터셋 연결등은 동일
    • 뒤에서 차트/대시보드 생성은 Docker 위에서 실행한 Superset 기준으로 설명

 

  • 먼저 Superset 회원가입 진행, 그 후에 Connect your data로 데이터베이스 연결을 진행

 

 

  • AWS Redshift 기준으로 진행할 것

 

 

  • 쉽게 연결된 모습

 

 

Docker Superset 실행

  • Superset의 Docker 기반 설치 문서 참조
  • 먼저 터미널 프로그램을 실행 후 적당한 폴더로 이동
  • superset 폴더로 이동
    • cd superset
  • 다음 2개의 명령을 수행
    • docker-compose -f docker-compose-non-dev.yml pull
    • docker-compose -f docker-compose-non-dev.yml up
    • 아래는 최신 버전을 다운로드. 특정 버전을 다운로드하려면 아래를 먼저 실행
      • git checkout 1.4.0

 

  • 명령 실행 후 Docker Containers에 올라오는 모습

 

 

 

  • http://localhost:8088으로 웹 UI 로그인
    • admin:admin 사용

 

 

 

  • 위에서 Preset.io 를 사용해 데이터베이스 연결과 똑같음
  • 다만, Docker 위의 Superset은 오픈소스 기반이라 Redshift가 따로 나오지는 않음
  • 그래서 Redshift와 호환되는 PostgreSQL로 연결, Display Name는 Redshift로 설정할꺼임

 

 

 

  • user_session_summary 테이블을  Dataset으로 추가

 

 

  • 그러면 차트 선택 화면으로 전환됨
  • Line Chart로 선택

 

  • Name : MAU(Monthly Active User)
  • X-Axis : ts
  • Time Grain : month
  • Metrics: Count_Distinct(Userid)
  • Dimension:channel
  • 과 같이 정의하고 Create chart를 누르면 Line Chart가 바로 보여짐

 

 

 

  • 오른쪽 상단에 SAVE를 클릭해서 Chart를 저장할 수 있음

 

 

Cohort 차트 만들고  MAU 차트와 묶을 예정

  • 위에서 MAU 차트를 만든 것과 동일하게 Datasets 에서 새로 추가
  • 2개를 Pivot Table로 만들 예정

 

차트1

  • Name : Monthly Cohort
  • Columns: visited_month
  • Rows: cohrt_month
  • Time Grain: Month
  • Metrics:COUNT(*)

  • 저장까지 완료

 

 

차트2

  • Name: Monthly Cohort
  • Columns: (원래 필드를 삭제하고 새로 생성), -> CUSTOM SQL에서  DATEDIFF(month, cohort_month, visited_month) 입력
  • Rows: cohort_month
  • Time Grain: Month
  • Metrics: COUNT(*)

 

 

  • 차트 2는 저장할 때 새로운 Dashboard를 생성하면서 이동할 것
  • Save & Go To New DASHBOARD

 

 

 

 

 

 

  • Edit DashBoard를 누르면 간단하게 Drag and Drop로 만들었던 chart를 추가할 수 있음

 


최종 정리

 

  • 클라우드 데이터웨어하우스의 기능은 대동소이
    • 하지만 다양한 관점에서 봤을 때 Snowflake, BigQuery, Redshift의 순으로 추천
    • 가변비용 모델이 일반적으로 고정비용 모델보다 더 큰 데이터 처리 가능
    • 작은 회사이고 비용이 중요하다면 Redshift 가변비용이 더 좋음
  • 데이터 활용이 늘어나면 데이터 품질 유지와 개인정보 보호가 중요
    • 데이터 민주화와 데이터 탈중앙화는 거스를 수 없는 트렌드
    • “데이터 거버넌스"는 데이터 품질 유지와 개인정보 보호를 보장하기 위한 프로세스
  • 대시보드
    • 기술적인 분석 중심 대시보드 기술과 아닌 것 존재
      • 후자가 Tableau, Looker, Power BI, Superset 등등 -> KPI/지표 대시보드
      • 전자는 Mode Analytics, Python Notebook, Excel 등등

 


공부하며 어려웠던 내용

오늘 강의는 약간의 신기함과 재미가 있었다. -> jupyter에서 시각화 하던걸 툴을 사용하니깐 진짜 편하다. Script가 필요가 없음

 

다만 Docker를 노트북에서 활용하기엔 무리가 있었다. -> CPU는 둘째 치고 RAM이 너무 부족하다... 넉넉하게 32GB는 필요할 듯