Co-authored-by: MisterMLiL <eugenelazurenko@gmail.com>
This commit is contained in:
Maxim Slipenko 2023-10-05 08:36:05 +03:00
parent a89d7896e3
commit 6e5ba6f91a
6 changed files with 142 additions and 9 deletions

View File

@ -1,4 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="Black">
<option name="sdkName" value="Poetry (statapp)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Poetry (statapp)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Poetry (statapp)" project-jdk-type="Python SDK" />
</project> </project>

65
poetry.lock generated
View File

@ -74,6 +74,17 @@ files = [
{file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
] ]
[[package]]
name = "et-xmlfile"
version = "1.1.0"
description = "An implementation of lxml.xmlfile for the standard library"
optional = false
python-versions = ">=3.6"
files = [
{file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"},
{file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"},
]
[[package]] [[package]]
name = "filelock" name = "filelock"
version = "3.12.4" version = "3.12.4"
@ -261,6 +272,20 @@ files = [
{file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"},
] ]
[[package]]
name = "openpyxl"
version = "3.1.2"
description = "A Python library to read/write Excel 2010 xlsx/xlsm files"
optional = false
python-versions = ">=3.6"
files = [
{file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"},
{file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"},
]
[package.dependencies]
et-xmlfile = "*"
[[package]] [[package]]
name = "packaging" name = "packaging"
version = "23.2" version = "23.2"
@ -563,6 +588,44 @@ files = [
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
] ]
[[package]]
name = "scipy"
version = "1.10.1"
description = "Fundamental algorithms for scientific computing in Python"
optional = false
python-versions = "<3.12,>=3.8"
files = [
{file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"},
{file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"},
{file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"},
{file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c0ff64b06b10e35215abce517252b375e580a6125fd5fdf6421b98efbefb2d2"},
{file = "scipy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:fae8a7b898c42dffe3f7361c40d5952b6bf32d10c4569098d276b4c547905ee1"},
{file = "scipy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f1564ea217e82c1bbe75ddf7285ba0709ecd503f048cb1236ae9995f64217bd"},
{file = "scipy-1.10.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d925fa1c81b772882aa55bcc10bf88324dadb66ff85d548c71515f6689c6dac5"},
{file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaea0a6be54462ec027de54fca511540980d1e9eea68b2d5c1dbfe084797be35"},
{file = "scipy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15a35c4242ec5f292c3dd364a7c71a61be87a3d4ddcc693372813c0b73c9af1d"},
{file = "scipy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:43b8e0bcb877faf0abfb613d51026cd5cc78918e9530e375727bf0625c82788f"},
{file = "scipy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5678f88c68ea866ed9ebe3a989091088553ba12c6090244fdae3e467b1139c35"},
{file = "scipy-1.10.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:39becb03541f9e58243f4197584286e339029e8908c46f7221abeea4b749fa88"},
{file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bce5869c8d68cf383ce240e44c1d9ae7c06078a9396df68ce88a1230f93a30c1"},
{file = "scipy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07c3457ce0b3ad5124f98a86533106b643dd811dd61b548e78cf4c8786652f6f"},
{file = "scipy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:049a8bbf0ad95277ffba9b3b7d23e5369cc39e66406d60422c8cfef40ccc8415"},
{file = "scipy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd9f1027ff30d90618914a64ca9b1a77a431159df0e2a195d8a9e8a04c78abf9"},
{file = "scipy-1.10.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:79c8e5a6c6ffaf3a2262ef1be1e108a035cf4f05c14df56057b64acc5bebffb6"},
{file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51af417a000d2dbe1ec6c372dfe688e041a7084da4fdd350aeb139bd3fb55353"},
{file = "scipy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b4735d6c28aad3cdcf52117e0e91d6b39acd4272f3f5cd9907c24ee931ad601"},
{file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"},
{file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"},
]
[package.dependencies]
numpy = ">=1.19.5,<1.27.0"
[package.extras]
dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"]
doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"]
test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
[[package]] [[package]]
name = "setuptools" name = "setuptools"
version = "68.2.2" version = "68.2.2"
@ -771,4 +834,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.8,<3.9" python-versions = ">=3.8,<3.9"
content-hash = "a652dcb9e1a8a200480197c5618b7ddb4cb33fbf1a89278058eeda745ea7293f" content-hash = "2e9cc565e3a28c9d9f4e8d7010f97a7736550c8f64a86c59199ba279915da28b"

View File

@ -12,9 +12,11 @@ readme = "README.md"
python = ">=3.8,<3.9" python = ">=3.8,<3.9"
pre-commit = "^3.4.0" pre-commit = "^3.4.0"
pyinstaller = "^6.0.0" pyinstaller = "^6.0.0"
pandas = "^2.0"
pyside2 = "^5.15.2.1" pyside2 = "^5.15.2.1"
pylint = "^2" pandas = { version = "^2", markers = "python_version < '3.9'" }
pylint = { version = "^2", markers = "python_version < '3.9'" }
scipy = { version = "^1", markers = "python_version < '3.9'" }
openpyxl = "^3.1.2"
[build-system] [build-system]

View File

@ -19,9 +19,12 @@
# #
import sys import sys
import numpy as np
import pandas as pd
from PySide2 import QtCore from PySide2 import QtCore
from PySide2.QtWidgets import QApplication from PySide2.QtWidgets import QApplication
from statapp.calculations import linearPolynom
from statapp.main_window import MainWindow from statapp.main_window import MainWindow
@ -38,6 +41,51 @@ def main():
window.show() window.show()
return app.exec_() return app.exec_()
data = [
[6014.700000, 2995.067340, 2982.474660],
[6031.200000, 2971.594560, 2993.546160],
[6145.800000, 3017.328000, 2970.497280],
[6133.200000, 2977.476480, 2970.796320],
[6063.600000, 3006.012960, 2982.839040],
[5934.900000, 2979.831420, 2992.026240],
[6016.800000, 2997.121680, 2984.065920],
[6070.200000, 2996.335920, 2975.729640],
[5935.800000, 2982.114960, 2976.811560],
[6108.300000, 2987.822700, 2974.378500]
]
data = pd.DataFrame(data).to_numpy()
if __name__ == "__main__": if __name__ == "__main__":
sys.exit(main()) n = len(data)
# y = generateYValues(100, 5, n)
# x1 = generateXValues(20, 2, 0, y)
# x2 = generateXValues(10, 1, 0, y)
# x3 = generateXValues(5, 0, 0, y)
# y = np.array([18, 19, 22, 20, 24, 23])
# x1 = np.array([13, 14, 15, 17, 16, 15])
# x2 = np.array([18, 19, 22, 20, 24, 23])
# data = np.concatenate([y, x1, x2, x3], axis=1)
res = linearPolynom(data)
solution = res[0]
residues = res[1]
rank = res[2]
SSE = np.sum(residues)
print(SSE)
df = n - rank
MSE = SSE / df
# MSE = np.mean(residues)
SSE = np.sum(residues)
print("Остаточная дисперсия (MSE = S^2):", MSE)
# sys.exit(main())

View File

@ -24,6 +24,10 @@ DIRECT_LINK = 0
INDIRECT_LINK = 1 INDIRECT_LINK = 1
def generateYValues(mean, std, count):
return np.random.normal(mean, std, size=(count, 1))
def generateXValues(mean, std, typeConnection, yColumn): def generateXValues(mean, std, typeConnection, yColumn):
yMean = np.mean(yColumn) yMean = np.mean(yColumn)
values = [] values = []
@ -38,7 +42,9 @@ def generateXValues(mean, std, typeConnection, yColumn):
else: else:
x = mean x = mean
values.append(x) values.append(x)
return np.array(values)
res = np.array(values)
return res.reshape(len(res), 1)
def varianceAnalysis(data): def varianceAnalysis(data):
@ -49,3 +55,15 @@ def varianceAnalysis(data):
def correlationAnalysis(data): def correlationAnalysis(data):
return pd.DataFrame(data).corr().to_numpy() return pd.DataFrame(data).corr().to_numpy()
def linearPolynom(data):
x = data[:, 1:]
y = data[:, [0]]
df = pd.DataFrame(x)
df.insert(0, 'const', 1)
x = df.to_numpy()
return np.linalg.lstsq(x, y, rcond=None)

View File

@ -21,7 +21,7 @@ import numpy as np
from PySide2.QtCore import Slot from PySide2.QtCore import Slot
from PySide2.QtWidgets import QMainWindow, QMessageBox from PySide2.QtWidgets import QMainWindow, QMessageBox
from statapp.calculations import generateXValues from statapp.calculations import generateXValues, generateYValues
from statapp.generate_factor_window import GenerateFactorWindow 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
@ -112,7 +112,7 @@ class MainWindow(QMainWindow):
gw = GenerateWindow() gw = GenerateWindow()
if gw.exec(): if gw.exec():
y = np.random.normal(gw.mat, gw.deviation, size=(gw.count, 1)) y = generateYValues(gw.mat, gw.deviation, gw.count)
self.model.updateAllData(y.round(2)) self.model.updateAllData(y.round(2))
self.isDataChanged = True self.isDataChanged = True
self.ui.generateXaction.setEnabled(True) self.ui.generateXaction.setEnabled(True)
@ -125,8 +125,7 @@ class MainWindow(QMainWindow):
data = self.model.getData() data = self.model.getData()
y = self.model.getY() y = self.model.getY()
xValues = generateXValues(gfw.mat, gfw.deviation, gfw.typeConnection, y) xValues = generateXValues(gfw.mat, gfw.deviation, gfw.typeConnection, y)
xValues = xValues.reshape(len(xValues), 1).round(2) data = np.concatenate((data, xValues.round(2)), axis=1)
data = np.concatenate((data, xValues), axis=1)
self.model.updateAllData(data) self.model.updateAllData(data)
self.ui.varianceAnalysisAction.setEnabled(True) self.ui.varianceAnalysisAction.setEnabled(True)
self.ui.correlationAnalisisAction.setEnabled(True) self.ui.correlationAnalisisAction.setEnabled(True)