/
Nik_voz
/
rgpu_python_analysis
Обзор
Документация
Войти
/
Nik_voz
/
rgpu_python_analysis
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
python_analysis/second_semestr/pract4-2.py
153 строки
4 KB
Nick-voz
another commit.
23 дек 2025, 17:37
23 дек 2025, 17:37
e0763c4
Код
Авторство
О чём код?
import os import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from constants import Columns from dotenv import load_dotenv load_dotenv() if (DATASET_PATH := os.environ.get("DATASET_PATH")) is None: raise RuntimeWarning("DATASET_PATH is not set in environment") data = pd.read_csv(DATASET_PATH, sep=";") num_cols = [ Columns.YEAR, Columns.COUNT_GRADUATE, Columns.PERCENT_EMPLOYED, Columns.AVERAGE_SALARY_FACT_AVG, Columns.AVERAGE_SALARY_FACT_MED, Columns.AVERAGE_SALARY_NORM_AVG, Columns.AVERAGE_SALARY_NORM_MED, Columns.AVERAGE_AGE, Columns.PERCENT_COMBINE_WORK_AND_STUDY, ] num_cols = [c for c in num_cols if c in data.columns] df_num = data[num_cols].copy() df_num = df_num.apply(pd.to_numeric, errors="coerce") corr = df_num.corr() plt.figure(figsize=(10, 8)) sns.heatmap( corr, annot=True, fmt=".2f", cmap="RdBu_r", vmin=-1, vmax=1, linewidths=0.5 ) plt.title("Матрица корреляций числовых признаков") plt.tight_layout() plt.show() salary_cols = [ Columns.AVERAGE_SALARY_FACT_AVG, Columns.AVERAGE_SALARY_NORM_AVG, Columns.AVERAGE_SALARY_NORM_MED, ] salary_cols = [c for c in salary_cols if c in df_num.columns] df_num["salary_sum_3"] = df_num[salary_cols].sum(axis=1, skipna=True) df_num["salary_mean_3"] = df_num[salary_cols].mean(axis=1, skipna=True) corr_updated = df_num.corr() plt.figure(figsize=(10, 8)) sns.heatmap( corr_updated, annot=True, fmt=".2f", cmap="RdBu_r", vmin=-1, vmax=1, linewidths=0.5, ) plt.title( "Матрица корреляций (с суммой и средним по трём зарплатным показателям)" ) plt.tight_layout() plt.show() pair_cols = [ Columns.AVERAGE_SALARY_NORM_AVG, Columns.PERCENT_EMPLOYED, Columns.AVERAGE_AGE, Columns.PERCENT_COMBINE_WORK_AND_STUDY, ] pair_cols = [c for c in pair_cols if c in df_num.columns] _ = sns.pairplot( df_num[pair_cols].dropna(), kind="scatter", plot_kws={"alpha": 0.3, "s": 10}, ) for ax in _.axes.flatten(): plt.setp(ax.get_xticklabels(), rotation=45, ha="right") plt.setp(ax.get_yticklabels(), rotation=45, ha="right") plt.suptitle("Парный график выбранных показателей", y=1) plt.show() x_col = ( Columns.PERCENT_EMPLOYED if Columns.PERCENT_EMPLOYED in df_num.columns else pair_cols[0] ) y_col = ( Columns.AVERAGE_SALARY_NORM_AVG if Columns.AVERAGE_SALARY_NORM_AVG in df_num.columns else pair_cols[0] ) plt.figure(figsize=(8, 6)) sns.regplot( x=df_num[x_col], y=df_num[y_col], scatter_kws={"alpha": 0.3, "s": 10}, line_kws={"color": "red"}, ) plt.xlabel(x_col) plt.ylabel(y_col) plt.title(f"Регрессия: {y_col} ~ {x_col}") plt.tight_layout() plt.show() dist_col = ( Columns.AVERAGE_SALARY_NORM_AVG if Columns.AVERAGE_SALARY_NORM_AVG in df_num.columns else salary_cols[0] ) plt.figure(figsize=(8, 5)) sns.histplot(df_num[dist_col].dropna(), bins=60, kde=True) plt.xlabel(dist_col) plt.title(f"Распределение {dist_col}") plt.tight_layout() plt.show() z_cols = [ Columns.AVERAGE_SALARY_NORM_AVG, Columns.PERCENT_EMPLOYED, Columns.AVERAGE_AGE, ] z_cols = [c for c in z_cols if c in df_num.columns] df_3d = df_num[z_cols].dropna() fig = plt.figure(figsize=(9, 7)) ax = fig.add_subplot(111, projection="3d") ax.scatter( df_3d[z_cols[0]], df_3d[z_cols[1]], df_3d[z_cols[2]], c=df_3d[z_cols[0]], cmap="viridis", s=8, alpha=0.6, ) ax.set_xlabel(z_cols[0]) ax.set_ylabel(z_cols[1]) ax.set_zlabel(z_cols[2]) ax.set_title("3D-диаграмма рассеивания") plt.tight_layout() plt.show()