Сегодня вашему вниманию представлена аналитика (исследование) алкогольной продукции сети магазинов «Лента» (далее - Лента), находящаяся в каталоге на официальном сайте компании.
Планирование, подготовка, выборка
Почему выбор пал на алкогольную продукцию и на эту компанию? Да очень всё просто - первое, что пришло в голову (да, такое бывает) и большой ассортимент данного сегмента. Думаю в дальнейшем будет аналитика продукции других компаний. Но вернёмся к нашим бутылкам элементам исследования. Предварительно изучив структуру самого сайта компании приходим к выводу, что каталог продукции динамичен в зависимости от места расположения объекта продаж и изменением ассортимента. Выборку было решено взять по г. Москва, в гипермаркетах. Конечно же не обладая точными данными ассортимента алкогольной продукции компании нельзя сказать, что она репрезентативная, но всё же полагаем, что всё ок. Изучив количество единиц продукции в каталогах на сайте по точкам продаж получаем, что в среднем одинаково, вотЪ.
Инструменты для аналитики
Как любой себя уважающий senior data analyst джун в нашем исследовании мы будем применять стандартные инструменты для этого - язык программирования python 3+, библиотеки pandas для анализа и обработки данных, библиотеки BeautifulSoup, request, csv, lxml для парсинга, библиотеки seaborn, matplotlib, plotly для визуализации результата, всё это находится в нашей любимой Anaconda, в которой JupyterLab и Jupyternotebook, плюс родные и добрые таблицы google sheets(возможно понадобятся) и конечно же не забудем про свой brain.
Получение данных для исследования
Данные мы будем получать конечно же с помощью нашего любимого автоматизированного процесса сбора данных (о как !) или более проще - парсинга (скрапинга). Парсинг будет осуществляться посредством скрипта на питОне (python). Для написания скрипта пришлось где-то почитать, где-то посмотреть, где-то «прихватить» (да простите меня товарищи). Код скрипта можно посмотреть тут.
Процесс парсинга
Итак, заходим на сайт подопытного объекта исследования и включаем в браузере режим разработчика, находим нужные нам классы и категории и прописываем (подставляем) их в коде. Кстати, у нас получилось 101 страница в каталоге. Запускаем процесс парсинга в Jupyter и ждём когда файл наполнится данными.
Процесс подготовки и обработки данных
Следующий шаг это открытие файла .csv в нашем сатурне джупИтире и краткая информация о самом датафрейме, для этого импортируем библиотеки, с запасом.
Как мы видим, у нас есть данные (числа) с пробелами. Поэтому, как завещал великий (ну почти) Карл Андерсон в своей книги “Аналитическая культура” нам нужны правильные данные, собранные правильным образом, в правильной форме, в правильном месте, в правильное время. Для этого применяем всю “мощь” библиотек в python для анализа. На самом деле основную работу сделал код скрипта парсинга, там был прописаны методы strip() и replace(), которые удалили лишние пробелы, переносы и символ рубля ₽.
Пробел в числах в поле price был идентифицирован как символ \xa0 - неразрывный пробел, элемент компьютерной кодировки текстов (подробнее тут). Далее с помощью метода replace() удаляем его и с помощью astype(float) меняем формат столбцов в float и у нас получается нормальный формат цены товара.
Процесс анализа данных
Далее с помощью describe() узнаем краткие описательные статистики. Как мы видим среднее значение равное 986.78 руб. в цене без скидки, медиана равна 631.59 руб.
Построим гистограмму c помощью библиотеки matplotlib и увидим распределение, в параметрах прологарифмируем переменную. Как мы видим на гистограмме основная цена на алкогольную продукцию в пределах до 2400 руб, есть много выбросов.
Для углубленного анализа построим график boxplot от библиотеки plotly. Теперь мы видим, что подавляющее значение выбросов начинается от 2420 руб. А самым большим выбросом оказался коньяк Hennessy XO за 16209 руб. С помощью метода sort_value() узнаем пятерку самого дорогого алкоголя в Ленте.
Напомню, что цены и ассортимент динамичны, поэтому всё может изменяться каждый день.
Благодарю за внимание, всем всего наилучшего, ваш konstatic.
UPDATE :)
По просьбе трудящихся добавим сортировку по виду продукции. Обычным sort_values() из pandas не получилось c кириллицей, было принято решение заменить ключевые слова продукта на english чтобы выделять из общей массы( если есть другие варианты, то пишите ;).
Kод
def category(row):
if 'Водка' in row ['product']:
return 'vodka'
elif 'Вино' in row ['product']:
return 'wine'
elif 'Пиво светлое' in row ['product']:
return 'beer light'
elif 'Напиток пивной' in row ['product']:
return 'beer drink'
elif 'Пиво темное' in row ['product']:
return 'beer dark'
elif 'Коньяк' in row ['product']:
return 'cognac'
elif 'Вино игристое' in row ['product']:
return 'sparkling wine'
elif 'Сидр' in row ['product']:
return 'sparkling wine'
elif 'cider' in row ['product']:
return 'sparkling wine'
elif 'Виски' in row ['product']:
return 'whiskey'
elif 'Шампанское' in row ['product']:
return 'champagne'
elif 'Джин' in row ['product']:
return 'champagne'
elif 'gin' in row ['product']:
return 'champagne'
elif 'Бальзам' in row ['product']:
return 'tincture'
elif 'Ликер' in row ['product']:
return 'liquor'
elif 'Ром' in row ['product']:
return 'rum'
elif 'Бренди' in row ['product']:
return 'brandy'
elif 'Напиток алкоольый' in row ['product']:
return 'alcoholic beverage'
elif 'Напиток виноградный' in row ['product']:
return 'grape drink'
elif 'Слабоалкогольный напиток' in row ['product']:
return 'slow-alcohol drink'
elif 'Вермут' in row ['product']:
return 'vermout'
elif 'Текила' in row ['product']:
return 'tequila'
lenta['category'] = lenta.apply(category, axis=1)
lenta.category.value_counts()
И теперь применив value_counts() получаем подсчет по виду продукции. Подавляющее большинство вида алкогольной продукции это вино.
И котэ :)