diff options
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 276 |
1 files changed, 276 insertions, 0 deletions
@@ -0,0 +1,276 @@ + +import sys +import time +import logging +import shutil +from os import path, listdir, environ +from PyQt5 import QtCore, QtGui, QtWidgets +import matplotlib.pyplot as plt +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar + + +__author__ = "Debulois Quentin" +__version__ = "1.0" + +class Main(QtWidgets.QMainWindow): + def __init__(self): + super(Main, self).__init__() + logo = "stats.ico" + + largeur = 1200 + hauteur = 600 + ecranLargeur = QtWidgets.QApplication.primaryScreen().size().width() + ecranHauteur = QtWidgets.QApplication.primaryScreen().size().height() + + self.setGeometry(int((ecranLargeur - largeur) / 2), int((ecranHauteur - hauteur) / 2), largeur, hauteur) + self.setWindowTitle("Calcul de corrélation.") + self.setWindowIcon(QtGui.QIcon(logo)) + + apropos = QtWidgets.QAction("&A propos.", self) + apropos.setStatusTip("A propos de l'application.") + apropos.triggered.connect(self.a_propos_application) + + quitter = QtWidgets.QAction("&Quitter.", self) + quitter.setStatusTip("Quitter l'application.") + quitter.triggered.connect(self.closeEvent) + + self.statusBar() + + mainMenu = self.menuBar() + + fileMenu = mainMenu.addMenu("&Menu") + fileMenu.addAction(apropos) + fileMenu.addAction(quitter) + + #self.nettoyage_pyinstaller() + self.home() + + + def home(self): + + self.nomFacteurA = "A" + self.nomFacteurB = "B" + self.nombreFacteur = 3 + + self.mainLayout = QtWidgets.QHBoxLayout() + + self.gaucheLayout = QtWidgets.QVBoxLayout() + self.droiteLayout = QtWidgets.QVBoxLayout() + + ######################################################################################## + + self.formGroupBoxFacteurA = QtWidgets.QGroupBox("Facteur {0}.".format(self.nomFacteurA)) + + self.layoutA = QtWidgets.QFormLayout() + self.layoutA.setSpacing(10) + + self.nomFacteurALabel = QtWidgets.QLabel("Nom du facteur {0} : ".format(self.nomFacteurA)) + self.nomFacteurAEdit = QtWidgets.QLineEdit("") + self.layoutA.addRow(self.nomFacteurALabel, self.nomFacteurAEdit) + + self.nombreFacteurALabel = QtWidgets.QLabel("Valeur 1 de {0}: ".format(self.nomFacteurA)) + self.nombreFacteurAEdit = QtWidgets.QLineEdit("") + self.layoutA.addRow(self.nombreFacteurALabel, self.nombreFacteurAEdit) + + self.nombreFacteurALabel = QtWidgets.QLabel("Valeur 2 de {0}: ".format(self.nomFacteurA)) + self.nombreFacteurAEdit = QtWidgets.QLineEdit("") + self.layoutA.addRow(self.nombreFacteurALabel, self.nombreFacteurAEdit) + + self.nombreFacteurALabel = QtWidgets.QLabel("Valeur {0} de {1}: ".format(self.nombreFacteur, self.nomFacteurA)) + self.nombreFacteurAEdit = QtWidgets.QLineEdit("") + self.layoutA.addRow(self.nombreFacteurALabel, self.nombreFacteurAEdit) + + self.formGroupBoxFacteurA.setLayout(self.layoutA) + + self.scrollA = QtWidgets.QScrollArea() + self.scrollA.setWidget(self.formGroupBoxFacteurA) + self.scrollA.setWidgetResizable(True) + + ######################################################################################## + + self.formGroupBoxFacteurB = QtWidgets.QGroupBox("Facteur {0}.".format(self.nomFacteurB)) + + self.layoutB = QtWidgets.QFormLayout() + self.layoutB.setSpacing(10) + + self.nomFacteurBLabel = QtWidgets.QLabel("Nom du facteur {0} : ".format(self.nomFacteurB)) + self.nomFacteurBEdit = QtWidgets.QLineEdit("") + self.layoutB.addRow(self.nomFacteurBLabel, self.nomFacteurBEdit) + + self.nombreFacteurBLabel = QtWidgets.QLabel("Valeur 1 de {0}: ".format(self.nomFacteurB)) + self.nombreFacteurBEdit = QtWidgets.QLineEdit("") + self.layoutB.addRow(self.nombreFacteurBLabel, self.nombreFacteurBEdit) + + self.nombreFacteurBLabel = QtWidgets.QLabel("Valeur 2 de {0}: ".format(self.nomFacteurB)) + self.nombreFacteurBEdit = QtWidgets.QLineEdit("") + self.layoutB.addRow(self.nombreFacteurBLabel, self.nombreFacteurBEdit) + + self.nombreFacteurBLabel = QtWidgets.QLabel("Valeur {0} de {1}: ".format(self.nombreFacteur, self.nomFacteurB)) + self.nombreFacteurBEdit = QtWidgets.QLineEdit("") + self.layoutB.addRow(self.nombreFacteurBLabel, self.nombreFacteurBEdit) + + self.formGroupBoxFacteurB.setLayout(self.layoutB) + + self.scrollB = QtWidgets.QScrollArea() + self.scrollB.setWidget(self.formGroupBoxFacteurB) + self.scrollB.setWidgetResizable(True) + + ######################################################################################## + + self.buttonBox = QtWidgets.QDialogButtonBox() + self.btnAjouterLigne = self.buttonBox.addButton("Ajouter une ligne", QtWidgets.QDialogButtonBox.ActionRole) + self.btnAjouterLigne.clicked.connect(self.ajouter_ligne_facteur) + self.btnAjouterLigne = self.buttonBox.addButton("Supprimer une ligne", QtWidgets.QDialogButtonBox.ActionRole) + self.btnAjouterLigne.clicked.connect(self.supprimer_ligne_facteur) + self.btnAjouterLigne = self.buttonBox.addButton("Calculer", QtWidgets.QDialogButtonBox.ActionRole) + self.btnAjouterLigne.clicked.connect(self.wrapper) + + self.formLayout = QtWidgets.QHBoxLayout() + self.formLayout.addWidget(self.scrollA) + self.formLayout.addWidget(self.scrollB) + + self.gaucheLayout.addLayout(self.formLayout) + self.gaucheLayout.addWidget(self.buttonBox) + + ######################################################################################## + + self.figure = plt.figure() + self.figure.patch.set_facecolor("none") + self.canvas = FigureCanvas(self.figure) + self.toolbar = NavigationToolbar(self.canvas, self) + self.droiteLayout.addWidget(self.canvas) + self.droiteLayout.addWidget(self.toolbar) + + self.mainLayout.addLayout(self.gaucheLayout) + self.mainLayout.addLayout(self.droiteLayout) + + self.mainWidget = QtWidgets.QWidget() + self.mainWidget.setLayout(self.mainLayout) + + self.setCentralWidget(self.mainWidget) + + self.show() + + + def wrapper(self): + facteurs_a = [] + facteurs_b = [] + + self.nomFacteurA = self.layoutA.itemAt(1).widget().text() + if self.nomFacteurA == "": + self.nomFacteurA = "A" + self.nomFacteurB = self.layoutB.itemAt(1).widget().text() + if self.nomFacteurB == "": + self.nomFacteurB = "B" + + self.layoutA.itemAt(2).widget().setText("Valeur 1 de {0}: ".format(self.nomFacteurA)) + self.layoutA.itemAt(4).widget().setText("Valeur 2 de {0}: ".format(self.nomFacteurA)) + self.layoutA.itemAt(6).widget().setText("Valeur 3 de {0}: ".format(self.nomFacteurA)) + + self.layoutB.itemAt(2).widget().setText("Valeur 1 de {0}: ".format(self.nomFacteurB)) + self.layoutB.itemAt(4).widget().setText("Valeur 2 de {0}: ".format(self.nomFacteurB)) + self.layoutB.itemAt(6).widget().setText("Valeur 3 de {0}: ".format(self.nomFacteurB)) + + self.nombreWidget = self.layoutA.count() + for i in range(2, self.nombreWidget): + if (i % 2) == 1: + if self.layoutA.itemAt(i).widget().text().isdigit(): + facteurs_a.append(int(self.layoutA.itemAt(i).widget().text())) + else: + return + + self.nombreWidget = self.layoutB.count() + for i in range(2, self.nombreWidget): + if (i % 2) == 1: + if self.layoutB.itemAt(i).widget().text().isdigit(): + facteurs_b.append(int(self.layoutB.itemAt(i).widget().text())) + else: + return + + self.figure.clear() + plt.title("Taux de corrélation entre deux facteurs.") + plt.grid(True) + plt.plot([i for i in range(1, len(facteurs_a) + 1)], facteurs_a, "o-r", label=self.nomFacteurA) + plt.plot([i for i in range(1, len(facteurs_b) + 1)], facteurs_b, "o-b", label=self.nomFacteurB) + plt.axis([0, len(facteurs_a) + 1, 0, max([max(facteurs_a), max(facteurs_b)]) + 1]) + ann = plt.annotate("Le taux de correlation est de: " + self.calcul_correlation(facteurs_a, facteurs_b), xy=(1, 1), bbox=dict(facecolor='white')) + ann.draggable() + plt.legend() + self.canvas.draw() + + + def ajouter_ligne_facteur(self): + self.nombreFacteur += 1 + self.nombreFacteurALabel = QtWidgets.QLabel("Valeur {0} de {1}: ".format(self.nombreFacteur, self.nomFacteurA)) + self.nombreFacteurAEdit = QtWidgets.QLineEdit("") + self.layoutA.addRow(self.nombreFacteurALabel, self.nombreFacteurAEdit) + self.nombreFacteurBLabel = QtWidgets.QLabel("Valeur {0} de {1}: ".format(self.nombreFacteur, self.nomFacteurB)) + self.nombreFacteurBEdit = QtWidgets.QLineEdit("") + self.layoutB.addRow(self.nombreFacteurBLabel, self.nombreFacteurBEdit) + self.formGroupBoxFacteurA.setLayout(self.layoutA) + self.formGroupBoxFacteurB.setLayout(self.layoutB) + + + def supprimer_ligne_facteur(self): + if self.nombreFacteur > 3: + self.layoutA.removeRow(self.nombreFacteur) + self.layoutB.removeRow(self.nombreFacteur) + self.formGroupBoxFacteurA.setLayout(self.layoutA) + self.formGroupBoxFacteurB.setLayout(self.layoutB) + self.nombreFacteur -= 1 + + + def a_propos_application(self): + QtWidgets.QMessageBox.about(self, + "A propos", + "Auteur : " + __author__ + "\nVersion : " + __version__) + + + def calcul_correlation(self, facteurs_a, facteurs_b): + moyenne_a = sum(facteurs_a) / len(facteurs_a) + moyenne_b = sum(facteurs_b) / len(facteurs_b) + soustractions_a = [] + soustractions_b = [] + numerateurs_1 = [] + denominateurs_1 = [] + denominateurs_2 = [] + + for i in facteurs_a: + soustractions_a.append(i - moyenne_a) + + for i in facteurs_b: + soustractions_b.append(i - moyenne_b) + + for k, v in enumerate(soustractions_a): + numerateurs_1.append(v * soustractions_b[k]) + + for i in soustractions_a: + denominateurs_1.append(i ** 2) + + for i in soustractions_b: + denominateurs_2.append(i ** 2) + + resultat = sum(numerateurs_1) / (sum(denominateurs_1) * sum(denominateurs_2)) ** 0.5 + + return str(round(resultat, 3)) + + def nettoyage_pyinstaller(self): + jour = 86400 + timestamp = time.time() + for i in listdir(environ["TMP"]): + if i.startswith("_MEI"): + timestamp_modification = int(path.getmtime(path.join(environ["TMP"], i))) + if timestamp_modification < (timestamp - jour): + shutil.rmtree(path.join(environ["TMP"], i)) + + +def main(): + app = QtWidgets.QApplication(sys.argv) + app.setStyleSheet("QScrollArea{border : none}") + GUI = Main() + sys.exit(app.exec_()) + + +if __name__ == "__main__": + main() |
