网易首页 > 网易号 > 正文 申请入驻

Streamlit 入门教程:构建一个Dashboard

0
分享至


Streamlit 是一个用于创建数据科学和机器学习应用程序的开源 Python 库。它的主要目标是使开发人员能够以简单的方式快速构建交互式的数据应用,而无需过多的前端开发经验。Streamlit 提供了一种简单的方法来转换数据脚本或分析代码为具有可视化界面的应用程序,这些应用程序可以通过网络浏览器访问。

以下是 Streamlit 的一些主要特点和优势:

  1. 简单易用:Streamlit 的设计使得用户能够在几行代码内创建交互式应用程序。使用它不需要复杂的前端开发知识,甚至不需要 HTML 或 CSS。
  2. Python 支持:Streamlit 使用 Python 编写和驱动,这使得数据科学家和分析师可以在熟悉的编程语言中构建应用程序。
  3. 实时预览:在代码中进行更改后,Streamlit 应用程序会自动重新加载,从而可以立即查看更改的效果,加速开发过程。
  4. 丰富的可视化元素:Streamlit 支持各种可视化元素,如图表、图像、文本、表格等,使用户能够展示和呈现数据。
  5. 交互性:用户可以通过滑块、按钮等交互元素与应用程序进行互动,从而改变数据的输入或参数,实时观察结果。
  6. 部署简便:部署 Streamlit 应用程序相对简单,只需要在服务器上运行一个 Python 脚本即可,无需复杂的配置。
  7. 与数据科学生态系统集成:Streamlit 可以轻松地与常用的数据科学库(如 Pandas、Matplotlib、Plotly 等)集成,使用户能够轻松地将分析和可视化结果嵌入到应用程序中。
  8. 自定义主题和样式:用户可以根据需要自定义应用程序的外观和样式,以匹配他们的品牌或设计需求。

无论是为了创建数据展示、可视化、模型演示还是进行原型开发,Streamlit 都是一个非常有用的工具。所以本文我们将通过创建一个简单的Dashboard作为Streamlit

目标

我们的目标是做一个下面样式的dashboard。

我们的目标是建立一个上面草图所示的dashboard并且能够展示数据。

数据处理

首先我们对数据进行处理

import pandas as pd
import numpy as np
import plotly.express as px
import streamlit as st
def dateAge(x):
#function for generating future bucket grouping
a = (x - np.datetime64("today","D")) / np.timedelta64(1,"D")
if a <= 0:
y = "0 or Less"
elif a >0 and a <= 5:
y = "5 days"
elif a > 5 and a <= 14:
y = "6 to 14 days"
elif a > 14 and a <= 30:
y = "15 to 30 days"
else:
y = "over 30 days"
return y
#built as a function for cache use with StreamLit later
def getData():
x = pd.read_csv(r'C:\Users\aryan.sinanan\Desktop\Python\raw_data\demand.csv')
return x
#assign data to df variable
df = getData()
#Set Org level max and role title or partial name you are looking for
org_level = ["6","7","8"]
role_title = "Data"
#Datatype convert to date from dd-MMM-yy
df["Resource Start Date"] = pd.to_datetime(df["Resource Start Date"],format="%d-%b-%y")
df["Resource End Date"] = pd.to_datetime(df["Resource End Date"],format="%d-%b-%y")
#Define Future Bucket
df["Date Bucket"] = df["Resource Start Date"].apply(dateAge)
#clean up Location names
df.loc[df["Role Work Location"] == "melbourne", "Role Work Location"] = "Melbourne"
df.loc[df["Role Work Location"] == "canberra", "Role Work Location"] = "Canberra"
#rename columns
df.rename(columns={
"Project Has Security/ Nationality Restriction":"Clearance Required",
"Resource Start Date":"Start Date",
"Resource End Date":"End Date",
"Role ID":"ID",
"Role Title":"Title",
"Role Description":"Description",
"Role Talent Segment":"Talent Segment",
"Role Career Level From":"Career Level From",
"Role Career Level To":"Career Level To",
"Role Work Location":"Work Location",
"Role Location Type":"Location Type",
"Role Fulfillment Entity L3":"Fulfillment Entity L3"
}, inplace = True)
#drop the unncessary columns
df_sub = df.loc[:,("ID","Clearance Required","Start Date","End Date","Date Bucket","Title","Description","Talent Segment","Assigned Role","Career Level To","Work Location","Location Type","Role Primary Contact","Role Primary Contact\n(Email ID)")]
#filter the dataframe using ord_level and role_title
df_filter = df_sub[(df_sub["Assigned Role"].str.contains( role_title ,case=False,na=False)) & (df_sub["Career Level To"].isin(org_level))]

构建导航栏

Streamlit虽然允许我们控制元素布局,但是它的控制项还是比较简单,比如菜单栏必须要放在左侧,也就是我们常说的侧边栏,所以我们将侧边栏作为过滤的条件使用。

以下代码是,常见页面标题和侧边栏的代码:

#title
st.markdown("# Roles Dashbaord")
#defining side bar
st.sidebar.header("Filters:")
#placing filters in the sidebar using unique values.
location = st.sidebar.multiselect(
"Select Location:",
options=df_filter["Work Location"].unique(),
default=df_filter["Work Location"].unique()
)
#placing filters in the sidebar using unique values.
work_type = st.sidebar.multiselect(
"Select Work Type:",
options=df_filter["Location Type"].unique(),
default=df_filter["Location Type"].unique()
)

以上代码结果如下:

构建汇总指标

侧边栏中进行过滤器后就需要将过滤后的信息展示,这里我们先展示过滤后的汇总指标

#taking the filtered dataframe created in a previous step and applying a query
df_selection = df_filter.query(
"`Work Location`== @location & `Location Type` == @work_type"
)
#defining our metrics
total_roles = df_selection["ID"].value_counts().sum()
bucket_0 = df_selection[df_selection["Date Bucket"]=="0 or Less"].value_counts().sum()
bucket_5 = df_selection[df_selection["Date Bucket"]=="5 days"].value_counts().sum()
bucket_14 = df_selection[df_selection["Date Bucket"]=="6 to 14 days"].value_counts().sum()
bucket_30 = df_selection[df_selection["Date Bucket"]=="15 to 30 days"].value_counts().sum()
bucket_31 = df_selection[df_selection["Date Bucket"]=="over 30 days"].value_counts().sum()
#placing our metrics within columns in the dashboard
col1,col2,col3,col4,col5,col6=st.columns(6)
col1.metric(label="No. Roles",value=total_roles)
col2.metric(label="Already Started",value=bucket_0)
col3.metric(label="In 5 Days",value=bucket_5)
col4.metric(label="In 14 Days",value=bucket_14)
col5.metric(label="In 30 Days",value=bucket_30)
col6.metric(label="Over 30 Days",value=bucket_31)

结果如下,可以看到,我们已经可以展示出一些数据了

构建图表

下面我们还可以创建图表

#a dividing line
st.divider()
#dataframe for chart
df_1 = df_selection.groupby(["Work Location","Location Type"])["Work Location"].value_counts().reset_index()
#defining the chart
fig_count_location_type = px.bar(df_1,x="Work Location",y="count",color="Location Type",title="Role by Location and Type - Plotly")
#displaying the chart on the dashboard
st.plotly_chart(fig_count_location_type, use_container_width=True)

使用plotly_chart可以轻松创建表格

构建表格

我们还可以通过显示Dataframe来展示过滤后数据集的所有数据,也就是显示详情数据。

#a dividing line
st.divider()
#showing the dataframe
st.dataframe(df_selection,hide_index=True,column_config={
# we can also config the formatting of a given column
"ID": st.column_config.NumberColumn(
#show the ID as a number no formatting
format="%d"
),
#set the formatting of the dateColumn to dd-MMM-yyyy
"Start Date": st.column_config.DateColumn(
format="DD-MMM-YYYY"
),
#set the formatting of the dateColumn to dd-MMM-yyyy
"End Date": st.column_config.DateColumn(
format="DD-MMM-YYYY"
),
#reduce the column size to medium
"Title": st.column_config.TextColumn(
width="medium"
),
#reduce the column size to medium
"Description": st.column_config.TextColumn(
width="medium"
)
})

可以看到,我们以表格的形式将dataframe所有的数据展示出来了。

总结

Streamlit可以让开发人员能够以快速、简便的方式构建出功能强大且具有交互性的应用程序,从而更好地与数据进行互动和沟通。通过上面的例子可以看到,使用 Streamlit 构建应用程序不需要具备深入的前端开发知识,因为Streamlit 的设计目标之一就是让数据科学家、分析师和其他非前端开发人员能够轻松地创建交互式应用程序,而无需过多关注复杂的前端技术。

Streamlit 的开发方式与一般的 Python 编程相似,只需使用一些简单的 Streamlit 函数和命令来配置和控制应用程序的外观和行为。Streamlit 的强大之处在于它能够将复杂的前端开发流程简化为几行 Python 代码,让任何人都能够轻松创建出具有交互性和可视化效果的数据应用程序。

https://avoid.overfit.cn/post/24320cbf1d9c4ca7b1d3a9086b2ba5b9

作者:Aryan Sinanan

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
4名指挥官同时被斩,有大鱼,真主党成以色列消灭哈马斯筹码

4名指挥官同时被斩,有大鱼,真主党成以色列消灭哈马斯筹码

移光幻影
2024-06-13 07:50:34
中纪委网站通报:5名省管干部同日任上被查!其中1人一周前还出镜谈考察感受,1人还出席了签约仪式

中纪委网站通报:5名省管干部同日任上被查!其中1人一周前还出镜谈考察感受,1人还出席了签约仪式

鲁中晨报
2024-06-12 10:11:08
前朝鲜国脚:疫情期间韩光成曾在朝鲜驻华大使馆独自训练了几年

前朝鲜国脚:疫情期间韩光成曾在朝鲜驻华大使馆独自训练了几年

懂球帝
2024-06-15 11:54:10
张呈栋、于大宝遭声讨,疑似谢场时与国安远征球迷发生不愉快

张呈栋、于大宝遭声讨,疑似谢场时与国安远征球迷发生不愉快

直播吧
2024-06-15 23:50:12
姜萍数学老师一夜成名,多所大学发出邀约疯抢,师生相互成就

姜萍数学老师一夜成名,多所大学发出邀约疯抢,师生相互成就

素素娱乐
2024-06-14 14:08:41
美国即将出局!中国提前上岸,荷兰掌握主动,女排总决赛7席已定

美国即将出局!中国提前上岸,荷兰掌握主动,女排总决赛7席已定

排球黄金眼
2024-06-16 02:35:23
山东一新郎与父亲布置婚房,没想到竟被父亲活活锤死

山东一新郎与父亲布置婚房,没想到竟被父亲活活锤死

一度历史观
2024-05-22 16:25:36
女排3比2逆转土耳其 球员评分:5人满分,1人良好,4人及格

女排3比2逆转土耳其 球员评分:5人满分,1人良好,4人及格

篮球资讯达人
2024-06-16 00:29:11
重庆一小车冲出马路坠落进小区,物业:有居民被砸中

重庆一小车冲出马路坠落进小区,物业:有居民被砸中

极目新闻
2024-06-15 19:33:38
又帅又能踢!23岁7个月21天,索博斯洛伊成欧洲杯历史最年轻队长

又帅又能踢!23岁7个月21天,索博斯洛伊成欧洲杯历史最年轻队长

直播吧
2024-06-15 20:17:54
事关工资上涨!吉林省公开征求意见

事关工资上涨!吉林省公开征求意见

城市速递
2024-06-15 22:07:40
事态升级!央视工作人员硬刚周也,周也翻白眼视频也曝光了!

事态升级!央视工作人员硬刚周也,周也翻白眼视频也曝光了!

古希腊掌管月桂的神
2024-06-15 11:34:15
革命性突破!美企成功研制核电池,几乎无辐射,电量够用100年

革命性突破!美企成功研制核电池,几乎无辐射,电量够用100年

十三级台阶
2024-06-15 15:51:27
凯特王妃回来了,神采飞扬带着三个孩子露面,网友:打了一场胜仗

凯特王妃回来了,神采飞扬带着三个孩子露面,网友:打了一场胜仗

综艺拼盘汇
2024-06-16 00:37:44
总决赛G4,绿军是放水还是真的打不过?

总决赛G4,绿军是放水还是真的打不过?

舟瑜
2024-06-15 12:20:46
等待官宣!巩晓彬正式出山,山东男篮保八争四提上日程

等待官宣!巩晓彬正式出山,山东男篮保八争四提上日程

篮球前线CBA
2024-06-15 20:41:57
保护自己能量最好的方式

保护自己能量最好的方式

洞见
2024-06-14 22:27:05
一鼠不留!南非欲海岛空投550吨老鼠药,消灭正在啃食海鸟的老鼠

一鼠不留!南非欲海岛空投550吨老鼠药,消灭正在啃食海鸟的老鼠

怪罗
2024-06-14 15:13:44
6月15日,以军基地被炸,土耳其不宣而战,菲律宾船员弃船逃生

6月15日,以军基地被炸,土耳其不宣而战,菲律宾船员弃船逃生

笔墨V
2024-06-15 22:49:39
姜萍数赛夺12名后续:13名刘奔上热搜,本人发声回应,评论搞笑

姜萍数赛夺12名后续:13名刘奔上热搜,本人发声回应,评论搞笑

180°视角
2024-06-15 12:39:00
2024-06-16 05:02:44
deephub
deephub
CV NLP和数据挖掘知识
1368文章数 1416关注度
往期回顾 全部

科技要闻

TikTok开始找退路了?

头条要闻

欧洲杯-亚马尔创纪录卡瓦哈尔首球 西班牙3-0克罗地亚

头条要闻

欧洲杯-亚马尔创纪录卡瓦哈尔首球 西班牙3-0克罗地亚

体育要闻

莱夫利,让困难为我让路

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

新情况!高层对人民币的态度180°转弯

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

教育
旅游
游戏
数码
军事航空

教育要闻

厉害!长沙15岁初三少年闯进2024年阿里巴巴全球数学竞赛决赛

旅游要闻

如何文艺消夏?乌镇10大活动开启古镇消夏节

魂师对决:SP唐昊返场抽取价值分析!真身幻金真是一个都少不了!

数码要闻

低至 5747 元,爱普生 CH-TW6280T 真 4K 投影仪京东大促

军事要闻

普京提停火和谈条件 美防长迅速回应

无障碍浏览 进入关怀版