/
urfu_itis_limits
/
code-review-101-anch
Обзор
Документация
Войти
/
urfu_itis_limits
/
code-review-101-anch
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
assignment.py
180 строк
6 KB
Анна Зенкина
update assignment.py
18 ноя 2025, 13:20
18 ноя 2025, 13:20
f459244
Код
Авторство
О чём код?
""" Задание 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 matplotlib.pyplot as plt import pandas as pd 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(): """Загрузить датасет California Housing и конвертировать в DataFrame""" california_housing = fetch_california_housing() df = pd.DataFrame( california_housing.data, columns=california_housing.feature_names ) df["MedHouseVal"] = california_housing.target return df def target_analysis(df): """Анализ целевой переменной (стоимость жилья)""" target = df["MedHouseVal"] print("\n=== СТАТИСТИКА ЦЕЛЕВОЙ ПЕРЕМЕННОЙ (MedHouseVal) ===") print(f"Среднее: {target.mean():.4f}") print(f"Медиана: {target.median():.4f}") print(f"Стандартное отклонение: {target.std():.4f}") print(f"Минимум: {target.min():.4f}") print(f"Максимум: {target.max():.4f}") print( f"Квартили: 25% = {target.quantile(0.25):.4f}, " f"50% = {target.quantile(0.50):.4f}, " f"75% = {target.quantile(0.75):.4f}" ) def feature_statistics(df): """Вычислить статистику по признакам""" features = df.drop("MedHouseVal", axis=1) print("\n=== СТАТИСТИКА ПРИЗНАКОВ ===") stats = pd.DataFrame({ "Среднее": features.mean(), "Стд_отклонение": features.std(), "Минимум": features.min(), "Максимум": features.max() }) print(stats.round(4)) def visualize_target(df): """Визуализировать распределение целевой переменной""" plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.hist( df["MedHouseVal"], bins=50, alpha=0.7, color="skyblue", edgecolor="black" ) plt.axvline( df["MedHouseVal"].mean(), color="red", linestyle="--", label=f'Среднее = {df["MedHouseVal"].mean():.2f}' ) plt.xlabel("MedHouseVal") plt.ylabel("Частота") plt.title("Гистограмма целевой переменной") plt.legend() plt.subplot(1, 2, 2) sns.kdeplot(df["MedHouseVal"], fill=True, color="lightcoral") plt.xlabel("MedHouseVal") plt.ylabel("Плотность") plt.title("KDE распределение целевой переменной") plt.tight_layout() plt.savefig("05_housing_target_distribution.png", dpi=300, bbox_inches="tight") plt.show() def visualize_features(df): """Визуализировать распределение признаков""" features = df.drop("MedHouseVal", axis=1) feature_names = features.columns plt.figure(figsize=(15, 8)) for i, feature in enumerate(feature_names): plt.subplot(2, 4, i + 1) plt.hist( features[feature], bins=30, alpha=0.7, color="lightgreen", edgecolor="black" ) plt.xlabel(feature) plt.ylabel("Частота") plt.title(f"Распределение {feature}") plt.tight_layout() plt.savefig("05_housing_features_distribution.png", dpi=300, bbox_inches="tight") plt.show() def scatter_features_vs_target(df): """Scatter plots признаков относительно целевой переменной""" features = df.drop("MedHouseVal", axis=1) feature_names = features.columns plt.figure(figsize=(15, 8)) for i, feature in enumerate(feature_names): plt.subplot(2, 4, i + 1) plt.scatter(features[feature], df["MedHouseVal"], alpha=0.5, s=1) plt.xlabel(feature) plt.ylabel("MedHouseVal") plt.title(f"{feature} vs MedHouseVal") plt.tight_layout() plt.savefig("05_housing_features_vs_target.png", dpi=300, bbox_inches="tight") plt.show() def correlation_analysis(df): """Анализ корреляций""" correlations = df.corr()["MedHouseVal"].drop("MedHouseVal") print("\n=== КОРРЕЛЯЦИИ С ЦЕЛЕВОЙ ПЕРЕМЕННОЙ ===") for feature, corr in correlations.items(): print(f"{feature}: {corr:.4f}") plt.figure(figsize=(10, 6)) correlations_sorted = correlations.abs().sort_values() colors = [ "green" if corr >= 0 else "red" for corr in correlations[correlations_sorted.index] ] plt.barh( correlations_sorted.index, correlations[correlations_sorted.index], color=colors, alpha=0.7 ) plt.xlabel("Корреляция с MedHouseVal") plt.title("Корреляция признаков с целевой переменной") plt.axvline(x=0, color="black", linestyle="-", alpha=0.3) plt.tight_layout() plt.savefig("05_housing_correlation_bars.png", dpi=300, bbox_inches="tight") plt.show() def main(): """Главная функция""" print("=" * 60) print("ЗАДАНИЕ 5: EXPLORATORY DATA ANALYSIS - 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()