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

119 строки
4.3 KiB
Python

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.preprocessing import StandardScaler
# Загрузка датасета MLB
mlb_data = pd.read_csv('SOCR_Data_MLB_HeightsWeights.txt', sep='\t')
mlb_data.columns = ['Name', 'Team', 'Position', 'Height', 'Weight', 'Age']
# Создаем 3D визуализацию
fig = plt.figure(figsize=(10, 7))
ax = plt.axes(projection='3d')
# Простая scatter plot без разбивки по позициям
ax.scatter3D(mlb_data['Height'], mlb_data['Weight'], mlb_data['Age'])
ax.set_title('3D Scatter Plot: MLB Players')
ax.set_xlabel('Height (inches)')
ax.set_ylabel('Weight (pounds)')
ax.set_zlabel('Age (years)')
plt.show()
# ТЕПЛОВЫЕ КАРТЫ
# Функция для вычисления матрицы частных корреляций
def partial_correlation_matrix(df):
"""
Вычисляет матрицу частных корреляций
"""
# Вычисляем матрицу ковариаций
cov_matrix = np.cov(df.T)
# Вычисляем обратную матрицу ковариаций
try:
inv_cov_matrix = np.linalg.inv(cov_matrix)
except np.linalg.LinAlgError:
# Если матрица вырождена, используем псевдообратную
inv_cov_matrix = np.linalg.pinv(cov_matrix)
# Вычисляем частные корреляции
n_features = inv_cov_matrix.shape[0]
partial_corr_matrix = np.zeros((n_features, n_features))
for i in range(n_features):
for j in range(n_features):
partial_corr_matrix[i, j] = -inv_cov_matrix[i, j] / np.sqrt(inv_cov_matrix[i, i] * inv_cov_matrix[j, j])
# Диагональные элементы устанавливаем в 1
np.fill_diagonal(partial_corr_matrix, 1)
return partial_corr_matrix
# Создаем фигуру для тепловых карт
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))
# 1. Тепловая карта парных коэффициентов корреляции
numeric_data = mlb_data[['Height', 'Weight', 'Age']]
correlation_matrix = numeric_data.corr()
sns.heatmap(correlation_matrix,
annot=True,
cmap='coolwarm',
center=0,
vmin=-1,
vmax=1,
square=True,
fmt='.2f',
cbar_kws={'label': 'Correlation Coefficient'},
ax=ax1)
ax1.set_title('Тепловая карта парных коэффициентов корреляции\n(Pearson Correlation)')
# 2. Тепловая карта частных коэффициентов корреляции
# Стандартизация данных для частных корреляций
scaler = StandardScaler()
data_scaled = scaler.fit_transform(numeric_data)
# Вычисляем матрицу частных корреляций
partial_corr_matrix = partial_correlation_matrix(data_scaled)
partial_corr_df = pd.DataFrame(partial_corr_matrix,
index=numeric_data.columns,
columns=numeric_data.columns)
sns.heatmap(partial_corr_df,
annot=True,
cmap='coolwarm',
center=0,
vmin=-1,
vmax=1,
square=True,
fmt='.2f',
cbar_kws={'label': 'Partial Correlation Coefficient'},
ax=ax2)
ax2.set_title('Тепловая карта частных коэффициентов корреляции\n(Partial Correlation)')
plt.tight_layout()
plt.show()
# Вывод числовых значений для анализа
print("=" * 60)
print("АНАЛИЗ КОРРЕЛЯЦИЙ MLB ДАННЫХ")
print("=" * 60)
print("\nПАРНЫЕ КОРРЕЛЯЦИИ (Pearson):")
print(correlation_matrix.round(3))
print("\nЧАСТНЫЕ КОРРЕЛЯЦИИ:")
print(partial_corr_df.round(3))
print("\nИНТЕРПРЕТАЦИЯ:")
print("- Положительные значения: прямая связь между признаками")
print("- Отрицательные значения: обратная связь между признаками")
print("- Близкие к 1 или -1: сильная связь")
print("- Близкие к 0: слабая связь")