美文网首页
使用streamlit快速搭建网站

使用streamlit快速搭建网站

作者: wo_monic | 来源:发表于2023-11-27 13:39 被阅读0次

类似于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的页面

更多学习资源

streamlit和github结合,部署免费的在线网站

相关文章

网友评论

      本文标题:使用streamlit快速搭建网站

      本文链接:https://www.haomeiwen.com/subject/homzwdtx.html