๐ย ๊ณต๋ถ ๋ด์ฉ
์๊ฐํ ํด
KPI, ์งํ, ์ค์ํ ๋ฐ์ดํฐ ํฌ์ธํธ๋ค์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ/๋ถ์ ํ์ํด์ฃผ๋ ํด
Dashboard or BI(Business Intelligence) Tool
๊ฒฐ์ ๊ถ์ : ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ ์ ํ ์ ์์
ํ์ ์ข ์ฌ์ : ๋ฐ์ดํฐ ๋ถ์์ ์ฝ๊ฒ ํ ์ ์์
KPI : Key Performance Indicator
๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ๊ฒฐ์ ์ ์ข ๋ฅ
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ฒฐ์ (Data-Driven Decision)
- ๋ฐ์ดํฐ ์ฐธ๊ณ ๊ฒฐ์ (Data-Informed Decision)
Citizen Data Analyst / Scientist
EDA : Exploratory Data Analysis
- ๋ฐ์ดํฐ ํน์ฑ ๋ถ์
์ด๋ค ์๊ฐํ ํด์ด ์์๊น?
| ๊ธฐ์ | Tools | ํน์ง |
|---|---|---|
| Excel Google Spreadsheet | ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์๊ฐํ ํด | |
| Python | EDA์ ๋ ์ ํฉ | |
| Looker | ||
| Salesforce | Tableau | |
| MS | Power BI | |
| Apache Superset ReDash | ์คํ์์ค | |
| Mode Analytics | ||
| Google Studio AWS Quicksight | ์์ฌ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ Dashboard ๊ธฐ๋ฅ์ด ๋น๊ต์ ๋จ์ด์ง |
- Excel, Python ๋ฑ์ ์ฝ๋ฉ์ด ๊ฐ๋ฅํด์ผ ํ์ฉ ๊ฐ๋ฅ -> ๊ธฐ๋ฅ์์ ์ ์ฝ ์กด์ฌ
Looker
- 2019.06 ๊ตฌ๊ธ์ ์ธ์๋จ
- ํน์ง
- LookML์ด ์์ฒด ์ธ์ด๋ก ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง๋ค์ด์ค
- ๋ด๋ถ๊ณ ๊ฐ ๋ฟ ์๋๋ผ ์ธ๋ถ ๊ณ ๊ฐ์ ์ํ ๋์๋ณด๋ ์์ฑ ๊ฐ๋ฅ
- ๋ค๋ฅธ ์ฌ๋์ด ์์ฑํ Dashboard๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ด๊ฐ ํ์ฉํ ์ ์์(Template ์ฒ๋ผ)
- setup์ ํ๋ ํธ, backend์ ๋ถํ๊ฐ ์ข ์๋ ํธ
Tableau
- 2019.06 Salesforce์ ์ธ์๋จ
- ํน์ง
- ๋ค์ํ ์ ํ๊ตฐ, ์ผ๋ถ๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต์ง๋ง ๊ฐ๋ ฅํ ๋์๋ณด๋ -> ์ผ๋ถ ์ ๋ฌธ๊ฐ๋ง ๋์๋ณด๋ ์์ฑ ๊ฐ๋ฅ
- Looker ๋จ๊ธฐ ์ ๊น์ง ์ค๋ซ๋์ ๋ง์ผ ๋ฆฌ๋๋ก ๊ตฐ๋ฆผํด์ด
ReDash
2020 Databricks์ ์ธ์๋จ
ํน์ง
- ์คํ์์ค๋ก ์์, Superset๊ณผ ํก์ฌ
- SQL ์๋ํฐ ์กด์ฌ -> Dashboad์ ์ฐ๊ฒฐ๋ ๊ณณ์ Query๋ฅผ ๋ณด๋ผ ์ ์์
Superset์ด Redash์ ๋ค๋ฅธ ์
role ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ญํ , ๊ถํ ์ง์ ๊ฐ๋ฅ- dashboard์ ์ญํ ์ง์ ๊ฐ๋ฅ
Mode Anlytics
- ํน์ง
- ์กฐ๊ธ ๋ ๊ธฐ์ ์ ์ธ ์ธ๋ ฅ์ ๋์์ผ๋ก ํ๋ ๋์๋ณด๋
- SQL, R, Python ๋ฑ์ผ๋ก ๋ถ์ ๊ฐ๋ฅ
- KPI ๋์๋ณด๋ ๋ณด๋ค๋ EDA ํด์ ๋ ๊ฐ๊น์
์๊ฐํ ํด ์ ํ?
Looker vs. Tableau
- ๋ ๋ค ์ด๋ฐ learning curve ์กด์ฌ
- Tableau: ๊ฐ๊ฒฉ์ ์ธ ๋ถ๋ถ์ ์ด์
Self Service Dashboard์ ์ค์์ฑ
- ๋งค๋ฒ ์ฌ๋์ ๋ ธ๋์ ํ์๋ก ํ์ง ์์
- ์ฌ์ฉํ๊ธฐ ์ฌ์์ผ ๋ ๋ง์ ์ธ๋ ฅ๋ค์ด ์ง์ ๋์๋ณด๋๋ฅผ ๋ง๋ค ์ ์์
Data Democratization,Data Decentralization- ๋ฐ์ดํฐ ํ์ง์ ์ค์์ฑ, ๋ฐ์ดํฐ ๊ฑฐ๋ฒ๋์ค๊ฐ ํ์ํ ์ด์
Supserset
- Airbnb์์ ์์๋ ์คํ์์ค, Maxim(Airflow ๊ฐ๋ฐ์)๊ณผ ๊ฐ์ด ์์
ํน์ง
- ๋ค์ํ ํํ์ ์๊ฐํ
- ์ฌ์ด ์ธํฐํ์ด์ค
- ๋์๋ณด๋ ๊ณต์ ์ง์
- ์๋ํ๋ผ์ด์ฆ ์์ค์ ๋ณด์, ๊ถํ ์ ์ด ๊ธฐ๋ฅ ์ ๊ณต
- SQLALchemy ์ฐ๋ -> ๋ค์ํ db(SQLAlchemy์ ์ฐ๋๋๋) ์ง์
- Druid.io(streaming db)์ ์ฐ๋ํ ์ค์๊ฐ ๋ฐ์ดํฐ์ ์๊ฐํ ๊ฐ๋ฅ
- API, ํ๋ฌ๊ทธ์ธ ์ํคํ ์ณ ์ ๊ณต -> ๊ธฐ๋ฅ ํ์ฅ์ด ์ฌ์
๊ตฌ์กฐ
- Python์ผ๋ก ์ ์๋จ
- Web Interface -> Flask & React JS
- metadata db : sqlite
- ๋ณ๋ ฌ์ฑ์ด ๋จ์ด์ง๋ ๋จ์ -> postgresql or mysql ์ฌ์ฉ
- Redis๋ฅผ caching layer๋ก ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ์ต์ ํ
์ฉ์ด
- Database : backend db (Redshift, Druid, …)
- Dataset : table
- Dashboard - Chart : Dashboard๋ ํ๋ ์ด์์ chart๋ก ๊ตฌ์ฑ๋จ
์ค์ต Dashboard
๊ตฌ์ฑ
- DB : Redshift
- 2 charts in 1 Dashboard
- ์ฑ๋๋ณ MAU(Monthly Active User) chart
- Dataset : analytics.user_session_summary
- Monthly Cohort chart
- Dataset : analytics.cohort_summary
- ์ฑ๋๋ณ MAU(Monthly Active User) chart
MAU chart
- session๋จ์ผ๋ก ์์ ํ ์ ๋ณด๋ฅผ ๊ฐ๊ฒ ๋ง๋ ํ ์ด๋ธ
| |
Monthly Cohort chart
Cohort?
- ํน์ ์์ฑ(๋ณดํต์ ์ฌ์ฉ์์ ์๋น์ค ๋ฑ๋ก
์)์ ๋ฐํ์ผ๋ก ๋๋ ์ฌ์ฉ์ ๊ทธ๋ฃน
- ํน์ ์์ฑ(๋ณดํต์ ์ฌ์ฉ์์ ์๋น์ค ๋ฑ๋ก
Cohort ๋ถ์?
- Cohort ๊ธฐ๋ฐ์ผ๋ก
์ฌ์ฉ์์ ์ดํ๋ฅ , ์์กด๋ฅ , ์ด ์๋น๊ธ์ก๋ฑ์ ๊ณ์ฐ - ์ฌ์ฉ์
์์กด๋ฅ (Retention): ๋ณดํต์๊ธฐ๋ฐ์ผ๋ก ์๊ฐํํด์ ๋ด
- Cohort ๊ธฐ๋ฐ์ผ๋ก
analytics.cohort_summary
| |
Google Spreadsheet๋ฅผ ํ์ฉํ ์๊ฐํ ์ค์ต
+) Python
gspreadmodule์ ํ์ฉํ๋ฉด Python์ผ๋ก ์คํ๋ ๋์ํธ ์กฐ์ ๊ฐ๋ฅMAU chart

Monthly Cohort chart

Superset ์ฌ์ฉ ๋ฐฉ๋ฒ
preset.io
- ํ์๊ฐ์
- workspace ์์ฑ
- database ์ฐ๊ฒฐ
docker
docker ์ค์น ๋ฐ ํ์ฉ ram ํฌ๊ธฐ ์ค์ (mac: 6GB ์ด์)
Superset Github repo๋ฅผ ํด๋ก
1git clone https://github.com/apache/superset.gitsuperset ํด๋๋ก ๋ค์ด๊ฐ์ ๋ค์ ๋ command ์คํ
1 2 3 4 5cd superset # ํน์ ๋ฒ์ ์ ๋ค์ด๋ก๋ ํ๋ ค๋ฉด ์๋ command ์คํ # git checkout 1.4.0 docker-compose -f docker-compose-non-dev.yml pull docker-compose -f docker-compose-non-dev.yml uphttp://localhost:8088์ผ๋ก ์น UI ๋ก๊ทธ์ธ (id : admin, pw : admin)
Redshift db ์ฐ๊ฒฐ
SQLAlchemy URI ๋ฅผ ํตํด ์ฐ๊ฒฐ ๊ฐ๋ฅ
1postgresql://admin:xxxx@default-workgroup.705556746971.ap-northeast-2.redshift-serverless.amazonaws.com:5439/dev
์ฐ๊ฒฐ๋ db ์ ๋ณด

SQL Lab
Redshift๋ก SQL ์ฟผ๋ฆฌ ๋ณด๋ผ ์ ์์
MAU, Monthly Cohort chart๋ฅผ ์ํ table์ ์์ฑ

์ค์
- ์ฌ์ฉํ๋ database์ DML ๊ถํ์ ๋ถ์ฌํด์ผ ํจ


MAU
- dataset & chart


Cohort
- dataset & chart

(์ถ๊ฐ) snowflake db ์ฐ๊ฒฐ
- ์ ๋ ฅ ์ ๋ณด

- ACCOUNT ํ์ธ ๋ฐฉ๋ฒ (in Snowflake)

HW - nps chart
dataset
์ด์ ๋จ๊ณ์์ ์ฐ๊ฒฐ์ํจ snowflake db๋ฅผ ์ฌ์ฉ

chart
Edit dataset > Metrics >
overal_npsitem ์ถ๊ฐ

chart ์ค์ ๋ฐ ๊ฒฐ๊ณผ ํ๋ฉด

result dashboard

๐ย CHECK
์ฉ์ด
๋ฐ์ดํฐ ๊ฑฐ๋ฒ๋์ค
- https://cloud.google.com/learn/what-is-data-governance?hl=ko (์ด๋ ต๊ฑฐ๋ ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ ๋ฑ ๋ค์ ํ์ธํ ๊ฒ๋ค)
๊ธฐํ
preset.io ๊ฐ์
- google account๋ก ๊ฐ์ ์ 14์ผ๋์ Professional plan ๋ฌด๋ฃ ์ฒดํ ๊ฐ๋ฅ

- 14์ผ ์ดํ์๋ starter plan(free)๋ก ๋ณ๊ฒฝ๋๋ ๋ฏ ํจ

โ ๋๋ ์
superset ๋์๋ณด๋๋ฅผ ์จ ๋ณด๊ฒ ๋๋ค. ๋ด๊ฐ ๊ฑฑ์ ? ์ฐ๋ คํ๋ ๊ฒ ๋ณด๋ค๋ ์ฌ์ ๋ค. snowflake๋ ๊ทธ๋ ๊ณ redshift๋ ๊ทธ๋ ๊ณ ๋ค๋ค UI๊ฐ ํธํ๊ณ ๊น๋ํด์ ์ข์๋ค. docker๋ฅผ ์ฐ๊ณ ์ถ์๋๋ฐ ๋งฅ๋ถ ๋จ์ด 8gb.. ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๋ค ๋๊ณ ๋์ปค๋ง ์ฌ์ฉํ๋ค๋ฉด ๊ฐ๋ฅํ ์๋ ์๋๋ฐ ๊ทธ๊ฑด ์๋๋ผ ๊ฒฐ๊ตญ preset.io ์ฌ์ดํธ์์ ํ๊ฒ ๋๋ค. preset.io ์ฌ์ดํธ๋ ์ด์ฐจํผ superset ๊ธฐ๋ฐ์ผ๋ก ํ ์ฌ์ดํธ๊ณ docker๋ฅผ ํตํด ๊ตฌ๋ํ๋๊ฒ๊ณผ UI๊ฐ ๊ฐ์์ ๋ฌธ์ ๋ ์์ ๊ฒ ๊ฐ๋ค.
๋ชจ๊ฐ์ฝฉ ์ฐธ๊ฐ์๋ถ๋คํ๊ณ ํ์๊ฐ์ ๋ ๋ํํ๋ ์๊ฐ์ ๊ฐ์ก๋๋ฐ ๊ฐ์ ๊ฐ๊ณ ์๋ ์ ๋ณด๋ฅผ ๊ณต์ ํ ์ ์์ด์ ์ข์๋ค. ๋ค๋ค ์ด๋์ ๊ทธ๋ ๊ฒ ์ ๋ณด๋ฅผ ๋ง์ด ์ป๋์ง ์ ๊ธฐํ๋ค๋ ์๊ฐ๋ ํ๋ค. ใ ใ ใ
์ฃผ๋ง์๋ ์ฃผ์ค์ ๋ฐฐ์ด๊ฒ๋ค ๋ณต์ต ํ ๊ฒธ ๋ฏธ๋ฆฌ ์ธํ ์ ํ๋ ค๊ณ ํ๋ค. ๊ฐ์ ํ ๋ถ๋คํ๊ณ ์์๋ฅผ ํด ๋ด์ผ ํ๊ฒ ์ง๋ง, superset-snowflake-s3(or google cloud) ๋ฅผ ํ์ฉํ๋ ๊ฒ AWS์ ์์ํ ์ฒญ๊ตฌ ์์คํ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ถ์ฐจ์ ์ธ ๊ณผ๊ธ์์ด ๋ฌด๋ฃ ํ๋์ผ๋ก๋ง ์งํํ ์ ์์ด ๋ณด์ธ๋ค. ๊ทธ๋ฐ๋ฐ snowflake credit ์ด๊ณผํ๋ฉด ๊ฒฐ๊ตญ์ ๊ณผ๊ธ์ ํด์ผ๊ฒ ์ง..?