Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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, для проверки достоверности работы расчетов