itou-daiki's picture
Update app.py
22dcbe2
import gradio as gr
import pandas as pd
from pycaret.classification import *
from pycaret.regression import *
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
import japanize_matplotlib # 日本語のフォントを使用するためのライブラリ
from io import BytesIO # バイトデータを扱うためのモジュール
# モデルを選択し、プロットする関数
def plot_selected_model(file, ignore_features, target_variable, analysis_type, model_name, plot_type):
if file is None:
return None # ファイルがアップロードされていない場合
buffer = BytesIO(file.read()) # ファイルの内容をバイトデータとして読み込む
if file.name.endswith('.csv'):
buffer.seek(0) # バッファのポインタをリセット
data = pd.read_csv(buffer) # CSVファイルの場合
else:
buffer.seek(0) # バッファのポインタをリセット
data = pd.read_excel(buffer, engine='openpyxl') # Excelファイルの場合
data = data.dropna(subset=[target_variable]) # 目的変数に欠損値がある行を削除
data_ignored = data.drop(columns=ignore_features) # 除外する変数を削除
if analysis_type == '分類':
setup_data = setup(data, target=target_variable, ignore_features=ignore_features)
elif analysis_type == '回帰':
setup_data = setup(data, target=target_variable, ignore_features=ignore_features)
compare_results = compare_models()
display(compare_results) # モデル比較の結果を表示
model = create_model(model_name) # 選択されたモデルを作成
plot_file = "plot.png" # プロットのファイル名
if plot_type == '決定木':
# 決定木をプロット
plt.figure(figsize=(20, 10))
plot_tree(model.estimators_[0], filled=True)
plt.savefig(plot_file)
else:
# 他のプロットタイプ
plot_model(model, plot=plot_type, save=True, save_filename=plot_file)
return plot_file
# メイン関数
def main(file, ignore_features, target_variable, analysis_type, model_name, plot_type):
plot_file = plot_selected_model(file, ignore_features, target_variable, analysis_type, model_name, plot_type)
if plot_file is None:
return "エラー: ファイルがアップロードされていません。"
return plot_file
# 利用可能なプロットタイプのリスト
plot_types = ['feature', 'confusion_matrix', 'auc', 'residuals', '決定木']
# Gradioインターフェースの設定
iface = gr.Interface(
fn=main, # メイン関数
inputs=[
gr.inputs.File(label="ファイルアップロード (Excelファイル or CSVファイル)"), # ファイルアップロード
gr.inputs.CheckboxGroup(choices=[], label="説明変数から除外する変数を選択"), # 除外する変数の選択
gr.inputs.Dropdown(choices=[], label="目的変数を選択"), # 目的変数の選択
gr.inputs.Radio(choices=["分類", "回帰"], label="分析手法を選択"), # 分析手法の選択
gr.inputs.Dropdown(choices=[], label="モデルを選択"), # モデル選択のためのドロップダウン
gr.inputs.Dropdown(choices=plot_types, label="プロットタイプを選択") # プロットタイプの選択
],
outputs=[gr.outputs.Image(label="モデルの可視化", type="filepath")] # 出力
)
# インターフェースの起動
iface.launch()