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

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Меня зовут Слава Зеликовская, я работаю Data Scientist в компании ThredUP.

В этой статье я расскажу про 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.

👍НравитсяПонравилось1
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Без обид, но ценность этой статьи в 2021 году — ноль целых хрен десятых.
Вы б для приличия взяли б хотя бы кернел с Джулией и рассказали б о приемуществах и недостатках этого ЯП для анализа данных. Ну или там Pandas vs Dask vs Modin vs CuDF.

Я прошу прощения, а агрегатные функции это ж Numpy? Разве Дзен не говорит нам быть «as explicit as possible »? И ещё- в самом pandas вроде есть сумма и среднее ? Что по вашему мнению сложнее в освоении Numpy или Pandas?

я свого часу теж титаніковий датасет викоирстовував щоб з пандами розібратись — ось результат якщо кому треба.
github.com/...​Data-Science/pandas.ipynb

Код картинками це топчик. Можна відразу в інстаграм постити, там такий формат теж популярний.

p.s.: www.kaggle.com/...​xisbcook/titanic-tutorial

Можна розпізнавати картинки як тут:
dou.ua/forums/topic/30478

Думаєте що це такий прихований прийом для того щоб люди навчалися машин льорнінгу?

«Хотів скопіпастити код з туторіалу, довелося вивчити тензорфлов».

Ага, схоже це типовий шлях, ось подібне dou.ua/forums/topic/32156 тільки там замість коду розпізнаються лінки.

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

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

шото пошло не так

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

Я правильно понял, что тут ключевое слово — «Знакомство»?

Подписаться на комментарии