summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rw-r--r--main.py276
1 files changed, 276 insertions, 0 deletions
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..fa9e608
--- /dev/null
+++ b/main.py
@@ -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()