@catauggie

Как доработать функциии для приложения на PyQt5?

Хочу сделать так, чтобы можно было:
1) загружать таблицу исходных данных def OpenFile, затем показывать def dataHead эту таблицу в окне приложения. (это мне удалось сделать)
2) конвертировать загруженную таблицу def prediction, затем показывать во втором окне приложения def dataHead2
Тут и возникли вопросы, т.к. файл из def OpenFile программы не видит, и соответсвенно мне нечего передать в def dataHead2
3) (пока еще не брался) в третьем окне построить гарфик по таблице, полученной из def prediction

Очень прошу подсказть, как передавать файл в последующие функции, чтобы все работало.

Заранее большое спасибо за ответ.

Вот код:
import os
import sys
import catboost
import plotly.graph_objs as go
import matplotlib.pyplot as plt
from catboost import CatBoostRegressor, CatBoostClassifier, Pool, EFstrType
from os.path import dirname, realpath, join
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QTableWidget, QTableWidgetItem
from PyQt5.uic import loadUiType
import pandas as pd
import numpy as np
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import Qt


#scriptDir = dirname(realpath("D:\python\Storage Area Network\Data-Analyze-in-gui-Pyqt5-python-main\Data-Analyze-in-gui-Pyqt5-python-main\bestsellers with categories.csv"))
#From_Main, _ = loadUiType(join(dirname("D:\python\Storage Area Network\Data-Analyze-in-gui-Pyqt5-python-main\Data-Analyze-in-gui-Pyqt5-python-main\Main.ui"), "Main.ui"))
From_Main, _ = loadUiType(join(dirname("D:\python\Storage Area Network\Data-Analyze-in-gui-Pyqt5-python-main\Data-Analyze-in-gui-Pyqt5-python-main\Main_modified.ui"
), "Main_modified.ui"))

class MainWindow(QWidget, CatBoostRegressor, From_Main):
    def __init__(self):
        super(MainWindow, self).__init__()
        CatBoostRegressor.__init__(self)
        QWidget.__init__(self)
        self.setupUi(self)

        self.ButtonOpen.clicked.connect(self.OpenFile)
        self.BtnDescribe.clicked.connect(self.dataHead)
        self.pushButton_2.clicked.connect(self.prediction)
        self.pushButton.clicked.connect(self.dataHead2)

    def OpenFile(self):
        try:
            path = QFileDialog.getOpenFileName(self, 'Open CSV', os.getenv('HOME'), 'CSV(*.csv)')[0]
            self.all_data = pd.read_csv(path)
        except:
            print(path)
       

    def dataHead(self):
        numColomn = self.spinBox.value()
        if numColomn == 0:
            NumRows = len(self.all_data.index)
        else:
            NumRows = numColomn
        self.tableWidget.setColumnCount(len(self.all_data.columns))
        self.tableWidget.setRowCount(NumRows)
        self.tableWidget.setHorizontalHeaderLabels(self.all_data.columns)

        for i in range(NumRows):
            for j in range(len(self.all_data.columns)):
                self.tableWidget.setItem(i, j, QTableWidgetItem(str(self.all_data.iat[i, j])))

        self.tableWidget.resizeColumnsToContents()
        self.tableWidget.resizeRowsToContents()
    
    def prediction(self):
        bestmodel = CatBoostRegressor()
        bestmodel.load_model('D:\python\Storage Area Network\model_catboost_regressor_prod') 
        dataset = self.path #pd.read_csv("D:\python\Storage Area Network\dataset_for_programm.csv")
        dataset_param = dataset.drop(columns=['value'])
        value_pd = dataset.loc[:, dataset.columns.intersection(['value'])]
        value = value_pd.to_numpy()
        diff_pred = bestmodel.predict(dataset_param)
        value_pred = value[1] + 12 * diff_pred
        value_pred_pd = pd.DataFrame(value_pred)
        value_pred_pd.set_axis(['Pred'], axis='columns', inplace=True)
        value_pred_pd.loc[:, "True"] = value_pd
        dataframe = pd.DataFrame(value_pred_pd) 
        #dataframe.to_csv("D:\python\Storage Area Network\csv_export.csv", index=False)
        self.all_data2 = pd.read_csv(dataframe)

    
    def dataHead2(self):
        numColomn = self.spinBox_2.value()
        if numColomn == 0:
            NumRows = len(self.all_data2.index)
        else:
            NumRows = numColomn
        self.tableWidget.setColumnCount(len(self.all_data2.columns))
        self.tableWidget.setRowCount(NumRows)
        self.tableWidget.setHorizontalHeaderLabels(self.all_data2.columns)

        for i in range(NumRows):
            for j in range(len(self.all_data2.columns)):
                self.tableWidget_2.setItem(i, j, QTableWidgetItem(str(self.all_data2.iat[i, j])))

        self.tableWidget_2.resizeColumnsToContents()
        self.tableWidget_2.resizeRowsToContents()
        
        
app = QApplication(sys.argv)
sheet = MainWindow()
sheet.show()
sys.exit(app.exec_())
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы