/
urfu_itis_limits
/
code-review-101-SysOp
Обзор
Документация
Войти
/
urfu_itis_limits
/
code-review-101-SysOp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
assignment.py
162 строки
6 KB
SysOp
update assignment.py исправление замечаний
28 ноя 2025, 23:30
28 ноя 2025, 23:30
ed01648
Код
Авторство
О чём код?
""" Задание 5: Анализ датасета California Housing - ШАБЛОН Цель: Анализ стоимости жилья в Калифорнии - регрессионная задача ЗАДАЧИ: 1. Загрузить данные в load_data() 2. Вычислить статистику целевой переменной в target_analysis() 3. Вычислить статистику всех признаков в feature_statistics() 4. Создать гистограмму и KDE график в visualize_target() 5. Создать гистограммы всех признаков в visualize_features() 6. Создать scatter plots всех признаков vs целевой переменной в scatter_features_vs_target() 7. Вычислить и визуализировать корреляции в correlation_analysis() """ import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.datasets import fetch_california_housing plt.rcParams['font.sans-serif'] = ['DejaVu Sans'] plt.rcParams['axes.unicode_minus'] = False def load_data(): """Загрузить датасет и вернуть DataFrame""" data = fetch_california_housing(as_frame=True) return data.frame def target_analysis(df): """Анализ целевой переменной MedHouseVal""" y = df['MedHouseVal'] print("\nСтатистика целевой переменной:") print(f"Среднее: {y.mean():.4f}, Медиана: {y.median():.4f}") print(f"Стд. откл.: {y.std():.4f}") print(f"Мин: {y.min():.4f}, Макс: {y.max():.4f}") print(f"Квартили — 25%: {y.quantile(0.25):.4f}, 50%: {y.quantile(0.5):.4f}, 75%: {y.quantile(0.75):.4f}") def feature_statistics(df): """Статистика признаков + анализ выбросов (IQR)""" X = df.drop(columns=['MedHouseVal']) print("\nОбщая статистика признаков:") stats = X.describe().T[['mean', 'std', 'min', 'max']] print(stats.to_string(float_format="{:.4f}".format)) print("\nАнализ выбросов (метод IQR):") for col in X.columns: Q1 = X[col].quantile(0.25) Q3 = X[col].quantile(0.75) IQR = Q3 - Q1 lower_bound = Q1 - 1.5 * IQR upper_bound = Q3 + 1.5 * IQR n_outliers = ((X[col] < lower_bound) | (X[col] > upper_bound)).sum() pct = n_outliers / len(X) * 100 print(f"{col:12}: выбросов = {n_outliers:4} ({pct:5.2f}%)") def visualize_target(df): """Гистограмма и KDE для целевой переменной""" y = df['MedHouseVal'] mean_val = y.mean() fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) ax1.hist(y, bins=50, color='skyblue', edgecolor='black') ax1.axvline(mean_val, color='red', linestyle='--', label=f'Среднее = {mean_val:.2f}') ax1.set_title('Гистограмма MedHouseVal') ax1.legend() sns.kdeplot(y, ax=ax2, fill=True, color='orange') ax2.set_title('KDE-график MedHouseVal') plt.tight_layout() plt.savefig('05_housing_target_distribution.png', dpi=150) plt.close() def visualize_features(df): """Гистограммы всех признаков (2x4)""" X = df.drop(columns=['MedHouseVal']) cols = X.columns fig, axes = plt.subplots(2, 4, figsize=(16, 8)) axes = axes.flatten() for i, col in enumerate(cols): axes[i].hist(X[col], bins=30, color='lightgreen', edgecolor='black') axes[i].set_title(col) plt.tight_layout() plt.savefig('05_housing_features_distribution.png', dpi=150) plt.close() def scatter_features_vs_target(df): """Scatter plot: признаки vs MedHouseVal""" X = df.drop(columns=['MedHouseVal']) y = df['MedHouseVal'] cols = X.columns fig, axes = plt.subplots(2, 4, figsize=(16, 8)) axes = axes.flatten() for i, col in enumerate(cols): axes[i].scatter(X[col], y, alpha=0.5, s=1) axes[i].set_xlabel(col) axes[i].set_ylabel('MedHouseVal') plt.tight_layout() plt.savefig('05_housing_features_vs_target.png', dpi=150) plt.close() def correlation_analysis(df): """Корреляции с целевой переменной + тепловая карта всех признаков""" # Корреляции с MedHouseVal corr_with_target = df.corr()['MedHouseVal'].drop('MedHouseVal') print("\nКорреляции с MedHouseVal:") print(corr_with_target.to_string(float_format="{:.4f}".format)) # Горизонтальная диаграмма plt.figure(figsize=(8, 6)) corr_with_target.sort_values().plot(kind='barh', color='teal') plt.title('Корреляция признаков с MedHouseVal') plt.xlabel('Коэффициент корреляции') plt.tight_layout() plt.savefig('05_housing_correlation_bars.png', dpi=150) plt.close() # Тепловая карта всех корреляций plt.figure(figsize=(10, 8)) sns.heatmap(df.corr(), annot=True, fmt=".2f", cmap='coolwarm', square=True) plt.title('Матрица корреляций всех признаков') plt.tight_layout() plt.savefig('05_housing_correlation_heatmap.png', dpi=150) plt.close() def main(): print("=" * 60) print("ЗАДАНИЕ 5: EDA — CALIFORNIA HOUSING DATASET") print("=" * 60) df = load_data() print(f"\nДатасет загружен. Размер: {df.shape}") print("\nПервые 5 строк:") print(df.head()) target_analysis(df) feature_statistics(df) visualize_target(df) visualize_features(df) scatter_features_vs_target(df) correlation_analysis(df) print("\n" + "=" * 60) print("Анализ завершён!") print("=" * 60) if __name__ == "__main__": main()