想象一下:你是一名数据科学家,你工作的公司需要快速做出一些决策!你需要一种方法来整理数据、调查新兴趋势,并帮助你的利益相关者根据这些趋势采取行动。你知道数据应用是完成这项工作的完美解决方案,但你没有时间陷入复杂的 Web 开发、繁琐的 UI 样式设计或缓慢的迭代周期中。
创建交互式数据应用不应该这么难!😭
这正是 Streamlit 存在的原因。
在这篇博文中,我们将介绍 Streamlit 的基础知识、它的工作原理以及如何开始使用它。您可以在此处找到本文的示例代码,或在 YouTube 上观看分步视频教程。
什么是 Streamlit?
Streamlit 是一个开源的 Python 框架,只需少量代码即可构建高度交互式的数据应用。Streamlit 的重点是让您专注于对您最重要的事情:您的数据分析!
直观的语法
Streamlit 的突出特点之一是它内置了直观的默认样式,因此您可以随时随地部署并与任何人共享精美的应用。例如,要编写标题,您可以使用 st.header()
。要添加一些文本,您可以使用 st.write()
。需要分割线?只需使用 st.divider()
。
无需 CSS、HTML 或 JavaScript 经验!
无缝组合,兼容 AI
使用 Streamlit,您无需进行任何“应用思考”——您无需考虑 UI、样式或路由。它只是扩展了您已经在 Python 中所做的事情。
Streamlit 兼容广泛的数据库,包括 Pandas、NumPy 和 Altair。Streamlit 与生成式 AI 中的所有最新工具集成,例如任何大型语言模型、向量数据库或各种 AI 框架,如 LangChain、LlamaIndex 或 Weights & Biases。Streamlit 的聊天元素使其特别容易与 AI 互动,因此您可以构建“与数据对话”的聊天机器人。
您的首选 UI
Streamlit 使您的应用更快地达到工作版本 0。您可以更快地将您的应用展示给用户,更快地获得反馈,并更快地改进。Streamlit 缩短了您的迭代周期。
如今,Streamlit 社区拥有超过 30 万月活跃开发者,并被 80% 的财富 500 强公司使用。无论您是数据团队成员、经验丰富的数据科学家,还是新的 Python 开发者,Streamlit 的可能性都是无限的。
使用 GitHub Codespaces 开始使用 Streamlit
有很多方法可以开始使用 Streamlit。对于这篇博文,我们将使用 GitHub Codespaces。Codespaces 是一个云托管的开发环境,您可以在其中使用浏览器内编辑器开始使用 Streamlit 进行编码。
启动 Codespaces
首先从您的 GitHub 账户中启动 Codespaces。

启动新实例
使用空白的 Codespaces 模板创建一个新实例。

安装 Streamlit
运行 pip install streamlit 命令安装框架。
pip install streamlit
创建一个简单应用
您只需两行代码即可创建一个基本的“Hello world”应用,方法是创建一个名为 streamlit_app.py
的新 Python 文件,并添加以下代码
import streamlit as st
st.write("My first Streamlit app 🎈")
运行您的应用
使用命令 streamlit run streamlit_app.py
运行您的新应用。
查看您的应用
您的应用应出现在新的浏览器标签页中——看看这有多快?

现在我们已经构建了第一个 Streamlit 应用,接下来看看如何扩展它。
构建典型的 Streamlit 应用
一个好的数据应用最重要的部分是有效地可视化您的数据分析,以便更容易获取洞察。交互性帮助用户探索数据。
让我们看看使用 Streamlit 可视化数据和添加交互的不同方法。
加载您的数据
在开始任何示例数据可视化之前,我们需要加载数据。以下代码使用 Pandas 创建一个函数,用于从 CSV 文件加载数据。
然后我们使用 @st.cache_data
装饰器来加速我们的应用。在此处了解更多关于 Streamlit 缓存的信息。
在使用 Pandas 之前,请确保将其添加到您的导入中。
import pandas as pd
@st.cache_data
def load_data():
return pd.read_csv("https://github.com/dataprofessor/population-dashboard/raw/master/data/us-population-2010-2019-reshaped.csv", index_col=0)
示例 1:检查您的数据
st.data_editor
在可编辑表格中显示数据。
st.header("1. Inspect the data 🔍")
st.write("`st.data_editor` allows us to display AND edit data")
st.data_editor(df)
示例 2:简单的柱状图
st.bar_chart
以柱状图的形式显示数据。在以下代码中,我们使用我们的数据创建一个柱状图,并将 x 轴和 y 轴分别声明为州和人口。
st.header("2. Get started with a simple bar chart 📊")
st.write("Let's chart the US state population data from the year 2019")
st.bar_chart(df[['year', 'states', 'population']],
x='states',
y='population')
示例 3:向柱状图添加交互性
您的应用越具交互性,您的数据对用户而言就越生动。使用 Streamlit,很容易添加选择框、滑块和数值输入,以便用户可以探索您的数据。
以下代码包含三种不同类型的交互性。注释和取消注释代码,看看哪种最适合您的需求。
st.header("3. Now make it interactive 🪄")
st.write("It's your turn to select a year")
# Using st.selectbox
selected_year = st.selectbox("Select a year",
list(df.year.unique())[::-1])
# Using st.slider
#selected_year = st.slider("Select a year", 2010, 2019)
# Using st.number_input
#selected_year = st.number_input("Enter a year",
# placeholder="Enter a year from 2010-2019",
# value=2019)
if selected_year:
df_selected_year = df[df.year == selected_year]
# Display chart
st.bar_chart(df_selected_year,
x='states',
y='population')
示例 4:集成另一个 Python 库以创建折线图
st.altair_chart
使用 Vega-Altair 库将数据显示为折线图。请注意,在使用 Altair 之前,您必须导入它。
import altair as alt
st.header("4. How about a line chart? 📈")
st.write("Track changes over time")
df_line_chart = df.copy()
df_line_chart['year'] = df_line_chart['year'].astype(str)
c = (
alt.Chart(df_line_chart)
.mark_line()
.encode(x=alt.X('year'),
y=alt.Y('population'),
color='states')
)
st.altair_chart(c, use_container_width=True)
示例 5:向 Altair 折线图添加交互性
与上面的柱状图类似,您可以使用 st.multiselect
向折线图添加交互性。
st.header("5. Sprinkle in more interactivity 🪄")
st.write("Use `st.multiselect` and `st.slider` for data filter before chart creation")
states = st.multiselect("Pick your states",
list(df.states.unique())[::-1],
"California")
date_range = st.slider("Pick your date range",
2010, 2019,
(2010, 2019))
if states:
chart_data = df[df['states'].isin(states)]
chart_data = chart_data[chart_data['year'].between(date_range[0], date_range[1])]
chart_data['year'] = chart_data['year'].astype(str)
c = (
alt.Chart(chart_data)
.mark_line()
.encode(x=alt.X('year'),
y=alt.Y('population'),
color='states')
)
st.altair_chart(c, use_container_width=True)
最好的部分是您不必处理所有这些不同元素的样式——Streamlit 会为您搞定!
扩展 Streamlit 功能
这仅仅是个开始!要找到适合您需求的 API,请查阅文档。
虽然 Streamlit 的原生框架对于大多数用例来说足够灵活,但有时您可能需要扩展其功能。Streamlit 社区已经构建了数百个可复用组件,您可以轻松地将它们集成到您的应用中。这些自定义构建的组件将复杂的 JavaScript 代码转化为一行 Python 代码,使得向您的应用添加高级功能变得前所未有的容易。
您可以在此处找到可用组件。
部署 Streamlit 应用
部署您的 Streamlit 应用非常简单,可以通过多种方式完成
- 本地部署:在本地运行您的应用。
- 服务器部署:在您选择的服务器上部署您的应用。
- Streamlit Community Cloud:一种完全免费的方式来部署和分享您的应用。每月有数百万次浏览,Streamlit Community Cloud 上的公共应用可以被 Google 索引,并被世界各地的任何人发现。这是展示您创造力的绝佳方式——无论您是构建聊天机器人、可视化机器学习模型、创建内部工具,还是专注于您最新的热爱项目。
要了解更多关于不同部署选项的信息,请在此处阅读文档。
使用 Snowflake 进行扩展
如果您正在寻求更大的规模和安全性,Streamlit 也可以在 Snowflake 平台上无缝工作,该平台为您处理所有基础设施和基于角色的治理。
要了解更多关于 Snowflake 中的 Streamlit 的信息,请参考此处文档。
您将构建什么?
Streamlit 正在革新我们构建和分享数据应用的方式。它的速度、直观的语法和无缝的可组合性使其成为任何处理数据的人的宝贵工具。今天就深入了解 Streamlit,开始构建您自己的交互式数据应用吧。
需要一些灵感?查看Streamlit 应用画廊,看看其他人正在构建什么,或者加入Streamlit 论坛进行讨论。
我们迫不及待想看到您的作品!
Streamlit 愉快!🎈
评论
在我们的论坛继续讨论 →