/
Nick_Wern
/
Kursovaya1
Обзор
Документация
Войти
/
Nick_Wern
/
Kursovaya1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/script1.py
94 строки
5 KB
NickWern
upload
09 июн 2026, 10:10
09 июн 2026, 10:10
63300c2
Код
Авторство
О чём код?
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # Настройка визуального стиля графиков sns.set_theme(style="whitegrid") plt.rcParams['figure.figsize'] = (12, 7) # --------------------------------------------------------- # 1. ЗАГРУЗКА И ПРЕДОБРАБОТКА ДАННЫХ # --------------------------------------------------------- df = pd.read_csv('datasets/dataset1/dataset.csv', sep=';') # ТАБЛИЦА 1: Общий обзор данных print("--- ТАБЛИЦА 1: Структура данных (первые 5 строк) ---") print(df.head()) print("\n") # ТАБЛИЦА 2: Анализ пропущенных значений print("--- ТАБЛИЦА 2: Количество пропусков (NaN) по признакам ---") missing_values = df.isnull().sum() print(missing_values[missing_values > 0]) print("\n") # Заполнение пропусков медианными значениями для сохранения распределения median_apps = df['Number of Applications'].median() median_students = df['Number of Students'].median() df['Number of Applications'] = df['Number of Applications'].fillna(median_apps) df['Number of Students'] = df['Number of Students'].fillna(median_students) # Инженерия признаков: считаем конкурс (человек на место) # Используем .replace(0, 1), чтобы избежать ошибки деления на ноль df['Competition'] = df['Number of Applications'] / df['Number of Students'].replace(0, 1) # ТАБЛИЦА 3: Самые конкурентные направления print("--- ТАБЛИЦА 3: Топ-5 направлений по жесткости отбора (человек на место) ---") top_comp = df.groupby('Group of Professions')['Competition'].mean().sort_values(ascending=False).head(5) print(top_comp.round(2)) print("\n") # --------------------------------------------------------- # 2. ВИЗУАЛИЗАЦИЯ ИНФОРМАЦИИ ДЛЯ СТУДЕНТОВ # --------------------------------------------------------- # ГРАФИК 1: Общая динамика интереса и зачислений plt.figure() yearly_stats = df.groupby('Year')[['Number of Applications', 'Number of Students']].sum().reset_index() sns.lineplot(data=yearly_stats, x='Year', y='Number of Applications', marker='o', label='Подано заявлений') sns.lineplot(data=yearly_stats, x='Year', y='Number of Students', marker='s', label='Зачислено студентов') plt.title('График 1. Динамика поданных заявлений и зачислений (2014-2023)') plt.xlabel('Год') plt.ylabel('Суммарное количество') plt.legend() plt.tight_layout() plt.savefig('src/imgs1/fig1.png', dpi=150) # ГРАФИК 2: Доступность бюджетных и платных мест plt.figure() sns.barplot(data=df, x='Year', y='Number of Students', hue='Tuition fees', estimator=sum, errorbar=None, palette='mako') plt.title('График 2. Распределение зачисленных студентов: Бюджет vs Платное') plt.xlabel('Год') plt.ylabel('Количество студентов') plt.xticks(rotation=45) plt.tight_layout() plt.savefig('src/imgs1/fig2.png', dpi=150) # ГРАФИК 3: Популярность отраслей науки plt.figure() top_branches = df.groupby('Branches of Science')['Number of Students'].sum().sort_values(ascending=False).head(10) sns.barplot(x=top_branches.values, y=top_branches.index, palette='crest') plt.title('График 3. Топ-10 отраслей науки по количеству обучающихся') plt.xlabel('Общее количество студентов за все годы') plt.ylabel('Отрасль науки') plt.tight_layout() plt.savefig('src/imgs1/fig3.png', dpi=150) # ГРАФИК 4: Оценка сложности поступления по уровням образования plt.figure() sns.boxplot(data=df, x='Education level', y='Competition', palette='Set2') plt.title('График 4. Распределение конкурса (человек на место) по уровням образования') plt.xlabel('Уровень образования') plt.ylabel('Конкурс (человек на место)') plt.ylim(0, 50) # Ограничение оси Y для отсечения редких аномальных выбросов plt.tight_layout() plt.savefig('src/imgs1/fig4.png', dpi=150) # ГРАФИК 5: Взаимосвязь ключевых показателей plt.figure(figsize=(8, 6)) corr_matrix = df[['Year', 'Number of Applications', 'Number of Students', 'Competition']].corr() sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f", vmin=-1, vmax=1) plt.title('График 5. Корреляционная матрица показателей приема') plt.tight_layout() plt.savefig('src/imgs1/fig5.png', dpi=150)