サイトアイコン アマチュア無線局JS2IIU

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

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

1. はじめに

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

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

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

2. st.file_uploaderとは?

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

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

これを使えば、「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")

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

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

💻完成コード(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)

📌ポイント

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)

📝解説

画像ファイルの種類を指定したい場合は、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でファイルをアップロードする方法を、基本から応用まで丁寧に紹介しました。

✅学んだことまとめ

🔧次に挑戦してみよう!

🔗参考リンク

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

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

モバイルバージョンを終了