import base64
import numpy as np
import pandas as pd
import streamlit as st
@st.cache
def sample():
return pd.DataFrame(np.random.randint(0, 10, (6, 3)), columns=["A", "B", "C"])
def download_link(df):
s = base64.b64encode(df.to_csv(index=False).encode()).decode()
return f'<a href="data:file/csv;base64,{s}" download="sample.csv">Download CSV</a>'
ダウンロードは、残念ながら用意されていません。本問では便宜的にHTMLのAタグでダウンロードできるようにします。
df = sample()
st.sidebar.markdown(download_link(10 - df), True) # CSVダウンロードのリンク
if file := st.sidebar.file_uploader('Upload'): アップロードボタンの作成
# アップロードされていたらdfを置き換える
df = pd.read_csv(file)
# グラフのコマンドを値とする辞書
dc = {"line": st.line_chart, "bar": st.bar_chart, "area": st.area_chart}
kind = st.sidebar.selectbox("Kind", list(dc)) # 選択ボックス
sl = st.sidebar.slider("lower", 0, 4) # 開始位置のスライダー
dc[kind](df[sl:]) # グラフ出力
if st.checkbox("DataFrame"):
st.dataframe(df[sl:].T)
st.file_uploader
を使うとファイルのアップロード機能が簡単にできます。
下記のように、返り値は、Noneまたは「アップロードされたファイル」になります。
- アップロードされていないとき:返り値はNoneです。
- アップロードされたとき:返り値はUploadedFileクラスのオブジェクトです。
- UploadedFileクラスはByteIOクラスのサブクラスなので、ファイルオブジェクトのように利用できます。
- ここでは説明を省きますが、複数ファイルのアップロードも可能です
コメント