Streamlit

发布时间 2023-04-27 12:37:52作者: chengjon

简介

一个傻瓜式构建可视化web的程序
Streamlit库官方地址:https://streamlit.io/
API文档地址:https://docs.streamlit.io/

Streamlit库基本介绍
Streamlit是一个基于 Python 的 Web 应用程序框架,致力于以更高效、更灵活的方式可视化数据,并分析结果。它是一个开源库,可以帮助数据科学家和学者在短时间内开发机器学习 (ML) 可视化仪表板。只需几行代码,我们就可以构建并部署强大的数据应用程序。其实就是用Python语言写一个本地Web,应用场景常常是机器学习可视化(当然也可做其他的图表分析等),不需要任何Web前后端开发经验。注意我们写出的Web只有本地可以访问,要接入互联网还需要其他进阶方法!
https://docs.streamlit.io/library/cheatsheet

优点和缺点(from Claude)

Streamlit 是一个用于构建数据应用程序的开源 Python 库,有以下优点和缺点:
优点:

  1. 简单易用:Streamlit 使用 Python 语法,非常容易掌握,可以快速构建数据应用程序。
  2. 美观大方:Streamlit 拥有漂亮的 UI 组件,可以构建出色观感的应用程序。
  3. 兼容性强:Streamlit 应用程序可以部署在任何地方 - 在本地运行,嵌入到Notebook中,部署在服务器上等等。
  4. 高度交互:Streamlit 支持许多 UI 组件,可以构建高度交互的应用程序。
  5. 开源免费:Streamlit 是免费开源的,有很大的社区支持。
    缺点:
  6. 只适合简单应用:Streamlit 适合快速构建简单的应用程序,对于大型复杂的应用不太适用。
  7. 定制性略差:Streamlit 的 UI 组件定制性稍微差一些,样式不太方便调整。
  8. 部署依赖较多:部署 Streamlit 应用程序依赖较多,比较麻烦,不像传统 Python 应用那么简单。
  9. 社区较小:虽然 Streamlit 开源社区在增长,但相比其他 Web 框架,社区还是较小。
  10. 不支持前后端分离:Streamlit 不支持前后端分离开发,后端和前端高度耦合。
    所以,总体来说,Streamlit 是一个非常适合快速开发简单数据应用的工具,但对大型复杂应用和追求高定制性的项目,Streamlit 可能不太适用。但作为快速开发和原型构建,Streamlit 是一个很好的选择。 (已编辑)

命令

运行Streamlit的程序

CMD下运行

Another way of running Streamlit is to run it as a Python module. This can be useful when configuring an IDE like PyCharm to work with Streamlit:
Running
python -m streamlit run your_script.py

anaconda Powershell下运行

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/streamlit_app.py

代码示例

# -*- coding: utf-8 -*-
"""
# My first app
原文:https://blog.csdn.net/qq_44747847/article/details/116462041

You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
"""
import streamlit as st
import numpy as np
import pandas as pd

st.title("This is my first app")
st.write("你好")
st.write("Here's our first attempt at using data to create a table:")

#显示dataframe
df = pd.DataFrame({
  'first column': [5, 6, 7, 8],
  'second column': [50, 60, 70, 80]
})

st.write(pd.DataFrame({
    'first column': [1, 2, 3, 4],
    'second column': [10, 20, 30, 40]
}))
# 其中df定义的位置,并不影响最后的输出位置!
# 可参考https://docs.streamlit.io/library/get-started/main-concepts 中的use magic
df

#显示折线图
chart_data = pd.DataFrame(
     np.random.randn(20, 3),
     columns=['广州', '上海', '北京'])

st.line_chart(chart_data)

#显示地图
map_data = pd.DataFrame(
    np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
    columns=['lat', 'lon'])

st.map(map_data)


#发现地理位置不太满意,换成江苏南京!
smap_data = pd.DataFrame(
    np.random.randn(1000, 2) / [50, 50] + [32.37, 118.4],
    columns=['lat', 'lon'])

st.map(smap_data)


#显示单选框
if st.checkbox('Show dataframe'):
    chart_data = pd.DataFrame(
       np.random.randn(20, 3),
       columns=['a', 'b', 'c'])
    chart_data

option = st.selectbox(
    'Which number do you like best?',
     df['first column'])

'You selected: ', option

#显示按钮
left_column, right_column = st.columns(2)
pressed = left_column.button('Press me?')
if pressed:
    right_column.write("Woohoo!")

expander = st.expander("FAQ")
expander.write("Here you could put in some really, really long explanations...")

#添加一个时间进度条
import time
'Starting a long computation...'

# Add a placeholder
latest_iteration = st.empty()
bar = st.progress(0)

for i in range(100):
  # Update the progress bar with each iteration.
  latest_iteration.text(f'Iteration {i+1}')
  bar.progress(i + 1)
  time.sleep(0.1)

'...and now we\'re done!'