Знакомство с Pandas на примере датасета «Титаник»

В этой статье я расскажу про Pandas — одну из основных библиотек Python для работы с данными.

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

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

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

Загрузка датасета

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

df = pd.read_csv('train.csv')

Общие характеристики датасета

Чтобы узнать размер данных (количество строк и столбцов), используем функцию df.shape.

Посмотрим, как выглядят данные, с которыми мы будем работать дальше.

df.head()

df.describe() показывает минимальное, максимальное значения, среднее и стандартное отклонение, размер датасета и квантили, исключая пропущенные значения.

Индексирование датасета

Индекс — это номер или адрес строки в датасете.

Даже при выборке подгруппы из датасета номера строк сохранятся.

Для дальнейшей работы с датасетом можно задать нумерацию индекса сначала.

Сортировка датасета

Индекс в исходный датасет уже отсортирован по возрастанию.

Можем отсортировать датасет по убыванию индекса.

Можем также отсортировать по колонке.

df = df.sort_values('Fare', ascending = True)

Изменение типа колонок

Не всегда подходящий тип колонок определился автоматически, тогда нам нужно его изменить. Например, колонка 'Pclass' принимает значение 1, 2, 3, хотя значение описывает класс каюты. Изменим тип данной колонки на категориальную:

df['Pclass'] = df['Pclass'].astype(str)

Фильтрация датасета

Рассмотрим несколько функций, которые нам помогут фильтровать и проверять данные.

df.iloc[1позволяетпосмотреть только на первую строку датасета.

Можно также фильтровать несколько строк и столбцов df.iloc[1:3, 0:4]]

Выберем всех людей в возрасте 26 лет:

df[df.Age < 26] 
df[df.Age > 26]

Аналогично можно посмотреть на тех, у кого возраст больше или меньше 26:

df[df.Age < 26] 
df[df.Age > 26]

Обработка пропущенных значений

Посмотрим, какие значения пропущены в Age с помощью функции pd.isna, которая проверяет, пропущено значение или нет.

Теперь посчитаем, сколько всего было пропущенных значений и сколько в среднем пропущенных значений в колонке Age:

np.sum(pd.isna(df.Age))
np.mean(pd.isna(df.Age))
Всего пропущенных значений Age:  177 
Доля пропущенных значений Age:  0.199

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

np.sum(pd.isna(df), axis = 0)

Группировка данных

Давайте посмотрим, сколько мужчин и женщин было на борту с помощью функции groupby.

Проверим, как отличается средний возраст мужчин и женщин.

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

Теперь можем сравнить, как отличаются средний возраст по полу и признаку выживания с помощью pd.pivot_table.

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

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

df.Age.plot.hist()

Количество пропущенных значений Cabin в разбиении по Pclass.

df['null_cabin'] = pd.isna(df.Cabin)
pd.pivot_table(df,
              index = 'Pclass',
              columns = ['null_cabin'],
              values = ['PassengerId'],
              aggfunc = {'PassengerId':'count'}
).plot(kind = 'bar')

Визуализация стоимости билетов Fare.

df = df.sort_values('Fare',ascending=True)
df.reset_index(drop = True, inplace=True)
df.Fare.plot.line()

Объединение двух датасетов

Обогащение датасета новыми данными. Для этого примера создадим 2 датасета:

df1 = df[['PassengerId', 'Pclass', 'Age']]
df2 = df[['PassengerId', 'Name', 'Sex']]

Свяжем два датасета по ключу 'PassengerId' с помощью функции pd.merge

df_merged = pd.merge(df1, df2, on = 'PassengerId', how = 'left')
df_merged.head()

Объединение одинаковых по структуре датасетов в один.

Для этого примера создадим 2 датасета

df1 = df[df.Age <= 26][['PassengerId', 'Pclass', 'Age']]
df2 = df[df.Age > 26][['PassengerId', 'Pclass', 'Age']]

Объединим два датасета с помощью функции append.

df_append = df1.append(df2)

В этой статье мы разобрали базовые функции и возможности Pandas:

  • Считывания файлов и базовые характеристики датасета.
  • Описательные статистики данных.
  • Индексирование и сортировка датасета.
  • Обработка пропущенных значений.
  • Операции выбора и обработки значений из датасета.
  • Группировка данных.
  • Визуализация данных.
  • Соединение нескольких датасетов.

Полезные ссылки

Ссылка на Colab notebook со всеми описанными функциями.

Официальная документация библиотеки Pandas.

Cheatlist от Datacamp.