Использование библиотеки 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, эту библиотеку сначала надо импортировать — то есть загрузить её в наш проект, чтобы воспользоваться её преимуществами. Пишем в новой ячейке код и запускаем его на выполнение с помощью кнопки «Запустить» слева от ячейки:
Далее нам нужно прочитать файл с нашей Excel-таблицей и сохранить данные из него в отдельную переменную, с которой и будем работать.
Всегда оставляйте исходные данные нетронутыми.
Добавим новую ячейку с помощью кнопки «+ Код». Переменную назовём trips_df (trips — путешествия, а df — от dataframe).
В этой строчке мы записали в переменную trips_df таблицу, которую библиотека pandas c помощью метода read_excel () прочитала из файла trips_data.xlsx. Параметр index_col указали равным 0. Это означает, что индексной, то есть самой левой колонкой в таблице, где обычно идут номера строк, мы назначаем колонку с номером 0 из считываемого файла.
В программировании и data science принято, что нумерация очерёдности идёт не с единицы, а с нуля.
Введём и запустим следующий код:
Что мы сделали? Наша переменная trips_df имеет тип данных DataFrame. У каждого типа данных есть свои методы обращения с ними. Чтобы метод сработал, пишут его через точку от переменной, а в скобки методу передают подходящий параметр. В данном случае мы написали там 10 — и это означает, что метод .head () покажет нам первые десять строк, содержащиеся в таблице trips_df.
Метод .head () выводит голову таблицы. Есть аналогичный метод .tail () — по-английски «хвост». Он тоже выводит строки, но уже с конца таблицы.
Исследуем данные: методы и атрибуты
Кроме методов, у датафреймов есть неотъемлемые свойства, которые называются атрибутами. В отличие от методов, они вызываются без скобок в конце.
Как видим, можно посмотреть каждую колонку отдельно. И уже к этой колонке применить метод:
Вывод будет таким:
Метод .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, но при этом значения колонок 'city', 'vacation_preference', 'transport_preference' превратили в новые колонки.
В итоге у нас получилась таблица из 24 колонок. Выведем список только из их названий с помощью атрибута .columns:
Видим, что старые колонки дохода, возраста и количества членов семьи сохранились, а вместо категориальных признаков появилось много новых, числовых.
Итог: готовим данные, понятные машинам
С помощью библиотеки Pandas мы превратили сырую таблицу Excel, содержащую категориальные признаки, в датафрейм с числовыми данными, понятный для модели машинного обучения.
Исходная таблица с данными находится по этой ссылке, а ноутбук с кодом можно просмотреть здесь. Чтобы скопировать его себе на диск, воспользуйтесь главным меню Colab: «Файл → Создать копию на Диске».