pbj0812의 코딩 일기

[PYTHON] streamlit 으로 대시보드 만들기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] streamlit 으로 대시보드 만들기

pbj0812 2021. 7. 21. 02:02

0. 목표

 - streamlit 으로 대시보드 만들기

1. 설치 및 데모 실행

 1) library 설치

pip install streamlit

 2) 데모 실행

streamlit hello
# 아래 에러 발생시 아래쪽 업그레이드 진행 필요
# AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'
# pip install --upgrade protobuf

  - 결과

  - 여러 가지 데모들

 2. 내 파일로 만들어보기

  - 파일 명 : second_app.py

  - 그림 코드 설명 : 링크

  1) library 호출

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import streamlit as st
import datetime

 2) 데이터 생성

df = pd.DataFrame({
            'A' : [np.random.randint(1, 10) for i in range(100)],
            'B' : [np.random.randint(1, 10) for i in range(100)],
            'C' : [np.random.randint(1, 10) for i in range(100)]})

df.index = pd.date_range('1/1/2000', periods=100, freq='M')

df['Total'] = df['A'] + df['B'] + df['C']

df['A2'] = df['A'] / df['Total'] * 100
df['B2'] = df['B'] / df['Total'] * 100
df['C2'] = df['C'] / df['Total'] * 100

 3) 그림 그리기

fig, ax = plt.subplots()
fig.set_size_inches(15, 10)
ax.set_xlim(df.index[0], df.index[-1])
ax.set_ylim(0, 100)
color_map = ["#f0dc6c", "#9e9c90", "#5f7ba1"]
ax.stackplot(df.index,df['A2'], df['B2'], df['C2'], colors = color_map)
ax.set_title('Achievements', fontsize = 20)
ax.set_ylabel("Player's Population Percentage", fontsize = 15)
ax.set_xlabel("Time(year)", fontsize = 15)

ax.text(df.index[0], df['A2'][0] / 2 , 'A2', fontsize = 20)
ax.text(df.index[0], (df['A2'][0] + df['A2'][0] + df['B2'][0]) / 2, 'B2', fontsize = 20)
ax.text(df.index[0], (df['A2'][0] + df['B2'][0] + 100) / 2, 'C2', fontsize = 20)

 4) streamlit 에 올릴 내용들 작성

  - 대시보드 제목, 새로고침 시간, 그림을 순서대로 출력

st.title('streamlit 에서 pyplot 사용하기')
st.text('마지막 새로고침 시간 : ' + str(datetime.datetime.now()))
st.pyplot(fig)

 5) 실행

streamlit run second_app.py

  - 결과

3. 참고

 - How to solve “AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key”?

 - API reference

 - Streamlit vs. Dash vs. Shiny vs. Voila vs. Flask vs. Jupyter

Comments