# Streamlit数据应用开发实战
## 什么是Streamlit?
Streamlit是一个Python框架,专为数据科学家和机器学习工程师设计,可以快速构建数据应用、仪表板和AI应用。
## 安装
```bash
pip install streamlit
```
## 快速开始
```python
import streamlit as st
st.title("我的第一个Streamlit应用")
st.write("欢迎使用Streamlit!")
# 运行: streamlit run app.py
```
## 常用组件
### 文本显示
```python
st.title("标题")
st.header("二级标题")
st.subheader("三级标题")
st.markdown("**Markdown文本**")
st.code("print('hello')", language="python")
st.latex(r"E=mc^2")
```
### 输入组件
```python
name = st.text_input("姓名")
age = st.number_input("年龄", min_value=0, max_value=150)
level = st.slider("等级", 1, 100)
option = st.selectbox("选择", ["A", "B", "C"])
file = st.file_uploader("上传文件")
```
### 数据展示
```python
import pandas as pd
df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
st.dataframe(df) # 交互式表格
st.table(df) # 静态表格
st.json({"key": "value"})
```
### 图表
```python
import matplotlib.pyplot as plt
import altair as alt
# Matplotlib
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 9])
st.pyplot(fig)
# Streamlit原生图表
st.line_chart(df)
st.bar_chart(df)
st.area_chart(df)
# Altair
chart = alt.Chart(df).mark_line().encode(x="A", y="B")
st.altair_chart(chart)
```
## 布局
```python
# 列布局
col1, col2 = st.columns(2)
with col1:
st.write("左侧内容")
with col2:
st.write("右侧内容")
# 侧边栏
with st.sidebar:
st.write("侧边栏内容")
page = st.selectbox("页面", ["首页", "设置"])
# 选项卡
tab1, tab2 = st.tabs(["数据", "图表"])
with tab1:
st.dataframe(df)
with tab2:
st.line_chart(df)
```
## 状态管理
```python
# Session State
if "count" not in st.session_state:
st.session_state.count = 0
if st.button("点击"):
st.session_state.count += 1
st.write(f"点击次数: {st.session_state.count}")
```
## 缓存优化
```python
@st.cache_data
def load_data():
return pd.read_csv("large_data.csv")
@st.cache_resource
def load_model():
return load_heavy_model()
```
## AI聊天应用示例
```python
import streamlit as st
from openai import OpenAI
st.title("🤖 AI聊天助手")
client = OpenAI()
if "messages" not in st.session_state:
st.session_state.messages = []
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
if prompt := st.chat_input("说些什么..."):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.write(prompt)
with st.chat_message("assistant"):
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=st.session_state.messages,
stream=True
)
full_response = st.write_stream(response)
st.session_state.messages.append({"role": "assistant", "content": full_response})
```
## 部署
Streamlit Cloud免费托管,连接GitHub即可自动部署。
## 总结
Streamlit是构建数据应用和AI Demo的绝佳选择,特别适合需要处理和展示数据的场景。
暂无评论。成为第一个评论的人吧!