대시보드, 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
- 오픈소스로 시작: https://github.com/getredash/redash
- 이를 바탕으로 서비스를 제공하는 같은 이름의 회사 존재
- Superset과 상당히 흡사
- 더 강력한 쿼리 에디터 제공하지만 사용자 권한 관련 기능은 부족
- 2020년에 Databricks가 인수함
Mode Analytics
- 2013년에 샌프란시스코에서 창업됨
- SQL, R, Python 등을 기반으로 데이터 분석 가능
- 조금더 테크니컬한 인력을 대상으로한 애널리틱스 기능 제공
- KPI 대시보드라기 보다는 EDA (Exploratory Data Analysis) 툴에 가까움
어떤 시각화 툴을 선택할 것인가?
- Looker 혹은 Tableau가 가장 많이 사용되는 추세
- 두 툴 모두 처음 배우는데 시간이 필요함
- Tableau의 가격이 더 싸고 투명하며 무료 버전도 존재해서 공부가 가능
- 중요한 포인트는 셀프서비스 대시보드를 만드는 것
- 안 그러면 매번 사람의 노동이 필요해짐
- 60-70%의 질문을 셀프서비스 대시보드로 할 수 있다면 대성공
- 안 그러면 매번 사람의 노동이 필요해짐
-
- 또한 사용하기가 쉬워야 더 많은 현업 인력들이 직접 대시보드를 만들 수 있음
- 데이터 민주화 (Data Democratization), 데이터 탈중앙화 (Data Decentralization)
- 데이터 품질이 점점 더 중요해지며 데이터 거버넌스가 필요한 이유가 됨!
- 또한 사용하기가 쉬워야 더 많은 현업 인력들이 직접 대시보드를 만들 수 있음
-
- 이런 측면에서는 Looker가 더 좋은 선택이지만 가격이 상당히 비쌈
Superset
- Airflow를 만든 Maxim이란 사람이 같이 시작한 오픈소스
- https://github.com/apache/superset
- 현재 Airbnb의 전사 대시보드가 Superset
- Dropbox에서 데이터 Explore 대시보드로 사용
- 상용화 서비스도 시작됨
- 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 Image를 실행시킨 것을 Docker Container라고 부르며 이 안에서 해당 프로그램이 실행됨
- 이 때 Docker Engine이 먼저 실행되어 있어야함
- Docker Image를 실행시킨 것을 Docker Container라고 부르며 이 안에서 해당 프로그램이 실행됨
- 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 Github repo를 클론
- git clone https://github.com/apache/superset.git
- 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는 필요할 듯
'프로그래머스 데브코스-데이터 엔지니어 > TIL(Today I Learned)' 카테고리의 다른 글
06/05 41일차 데이터 파이프라인과 Airflow (1) (0) | 2023.06.05 |
---|---|
05/29 ~ 06/02, 36~40일차 2번째 프로젝트 (0) | 2023.06.03 |
05/25 34일차 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (4) (0) | 2023.05.25 |
05/24 33일차 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (3) (1) | 2023.05.24 |
05/23 32일차 데이터 웨어하우스 관리와 고급 SQL과 BI 대시보드 (2) (0) | 2023.05.23 |