Учим робота готовить пиццу. Часть 1: Получаем данные

Учим робота готовить пиццу. Часть 1: Получаем данные

Не так давно, после завершения очередного конкурса на Kaggle — вдруг возникла идея попробовать сделать тестовое ML-приложение. Например, такое: "помоги роботу сделать пиццу".

Разумеется, основная цель этого ровно та же — изучение нового.

Захотелось разобраться, как работают генеративные нейронные сети (Generative Adversarial Networks — GAN).

Ключевой идеей было обучить GAN, который по выбранным ингредиентам сам собирает картинку пиццы.

Ну что ж, приступим.

Начало

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

И тут я подумал — а почему бы не дёрнуть данные с сайта Додо-пиццы.

Я не имею никакого отношения к данной сети пиццерий. Честно говоря, даже их пицца мне не особенно нравится — тем более по цене (и размерам), в моём городе (Калининград) найдутся более привлекательные пиццерии.

Итак, в первом пункте плана действий появилось:

  1. получить с сайта нужные данные
Загрузка данных

Так как вся нужная нам информация доступна на сайте Додо-пиццы, применим так называемый парсинг сайтов (он же — Web Scraping).

И всего две библиотеки:

Открываем сайт додо-пиццы, щелкаем в браузере "Просмотреть код" и находим элемент с нужными данными.

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

Это окошко появляется в результате GET-запроса, который можно эмулировать, передав нужные заголовки:

в ответ получаем кусок html-кода, который уже можно распарсить.

Сразу же можно обратить внимание, что статический контент распространяется через CDN akamaihd.net

После непродолжительных эспериментов — получился скрипт dodo_scrapping.py, который получает с сайта додо-пиццы название пицц, их состав, а так же сохраняет в отдельные директории по три фотографии пицц.

На выходе работы скрипта получается несколько csv-файлов и директорий с фотографиями. Для этого выполняются следующие действия:

  • получение списка городов (на тот момент — 146)
  • получение списка пицц (для Города)
  • получение информации о пицце
  • загрузка фотографий пиццы

Информацию о пицце сохраняется в табличку вида: город, URL города, название, названиеENG, URL пиццы, содержимое, цена, калории, углеводы, белки, жиры, диаметр, вес

Что хорошо в программировании скриптов автоматизации — их можно запустить и откинувшись на списку кресла наблюдать за их работой.

На выходе получилось всего 20 пицц. На каждую пиццу получается по 3 картинки. Нас интересует только третья картинка, на которой есть вид пиццы сверху.

Разумеется, после получения картинок, их нужно дополнительно обработать — вырезать и отцентровать пиццу. Думаю, это не должно составить особых проблем, так как все картинки одинаковые — 710х380.

Обработка данных

После scraping-а сайта, получили привычные по kaggle — csv-файл с данными (и директории с картинками). Настала пора изучить пиццы.

Подключаем необходимые библиотеки.

city_name city_url pizza_name pizza_eng_name pizza_url pizza_contain pizza_price kiloCalories carbohydrates proteins fats size weight 0 Калининград /Kaliningrad Двойная пепперони double-pepperoni https://dodopizza.ru/Kaliningrad/Product/doubl. Томатный соус, двойная порция пепперони и увел. 395 257,52 26,04 10,77 12,11 25 470±50 1 Калининград /Kaliningrad Крэйзи пицца crazy-pizza https://dodopizza.ru/Kaliningrad/Product/crazy. Томатный соус, увеличенные порции цыпленка и п. 395 232,37 31,33 9,08 7,64 25 410±50 2 Калининград /Kaliningrad Дон Бекон pizza-don-bekon https://dodopizza.ru/Kaliningrad/Product/pizza. Томатный соус, бекон, пепперони, цыпленок, кра. 395 274 25,2 9,8 14,8 25 454±50 3 Калининград /Kaliningrad Грибы и ветчина gribvetchina https://dodopizza.ru/Kaliningrad/Product/gribv. Томатный соус, ветчина, шампиньоны, моцарелла 315 189 23,9 9,3 6,1 25 370±50 4 Калининград /Kaliningrad Пицца-пирог pizza-pirog https://dodopizza.ru/Kaliningrad/Product/pizza. Сгущенное молоко, брусника, ананасы 315 144,9 29,8 2,9 2,7 25 420±50

Приведём данные к более удобному виду.

city_name city_url pizza_name pizza_eng_name pizza_url pizza_contain pizza_price kiloCalories carbohydrates proteins fats size weight weight_err 0 Калининград /Kaliningrad Двойная пепперони double-pepperoni https://dodopizza.ru/Kaliningrad/Product/doubl. Томатный соус, двойная порция пепперони и увел. 395 257.519989 26.040001 10.77 12.11 25 470 50 1 Калининград /Kaliningrad Крэйзи пицца crazy-pizza https://dodopizza.ru/Kaliningrad/Product/crazy. Томатный соус, увеличенные порции цыпленка и п. 395 232.369995 31.330000 9.08 7.64 25 410 50 2 Калининград /Kaliningrad Дон Бекон pizza-don-bekon https://dodopizza.ru/Kaliningrad/Product/pizza. Томатный соус, бекон, пепперони, цыпленок, кра. 395 274.000000 25.200001 9.80 14.80 25 454 50 3 Калининград /Kaliningrad Грибы и ветчина gribvetchina https://dodopizza.ru/Kaliningrad/Product/gribv. Томатный соус, ветчина, шампиньоны, моцарелла 315 189.000000 23.900000 9.30 6.10 25 370 50 4 Калининград /Kaliningrad Пицца-пирог pizza-pirog https://dodopizza.ru/Kaliningrad/Product/pizza. Сгущенное молоко, брусника, ананасы 315 144.899994 29.799999 2.90 2.70 25 420 50

Учитывая, что пищевая ценность продукта приводится в расчёте на 100 грамм, то для лучшего понимания — домножим их на массу пиццы.

📎📎📎📎📎📎📎📎📎📎