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

4.0 KiB

#Тема 8 общее задание

Задание

Разработайте программу, состоящую из трех модулей:

  • Модуль 1 содержит функцию считывания числового списка из текстового файла с заданным именем (аргумент функции – имя файла). Элементы в файле могут располагаться по несколько на строке с разделением пробелом. Числа элементов в строках могут быть разными. Получен-ный список должен возвращаться в вызывающую программу.
  • Модуль 2 содержит функцию расчета коэффициента корреляции по двум числовым спискам (аргументы функции – имена двух списков). Числа элементов в списках могут различаться. Значение коэффициента должно возвращаться в вызывающую программу.
  • Модуль 3 запрашивает у пользователя и вводит имена двух файлов с исходными данными, дважды вызывает функцию из модуля 1 и считывает два списка из двух текстовых файлов. За-тем вызывает функцию расчета коэффициента корреляции с помощью функции из модуля 2 и отображает рассчитанное значение на экране с округлением до трех цифр после точки. Подготовьте два текстовых файла с числовыми данными и проверьте по ним работу программы.

Решение

Модуль чтения readerfile.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

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

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)

Результат работы программы:

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