форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
93 строки
4.0 KiB
Markdown
93 строки
4.0 KiB
Markdown
#Тема 8 общее задание
|
|
|
|
## Задание
|
|
|
|
Разработайте программу, состоящую из трех модулей:
|
|
- Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Получен-ный список должен возвращаться в вызывающую программу.
|
|
- Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
|
|
- Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки.
|
|
Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.
|
|
|
|
## Решение
|
|
|
|
Модуль чтения readerfile.py
|
|
|
|
```py
|
|
def reader(filename):
|
|
num = []
|
|
with open(filename, 'r', encoding = 'utf-8') as file:
|
|
for line in file:
|
|
elements = line.strip().split()
|
|
for elem in elements:
|
|
number = float(elem)
|
|
num.append(number)
|
|
return num
|
|
```
|
|
|
|
Модуль калькулятора корреляции correlate.py
|
|
|
|
```py
|
|
import math
|
|
def correlation(numbers1, numbers2):
|
|
if not numbers1 or not numbers2:
|
|
print('пусто')
|
|
return(0)
|
|
|
|
n = min(len(numbers1), len(numbers2))
|
|
|
|
x = numbers1[:n]
|
|
y = numbers2[:n]
|
|
|
|
meanx = sum(x)/n
|
|
meany = sum(y)/n
|
|
|
|
sum1 = 0
|
|
sum2 = 0
|
|
sum3 = 0
|
|
|
|
for i in range (n):
|
|
sum1 += ((x[i] - meanx)*(y[i] - meany))
|
|
sum2 += ((x[i] - meanx)**2)
|
|
sum3 += ((y[i] - meany)**2)
|
|
print(sum1,sum2,sum3)
|
|
return (sum1/math.sqrt(sum2*sum3))
|
|
```
|
|
|
|
Главный модуль mainfile.py
|
|
|
|
```py
|
|
from readerfile import reader
|
|
from correlate import correlation
|
|
|
|
def main():
|
|
print("_________Калькулятор корреляции_________")
|
|
file1 = input("Первый файл: ").strip()
|
|
file2 = input("Второй файл: ").strip()
|
|
|
|
numbers1 = reader(file1)
|
|
numbers2 = reader(file2)
|
|
|
|
print(numbers1)
|
|
print(numbers2)
|
|
|
|
cor = correlation(numbers1, numbers2)
|
|
|
|
print("Коэффициент корреляции - ", cor)
|
|
```
|
|
|
|
Результат работы программы:
|
|
|
|
|
|
```py
|
|
>>> import mainfile
|
|
>>> mainfile.main()
|
|
_________Калькулятор корреляции_________
|
|
Первый файл: num1.txt
|
|
Второй файл: num2.txt
|
|
[44.0, 50.0, 43.0, 30.0, 24.0, 10.0, 9.0, 1.0, 5.0, 29.0, 19.0, 14.0, 21.0]
|
|
[30.0, 60.0, 58.0, 40.0, 34.0, 20.0, 19.0, 16.0, 15.0, 39.0, 28.0, 24.0, 31.0]
|
|
2420.0 2930.0 2519.6923076923076
|
|
Коэффициент корреляции - 0.8906514939994264
|
|
```
|
|
|
|
Выводится содержимое файлов, а также суммы, полученные в correlate.py, для проверки достоверности работы расчетов |