mirosh111000

Мірошниченко_ГЙМ_Ат№1

Dec 12th, 2025
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.38 KB | None | 0 0
  1. import math
  2. import numpy as np
  3.  
  4.  
  5. DATA = [
  6.     (37.5, 35.6),
  7.     (35.0, 35.3),
  8.     (31.2, 41.4),
  9.     (38.2, 45.8),
  10.     (55.4, 45.9),
  11.     (30.2, 29.9),
  12.     (24.5, 29.2),
  13.     (31.1, 31.0),
  14.     (42.9, 42.7),
  15.     (34.6, 34.9),
  16.     (31.5, 45.1),
  17.     (34.6, 39.5),
  18. ]
  19.  
  20.  
  21. def fmt_comma(x, decimals=4):
  22.     s = f"{x:.{decimals}f}"
  23.     return s.replace(".", ",")
  24.  
  25.  
  26. def interpret_strength(r):
  27.     ar = abs(r)
  28.     if math.isclose(ar, 1.0, abs_tol=1e-12):
  29.         return "Функціональний"
  30.     if ar < 0.3:
  31.         return "Майже відсутній"
  32.     if ar < 0.5:
  33.         return "Слабкий"
  34.     if ar < 0.7:
  35.         return "Помірний"
  36.     return "Сильний"
  37.  
  38.  
  39. def print_strength_table():
  40.     print("Оцінка тісноти лінійного зв'язку")
  41.     print("Величина коефіцієнту кореляції\tХарактер  зв'язку")
  42.     print("|r| < 0,3\t\t\t\tМайже відсутній")
  43.     print("0,3 ≤ |r| < 0,5\t\t\tСлабкий")
  44.     print("0,5 ≤ |r| < 0,7\t\t\tПомірний")
  45.     print("0,7 ≤ |r| < 1,0\t\t\tСильний")
  46.     print("|r| = 1,0\t\t\t\tФункціональний")
  47.  
  48.  
  49. def main():
  50.     decimals_table = 4
  51.  
  52.     x = np.array([p[0] for p in DATA], dtype=float)
  53.     y = np.array([p[1] for p in DATA], dtype=float)
  54.     n = int(len(x))
  55.  
  56.     print("=== АТЕСТАЦІЯ №1 ===")
  57.     print("Завдання 2(9,16): коефіцієнт лінійної кореляції між удоями корів-матерів (x) і їх дочок (y)\n")
  58.  
  59.     print("--- 1) Дані (x=Мати, y=Дочка) ---")
  60.     print(f"n = {n}\n")
  61.     print(f"{'№':>2}  {'x':>8}  {'y':>8}")
  62.     for i, (xi, yi) in enumerate(DATA, start=1):
  63.         print(f"{i:>2}  {fmt_comma(xi, 1):>8}  {fmt_comma(yi, 1):>8}")
  64.  
  65.     x_mean = float(np.mean(x))
  66.     y_mean = float(np.mean(y))
  67.  
  68.     xy = x * y
  69.     x_dev = x - x_mean
  70.     y_dev = y - y_mean
  71.     x_dev2 = x_dev**2
  72.     y_dev2 = y_dev**2
  73.  
  74.     print("\n--- 2) Розрахункова таблиця ---")
  75.     header = (
  76.         f"{'№':>2}  {'x':>8}  {'y':>8}  {'xy':>10}  "
  77.         f"{'x-x̄':>10}  {'y-ȳ':>10}  {'(x-x̄)^2':>12}  {'(y-ȳ)^2':>12}"
  78.     )
  79.     print(header)
  80.  
  81.     for i in range(n):
  82.         print(
  83.             f"{i+1:>2}  "
  84.             f"{fmt_comma(x[i], 1):>8}  "
  85.             f"{fmt_comma(y[i], 1):>8}  "
  86.             f"{fmt_comma(xy[i], decimals_table):>10}  "
  87.             f"{fmt_comma(x_dev[i], decimals_table):>10}  "
  88.             f"{fmt_comma(y_dev[i], decimals_table):>10}  "
  89.             f"{fmt_comma(x_dev2[i], decimals_table):>12}  "
  90.             f"{fmt_comma(y_dev2[i], decimals_table):>12}"
  91.         )
  92.  
  93.     xy_mean = float(np.mean(xy))
  94.     var_x = float(np.mean(x_dev2))
  95.     var_y = float(np.mean(y_dev2))
  96.  
  97.     sigma_x = math.sqrt(var_x)
  98.     sigma_y = math.sqrt(var_y)
  99.  
  100.     cov_xy = xy_mean - (x_mean * y_mean)
  101.     denom = sigma_x * sigma_y
  102.  
  103.     print("\n--- 3) Проміжні величини ---")
  104.     print(f"x̄ = mean(x) = {fmt_comma(x_mean, 4)}")
  105.     print(f"ȳ = mean(y) = {fmt_comma(y_mean, 4)}")
  106.     print(f"mean(xy) = {fmt_comma(xy_mean, 4)}")
  107.     print(f"var_x = mean((x-x̄)^2) = {fmt_comma(var_x, 4)}")
  108.     print(f"var_y = mean((y-ȳ)^2) = {fmt_comma(var_y, 4)}")
  109.     print(f"σx = sqrt(var_x) = {fmt_comma(sigma_x, 4)}")
  110.     print(f"σy = sqrt(var_y) = {fmt_comma(sigma_y, 4)}")
  111.     print(f"cov_xy = mean(xy) - x̄*ȳ = {fmt_comma(cov_xy, 4)}")
  112.  
  113.     if math.isclose(denom, 0.0, abs_tol=1e-15):
  114.         raise ZeroDivisionError("Неможливо обчислити r: σx*σy = 0 (нема розкиду даних).")
  115.  
  116.     r_xy = cov_xy / denom
  117.  
  118.     direction = "прямий" if r_xy > 0 else ("зворотний" if r_xy < 0 else "відсутній")
  119.  
  120.     print("\n--- 4) Коефіцієнт лінійної кореляції ---")
  121.     print(f"r_xy = cov_xy / (σx*σy) = {fmt_comma(r_xy, 6)}")
  122.     print(f"Напрямок зв'язку: {direction}")
  123.  
  124.     print("\n--- 5) Оцінка тісноти (таблиця) ---")
  125.     print_strength_table()
  126.     print(f"\nЗа отриманим r: {interpret_strength(r_xy)}")
  127.  
  128.     r_check = float(np.corrcoef(x, y)[0, 1])
  129.     delta = abs(r_xy - r_check)
  130.  
  131.     print("\n--- 6) Контроль (numpy.corrcoef) ---")
  132.     print(f"r_check = {fmt_comma(r_check, 6)}")
  133.     print(f"|Δ| = {delta:.2e}")
  134.  
  135.  
  136. if __name__ == "__main__":
  137.     main()
  138.  
Advertisement
Add Comment
Please, Sign In to add comment