Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
119 строки
4.3 KiB
Python
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: слабая связь") |