类似于Mkdocs一样,streamlit是基于python的快速搭建网站的框架。
两者的区别
- streamlit可以支持更加丰富的图和表、动画等的实现,可以和机器学习完美结合,实现在线部署模型,具有丰富的交互控件。
- Mkdocs适合作为博客或者程序使用文档等静态页面的建站工具。
安装streamlit
pip install streamlit
开始demo
streamlit hello
然后会出现两个ip地址, 内网的地址http://192.168.100.6:8501和另一个外网的ip地址。
在浏览器打开上面的地址即可看到demo站点。
快速入门streamlit中文教程
main.py
示例内容如下
import streamlit as st
import pandas as pd
import numpy as np
'不同页面之间会共享模块'
st.title('DemoWeb')
st.header("st.button")
if st.button('Say hello'):
st.write('why hello')
else:
st.write("hello world!")
df = pd.DataFrame({
'name':['张三','李四','王五','赵六'],
'age':[12,34,56,32]
})
#st.write可以输出各种类型的变量
st.write(df)
dataframe = pd.DataFrame(
np.random.randn(15,20),
columns=('col %d' % i for i in range(20)))
#动态表
st.dataframe(dataframe.style.highlight_max(axis=0))
#静态表
st.table(dataframe)
#画一个折线图
chart_data = pd.DataFrame(
np.random.randn(25,4),
columns=['zhang','Wang','Li','Zhao']
)
st.line_chart(chart_data)
#相似地图,使用1000个随机数,在郑州市随机画分布散点
map_data = pd.DataFrame(
np.random.randn(1000,2)/[5,5]+[34.5,113.5],
columns=['lat','lon']
)
st.map(map_data,size="20",color="#f0e23f")
#这个是存放在我的本地的数据map.txt
huaqi = pd.read_csv("/mnt/e/map/map.txt",sep="\t")
#st.dataframe(huaqi)
zoom_index = st.slider('选择地图缩放级别')
size_index = st.slider('选择显示的点的大小')
st.map(huaqi,latitude="Latitude",longitude="Longitude",color="Color",zoom=zoom_index,size=size_index)
#zoom用于控制缩放级别,数值越大放大的倍数越高,取值范围是0到20
#一个滑动条,数值范围是0-100
x = st.slider('选择一个数值')
st.write(x,'平方是',x*x)
#一个输入的文本框
st.text_input("输入字符串",key="name")
st.session_state.name #访问输入的文本
#使用内容显示或隐藏数据
if st.checkbox("显示huaqi的数据框"):
chart_data = huaqi
chart_data
#下拉列表框
df = pd.DataFrame({
'第1列':[1,3,5,6],
'第2列':[12,33,57,69]
})
option = st.selectbox(
'你选择哪一个类别',
df['第2列']
)
'you choose is: ',option
add_selectbox = st.sidebar.selectbox(
'Select a name for you cat:',
("tom","Tim","Lucy","Gypsy")
)
add_slider = st.sidebar.slider(
'select your cat age:',
0,15,(2,5)#括号内是选择的数据,一个表示是一个值,两个表示是一个范围
)
left_column,right_column = st.columns(2)
left_column.button("点击")
with right_column:
dog_name=st.radio(
'Select a name for you Dog:',
("tom","Tim","Lucy","Ray")
)
st.write("your dog name is: ",dog_name)
import time
'开始一个进度条,每个0.8S刷新一次'
latest_iteration = st.empty()
bar = st.progress(0,text="运行测试")
for i in range(3):
latest_iteration.text(f'Iteration {i+1}')
bar.progress(i+1)
time.sleep(0.8)
'and now done!'
启动主程序,会开始构建页面 streamlit run main.py
打开 http://192.168.100.6:8501即可访问
构建多页面应用
需要在main.py同级别创建一个pages
文件夹,在里面放入其他页面的.py文件。
例如:在里面创建一个Uber.py程序内容如下:
import streamlit as st
import pandas as pd
import numpy as np
st.title('纽约的Uber打车数据')
DATE_COLUMN='date/time'
DATA_URL = ('https://s3-us-west-2.amazonaws.com/streamlit-demo-data/uber-raw-data-sep14.csv.gz')
'st.cache_resource适用于缓存机器学习的模型或读取数据库的数据'
'st.cache_data是缓存函数,适合于常规的字符串,列表,数据框等'
@st.cache_data ##使用缓存,应避免修改缓存的函数的输出,除非修改该目录的内容,否则换成机制不会检查是否修改,
def load_data(nrows):
data = pd.read_csv(DATA_URL,nrows=nrows)
lowercase = lambda x: str(x).lower()
data.rename(lowercase,axis='columns',inplace=True)
data[DATE_COLUMN]= pd.to_datetime(data[DATE_COLUMN])
return data
data_load_state = st.text('Loading data...')
data = load_data(10000)#加载数据
data_load_state.text('Loading data done!')
if st.checkbox('显示原始数据'):
st.subheader('Raw data of uber')
st.dataframe(data)#显示加载的数据
#使用numpy包的histogram函数计算时间的直方图。参数1是小时
hist_values = np.histogram(data[DATE_COLUMN].dt.hour,bins=24,range=(0,24))[0]
#hist_values
st.bar_chart(hist_values)#绘制直方图
# 添加了一个滑动条,滑动后,可以查看不同时刻,纽约的打车的位置信息
hour_to_filter = st.slider('hour',0,23,(17))
filtered_data = data[data[DATE_COLUMN].dt.hour == hour_to_filter]
st.map(filtered_data)
Uber的页面
网友评论