Учим робота готовить пиццу. Часть 1: Получаем данные
Не так давно, после завершения очередного конкурса на Kaggle — вдруг возникла идея попробовать сделать тестовое ML-приложение. Например, такое: "помоги роботу сделать пиццу".
Разумеется, основная цель этого ровно та же — изучение нового.
Захотелось разобраться, как работают генеративные нейронные сети (Generative Adversarial Networks — GAN).
Ключевой идеей было обучить GAN, который по выбранным ингредиентам сам собирает картинку пиццы.
Ну что ж, приступим.
НачалоРазумеется, для тренировки любого алгоритма машинного обучения, нам первым делом нужны данные. В нашем случае, вариантов не так много — либо находить готовый датасет, либо вытаскивать данные из интернета самостоятельно.
И тут я подумал — а почему бы не дёрнуть данные с сайта Додо-пиццы.
Я не имею никакого отношения к данной сети пиццерий. Честно говоря, даже их пицца мне не особенно нравится — тем более по цене (и размерам), в моём городе (Калининград) найдутся более привлекательные пиццерии.
Итак, в первом пункте плана действий появилось:
- получить с сайта нужные данные
Так как вся нужная нам информация доступна на сайте Додо-пиццы, применим так называемый парсинг сайтов (он же — 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 грамм, то для лучшего понимания — домножим их на массу пиццы.