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.最後呈現效果如下圖
在這裏插入圖片描述

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