def executefilter(self): # Execute filter chosen(Column filtering) if self.data.empty: self.emptydataalert() return if self.slider.value() == None: error_dialog = QtWidgets.QErrorMessage() error_dialog.showMessage('Choose a Value to filter using the slider!') col = self.combobox3.currentText() model2 = None operator = self.combobox4.currentText() value = self.slider.value() if operator == "Bigger than": model2 = pandasModel(self.data[self.data[col] > value]) self.data = self.data[self.data[col] > value] if operator == "Smaller than": model2 = pandasModel(self.data[self.data[col] < value]) self.data = self.data[self.data[col] < value] if operator == "Equals to": model2 = pandasModel(self.data[self.data[col] == value]) self.data = self.data[self.data[col] == value] if self.table != None: self.table.setModel(model2) try: if not math.isnan(self.data[self.combobox3.currentText()].max()): self.slider.setMaximum(int(self.data[self.combobox3.currentText()].max())) self.slider.setMinimum(int(self.data[self.combobox3.currentText()].min())) except: self.General_error(str(sys.exc_info()[0].__name__)) # shouldn't appear, this is a safety meas.
def manipulate_table(self): # Execute filter chosen(Row manual filtering) if self.data.empty: self.emptydataalert() return rows = sorted(set(index.row() for index in self.table.selectedIndexes())) if rows == []: model2 = pandasModel(self.data2) self.data = self.data2.copy() else: model2 = pandasModel(self.data.iloc[rows, :]) self.data = self.data.iloc[rows, :] self.slider.setMaximum(int(self.data[self.combobox3.currentText()].max())) self.slider.setMinimum(int(self.data[self.combobox3.currentText()].min())) self.table.setModel(model2)
def loaddata(self): self.fname = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "table (*.csv *.xls)") if self.fname != ("", ""): self.data = self.csv_opener(self.fname[0]) self.data2 = self.data.copy() model2 = pandasModel(self.data) self.table.setModel(model2) self.comboboxdata()
def groupby(self): # divide data into groups if self.data.empty: self.emptydataalert() return if self.combobox6.currentText() == "Mean lvl": self.data = self.data.groupby([self.combobox5.currentText()], as_index=False).mean() if self.combobox6.currentText() == "Maximum Value": self.data = self.data.groupby([self.combobox5.currentText()], as_index=False).max() if self.combobox6.currentText() == "Minimum Value": self.data = self.data.groupby([self.combobox5.currentText()], as_index=False).min() model2 = pandasModel(self.data) self.table.setModel(model2) self.comboboxdata()
def Resetdata(self): # Reset to data2(the backup data) self.data = self.data2 model2 = pandasModel(self.data) self.table.setModel(model2) self.comboboxdata()
def setupUi(self, MainWindow): ### # Setting up the Window and Layout ### # creating a demo dataframe self.data = pd.DataFrame(np.random.randint(0,100,size=(100, 8)), columns=list('ABCDEFGH')) self.data2 = self.data.copy() # window setup MainWindow.setObjectName("Dashgraph") MainWindow.setWindowIcon(QtGui.QIcon("icon.png")) MainWindow.resize(1800, 900) model = pandasModel(self.data) view = QTableView() view.setModel(model) # setting up the central widget layer self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") # setting up the table and declaring all the widgets inside the central widget self.table = QtWidgets.QTableView(self.centralwidget) self.table.setModel(model) self.table.setObjectName("TABLE") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(220, 600, 360, 221)) self.label.hide() self.label2 = QtWidgets.QLabel(self.centralwidget) self.label2.setObjectName("Xaxis") self.label3 = QtWidgets.QLabel(self.centralwidget) self.label3.setObjectName("Yaxis") self.label4 = QtWidgets.QLabel(self.centralwidget) self.label4.setObjectName("filter") self.label5 = QtWidgets.QLabel(self.centralwidget) self.label5.setObjectName("groupby") self.label6 = QtWidgets.QLabel(self.centralwidget) self.label6.setObjectName("slidervalue") self.label7 = QtWidgets.QLabel(self.centralwidget) self.label7.setObjectName("operator") self.label8 = QtWidgets.QLabel(self.centralwidget) self.label8.setObjectName("DataFiltering") self.label9 = QtWidgets.QLabel(self.centralwidget) self.label9.setObjectName("Plotting") self.label10 = QtWidgets.QLabel(self.centralwidget) self.label10.setObjectName("Descriptive Analysis") self.label11 = QtWidgets.QLabel(self.centralwidget) self.label11.setObjectName("Meas.Type") self.label12 = QtWidgets.QLabel(self.centralwidget) self.label12.setObjectName("Select col for boxplot") self.label13 = QtWidgets.QLabel(self.centralwidget) self.label13.setObjectName("scatter") self.combobox1 = QtWidgets.QComboBox(self.centralwidget) self.combobox2 = QtWidgets.QComboBox(self.centralwidget) self.combobox3 = QtWidgets.QComboBox(self.centralwidget) self.combobox4 = QtWidgets.QComboBox(self.centralwidget) self.combobox5 = QtWidgets.QComboBox(self.centralwidget) self.combobox6 = QtWidgets.QComboBox(self.centralwidget) self.combobox7 = CheckableComboBox() self.combobox8 = QtWidgets.QComboBox(self.centralwidget) self.combobox9 = QtWidgets.QComboBox(self.centralwidget) font3 = QtGui.QFont() font3.setPointSize(10) self.combobox1.setFont(font3) self.combobox2.setFont(font3) self.combobox3.setFont(font3) self.combobox4.setFont(font3) self.combobox5.setFont(font3) self.combobox6.setFont(font3) self.combobox7.setFont(font3) self.combobox8.setFont(font3) self.combobox9.setFont(font3) self.slider = QtWidgets.QSlider(orientation=0x1, parent=self.centralwidget) self.slider.setObjectName("filter slider") # inserting data to combobox's self.combobox4.addItem("Bigger than") self.combobox4.addItem("Smaller than") self.combobox4.addItem("Equals to") self.combobox6.addItem("Mean lvl") self.combobox6.addItem("Maximum Value") self.combobox6.addItem("Minimum Value") for i in self.data.columns: self.combobox1.addItem(i) self.combobox2.addItem(i) self.combobox5.addItem(i) if (np.issubdtype(self.data[i].dtype, np.number)): self.combobox3.addItem(i) self.combobox7.addItem(i) self.combobox8.addItem(i) self.combobox9.addItem(i) # inserting data to slider if (np.issubdtype(self.data[self.combobox3.currentText()].dtype, np.number)): self.slider.setMaximum(int(self.data[self.combobox3.currentText()].max())) self.slider.setMinimum(int(self.data[self.combobox3.currentText()].min())) # label font setup font = QtGui.QFont() font.setPointSize(36) font2 = QtGui.QFont() font2.setPointSize(12) font4 = QtGui.QFont("Times", 14, QtGui.QFont.Bold) self.label2.setFont(font2) self.label3.setFont(font2) self.label4.setFont(font2) self.label5.setFont(font2) self.label6.setFont(font2) self.label7.setFont(font2) self.label8.setFont(font4) self.label9.setFont(font4) self.label10.setFont(font4) self.label11.setFont(font2) self.label12.setFont(font2) self.label13.setFont(font2) self.label.setFont(font) self.label.setObjectName("label") # Menubar setup MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuExport_Data = QtWidgets.QMenu(self.menubar) self.menuExport_Data.setObjectName("menuExport_Data") self.menuEdit_View = QtWidgets.QMenu(self.menubar) self.menuEdit_View.setObjectName("menuEdit_View") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) # buttons setup self.Button1 = QtWidgets.QPushButton(self.centralwidget) self.Button1.setFixedHeight(60) self.Button1.setObjectName("Plot Graph") self.Button1.setFont(font2) self.Button2 = QtWidgets.QPushButton(self.centralwidget) self.Button2.setFont(font2) self.Button2.setObjectName("Manipulate rows") self.Button3 = QtWidgets.QPushButton(self.centralwidget) self.Button3.setObjectName("ExecuteFilter") self.Button4 = QtWidgets.QPushButton(self.centralwidget) self.Button4.setObjectName("Groupby") self.Button5 = QtWidgets.QPushButton(self.centralwidget) self.Button5.setObjectName("Plotbox") self.Button5.setFixedHeight(60) self.Button6 = QtWidgets.QPushButton(self.centralwidget) self.Button6.setObjectName("ResetData") self.Button7 = QtWidgets.QPushButton(self.centralwidget) self.Button7.setObjectName("Plotlinegraph") self.Button7.setFixedHeight(60) self.Button8 = QtWidgets.QPushButton(self.centralwidget) self.Button8.setObjectName("Plotscatter") self.Button8.setFixedHeight(60) # icons setup icon1 = QIcon("barplot") icon2 = QIcon("graphplot") icon3 = QIcon("filter") icon4 = QIcon("launch") icon5 = QIcon("groupby") icon6 = QIcon("reset") icon7 = QIcon("scatter") icon8 = QIcon("exit") icon9 = QIcon("load") icon10 = QIcon("daymode") icon11 = QIcon("darkmode") icon12 = QIcon("csv") icon13 = QIcon("xlsx") self.Button1.setIcon(icon1) self.Button7.setIcon(icon2) self.Button2.setIcon(icon3) self.Button3.setIcon(icon3) self.Button5.setIcon(icon4) self.Button4.setIcon(icon5) self.Button6.setIcon(icon6) self.Button8.setIcon(icon7) size = QSize(40, 40) size2 = QSize(30, 30) self.Button1.setIconSize(size) self.Button7.setIconSize(size) self.Button2.setIconSize(size2) self.Button3.setIconSize(size2) self.Button5.setIconSize(size) self.Button4.setIconSize(size2) self.Button6.setIconSize(size2) self.Button8.setIconSize(size) self.Button5.setFont(font2) self.Button3.setFont(font2) self.Button4.setFont(font2) self.Button6.setFont(font2) self.Button7.setFont(font2) self.Button8.setFont(font2) # grid setup layout = QGridLayout() self.label6.setAlignment(Qt.AlignCenter) layout.addWidget(self.table, 0, 0, 19, 1) layout.addWidget(self.label8, 0, 1, 1, 1) layout.addWidget(self.label4, 1, 1) layout.addWidget(self.combobox3, 1, 2) layout.addWidget(self.label7, 2, 1) layout.addWidget(self.combobox4, 2, 2) layout.addWidget(self.slider, 4, 1, 1, 2) layout.addWidget(self.label6, 5, 1, 1, 2) layout.addWidget(self.Button3, 6, 1, 1, 1) layout.addWidget(self.label10, 7, 1) layout.addWidget(self.label5, 8, 1) layout.addWidget(self.combobox5, 8, 2) layout.addWidget(self.label11, 9, 1) layout.addWidget(self.combobox6, 9, 2) layout.addWidget(self.Button4, 10, 1) layout.addWidget(self.Button6, 10, 2) layout.addWidget(self.label9, 11, 1) layout.addWidget(self.label2, 12, 1) layout.addWidget(self.label3, 12, 2) layout.addWidget(self.combobox1, 13, 1) layout.addWidget(self.combobox2, 13, 2) layout.addWidget(self.Button1, 14, 1, 1, 1) layout.addWidget(self.Button7, 14, 2, 1, 1) layout.addWidget(self.Button2, 5, 2, 3, 1) layout.addWidget(self.Button5, 18, 1, 1, 1) layout.addWidget(self.label12, 15, 1, 1, 1) layout.addWidget(self.label13, 15, 2, 1, 1) layout.addWidget(self.combobox7, 16, 1, 2, 1) layout.addWidget(self.Button8, 18, 2, 1, 1) layout.addWidget(self.combobox8, 16, 2, 1, 1) layout.addWidget(self.combobox9, 17, 2, 1, 1) # Set the layout on the application's window self.centralwidget.setLayout(layout) # set actions self.actionExit = QtWidgets.QAction(MainWindow) self.actionExit.setObjectName("actionExit") self.actionExport_Data = QtWidgets.QAction(MainWindow) self.actionExport_Data.setObjectName("actionExport_Data") self.actionLoad = QtWidgets.QAction(MainWindow) self.actionLoad.setObjectName("actionLoad") self.actionRefresh_Data = QtWidgets.QAction(MainWindow) self.actionRefresh_Data.setObjectName("actionRefresh_Data") self.actionDark = QtWidgets.QAction(MainWindow) self.actionDark.setObjectName("actionDark") self.actionDay = QtWidgets.QAction(MainWindow) self.actionDay.setObjectName("actionDay") self.actionExportToCSV = QtWidgets.QAction(MainWindow) self.actionExportToCSV.setObjectName("actionExportToCSV") self.actionExportToXLSX = QtWidgets.QAction(MainWindow) self.actionExportToXLSX.setObjectName("actionExportToXLSX") self.menuFile.addAction(self.actionLoad) self.menuFile.addAction(self.actionRefresh_Data) self.menuFile.addAction(self.actionExit) self.menuEdit_View.addAction(self.actionDay) self.menuEdit_View.addAction(self.actionDark) self.menuExport_Data.addAction(self.actionExportToCSV) self.menuExport_Data.addAction(self.actionExportToXLSX) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuExport_Data.menuAction()) self.menubar.addAction(self.menuEdit_View.menuAction()) # menu icon setup self.actionRefresh_Data.setIcon(icon6) self.actionExit.setIcon(icon8) self.actionLoad.setIcon(icon9) self.actionDay.setIcon(icon10) self.actionDark.setIcon(icon11) self.actionExportToCSV.setIcon(icon12) self.actionExportToXLSX.setIcon(icon13) # words to present self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) # actions and functions calling self.actionLoad.triggered.connect(lambda: self.loaddata()) self.actionExit.triggered.connect(lambda: self.exit()) self.actionDay.triggered.connect(lambda: self.daymode()) self.actionDark.triggered.connect(lambda: self.darkmode()) self.actionRefresh_Data.triggered.connect(lambda: self.Resetdata()) self.actionExportToCSV.triggered.connect(lambda: self.savefile()) self.actionExportToXLSX.triggered.connect(lambda: self.savefile2()) self.Button2.clicked.connect(lambda: self.manipulate_table()) self.Button1.clicked.connect(lambda: self.show_bar_graph()) self.Button3.clicked.connect(lambda: self.executefilter()) self.Button4.clicked.connect(lambda: self.groupby()) self.Button5.clicked.connect(lambda: self.show_boxplot()) self.Button6.clicked.connect(lambda: self.Resetdata()) self.Button7.clicked.connect(lambda: self.show_line_graph()) self.Button8.clicked.connect(lambda: self.show_scatter()) self.slider.valueChanged.connect(lambda: self.label6.setText("Value = " + str(self.slider.value()))) self.combobox3.currentTextChanged.connect(self.on_combobox_changed)