def make_slider(self, name, valmin, valmax, valinit, valfmt, label, forceint): from tkinter import IntVar, DoubleVar, StringVar from tkinter.ttk import Label, Scale, Frame if self.slider_frame is None: frame = self.slider_frame = Frame(self.widget_frame, ) else: frame = self.slider_frame if forceint: v = IntVar(self.widget_frame) else: v = DoubleVar(self.widget_frame) s = self._scales[name] = Scale(frame, variable=v, from_=valmin, to=valmax, length=250) num_sv = StringVar(self.widget_frame) def label_callback(*args): num_sv.set(valfmt % v.get()) v.trace_variable('w', label_callback) nl = self._labels[name + 'num'] = Label(frame, textvariable=num_sv, width=6, anchor='e') tl = self._labels[name + 'text'] = Label(frame, text=label if label is not None else name, anchor='w') v.set(valinit) nl.grid(column=0, row=self.slider_row, sticky='e') s.grid(column=1, row=self.slider_row) tl.grid(column=2, row=self.slider_row, sticky='w') self.slider_row += 1 frame.pack() return TkWidgetWrapper(s, forceint)
class Adder(ttk.Frame): XPath = '' yPath = '' dimRedValue = '' featSelecValue = '' featSelMethValue = '' ClassFiersTest = [] histGram = 0 scatPlot = 0 impFeat = 0 AccMod = 0 missClasInst = 0 histN = 0 def __init__(self, parent, *args, **kwargs): ttk.Frame.__init__(self, parent, *args, **kwargs) self.root = parent self.init_gui() def on_quit(self): """Exits program.""" quit() def init_gui(self): """Builds GUI.""" self.root.title('AMIL - Feature Selection Tool') self.root.option_add('*tearOff', 'FALSE') self.root.geometry('900x1000+600+600') self.grid(column=0, row=0, sticky='nsew') self.menubar = tkinter.Menu(self.root) self.menu_file = tkinter.Menu(self.menubar) self.menu_file.add_command(label='Exit', command=self.on_quit) self.menu_file.add_command(label='Open', command=self.OpenFile) self.menu_edit = tkinter.Menu(self.menubar) self.menubar.add_cascade(menu=self.menu_file, label='File') self.menubar.add_cascade(menu=self.menu_edit, label='Edit') self.menubar.add_cascade(menu=self.menu_edit, label='Exit', command=self.on_quit) self.root.config(menu=self.menubar) ttk.Label(self, text='Data Input:').grid(column=0, row=0, columnspan=4) ttk.Separator(self, orient='horizontal').grid(column=0, row=1, columnspan=4, sticky='ew') ttk.Label(self, text='Dependent Variables(X)').grid(column=0, row=2, sticky='w') self.file_DiaY = ttk.Button(self, text="Choose X File", command=lambda: self.OpenFile(1)) self.file_DiaY.grid(column=1, row=2) ttk.Label(self, text='Independent Variables(y)').grid(column=0, row=3, sticky='w') self.file_DiaX = ttk.Button(self, text="Choose Y File", command=lambda: self.OpenFile(2)) self.file_DiaX.grid(column=1, row=3) ttk.Separator(self, orient='horizontal').grid(column=0, row=4, columnspan=4, sticky='ew') ttk.Label(self, text='Dimension Reduction?').grid(column=0, row=5, sticky='w') tkvarDR = StringVar() dimenReducCh = {'No', 'Yes, PCA', 'Yes, ICA'} tkvarDR.set("No") self.dimenReduc = ttk.OptionMenu(self, tkvarDR, *dimenReducCh, command=self.dimRedVal) self.dimenReduc.grid(column=1, row=5) ttk.Separator(self, orient='horizontal').grid(column=0, row=6, columnspan=4, sticky='ew') ttk.Label(self, text='Feature Selection Type?').grid(column=0, row=7, sticky='w') tkvarFS = StringVar() FeatSeleCh = {'Filter', 'Wrapper', 'Embedded'} tkvarFS.set('Wrapper') ttk.OptionMenu(self, StringVar(), *FeatSeleCh, command=self.featSelecVal).grid(column=1, row=7) tkvarFS.get() ttk.Label(self, text='Feature Selection Method?').grid(column=4, row=7, sticky='w') ttk.Separator(self, orient='horizontal').grid(column=0, row=9, columnspan=4, sticky='ew') ttk.Label(self, text='Output :').grid(column=0, row=10, sticky='w') self.histGram = IntVar() ttk.Checkbutton(self, text="Histogram of Top n Features", variable=self.histGram).grid(row=12, sticky='w') self.histGram.trace_variable("w", self.HistGramFxn) ttk.Label(self, text='| n = ').grid(column=3, row=12, sticky='w') self.histN = ttk.Entry(self).grid(column=4, row=12, pady=2, sticky='w') self.scatPlot = IntVar() ttk.Checkbutton(self, text="Scatler Plot of Top n Features", variable=IntVar()).grid(row=13, sticky='w') self.scatPlot.trace_variable("w", self.ScatPlotFxn) ttk.Label(self, text='| Select Plot Type = ').grid(column=3, row=13, sticky='w') tkvarPT = StringVar() ttk.OptionMenu(self, tkvarPT, 'Make 2D PLot', 'Make 3D PLot').grid(column=4, row=13, sticky='w') self.impFeat = IntVar() ttk.Checkbutton(self, text="Show Importance of Each Feature", variable=self.impFeat).grid(row=14, sticky='w') self.impFeat.trace_variable("w", self.ImpFeatFxn) self.AccMod = IntVar() ttk.Checkbutton(self, text="Show Accuracy of Model", variable=self.AccMod).grid(row=15, sticky='w') self.AccMod.trace_variable("w", self.AccModFxn) self.MisInt = IntVar() ttk.Checkbutton(self, text="Misclassfied Instances", variable=self.MisInt).grid(row=16, sticky='w') self.MisInt.trace_variable("w", self.MisIntFxn) ttk.Button(self, text="Submit", command=lambda: self.collectValues()).grid(row=17, column=0, columnspan=16) ttk.Button(self, text="Quit", command=lambda: self.on_quit()).grid(row=17, column=5, columnspan=2) for child in self.winfo_children(): child.grid_configure(padx=5, pady=5) def HistGramFxn(self, *args): self.histGram = self.histGram.get() def ScatPlotFxn(self, *args): self.scatPlot = self.scatPlot.get() def MisIntFxn(self, *args): self.MisInt = self.MisInt.get() def AccModFxn(self, *args): self.AccMod = self.AccMod.get() def ImpFeatFxn(self, *args): self.impFeat = self.impFeat.get() def collectValues(self): self.draw_acc_plot() frameScatPlot = Frame(self) frameScatPlot.grid(column=0, row=60, columnspan=100, sticky=Tkconstants.NSEW) frameScatPlot.rowconfigure(50, weight=100) frameScatPlot.columnconfigure(1, weight=1) frameFeatHist = Frame(self) frameFeatHist.grid(column=0, row=30, columnspan=100, sticky=Tkconstants.NSEW) frameFeatHist.rowconfigure(50, weight=100) frameFeatHist.columnconfigure(1, weight=1) n = 8 myG = Main2.FeatureSelect() myG.read_Data_Method2() idx = myG.F_SCORE() featureList, featName = myG.get_Feature_List(idx, n) self.draw_Feat_Hist(frameFeatHist, featureList, n, featName) self.draw_Scatt_Plot(frameScatPlot, featureList, n, featName) def draw_Scatt_Plot(self, frameScatPlot, featureList, n, featName): fig, axes = plt.subplots(1, n - 1, sharex=True, figsize=((n - 1) * 6, 3), squeeze=False) for i in range(0, n - 1): F10 = MinMaxScaler().fit_transform(featureList[i][0][0]) F11 = MinMaxScaler().fit_transform(featureList[i][0][1]) F20 = MinMaxScaler().fit_transform(featureList[i + 1][0][0]) F21 = MinMaxScaler().fit_transform(featureList[i + 1][0][1]) print('F10-', F10, 'F20-', F20) axes[0][i].plot(F10, F20, 'go', label='benign') axes[0][i].plot(F11, F21, 'r^', label='malignant') axes[0][i].legend(loc='best') axes[0][i].axis([0, 1, 0, 1]) #prn='Feature'+str(i+1)+' VS '+'Feature'+str(i+2) prn = str(featName[i]) + ' VS ' + str(featName[i + 1]) axes[0][i].set_title(prn) fig.tight_layout() self.addScrollingFigure(fig, frameScatPlot) self.changeSize(fig, 0.8) def draw_Feat_Hist(self, frame, featureList, n, featName): fig, ax = plt.subplots(1, n, sharex=True, figsize=(n * 6, 3), squeeze=False) for i in range(0, n): feat = featureList[i] ax[0][i - 1].violinplot(feat[0], showmeans=False, showmedians=True) pri = str(featName[i]) + ' p-value - ' + str(feat[1]) ax[0][i - 1].set_title(pri) fig.tight_layout() self.addScrollingFigure(fig, frame) self.changeSize(fig, 0.8) def changeSize(self, figure, factor): global canvas, mplCanvas, interior, interior_id, frame, cwid oldSize = figure.get_size_inches() figure.set_size_inches([factor * s for s in oldSize]) wi, hi = [i * figure.dpi for i in figure.get_size_inches()] mplCanvas.config(width=wi, height=hi) canvas.itemconfigure(cwid, width=wi, height=hi) canvas.config(scrollregion=canvas.bbox(Tkconstants.ALL), width=200, height=200) figure.canvas.draw() def draw_acc_plot(self): classifiers = [] classifiers.append("lda") ttk.Separator(self, orient='horizontal').grid(column=0, row=19, columnspan=4, sticky='ew') txt = "Running Sequential Forward Selection for " + ascii( classifiers[0]) tit = ttk.Label(self, text=txt) tit.grid(row=21, column=0, sticky='w') myG = Main2.FeatureSelect() myG.read_Data_Method2() rfs = myG.SFS(classifiers) fs = rfs["bestFeatureSummary"] for i in range(0, len(classifiers)): title = "Sequential Forward Selection using " + classifiers[i] accuracyString = "Overall Accuracy: " + str(fs[i][0][0]) accLowClassString = "Accuracy (Low Class): " + str(fs[i][1][0]) accHighString = "Accuracy (High Class): " + str(fs[i][2][0]) bfsShape = fs[i].shape for j in range(3, bfsShape[0]): featureString = "Feature at indice " + str(fs[i][j][0]) + " contributed " + \ str(fs[i][j][1]) + " percentage to accuracy" # title = "SummarybestFeatures_" # accuracyString = "Accuracy: " # accLowClassString = "Accuracy (Low Class): " # accHighString = "Accuracy (High Class): " tit.grid_forget() ttk.Label(self, text=title).grid(row=21, column=0, sticky='w') ttk.Label(self, text=accuracyString).grid(row=22, column=0, sticky='w') ttk.Label(self, text=accLowClassString).grid(row=23, column=0, sticky='w') ttk.Label(self, text=accHighString).grid(row=24, column=0, sticky='w') def addScrollingFigure(self, figure, frame): global canvas, mplCanvas, interior, interior_id, cwid # set up a canvas with scrollbars canvas = tkinter.Canvas(frame) canvas.grid(row=1, column=1, sticky=Tkconstants.NSEW) xScrollbar = tkinter.Scrollbar(frame, orient=Tkconstants.HORIZONTAL) yScrollbar = tkinter.Scrollbar(frame) xScrollbar.grid(row=2, column=1, sticky=Tkconstants.EW) yScrollbar.grid(row=1, column=2, sticky=Tkconstants.NS) canvas.config(xscrollcommand=xScrollbar.set) xScrollbar.config(command=canvas.xview) canvas.config(yscrollcommand=yScrollbar.set) yScrollbar.config(command=canvas.yview) figAgg = FigureCanvasTkAgg(figure, canvas) mplCanvas = figAgg.get_tk_widget() cwid = canvas.create_window(0, 0, window=mplCanvas, anchor=Tkconstants.NW) #changeSize(figure, 1) def histGramChk(self, value): print(self.featSelecValue) def dimRedVal(self, value): self.dimRedValue = value def featSelecVal(self, value): self.featSelecValue = value tkvar = StringVar() tkvar.set('') if (self.featSelecValue == 'Filter'): FeatSelMethCh = FilterOp elif (self.featSelecValue == 'Wrapper'): FeatSelMethCh = WrapperOp elif (self.featSelecValue == 'Embedded'): FeatSelMethCh = EmbeddedOp self.FeatSelMethOp = ttk.OptionMenu(self, tkvar, *FeatSelMethCh, command=self.featSelMethVal) self.FeatSelMethOp.grid(column=6, row=7) if (self.featSelecValue in ('Embedded', 'Wrapper')): ttk.Label(self, text='Classifier to Test:').grid(column=7, row=7, sticky='w') ttk.Checkbutton(self, text="Linear Discriment Analysis (LDA)", variable=IntVar).grid(row=8, column=7, sticky='w') ttk.Checkbutton(self, text="Quadratic Discriment Analysis (QDA)", variable=IntVar).grid(row=9, column=7, sticky='w') ttk.Checkbutton(self, text="Support Vector Machine (SVM)", variable=IntVar).grid(row=10, column=7, sticky='w') def featSelMethVal(self, value): self.featSelMethValue = value print(self.featSelMethValue) def OpenFile(self, x): name = filedialog.askopenfilename( initialdir="/home/launch/Desktop/Share/", filetypes=(("Csv File", "*.csv"), ("All Files", "*.*")), title="Choose a file.") print(name) #Using try in case user types in unknown file or closes without choosing a file. try: with open(name, 'r') as UseFile: print(UseFile.read()) except: print("No file exists") if x == 1: self.XPath = name else: self.yPath = name