summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebulois Quentin <quentin.debulois@gmail.com>2022-04-12 11:22:32 +0200
committerDebulois Quentin <quentin.debulois@gmail.com>2022-04-12 11:22:32 +0200
commitcd01e054ffafcbb204ddd8fbda9278b7cdda3107 (patch)
tree6528f98038ba535390c2c0a453c0d62062384746
Inital commitHEADmaster
-rw-r--r--correlation.py77
-rw-r--r--main.py276
-rw-r--r--stats.icobin0 -> 370070 bytes
3 files changed, 353 insertions, 0 deletions
diff --git a/correlation.py b/correlation.py
new file mode 100644
index 0000000..c6f2fd5
--- /dev/null
+++ b/correlation.py
@@ -0,0 +1,77 @@
+facteur_a = [18, 19, 7, 27, 98]
+facteur_b = [9, 6, 2, 10, 33]
+
+moyenne_a = sum(facteur_a) / len(facteur_a)
+moyenne_b = sum(facteur_b) / len(facteur_b)
+
+soustraction_a = []
+soustraction_b = []
+
+numerateur_1 = []
+
+denominateur_1 = []
+denominateur_2 = []
+
+for i in facteur_a:
+ soustraction_a.append(i - moyenne_a)
+
+for i in facteur_b:
+ soustraction_b.append(i - moyenne_b)
+
+for k, v in enumerate(soustraction_a):
+ numerateur_1.append(v * soustraction_b[k])
+
+for i in soustraction_a:
+ denominateur_1.append(i ** 2)
+
+for i in soustraction_b:
+ denominateur_2.append(i ** 2)
+
+resultat = sum(numerateur_1) / (sum(denominateur_1) * sum(denominateur_2)) ** 0.5
+
+print(resultat)
+
+# methode 2
+
+facteur_a = [18, 19, 7, 27, 98]
+facteur_b = [9, 6, 2, 10, 33]
+
+numerateur_1 = []
+numerateur_final = 0
+
+for k, v in enumerate(facteur_a):
+ numerateur_1.append(v * facteur_b[k])
+
+numerateur_final = sum(numerateur_1) - sum(facteur_a) * sum(facteur_b)
+
+liste_1 = []
+liste_2 = []
+
+var_1 = 0
+var_2 = 0
+var_3 = 0
+var_4 = 0
+var_5 = 0
+var_6 = 0
+
+for i in facteur_a:
+ liste_1.append(i ** 2)
+
+var_1 = sum(liste_1)
+var_2 = sum(facteur_a) ** 2
+
+for i in facteur_b:
+ liste_2.append(i ** 2)
+
+var_3 = sum(liste_2)
+var_4 = sum(facteur_b) ** 2
+
+var_5 = var_1 - var_2
+var_6 = var_3 - var_4
+
+a = var_5 ** 0.5
+b = var_6 ** 0.5
+
+denominateur_final = a * b
+
+print(numerateur_final / denominateur_final)
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()
diff --git a/stats.ico b/stats.ico
new file mode 100644
index 0000000..837085a
--- /dev/null
+++ b/stats.ico
Binary files differ