CoderCastrov logo
CoderCastrov
Парсер данных

Анализ синтетических данных отелей в Испании

Анализ синтетических данных отелей в Испании
просмотров
7 мин чтение
#Парсер данных

Прикладная наука о данных

Как выглядит проект по парсингу?

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

Отказ от ответственности: Все данные в этой статье являются синтетическими и не являются реальными данными отелей. Ни один из этих отелей не существует, они были созданы автором с помощью отборочного сэмплирования.

Введение

Когда нам нужно больше данных, парсинг интернета может быть полезным для их сбора. Парсинг интернета сводится к доступу к веб-сайтам для сбора данных. В интернете доступно много данных, но так как они не представлены в табличном формате, мы не можем использовать их очень легко. Чтобы преобразовать данные в удобный вид, мы можем использовать "ботов", чтобы они за нас получали доступ к веб-сайтам и собирали необходимые данные, упорядочивая их в нужной нам схеме.

Я не буду приводить реальный пример проекта по парсингу, а просто опишу, как может выглядеть процесс парсинга.

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

В каждой итерации мы ищем конкретные места в HTML-коде веб-сайта, где закодирована нужная нам информация. Например, если нам нужна цена гостиницы, она всегда будет находиться в одном и том же месте в каждом блоке гостиницы, поэтому мы можем просто искать ее для каждой гостиницы. На изображении выше вы можете увидеть поля, которые вам может быть интересно собрать для каждой гостиницы.

Парсинг данных

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

Еще один основной недостаток парсинга - это политика защиты веб-сайтов. Если вы создаете своего собственного бота, то сложно знать, какая максимальная скорость обновления веб-сайта позволит вам получить нужные данные. Установка слишком высокой скорости может привести к блокировке вашего доступа к сайту, а слишком низкая скорость приведет к очень медленному процессу.

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

Процесс парсинга

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

Давайте рассмотрим каждый шаг в блок-схеме:

Информация о каждом отеле

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

Закрытие карты

После нажатия на отель появляется карта, мы можем указать боту, чтобы он нажал на крестик, чтобы закрыть карту и получить доступ к адресу отеля.

Получение адреса отеля

После закрытия карты становится доступен адрес отеля. Адрес будет полезен при анализе данных об отеле.

Пост-обработка

Post-processed synthetic Hotel data

Парсинг данных практически всегда требует некоторой пост-обработки. Столбцы могут быть в неправильном формате или им требуется другая обработка.

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

Raw Data vs Processed Data

Первые три переменные (Цена, количество отзывов и расстояние от центра) просто требуют изменения строк до получения числа, а затем преобразования числа в целое или число с плавающей запятой.

Последняя переменная намного сложнее. Адрес представлен в виде строки, и мы ищем координаты отеля. Для выполнения этого преобразования можно использовать API Google Maps в Python.

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

Get Latitude and Longitude from a set addresses

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

Анализ отелей

Я провел анализ синтетических данных об отелях из двух городов в Испании. Первым городом, который я рассмотрел, был Бильбао, мой родной город.

Анализ — Синтетические отели Бильбао

Сначала я хотел проанализировать корреляции в данных. Меня интересует, есть ли какие-либо характеристики отелей, которые сильно влияют на цену, например.

Для анализа корреляций я начал с удаления некоторых выбросов. Я удалил их только для анализа корреляции и оставил их для остальной части.

Я удалил выбросы, используя пороги, основанные на межквартильном размахе (IQR). Я считал выбросами точки, которые не находились между Q1 - 1,5 IQR и Q3 + 1,5 IQR. Это проиллюстрировано на графиках ящиков выше. Все точки за пределами усов были удалены.

После удаления некоторых выбросов с использованием IQR я могу построить линейную корреляцию между характеристиками отелей в Бильбао. Как оказалось, средний рейтинг отзывов (оценка по шкале от 1 до 10) имеет сильную отрицательную корреляцию с расстоянием от центра. Это означает, что отели, ближе к центру, в среднем имели более высокий рейтинг.

Мы видим, что существует сильная отрицательная корреляция между средним рейтингом и расстоянием до центра отеля. Также есть несколько кластеров отелей, это просто из-за того, как я сгенерировал данные.

На графике выше показаны цены на отели в разных частях Бильбао. Отели разделены на 5 локаций. В каждой локации цены сильно варьируются. В остальной части анализа я объединил локации "Бильбао", "Центр города" и "Энсанче" в одну для упрощения.

Последнее, что я хотел сделать, это показать отели на карте (вот почему мне понадобились широта и долгота). Я сделал это с помощью API Google Maps на Python. С его помощью и координатами отелей я смог показать все отели на карте.

Карта нарисована с помощью библиотеки под названием Bokeh, и она интерактивна в Python, вы можете навести курсор на каждый отель, и появится всплывающая подсказка с информацией о нем, такой как цена и местоположение.

Анализ — Отели Бенидорма

Я провел аналогичный анализ для отелей в Бенидорме. Этот город имеет пляж и пользуется популярностью у британцев. Данные об отелях здесь должны быть интересными.

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

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

Заключение

В этой статье я показал, как может выглядеть алгоритм для парсинга веб-сайтов. Я проанализировал данные вымышленных отелей в двух городах Испании. При работе с проектами с необработанными данными важна постобработка. В статье я рассмотрел, что может включать в себя постобработка и как извлечь географические координаты из адресов отелей и отобразить их на картах Google.

Поддержите меня 👏

Надеюсь, это помогло вам, если вам понравилось, вы можете подписаться на меня!

Вы также можете стать пользователем Medium** **по моей реферальной ссылке, получить доступ ко всем моим статьям и многому другому: https://diegounzuetaruedas.medium.com/membership


Другие статьи, которые вам могут понравиться

Использование искусственного интеллекта для обнаружения мошенничества

Что такое парсер и как он работает