Slickdeals.com - популярный сайт со скидками и купонами. Я покажу парсинг веб-страниц и проведу анализ данных с помощью набора данных Slickdeals.

Людям нравится экономить на покупках. Эти данные о сделках представляют собой ценные данные о поведении пользователей, из которых можно получить интересные вопросы и ответы. Slickdeals.com - один из популярных сайтов со скидками и купонами. Slickdeals на главной странице - это сделки, рекомендованные участниками сообщества или редакторами Slickdeals за последние 24 часа. Объем предложений охватывает множество категорий, а цены варьируются от бесплатных вещей до тысяч долларов.

В этой статье мы собираемся изучить набор данных от Slickdeals и выполнить анализ данных с помощью Pandas и Plotly Express. Я надеюсь, что эта статья может предоставить несколько интересных примеров сбора необработанных данных, а также некоторые идеи о том, как использовать Pandas и Plotly Express для выполнения анализа и визуализации данных.

Сбор данных

Как гуру данных, нам нужны данные для работы. Одна из сложных задач при выполнении любого типа веб-анализа - это время. Поскольку доступные данные для любого веб-сайта являются только текущими, трудно отследить, что произошло раньше, или выполнить какой-либо анализ путешествий во времени. Например, если на домашней странице Slickdeals мы увидели популярную сделку, получившую 46 отметок Нравится, у нас нет никаких представлений о том, как быстро она здесь продвигается. В этом случае для сбора данных для этой цели очень полезен инструмент для очистки веб-страниц. Подробности описаны в одной из статей Как определить лучшие сделки с помощью веб-скрапинга.

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

Анализ и очистка данных

После сбора данных из Интернета в течение некоторого времени мы находимся на этапе синтаксического анализа и очистки. Здесь мы добавили необработанные данные с именем столбца и изменили формат столбца даты и времени со строкового на формат даты. Удобная вещь, которую pandas упрощает, - это read_csv функция, мы можем получать данные прямо из Интернета и конвертировать их в файл CSV.

url=”https://raw.githubusercontent.com/ChengzhiZhao/jupyter-notebooks/master/slickdeals_data_file.csv"
df=pd.read_csv(url,header=None,names=['datetime','store','title','item_url','deal_price','original_price', ‘like’, ‘comments’])
df[‘datetime’] = pd.to_datetime(df[‘datetime’])

Анализ собранных данных

Что такое лучшая сделка?

По этому набору данных Slickdeals можно задать несколько интересных вопросов. Один из вопросов: «Какая сделка самая популярная среди сделок на главной странице?». Чтобы найти ответ на этот вопрос, из набора данных Slickdeal мы можем сравнить, сколько раз сделка появляется на главной странице Slickdeals. Поскольку сканирование веб-страниц происходит каждые 15 минут, чем больше времени он отображается, тем выше вероятность, что этот элемент станет самым популярным.

Затем мы могли бы использовать следующий код для группировки по всем заголовкам и выполнения подсчета, а затем отсортировать подсчет в порядке убывания, сортировка здесь гарантирует, что Plotly Express будет отображать строки по порядку.

frequency_frontdeal = df.groupby(['title'])['title'].agg(['count']).reset_index(drop=False).sort_values(by=['count'],ascending=False)

Чтобы визуализировать это, мы можем использовать Plotly Express, чтобы создать красивую гистограмму для 20 лучших сделок.

fig = px.bar(frequency_frontdeal.head(20), x=’title’, y=’count’)
fig.show()

Судя по приведенному выше результату, Apple AirPods Pro следует признать самой выгодной сделкой за последние две недели на главной странице. Но считали ли мы дубликаты? Об этом мы узнаем позже.

Как выглядит тренд для максимальной сделки?

Поскольку Apple AirPods Pro - это единственная сделка, мы выберем ее для дальнейшего анализа, а теперь давайте углубимся и исследуем, как выглядит тенденция в этом случае. Чтобы получить лучшее представление о популярности этой сделки, одним из показателей является количество людей, нажимающих кнопку Нравится. Slickdeals потенциально может использовать кнопку Нравится в качестве одной из функций для рекомендации. Изучение количества лайков, увеличивающихся по дате и часу, может быть захватывающим.

airpod = df[df[‘title’]==’Apple AirPods Pro w/ Wireless Charging Case’].sort_values(by=[‘like’])
fig = px.line(airpod, x=’datetime’, y=’like’)
fig.show()

Однако после нанесения данных на диаграмму диаграмма выглядит странно, мы ожидали идеальной кривой, указывающей на увеличение, но диаграмма выше выглядит так, как будто число отскакивает назад и усиливается. Кажется, это начальная точка популярности, и мы отследили две точки данных. Итак, вопрос: «Есть ли повторяющиеся данные?»

Ответ - «Да». Причина в том, что у Slickdeals есть две сделки из разных магазинов, но с одинаковым названием. Мы видим, что Verizon Wireless впервые заключила эту сделку на первой странице 17 апреля. Несколько дней спустя Google Покупки догнали и также разместили на первой странице в течение определенного периода. Затем пошли Google Покупки. Неясно, был ли алгоритм, с помощью которого Slickdeal выполнял такие процессы дедупликации, как этот, для определения приоритета первой сделки, или одна из сделок просто проиграла конкуренцию. Но из диаграммы ниже видно, что сделка Verizon длится дольше и популярна. Чтобы проверить наше предположение, мы можем показать оба магазина на линейной диаграмме, color - это параметр, который мы можем установить для разделения данных для отображения в разных группах.

airpod.groupby('store')['store'].count()
# store
# Google Shopping 96
# Verizon Wireless 473
# With store
fig = px.line(airpod, x='datetime', y='like',color='store')
fig.show()

Есть ли корреляция между лайками и комментариями для лучших предложений?

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

fig = px.line(transformed_top10_df, x=’datetime’, y=’count’, color=’type’,facet_row=”title”)
fig.show()

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

Полный код

Последняя мысль

Мы можем выполнить больший анализ и собрать больше полей с помощью программы парсинга веб-страниц. Сбор данных из Интернета для анализа легко и недорого настроить. Однако для сбора данных для подробного анализа потребуется некоторое время. Мы можем настроить инструмент для очистки веб-страниц на Raspberry Pi и собирать данные. Это решение более гибкое, чем покупка данных у сторонних поставщиков. В этой статье показано, как легко анализировать данные, которые мы извлекли из Интернета, и выполнять анализ с помощью Pandas и Plotly Express, я надеюсь, что это демонстрирует другой подход к сбору и анализу данных.