Python・AIテック

Streamlitでファイルアップローダーを作ってみる

スポンサーリンク

1. はじめに

データ分析や機械学習のプロジェクトでは、外部からデータを入力するためのインターフェースが必要なことが多々あります。ファイルアップローダはその代表的な手法の一つです。Streamlitは、Pythonで簡単にインタラクティブなWebアプリケーションを作成できるライブラリで、ファイルアップロード機能を簡単に実装することができます。本記事では、Streamlitを使用してファイルアップローダを作成する方法について、具体的な例を交えながら詳しく解説します。

2. Streamlitとは?

Streamlitは、Pythonコードを用いて迅速にWebアプリケーションを作成できるフレームワークです。データサイエンティストや機械学習エンジニア向けに設計されており、以下のような特徴があります:

  • 簡単なインストールと使用:Pythonの環境で簡単にインストールして使うことができます。
  • リアルタイムでの更新:コードを変更するたびに、ブラウザにリアルタイムで反映されます。
  • 豊富なUIコンポーネント:グラフ、テキスト、データフレーム、ボタンなど、さまざまなUIコンポーネントが簡単に使用できます。

3. Streamlitのインストール

まずは、Streamlitをインストールしましょう。以下のコマンドを使用してインストールします。

pip install streamlit

インストールが完了したら、次にStreamlitアプリケーションの基本的な構成について説明します。

4. 基本的なStreamlitアプリケーションの作成

StreamlitアプリケーションはPythonスクリプトとして作成します。以下のようなシンプルなスクリプトを作成し、app.pyという名前で保存します。

import streamlit as st

st.title('ファイルアップローダーのデモ')
st.write('ファイルをアップロードしてください。')

このスクリプトを実行するには、以下のコマンドを使用します。

streamlit run app.py

ブラウザが自動的に開き、タイトルと説明が表示されます。これで、基本的なStreamlitアプリケーションが動作していることが確認できます。

5. ファイルアップロード機能の追加

次に、Streamlitでファイルアップローダを実装してみましょう。Streamlitはst.file_uploader関数を提供しており、これを使用することで簡単にファイルアップローダを追加できます。

以下のコードを追加して、ファイルアップロード機能を実装します。

import streamlit as st

st.title('ファイルアップローダーのデモ')
st.write('ファイルをアップロードしてください。')

uploaded_file = st.file_uploader("ファイルを選択", type=["csv", "txt", "xlsx"])

if uploaded_file is not None:
    st.write("ファイル名:", uploaded_file.name)
    st.write("ファイルタイプ:", uploaded_file.type)
    st.write("ファイルサイズ:", uploaded_file.size, "bytes")

このスクリプトを実行すると、ファイル選択ボタンが表示され、ユーザーがファイルをアップロードすると、そのファイルの名前、タイプ、サイズが表示されます。

6. アップロードされたファイルの処理

アップロードされたファイルの情報を表示するだけでなく、その内容を処理することが重要です。ここでは、アップロードされたCSVファイルを読み込み、その内容を表示する方法を説明します。

import streamlit as st
import pandas as pd

st.title('ファイルアップローダーのデモ')
st.write('ファイルをアップロードしてください。')

uploaded_file = st.file_uploader("ファイルを選択", type=["csv", "txt", "xlsx"])

if uploaded_file is not None:
    st.write("ファイル名:", uploaded_file.name)
    st.write("ファイルタイプ:", uploaded_file.type)
    st.write("ファイルサイズ:", uploaded_file.size, "bytes")

    if uploaded_file.type == "text/csv":
        data = pd.read_csv(uploaded_file)
    elif uploaded_file.type == "text/plain":
        data = pd.read_csv(uploaded_file, delimiter="\t")
    elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
        data = pd.read_excel(uploaded_file)

    st.write("ファイルの内容:")
    st.write(data)

このスクリプトでは、アップロードされたファイルがCSV、テキスト、またはExcel形式の場合、その内容を読み込み、Streamlit上に表示します。

7. インタラクティブなデータ処理

Streamlitを使うと、アップロードされたファイルのデータをインタラクティブに処理することも簡単です。例えば、データの統計情報を表示したり、グラフを作成したりすることができます。

以下の例では、アップロードされたCSVファイルのデータに対して、基本的な統計情報を表示し、ヒストグラムを描画します。

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt

st.title('ファイルアップローダーのデモ')
st.write('ファイルをアップロードしてください。')

uploaded_file = st.file_uploader("ファイルを選択", type=["csv", "txt", "xlsx"])

if uploaded_file is not None:
    st.write("ファイル名:", uploaded_file.name)
    st.write("ファイルタイプ:", uploaded_file.type)
    st.write("ファイルサイズ:", uploaded_file.size, "bytes")

    if uploaded_file.type == "text/csv":
        data = pd.read_csv(uploaded_file)
    elif uploaded_file.type == "text/plain":
        data = pd.read_csv(uploaded_file, delimiter="\t")
    elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
        data = pd.read_excel(uploaded_file)

    st.write("ファイルの内容:")
    st.write(data)

    st.write("基本統計情報:")
    st.write(data.describe())

    st.write("データのヒストグラム:")
    column = st.selectbox("列を選択", data.columns)
    fig, ax = plt.subplots()
    ax.hist(data[column], bins=30)
    st.pyplot(fig)

このスクリプトを実行すると、ユーザーはアップロードされたデータの基本統計情報を確認し、特定の列のヒストグラムを選択して表示することができます。

8. ファイルアップローダを活用したアプリケーション例

最後に、実際のアプリケーション例として、アップロードされたCSVファイルを使って機械学習モデルの予測を行うアプリケーションを作成してみましょう。

以下の例では、アップロードされたデータを使って線形回帰モデルを訓練し、新しいデータに対して予測を行います。

import streamlit as st
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

st.title('ファイルアップローダーを使った機械学習アプリケーション')
st.write('CSVファイルをアップロードしてください。')

uploaded_file = st.file_uploader("ファイルを選択", type=["csv"])

if uploaded_file is not None:
    data = pd.read_csv(uploaded_file)
    st.write("アップロードされたデータ:")
    st.write(data)

    # 入力と出力の列を選択
    input_columns = st.multiselect("入力列を選択", data.columns)
    output_column = st.selectbox("出力列を選択", data.columns)

    if st.button("モデルを訓練"):
        if len(input_columns) > 0 and output_column:
            X = data[input_columns]
            y = data[output_column]

            X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
            model = LinearRegression()
            model.fit(X_train, y_train)

            st.write("モデルの訓練が完了しました。")
            st.write("R²スコア:", model.score(X_test, y_test))

            # 新しいデータに対する予測
            new_data = {col: st.number_input(f"{col}の値", value=0.0) for col in input_columns}
            new_df = pd.DataFrame(new_data, index=[0])
            prediction = model.predict(new_df)
            st.write("予測結果:", prediction[0])
        else:
            st.write("入力列と出力列を選択してください。")

このスクリプトを実行すると、ユーザーはCSVファイルをアップロードし、入力列と出力

列を選択して、線形回帰モデルを訓練することができます。さらに、新しいデータを入力して予測結果を確認することができます。

9. まとめ

Streamlitを使えば、Pythonコードを使って簡単にインタラクティブなWebアプリケーションを作成でき、ファイルアップローダの実装も非常に簡単です。本記事では、基本的なファイルアップローダの作成から、データの表示、統計情報の計算、グラフの描画、さらには機械学習モデルの訓練と予測まで、さまざまな機能を実装する方法を紹介しました。Streamlitを活用して、あなたのデータプロジェクトをよりインタラクティブでユーザーフレンドリーなものにしてみてください。

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