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: слабая связь")