python
1 2 3import sys 4import tkinter as tk 5import tkinter.filedialog as tkfile 6from tkinter import filedialog 7from tkinter import ttk 8import pandas as pd 9from sklearn.model_selection import train_test_split 10import os, tkinter, tkinter.filedialog, tkinter.messagebox 11 12 13class Application(tk.Frame): 14 def __init__(self, master): 15 super().__init__(master) 16 self.master = master 17 self.master.title('ana_ver2') 18 self.pack() 19 self.create_widgets() #widget作る時に必要コード 20 21 22 def create_widgets(self): 23 self.input_box = tkinter.Entry(width=40) 24 self.input_box.place(x=10, y=100) 25 26 #ラベルの作成 27 self.input_label = tkinter.Label(text="結果") 28 self.input_label.place(x=10, y=70) 29 30 #ボタンの作成 31 self.button = tkinter.Button(text="参照",command=file_select) 32 self.button.place(x=10, y=130) 33 34 35 36 37 self.button2 = tkinter.Button(text="ana",command=ana_do) 38 self.button2.place(x=10, y=160) 39 40 self.input_box2 = tkinter.Entry(width=40) 41 self.input_box2.place(x=10, y=180) 42 43 44 45 46#ボタンがクリックされたら実行 47def file_select(): 48 idir = 'C:\python_test' #初期フォルダ 49 filetype = [("","*")] #拡張子の選択 50 file_path = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = idir) 51 app.input_box.insert(tkinter.END, file_path) #結果を表示 52 53 ana_do(file_path) 54 55 56def ana_do(FP): 57 58 df_a = pd.read_csv(FP) 59 60 61 del df_a['default'] 62 del df_a['id'] 63 64 #文字列のカラムを数値に置き換えて最終的にfloat変換(自動化完了) 65 #------------------------------------------------------------------------------ 66 col_name=df_a.columns#カラム名取得 67 68 #カラム名数処理繰り返し 69 for i in range(len(col_name)): 70 71 #カラムobjectの時の処理 要素抽出→置き換え 72 if df_a[col_name[i]].dtypes==object: 73 list_a = df_a[col_name[i]].unique() 74 75 for u in range(len(list_a)): 76 df_a[col_name[i]] = df_a[col_name[i]].replace(list_a[u], str(u)) 77 78 #カラム毎にfloat変換 79 df_a[col_name[i]] =df_a[col_name[i]].astype(float) 80 81 #------------------------------------------------------------------------------ 82 83 84 85 X =df_a[["age","job","marital","education","balance","housing","loan","contact","duration","campaign","pdays","previous","poutcome"]] 86 y =df_a["y"] 87 88 89 #学習データとtestデータに分ける 90 from sklearn.model_selection import train_test_split 91 # train_test_splitを使って、データセットをトレーニングデータとテストデータに分割する。 7:3 92 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=0) 93 94 #線形回帰モデル読み込み 95 from sklearn.linear_model import LinearRegression 96 lr=LinearRegression() 97 98 lr.fit(X_train,y_train) 99 lr.predict(X_test) 100 101 #print(lr.coef_)#重み 102 #print(lr.score(X_train,y_train)) #決定係数 0.22全然だめ 103 #print(lr.score(X_test,y_test)) #決定係数 104 105 106 #モデル読み込み 107 from sklearn.linear_model import LogisticRegression 108 Lr=LogisticRegression() 109 110 #モデルに適合 111 Lr.fit(X_train,y_train) 112 #テストデータ予測 113 y_a =Lr.predict(X_test) 114 115 #誤判定件数確認 116 from sklearn.metrics import confusion_matrix 117 #print(confusion_matrix(y_test,y)) 118 119 out_1 = ('ロジスティック回帰 誤分類の個数:', (y_a != y_test).sum()) 120 121 #正答率を確認 122 from sklearn.metrics import accuracy_score 123 out_2 = ('ロジスティック回帰 正答率:' , accuracy_score(y_test,y_a)) 124 125 app.input_box2.insert(tkinter.END, out_1) 126 127 128root = tk.Tk() 129root.title(u"ana_ver3") 130root.geometry("500x600") 131app = Application(master=root) 132app.mainloop() 133
tkinterにて ボタン1 → 該当csvログ取得 → ログを渡す → ボタン2 → csvログ読み込み、解析処理
と動くコードを書きたいと思っているのですが、うまくいっておらず困っております。
下記コードを書いてみたのですが、ボタン1を押しただけで解析(def_ana_do(FP)まで勝手に動いてしまいます。
ログを渡したら自動で動いてしまうのかなと思ってはいるのですが、直し方が分かりません。
素人な質問で申し訳ありませんが分かる方助けて頂きたいです。
回答2件
あなたの回答
tips
プレビュー