【Streamlit】ファイルをアップロードする:st.file_uploader

Streamlit
この記事は約7分で読めます。

こんにちは、JS2IIUです。
手持ちのファイルをアップロードしてStreamlit上に表示したり、何らかの処理を実行させたい、という場面で活用できるのがst.file_uploaderです。よくあるファイルアップロードのUIが簡単に実現できます。今回もよろしくお願いします。

1. はじめに

PythonでGUIアプリケーションを作成できるフレームワーク「Streamlit(ストリームリット)」は、手軽にWebアプリを開発できることで人気を集めています。

特に、ユーザーがファイルをアップロードして処理するようなアプリケーションは、データ分析ツールや業務支援ツールなどでよく使われる機能です。

この記事では、Streamlitでファイルアップロードを実現するためのウィジェット、st.file_uploaderについて、ステップバイステップでやさしく解説していきます。

2. st.file_uploaderとは?

st.file_uploaderは、ユーザーがファイルをアプリにアップロードできるようにするStreamlitの関数です。

主な特徴は以下の通りです:

  • ユーザーのローカルPCからファイルを選んでアップロードできる
  • 対応するファイル形式(CSV、Excel、画像など)を指定できる
  • 単一または複数ファイルのアップロードに対応している
  • アップロードされたファイルをPythonオブジェクトとして扱える

これを使えば、「CSVファイルをアップして中身を表示」「画像ファイルをアップして表示」など、実用的なWebアプリが簡単に作れます

3. 基本的な使い方【CSVファイルのアップロード】

まずは、CSVファイルをアップロードして、その内容を画面に表示するシンプルなアプリを作ってみましょう。

🔧ステップ1:必要なライブラリのインポート

Python
import streamlit as st
import pandas as pd

Streamlitと、CSVの読み込みに使うPandasを読み込みます。

🔧ステップ2:ファイルアップロード用ウィジェットの設置

Python
uploaded_file = st.file_uploader("CSVファイルをアップロードしてください", type="csv")
  • "CSVファイルをアップロードしてください":画面に表示される説明文です。
  • type="csv":CSV形式のファイルのみを受け付けるよう制限しています。

🔧ステップ3:ファイルがアップロードされたら中身を表示

Python
if uploaded_file is not None:
    df = pd.read_csv(uploaded_file)
    st.dataframe(df)
  • uploaded_fileNoneでなければ(=ファイルがアップされたら)、
  • pd.read_csv()でファイルの内容を読み込み、
  • st.dataframe()で画面に表として表示します。

💻完成コード(CSVアップロード)

Python
import streamlit as st
import pandas as pd

uploaded_file = st.file_uploader("CSVファイルをアップロードしてください", type="csv")

if uploaded_file is not None:
    df = pd.read_csv(uploaded_file)
    st.dataframe(df)

📌ポイント

  • ファイルアップロードは「戻り値としてファイルオブジェクトを受け取る」スタイルです。
  • if uploaded_file is not None: は忘れずに書きましょう!
  • ファイルのサイズ制限がデフォルトでは200MBとなっています。こちらの記事を参考にして、server.maxUploadSizeの値を修正することでサイズ制限を変更することが可能です。

4. 複数ファイルをアップロードする方法

st.file_uploaderは、複数のファイルを一度にアップロードする機能も持っています。次は、複数の画像をアップロードして、画面に並べて表示する例を見てみましょう。

💻サンプルコード(画像の複数アップロード)

Python
uploaded_files = st.file_uploader(
    "画像をアップロードしてください",
    type=["png", "jpg", "jpeg"],
    accept_multiple_files=True
)

if uploaded_files:
    for file in uploaded_files:
        st.image(file, caption=file.name)

📝解説

  • accept_multiple_files=True:複数ファイルの選択を許可します。
  • uploaded_filesは、アップロードされたファイルのリストになります。
  • for file in uploaded_files:で、アップされたすべてのファイルを1つずつ表示しています。
  • st.image()では画像を表示できます。

画像ファイルの種類を指定したい場合は、type=["png", "jpg", "jpeg"]のようにリストで指定できます。

5. ファイルの種類別の活用例

ファイル種類使用例
CSV、Excelアップロードしてデータの集計・分析を行う
画像(JPG/PNG)画像分類・プレビューアプリ
テキストファイル内容の要約や自然言語処理(NLP)への応用

st.file_uploaderは多くの種類のファイルに対応しているので、使い方次第でさまざまなアプリが作れます。

6. よくあるエラーとその対処法

❌ ファイルがアップロードされない

→ サポートされていない形式のファイルを指定していないか確認してください(typeの指定を確認)。

❌ pd.read_csvでエラーが出る

→ CSVファイルの文字コードが異なる可能性があります。
 日本語のCSVは encoding="shift-jis" を試してみてください。

Python
df = pd.read_csv(uploaded_file, encoding="shift-jis")

❌ ファイルがNoneのまま

if uploaded_file is not None: を書き忘れていないか確認しましょう!

7. まとめ

本記事では、Streamlitでファイルをアップロードする方法を、基本から応用まで丁寧に紹介しました。

✅学んだことまとめ

  • st.file_uploaderを使えば、簡単にファイルアップロード機能が作れる
  • typeでファイル形式を制限できる
  • 複数ファイルのアップロードも可能
  • アップロードしたファイルは、pandasPILなどでそのまま処理できる

🔧次に挑戦してみよう!

  • アップロードしたファイルを保存する(with open()BytesIOの利用)
  • ファイルの中身を処理してグラフを表示する
  • アップロードファイルに対して機械学習を適用する

🔗参考リンク

最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。Poetryについても詳しく説明されています。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

コメント

タイトルとURLをコピーしました