最近想整理下 Streamlit 的开发教程,看了网上的教程,总少一部分,所以结合自己的开发经验,做了整合和补充,提供给初学者入门。
1. 安装与配置
1.1. 安装 Streamlit
可以使用pip包管理器安装 Streamlit。在终端或命令提示符中运行以下命令:
pip install streamlit
1.2. 配置文件
在某些情况下,可能需要配置Streamlit,配置文件的位置是 ~/.streamlit/config.toml(windows系统中为:C:\Users\Administrator.streamlit)。如果没有这个文件,你可以自己创建一个。
以下是一个config.toml示例:
[server]
port = 8501
enableCORS = false
[browser]
serverAddress = "localhost"
gatherUsageStats = false
[runner]
magicEnabled = false
**注意:**在config.toml文件中,大小写是敏感的,确保配置文件中的各个部分和参数名的大小写一致。
参数:
1、port:Streamlit应用的端口号,默认为 8501。
2、enableCORS:是否启用跨域资源共享,默认为false。如果需要开放Streamlit应用,在非本机电脑也行访问,则需要设置为true。
3、serverAddress:Streamlit服务器的地址,默认为 “localhost”。
4、gatherUsageStats参数默认是true,表示允许streamlit收集使用统计信息。一般禁用就行。
5、magicEnabled参数的默认值是true,表示启用Streamlit的魔法命令功能。即:任何时候如果Streamlit看到一个变量或常量值, 它就会自动将其使用st.write写入应用。所以可能容易导致网页速度变慢、重复加载数据等等情况。
命令行查看streamlit配置信息:
streamlit config show
1.3. 运行Streamlit应用
运行streamlit演示项目:
streamlit hello
上面有 4个示例项目:
DataFrame Demo
Plotting Demo
Mapping Demo
Animation Demo
如果需要运行你自己的py文件,在终端或命令提示符中运行:
streamlit run your_app.py
在运行上述命令后,你的默认浏览器将自动跳转Streamlit应用。
2. streamlit显示数据
首先,导入streamlit包:
import streamlit as st
2.1. 显示标题
st.title():用于创建页面的主要标题,通常是最大和最显眼的标题。它是在应用的顶部设置的,并且在整个页面中通常只使用一次,用于表示应用的主题或总体内容。
st.header():用于创建一个相对较小的标题,比st.title()稍微小一些。可以在应用中多次使用,用于将内容分成不同的部分或主题。
st.subheader():用于创建相对较小的标题,比st.header()还要小。可以在应用中多次使用,用于在小节内更细致地标识内容。
st.caption(): 用于创建更小的标题
总体来说,这些函数可以根据文档结构和内容的层次结构来选择使用。使用st.title()来设置整个应用的主标题,使用st.header()和st.subheader()来划分和标识各个部分或小节的标题。这样可以使应用更易于阅读和理解。
import streamlit as st
st.title("这是一个标题")
st.header("这是一个较小的标题")
st.subheader("这是一个相对较小的标题")
st.caption("这是一段说明文字")
2.2. 显示文本
st.markdown():用于支持Markdown格式的文本,允许你使用Markdown语法来添加样式、链接、列表等元素。它提供更灵活的文本呈现选项,允许你使用Markdown标记来创建富文本内容。
st.text():不支持Markdown语法,只显示纯文本内容。
import streamlit as st
st.markdown("""
## 定义
CO-STAR是六个关键要素的缩写,每个字母代表一个特定的部分:
- **Context(上下文)** :提供任务的背景信息或环境
`当前任务是为一家科技公司撰写一篇关于人工智能发展趋势的文章`/ `需要为一场面向高中生的科普讲座准备内容`
- **Objective(目标)** :明确任务的具体目标或期望结果
`生成一篇逻辑清晰、通俗易懂的科普文章`/ `总结出人工智能领域的三大关键趋势并解释其影响`
- **Style(风格)** :定义语言表达的风格或语气
`正式且专业的学术风格`/ `轻松幽默、适合青少年理解的科普风格`
- **Tone(语调)** :设定沟通的情感基调
`积极乐观,传递对未来技术的信心`/ `中立客观,避免过度夸张的技术描述`
- **Audience(受众)** :明确内容的目标受众
`面向科技行业的从业者和决策者`/ `面向对人工智能感兴趣的普通大众或学生群体`
- **Response(响应格式)** :规定输出的形式或结构要求
`使用Markdown格式输出,包含标题、段落和项目符号列表`/ `附带一个可视化图表示例,并用简短的语言解释数据来源`
""")
st.text("""
春花秋月何时了,往事知多少。小楼昨夜又东风,故国不堪回首月明中。
""")
可以看到,Markdown打印方式更灵活,而text打印方式较为单一。
2.3. 显示代码段
st.code() 调用参数如下:
body:要显示的代码字符串。
language:代码所使用的开发语言,字符串,默认值:python。 如果省略的话,将没有语法高亮效果。
import streamlit as st
st.markdown('**以下为打印的代码:**')
st.code('''
def bubble_sort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# 最后 i 个元素已经排好序,不需要再比较
for j in range(0, n-i-1):
# 如果元素比下一个元素大,则交换它们
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
# 示例使用
if __name__ == "__main__":
# 测试数据
example_list = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", example_list)
# 调用冒泡排序函数
bubble_sort(example_list)
print("排序后的数组:", example_list)
''', language='python')
效果如下:
2.4. 显示公式
st.latex: 用于在页面中渲染 LaTeX 格式的数学公式,支持复杂的数学表达式和符号。这在需要展示数学内容时非常有用。
调用方式:
通过 st.latex(body)
渲染 LaTeX 公式,body
是包含公式的字符串。
import streamlit as st
# 渲染单行公式
st.latex(r"E = mc^2")
# 渲染多行复杂公式
st.latex(r"""
f(x) = \int_{-\infty}^\infty
\hat{f}(\xi)\,e^{2 \pi i \xi x}
\,d\xi
""")
# 结合 Markdown 和 LaTeX
st.markdown("以下是一个带解释的公式:")
st.latex(r"\text{概率密度函数:} P(X = k) = {n \choose k} p^k (1-p)^{n-k}")
2.5. 通用显示方法
st.write(): 是Streamlit中用于在应用程序中展示文本和数据的通用函数。它是一个多功能的函数,可以接受多种类型的参数,包括Markdown格式的字符串、数字、DataFrame、图表等。
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 字符串
st.write("这是一段文本。")
# 数字
st.write(42)
# 列表
st.write([1, 2, 3])
# 字典
st.write({
"key": "value"})
# 数据框(DataFrame)
df = pd.DataFrame({
"Column 1": [1, 2, 3], "Column 2": ["A", "B", "C"]})
st.write(df)
#多参数用法
st.write("这是一个字符串", 42, [1, 2, 3], {
"key": "value"})
#自定义渲染
fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)
y = np.sin(x)
ax.plot(x, y)
st.write(fig)
效果如下:
2.6. 显示表格
2.6.1. st.dataframe
st.dataframe(): 以表格的形式呈现数据,支持Pandas的特有功能,如排序、过滤等,并且会自动适应数据框的大小,如果数据框太大,它会自动启用滚动条。
参数如下:
①width:UI元素的期望宽度,单位为像素,类型为Int或None,如果是None的话,Streamlit将基于页面宽度计算元素宽度。
②height:UI元素的期望高度,单位为像素,类型为Int或None。
另外,st. dataframe 还可以传入一个 Pandas Styler 对象来修改所渲染的 DataFrame 的样式,例如将每一列的最大值高亮显示:
"""
- highlight_null:空值高亮
- highlight_min:最小值高亮
- highlight_max:最大值高亮
- highlight_between:某区间内的值高亮
- highlight_quantile:暂没用过
"""
st.dataframe(df.style.highlight_max(axis=0))
2.6.2. st.table
**st.table():**用于显示通用表格数据,不仅支持Pandas,还可以处理列表、元组等可迭代数据结构。但st.table仅用于显示数据,而不提供诸如排序和过滤等数据框专有功能。
import streamlit as st
import pandas as pd
import numpy as np
random_data = np.random.rand(100, 10)
df = pd.DataFrame(random_data, columns=[f'Col{
i}' for i in range(1, 11)])
st.dataframe(df)
st.table(df)
如上所示,st.dataframe打印出来的表格可以缩放、下载、滑动、查找等功能,而st.table是将所有数据行和列都打印出来,功能单一。
2.7. 显示JSON
**st.json():**主要用于展示JSON格