質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1746閲覧

tkinter csvログ渡すと 処理が勝手に動いてしまう。

masayam4

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/30 10:32

編集2020/05/30 13:01

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)まで勝手に動いてしまいます。
ログを渡したら自動で動いてしまうのかなと思ってはいるのですが、直し方が分かりません。
素人な質問で申し訳ありませんが分かる方助けて頂きたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/05/30 10:35

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
x98000

2020/05/30 10:40

ソースコードは、<code>を押して「コード」と書かれた部分を上書きする形で貼り付けてください。 特にPythonはインデントが消えると不正なコードになりますので、まず修正をお願いします。
masayam4

2020/05/30 12:53

申し訳ありません。修正させて頂きました。
guest

回答2

0

ベストアンサー

下記コードを書いてみたのですが、ボタン1を押しただけで解析(def_ana_do(FP)まで勝手に動いてしまいます。

理由は単純で、ファイルを選択するときに実行される file_select関数 の最後の行で ana_do関数を呼んでいるからです。

Python

1def file_select(): 2 idir = 'C:\python_test' #初期フォルダ 3 filetype = [("","*")] #拡張子の選択 4 file_path = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = idir) 5 app.input_box.insert(tkinter.END, file_path) #結果を表示 6 7 ana_do(file_path) # <- これを呼ぶと当然、解析処理が走る

ですのでこの部分を削除すると良いかと思います。

ただし現状のコードでは ana ボタンを押しても動作しませんので、この部分も編集する必要があります。(ana_do関数にはファイルパスの引数を渡す必要があるが、ボタンを押した時にこの引数を渡していないため )

とりあえず、この部分は

Python

1 self.button2 = tkinter.Button(text="ana", state='disable', command = ana_do)

の行を

Python

1 self.button2 = tkinter.Button(text="ana", state='disable', command = lambda : ana_do(self.input_box.get()))

のように修正して、引数にファイルパスを渡すようにしてください。

投稿2020/05/31 02:54

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masayam4

2020/05/31 05:32

回答ありがとうございます!! 無事狙い通り動きました!!
guest

0

プログラムのインデントは大丈夫ですか?pythonはC++やjavascriptなどと違い、{}がない分、インデントが重要になっています。
「該当csvログ取得」の関数や、「ログを渡す」関数の中に一緒になってしまって、解析処理が一度に行われてしまっているのかもしれません。

投稿2020/05/30 10:37

Luke02561

総合スコア404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問