基础概念
使用 Streamlit 进行开发非常简单。首先,在普通的 Python 脚本中添加几条 Streamlit 命令,然后使用 streamlit run 命令来运行它:- streamlit run your_script.py [-- script args]
复制代码 一旦按照上述方式运行脚本,本地的 Streamlit 服务器就会启动,您的应用程序将会在您默认的网络浏览器的新标签页中打开。该应用程序就是您的画布,您可以在其中绘制图表、文本、控件、表格等等。
在该应用程序中绘制的内容由您决定。例如,st.text 会将原始文本写入您的应用程序,而 st.line_chart 则会绘制一条折线图。
请参考 API 文档,以了解您可用的所有命令。
在传递脚本的自定义参数时,这些参数必须在两个连字符之后进行传递。否则,这些参数会被视为对 Streamlit 本身的参数。
另一种运行 Streamlit 的方式是将其作为 Python 模块来运行。在将像 PyCharm 这样的集成开发环境与 Streamlit 配合使用时,这种方式会非常有用:- # Running
- python -m streamlit run your_script.py
- # is equivalent to:
- streamlit run your_script.py
复制代码You can also pass a URL to streamlit run! This is great when combined with GitHub Gists.
For example:
- streamlit
- run https://raw.githubusercontent.com/streamlit/demo-uber-nyc-pickups/master/streamlit_app.py
复制代码 开发流程
每次您想要更新应用程序时,请先保存源文件。完成此操作后,Streamlit 会检测是否有更改,并询问您是否要重新运行应用程序。在屏幕的右上角选择“始终重新运行”,即可每次更改源代码时自动更新应用程序。
这能让您在一个快速的交互循环中进行操作:您输入一些代码,保存它,实时试运行,然后继续输入更多代码,保存并再次试运行,如此反复,直到您对结果满意为止。这种在编码与实时查看结果之间紧密相连的循环是 Streamlit 让您的生活更轻松的一种方式。
在开发 Streamlit 应用程序时,建议将编辑器窗口和浏览器窗口并排排列,以便同时查看代码和应用程序。来试试看吧!
自 Streamlit 版本 1.10.0 及更高版本起,Streamlit 应用程序无法在 Linux 发行版的根目录下运行。如果您尝试从根目录运行 Streamlit 应用程序,Streamlit 将抛出 FileNotFoundError: [Errno 2] No such file or directory 的错误。如需更多信息,请参阅 GitHub issue #5239。
如果您使用的是 Streamlit 1.10.0 或更高版本,您的主脚本应位于根目录之外的目录中。在使用 Docker 时,您可以使用 WORKDIR 命令来指定主脚本所在的目录。有关如何进行此操作的示例,请阅读 创建 Dockerfile。
数据流
Streamlit 的架构使您能够以编写普通 Python 脚本的方式来编写应用程序。要实现这一点,Streamlit 应用程序具有独特的数据流:每当需要在屏幕上更新内容时,Streamlit 都会从顶部到底部重新运行您的整个 Python 脚本。
这种情况可能会在以下两种情形下发生:
- 每当您修改应用程序的源代码时。
- 每当用户与应用程序中的小部件进行交互时。例如,当拖动滑块、在输入框中输入文本,或者点击按钮时。
每当通过 on_change(或 on_click)参数将回调函数传递给一个控件时,该回调函数总是会先于脚本的其余部分运行。有关回调函数 API 的详细信息,请参阅我们的 会话状态 API 参考指南。
为了使这一切实现快速且流畅的运行,Streamlit 在幕后为你承担了大量工作。在这个过程中,一个重要的角色是 @st.cache_data 装饰器,它能让开发者在应用程序重新运行时跳过某些耗时的计算。我们将在本页面的后面部分详细介绍缓存机制。
显示风格化的信息
在 Streamlit 应用程序中,有几种方式可以展示数据(表格、数组、数据框)。下面,您将了解到魔法命令和 st.write() 函数,它们可用于书写从文本到表格的各种内容。接下来,让我们来看看专门用于可视化数据的方法。
使用魔法
您还可以无需调用任何 Streamlit 方法即可向您的应用程序写入数据。Streamlit 支持“魔法命令”,这意味着您根本无需使用 st.write() 函数!要实际查看效果,请尝试以下代码片段:- """
- # My first app
- Here's our first attempt at using data to create a table:
- """
- import streamlit as st
- import pandas as pd
- df = pd.DataFrame({
- 'first column': [1, 2, 3, 4],
- 'second column': [10, 20, 30, 40]
- })
- df
复制代码 只要 Streamlit 在同一行中看到一个变量或一个常量值,它就会自动使用 st.write() 函数将其写入你的应用程序中。如需了解更多信息,请参考关于 魔法命令的文档。
展示 Data frame
除了 魔法命令 之外,st.write() 是Streamlit 的“万能工具”。您可以将几乎任何内容传递给 st.write()
:文本、数据、Matplotlib 图形、Altair 图表等等。别担心,Streamlit 会自行处理并以正确的方式呈现这些内容。- import streamlit as st
- import pandas as pd
- st.write("Here's our first attempt at using data to create a table:")
- st.write(pd.DataFrame({
- 'first column': [1, 2, 3, 4],
- 'second column': [10, 20, 30, 40]
- }))
复制代码 还有其他一些专门用于处理数据的功能,例如 st.dataframe() 和 st.table(),您也可以利用它们来展示数据。接下来让我们了解一下何时应使用这些功能,以及如何为数据框添加颜色和样式。
你可能会自问:“为什么我不总是使用 st.write() 函数呢?” 其实有以下几个原因:
- 魔法和 st.write()
会检查您传入的数据的类型,然后决定如何在应用程序中以最佳方式呈现这些数据。有时您可能希望以不同的方式呈现数据。例如,您可能不想将数据框以交互式表格的形式呈现,而是希望使用 st.table(df) 将其呈现为静态表格。
- 第二个原因是,其他方法会返回一个可以使用和修改的对象,可以通过向其添加数据或替换数据来进行操作。
- 最后,如果您使用更具体的 Streamlit 方法,可以传递额外的参数来定制其行为。
例如,让我们创建一个数据框,并使用 Pandas Styler 对象更改其格式。在这个例子中,您将使用 NumPy 生成一个随机样本,并使用 st.dataframe() 方法绘制一个交互式表格。
此示例使用 Numpy 生成随机样本,但您也可以使用 Pandas DataFrame、Numpy Array 或普通的 Python 数组。
- import streamlit as st
- import numpy as np
- dataframe = np.random.randn(10, 20)
- st.dataframe(dataframe)
复制代码 让我们以第一个示例为例,利用 Pandas 的 Styler 对象来突出显示交互式表格中的某些元素。- import streamlit as st
- import numpy as np
- import pandas as pd
- dataframe = pd.DataFrame(
- np.random.randn(10, 20),
- columns=('col %d' % i for i in range(20)))
- st.dataframe(dataframe.style.highlight_max(axis=0))
复制代码 Streamlit 还提供了一种生成静态表格的方法:st.table() 。- import streamlit as st
- import numpy as np
- import pandas as pd
- dataframe = pd.DataFrame(
- np.random.randn(10, 20),
- columns=('col %d' % i for i in range(20)))
- st.table(dataframe)
复制代码 展示图表
Streamlit
支持多种流行的数据图表库,例如 Matplotlib、Altair、deck.gl 等。在本节中,您将为您的应用程序添加一个柱状图、折线图和一张地图。
绘制折线图
您可以通过调用
st.line_chart()
函数轻松地将折线图添加到您的应用程序中。我们将使用 NumPy 生成一个随机样本,然后将其绘制出来。- import streamlit as st
- import numpy as np
- import pandas as pd
- chart_data = pd.DataFrame(
- np.random.randn(20, 3),
- columns=['a', 'b', 'c'])
- st.line_chart(chart_data)
复制代码 绘制地图
使用 st.map()
函数,您可以将数据点显示在地图上。让我们使用 NumPy 生成一些示例数据,并将其绘制在旧金山的地图上。- import streamlit as st
- import numpy as np
- import pandas as pd
- map_data = pd.DataFrame(
- np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
- columns=['lat', 'lon'])
- st.map(map_data)
复制代码 控件
当您将数据或模型调整到您想要探索的状态后,就可以添加诸如 st.slider()、st.button() 或 st.selectbox() 这样的组件了。操作起来非常简单——将这些组件视为变量即可:
[code]import streamlit as stx = st.slider('x') #
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |