diff --git a/statapp/main_window.py b/statapp/main_window.py
index 4839fb0..49151eb 100644
--- a/statapp/main_window.py
+++ b/statapp/main_window.py
@@ -36,6 +36,7 @@ from statapp.ui.ui_main_window import Ui_MainWindow
from statapp.utils import buildMessageBox, addIcon, FloatDelegate
from statapp.variance_analysis import VarianceAnalysisWindow
from statapp.correlation_analysis import CorrelationAnalysisWindow
+from statapp.polynoms.transform_polynom_window import TransformPolynomWindow
class MainWindow(QMainWindow):
@@ -192,6 +193,11 @@ class MainWindow(QMainWindow):
dw = SquaredPolynomWindow(self.model.getData())
dw.exec()
+ @Slot()
+ def on_transformPolynomAction_triggered(self):
+ dw = TransformPolynomWindow(self.model.getData())
+ dw.exec()
+
def closeEvent(self, event):
if self.isDataChanged:
file = ''
diff --git a/statapp/polynoms/transform_polynom_window.py b/statapp/polynoms/transform_polynom_window.py
new file mode 100644
index 0000000..50451bf
--- /dev/null
+++ b/statapp/polynoms/transform_polynom_window.py
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2023 Maxim Slipenko, Eugene Lazurenko.
+#
+# This file is part of Statapp
+# (see https://github.com/shizand/statapp).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+import numpy as np
+from PySide2.QtCore import Slot, QModelIndex
+from PySide2.QtWidgets import QDialog, QHeaderView
+
+from statapp.calculations import linearPolynom
+from statapp.mathtex_header_view import MathTexHeaderView
+from statapp.models.regression_result_model import RegressionResultModel
+from statapp.ui.ui_transform_polynom_window import Ui_PolynomWindow
+from statapp.utils import addIcon, FloatDelegate
+
+
+class TransformPolynomWindow(QDialog):
+ def __init__(self, data):
+ super().__init__()
+ self.ui = Ui_PolynomWindow()
+ self.ui.setupUi(self)
+ addIcon(self)
+ self.setWindowTitle("Преобразования")
+
+ self.data = data
+ result = linearPolynom(data)
+
+ self.model = RegressionResultModel(result)
+ self.ui.tableView.setItemDelegate(FloatDelegate())
+ self.ui.tableView.setModel(self.model)
+ self.ui.tableView.setVerticalHeader(MathTexHeaderView(self.ui.tableView))
+ header = self.ui.tableView.horizontalHeader()
+ header.setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
+
+ self.ui.residualVarianceValueLabel.setText(str(result.residualVariance))
+ self.ui.scaledResidualVarianceValueLabel.setText(str(result.scaledResidualVariance))
+ self.ui.fStatisticValueLabel.setText(str(result.fStatistic))
+ self.ui.rSquaredValueLabel.setText(str(result.scaledResidualVariance))
+
+ @Slot(QModelIndex)
+ def on_listTransforms_clicked(self, index):
+ item = self.ui.listTransforms.currentItem().text()
+
+ data = np.copy(self.data)
+ for i in range(len(data[0:])):
+ for j in range(1, len(data[i])):
+ func = defaultX
+
+ if item == 'sin(x)':
+ func = np.sin
+ elif item == 'cos(x)':
+ func = np.cos
+ elif item == 'log(x)':
+ func = np.log
+ elif item == 'exp(x)':
+ func = np.exp
+
+ data[i][j] = func(data[i][j])
+
+ self.rebuildData(data)
+
+ def rebuildData(self, data):
+ result = linearPolynom(data)
+
+ self.model = RegressionResultModel(result)
+ self.ui.tableView.setItemDelegate(FloatDelegate())
+ self.ui.tableView.setModel(self.model)
+ #self.ui.tableView.setVerticalHeader(MathTexHeaderView(self.ui.tableView))
+ header = self.ui.tableView.horizontalHeader()
+ header.setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
+
+ self.ui.residualVarianceValueLabel.setText(str(result.residualVariance))
+ self.ui.scaledResidualVarianceValueLabel.setText(str(result.scaledResidualVariance))
+ self.ui.fStatisticValueLabel.setText(str(result.fStatistic))
+ self.ui.rSquaredValueLabel.setText(str(result.scaledResidualVariance))
+
+
+def defaultX(x):
+ return x
diff --git a/statapp/ui/main_window.ui b/statapp/ui/main_window.ui
index a23d2ec..e33b238 100644
--- a/statapp/ui/main_window.ui
+++ b/statapp/ui/main_window.ui
@@ -40,7 +40,7 @@
0
0
800
- 27
+ 21
diff --git a/statapp/ui/transform_polynom_window.ui b/statapp/ui/transform_polynom_window.ui
new file mode 100644
index 0000000..267b7d8
--- /dev/null
+++ b/statapp/ui/transform_polynom_window.ui
@@ -0,0 +1,145 @@
+
+
+ PolynomWindow
+
+
+
+ 0
+ 0
+ 537
+ 444
+
+
+
+ Полином
+
+
+ -
+
+
-
+
+
+ 40
+
+
+ 40
+
+
+ 40
+
+
+
+
+
+ -
+
+
+ 10
+
+
-
+
+
+ undefined
+
+
+
+ -
+
+
+ undefined
+
+
+
+ -
+
+
+ F1 - отношение Фишера
+
+
+
+ -
+
+
+ Остаточная дисперсия:
+
+
+
+ -
+
+
+ Остаточная дисперсия (масштабированная):
+
+
+
+ -
+
+
+ Коэффициент множественной дереминизации
+
+
+
+ -
+
+
+ undefined
+
+
+
+ -
+
+
+ undefined
+
+
+
+
+
+ -
+
+
+
+ 100
+ 0
+
+
+
+
+ 100
+ 16777215
+
+
+
+
+ 12
+
+
+
+ QListView::ListMode
+
+
-
+
+ sin(x)
+
+
+ -
+
+ cos(x)
+
+
+ -
+
+ log(x)
+
+
+ -
+
+ exp(x)
+
+
+
+
+
+
+
+
+
diff --git a/statapp/ui/ui_main_window.py b/statapp/ui/ui_main_window.py
index 6049b84..e5692a5 100644
--- a/statapp/ui/ui_main_window.py
+++ b/statapp/ui/ui_main_window.py
@@ -58,6 +58,8 @@ class Ui_MainWindow(object):
self.linearPolynomAction.setObjectName(u"linearPolynomAction")
self.squaredPolynomAction = QAction(MainWindow)
self.squaredPolynomAction.setObjectName(u"squaredPolynomAction")
+ self.transformPolynomAction = QAction(MainWindow)
+ self.transformPolynomAction.setObjectName(u"transformPolynomAction")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayout = QGridLayout(self.centralwidget)
@@ -77,7 +79,7 @@ class Ui_MainWindow(object):
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
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.setObjectName(u"filemenu")
self.generatemenu = QMenu(self.menubar)
@@ -107,6 +109,7 @@ class Ui_MainWindow(object):
self.analyzemenu.addAction(self.correlationAnalisisAction)
self.modelmenu.addAction(self.linearPolynomAction)
self.modelmenu.addAction(self.squaredPolynomAction)
+ self.modelmenu.addAction(self.transformPolynomAction)
self.helpmenu.addAction(self.aboutmenuaction)
self.retranslateUi(MainWindow)
@@ -126,6 +129,7 @@ class Ui_MainWindow(object):
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.linearPolynomAction.setText(QCoreApplication.translate("MainWindow", u"\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c", None))
self.squaredPolynomAction.setText(QCoreApplication.translate("MainWindow", u"\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u0438\u043d\u043e\u043c", None))
+ self.transformPolynomAction.setText(QCoreApplication.translate("MainWindow", u"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f", 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.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))
diff --git a/statapp/ui/ui_transform_polynom_window.py b/statapp/ui/ui_transform_polynom_window.py
new file mode 100644
index 0000000..2072336
--- /dev/null
+++ b/statapp/ui/ui_transform_polynom_window.py
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2023 Maxim Slipenko, Eugene Lazurenko.
+#
+# This file is part of Statapp
+# (see https://github.com/shizand/statapp).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+
+
+################################################################################
+## Form generated from reading UI file 'transform_polynom_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_PolynomWindow(object):
+ def setupUi(self, PolynomWindow):
+ if not PolynomWindow.objectName():
+ PolynomWindow.setObjectName(u"PolynomWindow")
+ PolynomWindow.resize(537, 444)
+ self.gridLayout_2 = QGridLayout(PolynomWindow)
+ self.gridLayout_2.setObjectName(u"gridLayout_2")
+ self.gridLayout = QGridLayout()
+ self.gridLayout.setObjectName(u"gridLayout")
+ self.tableView = QTableView(PolynomWindow)
+ self.tableView.setObjectName(u"tableView")
+ self.tableView.horizontalHeader().setMinimumSectionSize(40)
+ self.tableView.verticalHeader().setMinimumSectionSize(40)
+ self.tableView.verticalHeader().setDefaultSectionSize(40)
+
+ self.gridLayout.addWidget(self.tableView, 1, 3, 1, 1)
+
+
+ self.gridLayout_2.addLayout(self.gridLayout, 0, 7, 1, 1)
+
+ self.polynomResult = QGridLayout()
+ self.polynomResult.setObjectName(u"polynomResult")
+ self.polynomResult.setContentsMargins(-1, 10, -1, -1)
+ self.residualVarianceValueLabel = QLabel(PolynomWindow)
+ self.residualVarianceValueLabel.setObjectName(u"residualVarianceValueLabel")
+
+ self.polynomResult.addWidget(self.residualVarianceValueLabel, 0, 1, 1, 1)
+
+ self.scaledResidualVarianceValueLabel = QLabel(PolynomWindow)
+ self.scaledResidualVarianceValueLabel.setObjectName(u"scaledResidualVarianceValueLabel")
+
+ self.polynomResult.addWidget(self.scaledResidualVarianceValueLabel, 1, 1, 1, 1)
+
+ self.fStatisticLabel = QLabel(PolynomWindow)
+ self.fStatisticLabel.setObjectName(u"fStatisticLabel")
+
+ self.polynomResult.addWidget(self.fStatisticLabel, 2, 0, 1, 1)
+
+ self.residualVarianceLabel = QLabel(PolynomWindow)
+ self.residualVarianceLabel.setObjectName(u"residualVarianceLabel")
+
+ self.polynomResult.addWidget(self.residualVarianceLabel, 0, 0, 1, 1)
+
+ self.scaledResidualVarianceLabel = QLabel(PolynomWindow)
+ self.scaledResidualVarianceLabel.setObjectName(u"scaledResidualVarianceLabel")
+
+ self.polynomResult.addWidget(self.scaledResidualVarianceLabel, 1, 0, 1, 1)
+
+ self.rSquaredLabel = QLabel(PolynomWindow)
+ self.rSquaredLabel.setObjectName(u"rSquaredLabel")
+
+ self.polynomResult.addWidget(self.rSquaredLabel, 3, 0, 1, 1)
+
+ self.fStatisticValueLabel = QLabel(PolynomWindow)
+ self.fStatisticValueLabel.setObjectName(u"fStatisticValueLabel")
+
+ self.polynomResult.addWidget(self.fStatisticValueLabel, 2, 1, 1, 1)
+
+ self.rSquaredValueLabel = QLabel(PolynomWindow)
+ self.rSquaredValueLabel.setObjectName(u"rSquaredValueLabel")
+
+ self.polynomResult.addWidget(self.rSquaredValueLabel, 3, 1, 1, 1)
+
+
+ self.gridLayout_2.addLayout(self.polynomResult, 1, 7, 1, 1)
+
+ self.listTransforms = QListWidget(PolynomWindow)
+ QListWidgetItem(self.listTransforms)
+ QListWidgetItem(self.listTransforms)
+ QListWidgetItem(self.listTransforms)
+ QListWidgetItem(self.listTransforms)
+ self.listTransforms.setObjectName(u"listTransforms")
+ self.listTransforms.setMinimumSize(QSize(100, 0))
+ self.listTransforms.setMaximumSize(QSize(100, 16777215))
+ font = QFont()
+ font.setPointSize(12)
+ self.listTransforms.setFont(font)
+ self.listTransforms.setViewMode(QListView.ListMode)
+
+ self.gridLayout_2.addWidget(self.listTransforms, 0, 0, 1, 1)
+
+
+ self.retranslateUi(PolynomWindow)
+
+ QMetaObject.connectSlotsByName(PolynomWindow)
+ # setupUi
+
+ def retranslateUi(self, PolynomWindow):
+ PolynomWindow.setWindowTitle(QCoreApplication.translate("PolynomWindow", u"\u041f\u043e\u043b\u0438\u043d\u043e\u043c", None))
+ self.residualVarianceValueLabel.setText(QCoreApplication.translate("PolynomWindow", u"undefined", None))
+ self.scaledResidualVarianceValueLabel.setText(QCoreApplication.translate("PolynomWindow", u"undefined", None))
+ self.fStatisticLabel.setText(QCoreApplication.translate("PolynomWindow", u"F1 - \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0424\u0438\u0448\u0435\u0440\u0430", None))
+ self.residualVarianceLabel.setText(QCoreApplication.translate("PolynomWindow", u"\u041e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u044f:", None))
+ self.scaledResidualVarianceLabel.setText(QCoreApplication.translate("PolynomWindow", u"\u041e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u044f (\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f):", None))
+ self.rSquaredLabel.setText(QCoreApplication.translate("PolynomWindow", u"\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0434\u0435\u0440\u0435\u043c\u0438\u043d\u0438\u0437\u0430\u0446\u0438\u0438", None))
+ self.fStatisticValueLabel.setText(QCoreApplication.translate("PolynomWindow", u"undefined", None))
+ self.rSquaredValueLabel.setText(QCoreApplication.translate("PolynomWindow", u"undefined", None))
+
+ __sortingEnabled = self.listTransforms.isSortingEnabled()
+ self.listTransforms.setSortingEnabled(False)
+ ___qlistwidgetitem = self.listTransforms.item(0)
+ ___qlistwidgetitem.setText(QCoreApplication.translate("PolynomWindow", u"sin(x)", None));
+ ___qlistwidgetitem1 = self.listTransforms.item(1)
+ ___qlistwidgetitem1.setText(QCoreApplication.translate("PolynomWindow", u"cos(x)", None));
+ ___qlistwidgetitem2 = self.listTransforms.item(2)
+ ___qlistwidgetitem2.setText(QCoreApplication.translate("PolynomWindow", u"log(x)", None));
+ ___qlistwidgetitem3 = self.listTransforms.item(3)
+ ___qlistwidgetitem3.setText(QCoreApplication.translate("PolynomWindow", u"exp(x)", None));
+ self.listTransforms.setSortingEnabled(__sortingEnabled)
+
+ # retranslateUi