streamlit 开发简单数据处理的页面

Streamlit是第一个专门针对机器学习和数据科学团队的应用 开发框架,它是开发自定义机器学习工具的最快的方法,你可以认为 它的目标是取代Flask在机器学习项目中的地位,可以帮助机器学习 工程师快速开发用户交互工具。但是streamlit有一定的局限性,没办法实现页面跳转的功能,如果想要实现,可以尝试与flask结合进行开发,但我目前还不太会用flask。

1.首先安装streamlit
pip install streamlit
2.定义title

import streamlit as st
import pandas as pd
import numpy as np

st.title("数据转换")

3.上传文件并展示在页面

st.write('上传csv文件,进行数据转换 :wave:')
file = st.file_uploader('上传文件', type=['csv'], encoding='auto', key=None)
@st.cache
def get_data(file):
    df = pd.DataFrame()
    if file is not None:
        data = []
        for i, line in enumerate(file.getvalue().split('\n')):
             if i == 0:
                 header = line.split(',')
             else:
                 data.append(line.split(','))
        df=pd.DataFrame(data,columns=header)
    return df
df = get_data(file)
st.write(df)

4.针对特定的数据进行长表转宽表操作

##########y值的行转列
@st.cache
def transform_y(df):
    for param_name in df[["PARAM_NAME"]].drop_duplicates().values:
        data_para = df[df["PARAM_NAME"] == param_name[0]]
        final_data = data_para.pivot_table(index=["GLASS_ID", "GLASS_START_TIME", "EQUIP_ID"], columns=["SITE_NAME"],
                                           values=["PARAM_VALUE"], aggfunc=np.sum)
        ncl = [param_name[0] + '_' + str(x + 1) for x in range(final_data.shape[1])]
        final_data = pd.DataFrame(final_data.values, columns=ncl, index=final_data.index)
        final_data = final_data.reset_index()
        final_data["GLASS_ID"] = final_data["GLASS_ID"].fillna(method='ffill')
        final_data.drop_duplicates(subset=["GLASS_ID"], keep='last', inplace=True)
        return final_data

#####x值的行转列
@st.cache
def transform_x(df_x):
    data_x = df_x.pivot_table(index="GLASS_ID", columns="PARAM_NAME", values="PARAM_STR_VALUE",
                                  aggfunc='last')
    return data_x

5.设置button进行调用转换函数

if st.button("X数据转换"):
    data_x = transform_x(df)
    st.write(data_x)
    data_x.to_csv("data/data_x.csv")
#f len(df)!=0:
    #data_x=transform_x(df)
if st.button("X点击下载"):
    data_x = transform_x(df)
    st.write(data_x)
    st.write('http://localhost:8081/data_x.csv')
if st.button("Y数据转换"):
    data_y = transform_y(df)
    st.write(data_y)
    data_y.to_csv("data/data_y.csv")
# if len(df)!=0:
#     data_y=transform_y(df)
if st.button("Y点击下载"):
    data_y = transform_y(df)
    st.write(data_y)
    st.write('http://localhost:8081/data_y.csv')
  • 此处本打算把点击下载的if嵌套在上一个if 里面,但是运行没有结果,直接返回上一个命令,不知道原因,所以分别设置两个button进行数据转换和下载,但是streamlit仅支持50M以内的数据上传和下载,可用于小数据
  • 数据存储在本地项目的文件夹下,为了隐藏代码,可新建一个文件夹用于存储数据,但写入网页并不需要此文件夹的路径
    例如:st.write(‘http://localhost:8081/data_y.csv’)

5.最后运行此段代码,并在pycharm的Terminal命令终端输入
streamlit run data.py 运行得到网页地址:
Local URL: http://localhost:8501
Network URL: http://192.168.66.82:8501
Ctrl+C退出
6.进行文件下载还要开启文件服务器
在pycharm的Terminal命令终端新建local(2)输入:
python -m http.server 8081
Ctrl+C退出
6.最后呈现效果如下图
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章