Знакомство с Pandas на примере датасета «Титаник»
Меня зовут Слава Зеликовская, я работаю 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.
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів