用Streamlit来制作数据可视化面板实战

2022-04-08 12:58:09 浏览数 (3)

在上回初步介绍了“steamlit”框架的基本用法之后(干货分享 | 用 Streamlit 来制作数据可视化面板教程(一)),这回我们动手来实践一下,用“streamlit”框架来制作一个可视化仪表盘,用到的数据是印度在新冠病毒的影响之下病例数据,包括了印度每个州的“死亡数据”、“治愈数据”、“确诊数据”以及“活跃病例”,感兴趣的童鞋也可以一起动手来实现一下。

01

首先导入所需要用到的模块以及读取数据

代码语言:javascript复制
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
from PIL import Image

@st.cache(ttl=60 * 5, max_entries=20)
def load_data():
    data = pd.read_csv("state_wise.csv")
    return data

df = load_data()

我们用到了“pandas”模块当中的“read_csv”的方法,当然特别要指的注意的是,里面用到了“st.cache()”作为装饰器,由于考虑到可能引用的数据会时时发生变化,因此我们会每隔五分钟对缓存做一次清理,并且最多清理20次,要是引用的源数据不会经常改变,那么你可以设置为是

代码语言:javascript复制
@st.cache(persist=True)

02

我们同时需要添加一下文字说明,以便他人更好的来理解我们所绘制的图形,例如标题、注释等等,

代码语言:javascript复制
st.title('Covid-10 India Cases')
st.write("It shows ***Coronavirus Cases*** in India")
st.sidebar.title("Selector")
image = Image.open("2.jpg")
st.image(image, use_column_width=True)
st.markdown('<style>body{background-color:lightblue;}</style>', unsafe_allow_html=True)

visualization = st.sidebar.selectbox('Select a Chart type', ("Bar Chart", "Pie Chart", "Line Chart"))
state_select = st.sidebar.selectbox('Select a state', df['State'].unique())
status_select = st.sidebar.radio("Covid-19 patient status", ('confirmed_cases', 'active_cases',
                                                            'recovered_cases', 'death_cases'))

selected_state = df[df['State'] == state_select]
st.markdown("## **State level analysis**")

在“streamlit”中的“image”方法来读取图片,而要是我们用到下拉框则是用“st.sidebar.selectbox”方法,而要是使用单选框的话,则是用“st.sidebar.radio”方法,

03

下面我们就开始可视化的部分,分别有直方图饼图以及折线图,使用的是“plotly_express”当中的对应的方法,代码如下

代码语言:javascript复制
state_total = get_total_dataframe(df)
if visualization == "Bar Chart":
    state_total_graph = px.bar(state_total, x = 'Status', y = 'Number of cases',
                               labels = {"Number of cases": "Number of cases in %s" % (status_select)}, color="Status")
    st.plotly_chart(state_total_graph)
elif visualization == "Pie Chart":
    if status_select == "confirmed_cases":
        st.title("Total Confirmed Cases ")
        fig = px.pie(df.iloc[1:], values=df['Confirmed'], names = df['State'])
        st.plotly_chart(fig)

04

最后我们还想将表格展示在仪表盘上,用到的是“streamlit”当中的“dataframe”方法,代码如下

代码语言:javascript复制
def get_table():
    datatable = df[['State', 'Confirmed', 'Active', 'Recovered', 'Deaths']].sort_values(by=['Confirmed'], ascending=False)
    datatable = datatable[datatable['State'] != 'State Unassigned']
    return datatable
    
datatable = get_table()
st.markdown("### Covid-19 cases in India")
st.markdown("The following table gives you a real-time analysis of the confirmed, active, recovered and deceased cases of Covid-19 pertaining to each state in India.")
st.dataframe(datatable) # will display the dataframe

整体的效果如下图所示

0 人点赞