Код
#статьи

Использование библиотеки Pandas: превращаем сырые данные в датафреймы

Всё ещё не знаете, как готовить данные? Тогда мы идём к вам.

 vlada_maestro / shutterstock

Типичная ситуация в работе дата-сайентиста: данные есть, но хранятся в таком виде, что модели машинного обучения их не поймут, — например, в таблице Excel.

Преобразуем эти данные в удобный для компьютеров формат с помощью популярной Python-библиотеки Pandas. Для этого:

  • Превратим таблицу Excel в датафрейм Pandas в бесплатном сервисе Google Colab;
  • Изучим данные с помощью атрибутов и методов .head (), .describe (), .info ();
  • Преобразуем нечисловые данные в числа, понятные компьютеру.

Pandas, без преувеличения, главная библиотека в Data Science: она предназначена для работы с данными в виде таблиц и рядов. Название Pandas происходит от сокращения panel data (англ. «панельные данные»). Это термин из социологии и эконометрики, означающий результаты серии наблюдений за одними и теми же объектами в определённый период.

Исходные данные: Excel

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

  • ежемесячный доход (salary);
  • родной город (city);
  • возраст (age);
  • предпочитаемый вид отпуска (vacation preference);
  • предпочитаемый вид транспорта (transport preference);
  • количество членов семьи (family members);
  • и, наконец, город, который турист в итоге выбрал для поездки (target).

Работать будем в бесплатном сервисе Google Colab, он позволяет писать и запускать код для обработки данных прямо в браузере, без установки дополнительных программ. Прочитайте нашу статью, чтобы узнать, как начать его использовать.

Данные, пригодные для работы: Pandas

Для того чтобы работать с Pandas, эту библиотеку сначала надо импортировать — то есть загрузить её в наш проект, чтобы воспользоваться её преимуществами. Пишем в новой ячейке код и запускаем его на выполнение с помощью кнопки «Запустить» слева от ячейки:

import pandas

Далее нам нужно прочитать файл с нашей Excel-таблицей и сохранить данные из него в отдельную переменную, с которой и будем работать.

Всегда оставляйте исходные данные нетронутыми.

Добавим новую ячейку с помощью кнопки «+ Код». Переменную назовём trips_df (trips — путешествия, а df — от dataframe).

trips_df = pandas.read_excel('trips_data.xlsx', index_col=0)

В этой строчке мы записали в переменную trips_df таблицу, которую библиотека pandas c помощью метода read_excel () прочитала из файла trips_data.xlsx. Параметр index_col указали равным 0. Это означает, что индексной, то есть самой левой колонкой в таблице, где обычно идут номера строк, мы назначаем колонку с номером 0 из считываемого файла.

В программировании и data science принято, что нумерация очерёдности идёт не с единицы, а с нуля.

Введём и запустим следующий код:

trips_df.head(10)

Что мы сделали? Наша переменная trips_df имеет тип данных DataFrame. У каждого типа данных есть свои методы обращения с ними. Чтобы метод сработал, пишут его через точку от переменной, а в скобки методу передают подходящий параметр. В данном случае мы написали там 10 — и это означает, что метод .head () покажет нам первые десять строк, содержащиеся в таблице trips_df.

Метод .head () выводит голову таблицы. Есть аналогичный метод .tail () — по-английски «хвост». Он тоже выводит строки, но уже с конца таблицы.

Исследуем данные: методы и атрибуты

Кроме методов, у датафреймов есть неотъемлемые свойства, которые называются атрибутами. В отличие от методов, они вызываются без скобок в конце.

trips_df.salary # выведется только колонка salary

Как видим, можно посмотреть каждую колонку отдельно. И уже к этой колонке применить метод:

trips_df.salary.describe() # описание данных из одной колонки

Вывод будет таким:

count 1000.000000
mean 111935.000000
std 54580.049073
min 0.000000
25% 68000.000000
50% 99000.000000
75% 161000.000000
max 250000.000000
Name: salary, dtype: float64

Метод .describe (), применённый к колонке salary таблицы trips_df, показал нам следующее.

count — количество строк: 1 000.

mean — средний доход составляет 111 935 рублей. Неплохо!

std — под этим сокращением скрыто так называемое стандартное (среднеквадратичное) отклонение, которое показывает величину разброса значений. В нашем случае оно довольно большое, почти 55 000 рублей. Это означает, что доходы у людей в таблице очень разные.

min — минимальное значение доходов из таблицы. Ноль значит, что есть как минимум один человек с нулевым доходом.

В математической статистике процентиль, или перцентиль (ударение на последний слог), — это, если по-простому, пара чисел. Первое из них — процентная доля тех значений рассматриваемой величины, которые не превышают второго числа. Например, фраза «двадцать пятый процентиль доходов туристов составляет 68 000 рублей в месяц» означает, что у 25% наших туристов доход не превышает этой суммы. А у остальных, что очевидно, доход больше.

25% — вот он, тот самый двадцать пятый процентиль. Часто его ещё называют «нижний квартиль».

50% — пятидесятый процентиль, или медиана. В примере она равна 99000, и это значит, что одна половина людей из таблицы получает меньше этой суммы, а другая — больше.

75% — семьдесят пятый процентиль, который также часто называют «верхний квартиль». Означает, что у 75% людей доход меньше 161 000 рублей, а у оставшихся 25% — больше.

max — здесь всё понятно. В нашей таблице есть как минимум один человек с доходом 250 000 рублей в месяц — наверняка это какой-нибудь дата-сайентист: -).

Name: salary, dtype: float64 — служебная информация: название колонки и тип данных в ней.

Методы .head (), .tail (), .describe (), .describe (include=’all’), .info (), а также атрибуты .dtypes, .columns — это первые команды, которые нужны для знакомства с новыми данными. Они помогают понять, что скрыто за цифрами и строками, и, как говорят, поймать инсайт.

Превращаем данные: переводим слова в числа

Колонка salary очень удобна с точки зрения машинного обучения, потому что содержит числа и ничего, кроме чисел. Но кроме неё в нашей таблице есть и непонятные для машины колонки с городами, видами отпуска, транспортными предпочтениями и целевым городом — всё это так называемые категориальные признаки.

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

Так, в колонке city у нас имеется 11 городов. Значит, к исходной таблице добавится 11 колонок с их названиями. Если какой-то турист, например, был из Ярославля, то в одной из новых колонок city_Ярославль у него будет стоять единица, а в других десяти «городовых» колонках — нули.

Процесс превращения слов в числа называется кодированием категориальных признаков. Способ, который мы применим, называется прямым кодированием, или, по-английски, one-hot encoding. Есть и другие, более изощрённые способы преобразования нечисловых колонок.

Точно так же мы поступим с колонками предпочтений видов отпуска и транспорта: если какому-то туристу больше нравится поезд, во вновь созданной колонке transport_preference_Поезд будет единица, а в других — нули.

Для прямого кодирования в Pandas имеется функция get_dummies ():

trips_df_2 = pandas.get_dummies(trips_df, columns=['city', 'vacation_preference', 'transport_preference'])

Что тут произошло? В новую переменную trips_df_2 с помощью Pandas-функции .get_dummies () мы положили содержимое нашей старой переменной trips_df, но при этом значения колонок 'city', 'vacation_preference', 'transport_preference' превратили в новые колонки.

В итоге у нас получилась таблица из 24 колонок. Выведем список только из их названий с помощью атрибута .columns:

trips_df_2.columns

Видим, что старые колонки дохода, возраста и количества членов семьи сохранились, а вместо категориальных признаков появилось много новых, числовых.

Итог: готовим данные, понятные машинам

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

Исходная таблица с данными находится по этой ссылке, а ноутбук с кодом можно просмотреть здесь. Чтобы скопировать его себе на диск, воспользуйтесь главным меню Colab: «Файл → Создать копию на Диске».

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована