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()