[Streamlit] Dashboard (1)설계
Dashboard 설계 :
Redis 에 저장된 데이터를 기반으로 실시간 대시보드를 구현하기 전에 대시보드를 설계해 보겠다.
1. Dashboard 개요
Ciaolabella2 확장 프로젝트의 마지막 단계는 사용자 로그 시각화 대시보드 구현이다.
Ciaolabella 서비스에서 수집한 사용자 로그 중 공통 집계라는 데이터는
실시간으로 처리되어 Redis 에 저장되고 하루 단위로 초기화된다.
이 데이터들을 Redis 에 저장하는 이유는 앞서 설계 포스팅에서 말했다시피
당일에 발생한 사용자 로그를 실시간으로 시각화하여 모니터링 할 때
빨리 데이터를 불러오기 위함이다.
Redis 는 메모리에 데이터를 저장하는 저장소로 디스크 저장소보다
데이터를 더 빨리 불러올 수 있기 때문에 실시간 조회에 효율적으로 사용할 수 있다.
또한 대시보드는 streamlit 을 사용하여 구현하였다.
이제 데이터 시각화 대시보드 구현 과정을 하나하나 짚어보자.
2. Dashboard 설계
2.1. 기본 정보
- 시각화 대상 데이터
- Ciaolabella 사이트의 당일 사용자 로그 공통 집계
- Ciaolabella 사이트의 당일 무라벨 제품 검색어 집계
- 데이터 저장소 : Redis Cluster
- 시각화 도구 : Streamlit
2.2. Streamlit 선택 이유
- python 코드만으로 웹사이트 구현
- 이전 프로젝트들에서는 시각화 대시보드를 django, html, css, bootstrap, javascript 등을 사용하여 직접 구현하였는데 확실히 시간 소요가 컸다.
- 하지만 streamlit 은 위와 같은 작업들 없이도 간편하게 구현할 수 있어서 개발 시간이 단축된다.
- plotly 라이브러리 지원
- streamlit 가 지원하는 시각화 라이브러리 중 이전에 사용해 본 plotly 도 있는데 이를 활용하면 개발 시간이 더욱 단축된다.
- plotly 는 다른 시각화 라이브러리보다 더 짧은 코드로 interactive 한 그래프를 구현할 수 있다는 점에서 강점이다.
- 간단한 배포 및 유지보수 용이
- 이미 Ciaolabella2 는 많은 서버와 ec2 freetier 계정을 사용하고 있는데 해당 대시보드 배포를 위한 별도의 서버를 마련하는 것은 부담이 되었다.
- 하지만 streamlit 은 streamlit share 를 통해 쉽게 대시보드를 배포하고 공유할 수 있다.
- 또한 github 연동으로 수정 후 add 하고 push 하면 바로 반영이 되어서 대시보드 내용 수정 및 유지보수에 용이하다.
2.3. Dashboard 구성안
- Dashboard 를 구상하기 전에 먼저 Redis 에 어떤 데이터가 저장되어 있는지 확인한다.
date | time | user_age | user_gender | user_region | login | logout | menu_eco1 | menu_eco2 | menu_nolabel | menu_lesswaste | … |
---|---|---|---|---|---|---|---|---|---|---|---|
20221012 | 00 | none | none | none | 2 | 1 | 0 | 0 | 1 | 0 | |
20221012 | 00 | 10 | W | 인천광역시 | 3 | 0 | 2 | 1 | 0 | 1 | |
20221012 | 01 | 10 | W | 서울특별시 | 5 | 2 | 1 | 5 | 1 | 4 | |
20221012 | 01 | 20 | M | 인천광역시 | 6 | 1 | 5 | 2 | 2 | 2 | |
20221012 | 02 | 20 | W | 서울특별시 | 1 | 0 | 0 | 7 | 3 | 1 | |
20221012 | 02 | 20 | W | 인천광역시 | 2 | 1 | 0 | 1 | 0 | 1 |
- Dashboard 는 다음과 같이 IN OUT, MENU, ECOPOINT, NO LABEL 총 4가지 TAB 으로 설계하였고 다양한 그래프로 구성하였다.
1) IN OUT
- 로그인 및 로그아웃 관련 시각화
- 구성안
- 가장 많이 로그인한 시간대 / 연령대 / 지역
- 시간대별 로그인 및 로그아웃 (line 그래프)
- 연령대별 로그인 수 (bar 그래프)
- 성별 로그인 비율 (pie 그래프)
2) MENU
- 메뉴(서비스) 수요 관련 시각화
- 구성안
- 메뉴 및 연령대별 클릭 수 (funnel 그래프)
- 메뉴 가수요 대비 실수요 (gauge 그래프)
- 가수요 : 서비스 메뉴 클릭 수(서비스에 들어갔는지)
- 실수요 : 서비스 내 버튼 클릭 수(서비스에 들어가서 실제로 서비스를 사용했는지)
- 성별 및 연령대별 선호 메뉴 (sunburst 그래프)
3) ECOPOINT
- 에코포인트 적립 서비스 관련 시각화
- 구성안
- 시간대 및 적립 서비스별 적립량 (bar + 비율 그래프)
- 적립 서비스 간 적립량 관계 및 연령대 (scatter 그래프)
- 성별 적립량 (displot 그래프)
- 지역별 적립량 (bar 그래프)
4) NOLABEL
- 무라벨 제품 검색 서비스 관련 시각화
- 구성안
- 시간대별 클릭량 (bar 그래프)
- 회원 및 비회원 비율 (pie 그래프)
- 성별 및 연령대별 검색어 (tree 그래프)