Исследуем данные с Pandas

Рассмотрим  ряд простых операций для исследования данных из следующей учебной  таблицы о студентах (успеваемость по предметам, пол, наличие обеда,  взята с курса “Введение в Data Science и машинное обучение” сайта  stepik.org):

Операции загрузки таблицы и выборки по значению поля

Отберем студентов, не прошедших тест (поле 'test preparation course').

Сначала загрузим таблицу:

stud = pd.read_csv('../data/students.csv')

Затем наберем команду:

stud[stud['test preparation course'] != 'completed']

Решим более сложную задачу - вычислим долю студентов, у которых в колонке lunch указано free/reduced:

Сначала получим представление таблицы, где stud.lunch=='free/reduced':

stud_part = stud[stud.lunch=='free/reduced']

Выведем соотношение строк, которое и будет равно искомой величине:

len(stud_part)/len(stud)

Отбор можно осуществить и с помощью оператора query. Например, извлечем студентов со стандартным ланчем следующей командой:

stud.query("lunch == 'standard'")

Операции выборки по нескольким условиям

Чтобы получить всех студенток с оценкой по чтению выше 50 можно воспользоваться следующей командой:

stud[(stud['reading score'] > 50) & (stud.gender == 'female')]

Теперь получим студентов, оценка за математику которых выше 60 и за чтение меньше либо равна 72:

stud[(stud['math score'] > 60) & (stud['reading score'] <=72)]

Чтобы  не возникло ошибки, каждое из условий берется в скобки и используются  логические операторы  - &  вместо and,  | вместо or. Это необходимо,  так как фильтрация происходит по массивам значений, а когда  используется and или or предполагается приведение объекта (в нашем  случае столбец) к одному значению True/False. Мы же хотим, чтобы  логические операции производились поэлементно.

Операции выборки из множества значений

Отберем студентов, уровень образования родителей которых бакалавр или магистр:

stud[stud['parental level of education'].isin(["bachelor's degree", "master's degree"])]

Получение описательных статистик

Для  получения среднего значения и дисперсии оценок по предметам у групп  студентов со стандартным или урезанным ланчем можно сгруппировать  значения по столбцу stud.lunch и вывести для столбцов оценок групповые среднее и дисперсию:

m_v  = stud[['math score', 'reading score','writing score']]\

.groupby(stud.lunch)\

.aggregate(['mean','var'])

В результате получена следующая таблица:

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