Original size 1140x1600

Факторы учебной успеваемости: анализ поведенческих данных студентов

PROTECT STATUS: not protected
The project is taking part in the competition

Концепция

Для анализа был выбран датасет Student Performance с Kaggle. Он содержит информацию о результатах студентов по разным предметам, а также дополнительные факторы, которые могут влиять на успеваемость, такие как количество сна, внеучебная активность, предыдущие оценки и часы обучения.

big
Original size 1746x706

Тема интересна, так как позволяет выявить закономерности, влияющие на учебные результаты, и понять, какие факторы наиболее значимы для достижения высоких показателей и наконец понять сколько нужно спать и учиться, чтобы получать хорошие оценки.

big
Original size 1746x706

Использовались scatter plot, bar chart, boxplot и линейные графики, чтобы показать связи между часами обучения, сном, внеучебной активностью и предыдущими результатами с текущей успеваемостью. Такой подход позволяет изучать данные и объяснять закономерности визуально.

big
Original size 1746x1027

Для визуализации данных я сознательно выбрал тёмную цветовую схему с преобладанием глубокого синего фона и светлых акцентных элементов. Такой стиль отсылает к интерфейсам аналитических инструментов, дашбордов и научных визуализаций, где ключевая задача — удержать внимание пользователя на данных, а не на декоративных элементах.

Обработка данных

В начале работы я подключаю все необходимые библиотеки, которые понадобятся для анализа и визуализации данных.

import pandas as pd import matplotlib.pyplot as plt import numpy as np from matplotlib import font_manager, rcParams

После подключения библиотек я задаю единый визуальный стиль для всех графиков. Это важный шаг, так как консистентный стиль повышает наглядность и эстетичность визуализации. Добавляю кастомные цвета и моноширинный шрифт.

rcParams['font.family'] = 'monospace' rcParams['axes.unicode_minus'] = False

BLUE_BG = '#133C55' WHITE = '#F5F7DC' ACCENT = '#59A5D8' ACCENT2 = '#91E5F6'

plt.rcParams.update ({ 'figure.facecolor': BLUE_BG, 'axes.facecolor': BLUE_BG, 'axes.edgecolor': WHITE, 'axes.labelcolor': WHITE, 'xtick.color': WHITE, 'ytick.color': WHITE, 'text.color': WHITE, 'axes.titlecolor': WHITE, 'grid.color': WHITE, 'font.size': 11 })

Далее я загружаю датасет с успеваемостью студентов с помощью pandas.read_csv (). После загрузки я сразу выполняю первичный осмотр данных и преобразую категориальный столбец «Extracurricular Activities» в числовой формат:

df = pd.read_csv («/content/StudentPerformance.csv») df.head ()

df.info ()

df.describe ()

df['Extracurricular Activities'] = df['Extracurricular Activities'].map ({ 'Yes': 1, 'No': 0 })

Визуализация данных

Сначала я строю scatter plot, отображающий зависимость между часами обучения и показателем успеваемости. Этот график позволяет визуально выявить тренды: например, как увеличение времени, затраченного на обучение, влияет на итоговые результаты.

plt.figure (figsize=(15,10)) plt.scatter (df['Hours Studied'], df['Performance Index'], alpha=0.3) plt.title ('Зависимость успеваемости от часов обучения') plt.xlabel ('Часы обучения') plt.ylabel ('Показатель эффективности') plt.show ()

Почему scatter: он идеально подходит для отображения числовых данных двух переменных, чтобы оценить взаимосвязь, выявить выбросы и закономерности.

Original size 1240x857

Точечная диаграмма. Зависимость между часами обучения и показателем успеваемости.

Для оценки влияния сна на успеваемость я группирую студентов по количеству часов сна и вычисляем средний показатель эффективности в каждой группе, после чего строим столбчатую диаграмму.

sleep_perf = df.groupby ('Sleep Hours')['Performance Index'].mean () plt.figure (figsize=(15,10)) plt.bar (sleep_perf.index, sleep_perf.values) plt.title ('Средний результат в зависимости от количества сна') plt.xlabel ('Часы сна') plt.ylabel ('Средний Показатель эффективности') plt.show ()

Bar chart хорошо подходит для отображения агрегированных данных и позволяет быстро сравнить средние значения между категориями.

Original size 1231x857

Столбчатая диаграмма. Зависимость от количества сна.

Для анализа структуры данных я использую круговую диаграмму, чтобы показать долю студентов, участвующих и не участвующих во внеучебной деятельности.

plt.figure (figsize=(15,10))

activity_counts = ( df['Extracurricular Activities'] .value_counts () .sort_index () )

plt.figure (figsize=(15,10))

plt.pie ( activity_counts.values, labels=['Нет', 'Да'], autopct='%1.1f%%', startangle=90, colors=[ACCENT2, ACCENT], textprops={'color': WHITE, 'fontsize': 11} )

Вместе с круговой диаграммой я строю boxplot, который показывает распределение показателей успеваемости в зависимости от участия во внеучебной активности.

plt.title ('Доля студентов, участвующих во внеучебной деятельности') plt.show ()

plt.figure (figsize=(15,4)) df.boxplot (column='Performance Index', by='Extracurricular Activities') plt.title ('Влияние внеучебной активности на успеваемость') plt.suptitle ('') plt.xticks ([1,2], ['Нет', 'Да']) plt.xlabel ('Внеклассные активности') plt.ylabel ('Показатель эффективности') plt.show ()

0

Диаграмма и Boxplot.Доля студентов, участвующих во внеучебной деятельности и влияние внеучебной активности на успеваемость.

Здесь я снова использую scatter plot, чтобы проанализировать связь между предыдущими результатами студентов и их итоговой успеваемостью.

Этот график позволяет оценить наличие корреляции и понять, насколько прошлые достижения влияют на текущие результаты.

plt.figure (figsize=(15,10)) plt.scatter (df['Previous Scores'], df['Performance Index'], alpha=0.3) plt.title ('Связь предыдущих результатов с итоговой успеваемостью') plt.xlabel ('Предыдущие результаты') plt.ylabel ('Показатель эффективности') plt.show ()

activity_stats = ( df .groupby ('Extracurricular Activities')['Performance Index'] .agg (['mean', 'std']) .reset_index () )

activity_counts = ( df['Extracurricular Activities'] .value_counts () .sort_index () )

Original size 1240x857

Scatterplot.Связь предыдущих результатов с итоговой успеваемостью

Описание применения генеративной модели

Для своей работы я использовал Chat-GPT версии 5.0. Он помог мне кастомизировать цветовую палитру и подобрать нужный вариант шрифта.

Ссылка на модель: https://openai.com/ru-RU/gpt-5/

Список источников