mirror of
https://github.com/shizand/statapp.git
synced 2024-12-23 20:22:58 +03:00
parent
4854a14e70
commit
3a655178d4
@ -1,4 +1,5 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
DIRECT_LINK = 0
|
DIRECT_LINK = 0
|
||||||
INDIRECT_LINK = 1
|
INDIRECT_LINK = 1
|
||||||
@ -25,3 +26,7 @@ def variance_analysis(data):
|
|||||||
return np.array([
|
return np.array([
|
||||||
[np.mean(col), np.std(col), np.min(col), np.max(col)] for col in data.T
|
[np.mean(col), np.std(col), np.min(col), np.max(col)] for col in data.T
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def correlation_analysis(data):
|
||||||
|
return pd.DataFrame(data).corr().to_numpy()
|
18
statapp/correlation_analysis.py
Normal file
18
statapp/correlation_analysis.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from PySide2.QtWidgets import QDialog, QHeaderView
|
||||||
|
|
||||||
|
from statapp.calculations import correlation_analysis
|
||||||
|
from statapp.models.correlation_analysis_model import CorrelationAnalysisModel
|
||||||
|
from statapp.ui.ui_correlation_analysis_window import Ui_CorrelationAnalysisWindow
|
||||||
|
|
||||||
|
|
||||||
|
class СorrelationAnalysisWindow(QDialog):
|
||||||
|
def __init__(self, data):
|
||||||
|
super().__init__()
|
||||||
|
self.ui = Ui_CorrelationAnalysisWindow()
|
||||||
|
self.ui.setupUi(self)
|
||||||
|
|
||||||
|
res = correlation_analysis(data)
|
||||||
|
self.model = CorrelationAnalysisModel(res.round(2))
|
||||||
|
self.ui.tableView.setModel(self.model)
|
||||||
|
header = self.ui.tableView.horizontalHeader()
|
||||||
|
header.setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
|
@ -1,10 +1,10 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from PySide2.QtCore import Slot, QLocale, QSize
|
from PySide2.QtCore import Slot, QSize
|
||||||
from PySide2.QtGui import QIcon
|
from PySide2.QtGui import QIcon
|
||||||
from PySide2.QtWidgets import QMainWindow, QMessageBox, QApplication
|
from PySide2.QtWidgets import QMainWindow, QMessageBox
|
||||||
|
|
||||||
from statapp.calculations import generate_x_values
|
from statapp.calculations import generate_x_values
|
||||||
from statapp.generate_factor_window import GenerateFactorWindow, INDIRECT_LINK
|
from statapp.generate_factor_window import GenerateFactorWindow
|
||||||
from statapp.models.input_values_model import InputValuesModel
|
from statapp.models.input_values_model import InputValuesModel
|
||||||
from statapp.generate_window import GenerateWindow
|
from statapp.generate_window import GenerateWindow
|
||||||
from statapp.about_window import AboutWindow
|
from statapp.about_window import AboutWindow
|
||||||
@ -12,6 +12,7 @@ from statapp.models.fileslc_model import FileSLCModel
|
|||||||
from statapp.ui.ui_main_window import Ui_MainWindow
|
from statapp.ui.ui_main_window import Ui_MainWindow
|
||||||
from statapp.utils import resource_path, buildMessageBox
|
from statapp.utils import resource_path, buildMessageBox
|
||||||
from statapp.variance_analysis import VarianceAnalysisWindow
|
from statapp.variance_analysis import VarianceAnalysisWindow
|
||||||
|
from statapp.correlation_analysis import СorrelationAnalysisWindow
|
||||||
|
|
||||||
|
|
||||||
class MainWindow(QMainWindow):
|
class MainWindow(QMainWindow):
|
||||||
@ -54,12 +55,12 @@ class MainWindow(QMainWindow):
|
|||||||
data = self.fileModel.loadFile()
|
data = self.fileModel.loadFile()
|
||||||
if data is not None:
|
if data is not None:
|
||||||
self.model.updateAllData(data)
|
self.model.updateAllData(data)
|
||||||
self.isDataChanged = True
|
self.isDataChanged = False
|
||||||
else:
|
else:
|
||||||
data = self.fileModel.loadFile()
|
data = self.fileModel.loadFile()
|
||||||
if data is not None:
|
if data is not None:
|
||||||
self.model.updateAllData(data)
|
self.model.updateAllData(data)
|
||||||
self.isDataChanged = True
|
self.isDataChanged = False
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
def on_savefileaction_triggered(self):
|
def on_savefileaction_triggered(self):
|
||||||
@ -103,6 +104,11 @@ class MainWindow(QMainWindow):
|
|||||||
dw = VarianceAnalysisWindow(self.model.getData())
|
dw = VarianceAnalysisWindow(self.model.getData())
|
||||||
dw.exec()
|
dw.exec()
|
||||||
|
|
||||||
|
@Slot()
|
||||||
|
def on_correlationAnalisisAction_triggered(self):
|
||||||
|
dw = СorrelationAnalysisWindow(self.model.getData())
|
||||||
|
dw.exec()
|
||||||
|
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
if self.isDataChanged:
|
if self.isDataChanged:
|
||||||
file = ''
|
file = ''
|
||||||
|
23
statapp/models/correlation_analysis_model.py
Normal file
23
statapp/models/correlation_analysis_model.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
from PySide2.QtCore import QModelIndex, Qt
|
||||||
|
|
||||||
|
from statapp.models.ro_table_model import ROTableModel
|
||||||
|
from statapp.models.utils import yx_header
|
||||||
|
|
||||||
|
|
||||||
|
class CorrelationAnalysisModel(ROTableModel):
|
||||||
|
def __init__(self, data):
|
||||||
|
super().__init__(data)
|
||||||
|
|
||||||
|
def getHorizontalHeader(self):
|
||||||
|
return yx_header(self.columnCount(QModelIndex()))
|
||||||
|
|
||||||
|
def getVerticalHeader(self):
|
||||||
|
return yx_header(self.rowCount(QModelIndex()))
|
||||||
|
|
||||||
|
def data(self, index, role):
|
||||||
|
if role == Qt.DisplayRole:
|
||||||
|
if (index.column() <= index.row()):
|
||||||
|
return float(self._data[index.row(), index.column()])
|
||||||
|
else:
|
||||||
|
None
|
||||||
|
return None
|
28
statapp/ui/correlation_analysis_window.ui
Normal file
28
statapp/ui/correlation_analysis_window.ui
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CorrelationAnalysisWindow</class>
|
||||||
|
<widget class="QDialog" name="CorrelationAnalysisWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>630</width>
|
||||||
|
<height>400</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Корреляционный анализ</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QTableView" name="tableView"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -40,7 +40,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>800</width>
|
<width>800</width>
|
||||||
<height>27</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="filemenu">
|
<widget class="QMenu" name="filemenu">
|
||||||
@ -63,6 +63,7 @@
|
|||||||
<string>Анализ данных</string>
|
<string>Анализ данных</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="varianceAnalysisAction"/>
|
<addaction name="varianceAnalysisAction"/>
|
||||||
|
<addaction name="correlationAnalisisAction"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="modelmenu">
|
<widget class="QMenu" name="modelmenu">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
@ -117,6 +118,11 @@
|
|||||||
<string>Дисперсионный анализ</string>
|
<string>Дисперсионный анализ</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="correlationAnalisisAction">
|
||||||
|
<property name="text">
|
||||||
|
<string>Корреляционный анализ</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
42
statapp/ui/ui_correlation_analysis_window.py
generated
Normal file
42
statapp/ui/ui_correlation_analysis_window.py
generated
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
## Form generated from reading UI file 'correlation_analysis_window.ui'
|
||||||
|
##
|
||||||
|
## Created by: Qt User Interface Compiler version 5.15.2
|
||||||
|
##
|
||||||
|
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
from PySide2.QtCore import *
|
||||||
|
from PySide2.QtGui import *
|
||||||
|
from PySide2.QtWidgets import *
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_CorrelationAnalysisWindow(object):
|
||||||
|
def setupUi(self, CorrelationAnalysisWindow):
|
||||||
|
if not CorrelationAnalysisWindow.objectName():
|
||||||
|
CorrelationAnalysisWindow.setObjectName(u"CorrelationAnalysisWindow")
|
||||||
|
CorrelationAnalysisWindow.resize(630, 400)
|
||||||
|
self.gridLayout_2 = QGridLayout(CorrelationAnalysisWindow)
|
||||||
|
self.gridLayout_2.setObjectName(u"gridLayout_2")
|
||||||
|
self.gridLayout = QGridLayout()
|
||||||
|
self.gridLayout.setObjectName(u"gridLayout")
|
||||||
|
self.tableView = QTableView(CorrelationAnalysisWindow)
|
||||||
|
self.tableView.setObjectName(u"tableView")
|
||||||
|
|
||||||
|
self.gridLayout.addWidget(self.tableView, 0, 0, 1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
|
||||||
|
|
||||||
|
|
||||||
|
self.retranslateUi(CorrelationAnalysisWindow)
|
||||||
|
|
||||||
|
QMetaObject.connectSlotsByName(CorrelationAnalysisWindow)
|
||||||
|
# setupUi
|
||||||
|
|
||||||
|
def retranslateUi(self, CorrelationAnalysisWindow):
|
||||||
|
CorrelationAnalysisWindow.setWindowTitle(QCoreApplication.translate("CorrelationAnalysisWindow", u"\u041a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None))
|
||||||
|
# retranslateUi
|
||||||
|
|
7
statapp/ui/ui_main_window.py
generated
7
statapp/ui/ui_main_window.py
generated
@ -32,6 +32,8 @@ class Ui_MainWindow(object):
|
|||||||
self.closefileaction.setObjectName(u"closefileaction")
|
self.closefileaction.setObjectName(u"closefileaction")
|
||||||
self.varianceAnalysisAction = QAction(MainWindow)
|
self.varianceAnalysisAction = QAction(MainWindow)
|
||||||
self.varianceAnalysisAction.setObjectName(u"varianceAnalysisAction")
|
self.varianceAnalysisAction.setObjectName(u"varianceAnalysisAction")
|
||||||
|
self.correlationAnalisisAction = QAction(MainWindow)
|
||||||
|
self.correlationAnalisisAction.setObjectName(u"correlationAnalisisAction")
|
||||||
self.centralwidget = QWidget(MainWindow)
|
self.centralwidget = QWidget(MainWindow)
|
||||||
self.centralwidget.setObjectName(u"centralwidget")
|
self.centralwidget.setObjectName(u"centralwidget")
|
||||||
self.gridLayout = QGridLayout(self.centralwidget)
|
self.gridLayout = QGridLayout(self.centralwidget)
|
||||||
@ -51,7 +53,7 @@ class Ui_MainWindow(object):
|
|||||||
MainWindow.setCentralWidget(self.centralwidget)
|
MainWindow.setCentralWidget(self.centralwidget)
|
||||||
self.menubar = QMenuBar(MainWindow)
|
self.menubar = QMenuBar(MainWindow)
|
||||||
self.menubar.setObjectName(u"menubar")
|
self.menubar.setObjectName(u"menubar")
|
||||||
self.menubar.setGeometry(QRect(0, 0, 800, 27))
|
self.menubar.setGeometry(QRect(0, 0, 800, 21))
|
||||||
self.filemenu = QMenu(self.menubar)
|
self.filemenu = QMenu(self.menubar)
|
||||||
self.filemenu.setObjectName(u"filemenu")
|
self.filemenu.setObjectName(u"filemenu")
|
||||||
self.generatemenu = QMenu(self.menubar)
|
self.generatemenu = QMenu(self.menubar)
|
||||||
@ -78,6 +80,7 @@ class Ui_MainWindow(object):
|
|||||||
self.generatemenu.addAction(self.generateYaction)
|
self.generatemenu.addAction(self.generateYaction)
|
||||||
self.generatemenu.addAction(self.generateXaction)
|
self.generatemenu.addAction(self.generateXaction)
|
||||||
self.analyzemenu.addAction(self.varianceAnalysisAction)
|
self.analyzemenu.addAction(self.varianceAnalysisAction)
|
||||||
|
self.analyzemenu.addAction(self.correlationAnalisisAction)
|
||||||
self.helpmenu.addAction(self.aboutmenuaction)
|
self.helpmenu.addAction(self.aboutmenuaction)
|
||||||
|
|
||||||
self.retranslateUi(MainWindow)
|
self.retranslateUi(MainWindow)
|
||||||
@ -94,6 +97,7 @@ class Ui_MainWindow(object):
|
|||||||
self.savefileaction.setText(QCoreApplication.translate("MainWindow", u"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", None))
|
self.savefileaction.setText(QCoreApplication.translate("MainWindow", u"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", None))
|
||||||
self.closefileaction.setText(QCoreApplication.translate("MainWindow", u"\u0417\u0430\u043a\u0440\u044b\u0442\u044c", None))
|
self.closefileaction.setText(QCoreApplication.translate("MainWindow", u"\u0417\u0430\u043a\u0440\u044b\u0442\u044c", None))
|
||||||
self.varianceAnalysisAction.setText(QCoreApplication.translate("MainWindow", u"\u0414\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None))
|
self.varianceAnalysisAction.setText(QCoreApplication.translate("MainWindow", u"\u0414\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None))
|
||||||
|
self.correlationAnalisisAction.setText(QCoreApplication.translate("MainWindow", u"\u041a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None))
|
||||||
self.label.setText(QCoreApplication.translate("MainWindow", u"\u0421\u0422\u0410\u0422\u0418\u0421\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u0414\u0410\u041d\u041d\u042b\u0415", None))
|
self.label.setText(QCoreApplication.translate("MainWindow", u"\u0421\u0422\u0410\u0422\u0418\u0421\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u0414\u0410\u041d\u041d\u042b\u0415", None))
|
||||||
self.filemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0424\u0430\u0439\u043b", None))
|
self.filemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0424\u0430\u0439\u043b", None))
|
||||||
self.generatemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439", None))
|
self.generatemenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439", None))
|
||||||
@ -101,3 +105,4 @@ class Ui_MainWindow(object):
|
|||||||
self.modelmenu.setTitle(QCoreApplication.translate("MainWindow", u"\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", None))
|
self.modelmenu.setTitle(QCoreApplication.translate("MainWindow", u"\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", None))
|
||||||
self.helpmenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0421\u043f\u0440\u0430\u0432\u043a\u0430", None))
|
self.helpmenu.setTitle(QCoreApplication.translate("MainWindow", u"\u0421\u043f\u0440\u0430\u0432\u043a\u0430", None))
|
||||||
# retranslateUi
|
# retranslateUi
|
||||||
|
|
||||||
|
3
statapp/ui/ui_variance_analysis_window.py
generated
3
statapp/ui/ui_variance_analysis_window.py
generated
@ -17,7 +17,7 @@ class Ui_VarianceAnalysisWindow(object):
|
|||||||
def setupUi(self, VarianceAnalysisWindow):
|
def setupUi(self, VarianceAnalysisWindow):
|
||||||
if not VarianceAnalysisWindow.objectName():
|
if not VarianceAnalysisWindow.objectName():
|
||||||
VarianceAnalysisWindow.setObjectName(u"VarianceAnalysisWindow")
|
VarianceAnalysisWindow.setObjectName(u"VarianceAnalysisWindow")
|
||||||
VarianceAnalysisWindow.resize(942, 606)
|
VarianceAnalysisWindow.resize(630, 400)
|
||||||
self.gridLayout_2 = QGridLayout(VarianceAnalysisWindow)
|
self.gridLayout_2 = QGridLayout(VarianceAnalysisWindow)
|
||||||
self.gridLayout_2.setObjectName(u"gridLayout_2")
|
self.gridLayout_2.setObjectName(u"gridLayout_2")
|
||||||
self.gridLayout = QGridLayout()
|
self.gridLayout = QGridLayout()
|
||||||
@ -39,3 +39,4 @@ class Ui_VarianceAnalysisWindow(object):
|
|||||||
def retranslateUi(self, VarianceAnalysisWindow):
|
def retranslateUi(self, VarianceAnalysisWindow):
|
||||||
VarianceAnalysisWindow.setWindowTitle(QCoreApplication.translate("VarianceAnalysisWindow", u"\u0414\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None))
|
VarianceAnalysisWindow.setWindowTitle(QCoreApplication.translate("VarianceAnalysisWindow", u"\u0414\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437", None))
|
||||||
# retranslateUi
|
# retranslateUi
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>942</width>
|
<width>630</width>
|
||||||
<height>606</height>
|
<height>400</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
Loading…
Reference in New Issue
Block a user