2024-11-08 13:47:36 +03:00

152 KiB
Raw Blame History

Лабораторная работа №3

Набор данных Students Performance in Exams (Успеваемость студентов на экзаменах)

Выгрузка данных из CSV файла в датафрейм

In [9]:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# Загрузка данных
df = pd.read_csv("..//..//static//csv//StudentsPerformance.csv")

# Вывод колонок
print(df.columns)

print()

df.info()
Index(['gender', 'race/ethnicity', 'parental level of education', 'lunch',
       'test preparation course', 'math score', 'reading score',
       'writing score'],
      dtype='object')

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
 #   Column                       Non-Null Count  Dtype 
---  ------                       --------------  ----- 
 0   gender                       1000 non-null   object
 1   race/ethnicity               1000 non-null   object
 2   parental level of education  1000 non-null   object
 3   lunch                        1000 non-null   object
 4   test preparation course      1000 non-null   object
 5   math score                   1000 non-null   int64 
 6   reading score                1000 non-null   int64 
 7   writing score                1000 non-null   int64 
dtypes: int64(3), object(5)
memory usage: 62.6+ KB

Описание набора

Контекст Оценки, полученные студентами

Содержание Этот набор данных состоит из оценок, полученных учащимися по различным предметам.

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

In [10]:
# Вывод столбцов
df.head()
Out[10]:
gender race/ethnicity parental level of education lunch test preparation course math score reading score writing score
0 female group B bachelor's degree standard none 72 72 74
1 female group C some college standard completed 69 90 88
2 female group B master's degree standard none 90 95 93
3 male group A associate's degree free/reduced none 47 57 44
4 male group C some college standard none 76 78 75
In [11]:
# Краткая статистическая сводка для данных:
df.describe()
Out[11]:
math score reading score writing score
count 1000.00000 1000.000000 1000.000000
mean 66.08900 69.169000 68.054000
std 15.16308 14.600192 15.195657
min 0.00000 17.000000 10.000000
25% 57.00000 59.000000 57.750000
50% 66.00000 70.000000 69.000000
75% 77.00000 79.000000 79.000000
max 100.00000 100.000000 100.000000

Анализ содержимого

Объекты наблюдения: студенты, участвующие в экзаменах.

Атрибуты объектов:

gender — пол: определяет гендерную принадлежность студента (мужской, женский).
race/ethnicity — этническая принадлежность: группа, к которой относится студент (например, различные расовые/этнические категории).
parental level of education — уровень образования родителей(например, среднее образование, высшее образование и т.д.).
lunch — тип обеда: информация о том, получает ли студент бесплатный или платный обед.
test preparation course — курс подготовки к тесту math score — результаты экзаменов по математике. reading score — результаты экзаменов по чтению. writing score — результаты экзаменов по письму.

Бизнес-цель

  1. Анализ факторов, влияющих на успеваемость студентов:

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

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

  2. Прогнозирование успеваемости студентов

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

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

Техническая цель

  1. Разработка системы анализа факторов успеваемости студентов:

    Цель: Создать аналитическую платформу, которая будет собирать, обрабатывать и визуализировать данные о студентах, включая их оценки и соответствующие факторы (пол, этническая принадлежность, уровень образования родителей, тип обеда, наличие подготовительных курсов).

  2. Создание модели прогнозирования успеваемости студентов:

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

Анализ данных

In [12]:
# Проверка на пропущенные данные
df.isnull().sum()
Out[12]:
gender                         0
race/ethnicity                 0
parental level of education    0
lunch                          0
test preparation course        0
math score                     0
reading score                  0
writing score                  0
dtype: int64

Нет пропущенных данных

gender — пол: определяет гендерную принадлежность студента (мужской, женский).
race/ethnicity — этническая принадлежность: группа, к которой относится студент (например, различные расовые/этнические категории).
parental level of education — уровень образования родителей(например, среднее образование, высшее образование и т.д.).
lunch — тип обеда: информация о том, получает ли студент бесплатный или платный обед.
test preparation course — курс подготовки к тесту math score — результаты экзаменов по математике. reading score — результаты экзаменов по чтению. writing score — результаты экзаменов по письму.

In [18]:
# Построим графики boxplot для обнаружения выбросов по каждой характеристике
plt.figure(figsize=(10, 10))

# Создание boxplot
for i, column in enumerate(['gender', 'race/ethnicity','parental level of education','lunch','test preparation course','math score','reading score','writing score'], 1):
    plt.subplot(8, 3, i)
    sns.boxplot(x=df[column])
    plt.title(f"Boxplot для {column}")
    
plt.tight_layout()
plt.show()
No description has been provided for this image

Попробуем решить устранить проблему выбросов для writing score и reading score и math score. Используется метод усреднения данных для устранения выбросов.

In [ ]:

Связи между объектами:

  1. Влияние атрибутов на успеваемость: Анализ данных покажет, как каждый из атрибутов (пол, этническая принадлежность, уровень образования родителей, тип обеда, курс подготовки) влияет на оценки студентов, что поможет выявить ключевые факторы, способствующие или препятствующие успеваемости.
  1. Корреляция между результатами экзаменов: Можно исследовать взаимосвязь между оценками по математике, чтению и письму, чтобы понять, например, влияет ли высокая успеваемость в одном предмете на другие.
In [ ]:

  1. Группировка по характеристикам: Студенты могут быть сгруппированы по различным признакам (например, пол, уровень образования родителей) для анализа различий в успеваемости и выявления возможных неравенств в образовательных возможностях.
In [ ]:

  1. Предсказательные связи: Используя модель прогнозирования успеваемости, можно будет установить, какие комбинации атрибутов (например, пол + уровень образования родителей + участие в курсах подготовки) наиболее предрасполагают к высокому или низкому результату, что позволит образовательным учреждениям эффективно направлять ресурсы на поддержку студентов с высоким риском неуспеха.

Данная гистограмма в диапазоне с 10 по 51 строки отображает: На оси X значения оценок по математике, разбитые на 100 интервалов. На оси Y будет указано количество записей (частота) в каждом из этих интервалов. Анализируя гистограмму "math score", можно сделать выводы о том, как распределяются оценки. Например, оценку 70 имеет 4 человека, а оценку 18 всего 1 человек из этого диапазона.

In [14]:
df.iloc[10:51].plot.hist(column=["math score"], bins=100)
Out[14]:
<Axes: ylabel='Frequency'>
No description has been provided for this image

Данная гистограмма отображает прцоентное соотношение мужчин и женщин. Что позволяет сделать вывод о том, что женщин среди студентов больше, чем мужчин.

In [15]:
import matplotlib.pyplot as plt  

labels = 'Женщины', 'Мужчины'
sizes = [len(df[df['gender']== 'female']),
         len(df[df['gender']== 'male'])]

plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.show()
No description has been provided for this image

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

In [16]:
plot = df.groupby(["race/ethnicity", "test preparation course"]).size().unstack().plot.bar(color=["pink", "green"])
plot.legend(["Прошёл", "Не прошёл"])
Out[16]:
<matplotlib.legend.Legend at 0x20a9f46a900>
No description has been provided for this image