美文网首页
使用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