Парсинг веб-страниц с помощью BeautifulSoap, API Foursquare, карты Folium, Geocoder, Matplotlib, K-Means и т. д.

В качестве финального задания Applied Data Science Capstone, который является частью серии курсов IBM Data Science на Coursera, от нас требовалось выполнить реальный проект, чтобы мы могли получить представление о том, чем специалисты по данным занимаются в реальной жизни. Мы могли свободно выбирать идею для нашего проекта, если она соответствовала требованиям, а именно использовать данные о местоположении Foursquare API для исследования. Для этого индивидуального проекта я предсказываю лучшее место для строительства отеля на Бали. Ссылки на подробные коды и полный отчет будут прикреплены в конце этой статьи.

Введение

Фон

Бали — одна из 34 провинций Индонезии, которая славится своими прекрасными пляжами. Неудивительно, что Бали становится самым посещаемым местом в Индонезии туристами, как местными, так и иностранными. Его красивая природа, особенно пляжи, привлечет любого, кто ее увидит. Многие туристы остаются здесь надолго, чтобы насладиться природой. Даже есть некоторые богатые люди, которые намеренно покупают дом на Бали, чтобы обеспечить себе жилье, когда они и их семьи отдыхают на Бали. Из вышеприведенного описания можно предположить, что наиболее востребованным объектом туристической дестинации является место для проживания. В рамках этого проекта будут изучены некоторые районы Бали, особенно Южный Бали, где много туристических достопримечательностей, чтобы предсказать лучшее место для строительства нового отеля для размещения туристов.

Бизнес-проблема

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

Целевая аудитория

Этот проект будет специально предназначен для заинтересованных сторон, заинтересованных в открытии отеля на юге Бали, Индонезия.

Описание данных

Данные, необходимые для этого исследования, представляют собой список районов в провинции Бали, Индонезия. Его можно найти в Википедии по следующей ссылке: https://en.wikipedia.org/wiki/Kecamatans_of_Bali. Кекаматан на индонезийском языке означает район. Статьи в Википедии могут быть написаны кем угодно, так что могла случиться ошибка. Поэтому для проверки данных я использую PDF-файл с правительственного сайта Индонезии. Поскольку я носитель индонезийского языка, мне легко проверить данные, полученные на местном языке. Файл для проверки находится здесь.

Методология

Этапы этого проекта начинаются с веб-скрапинга для получения данных из Интернета, затем подготовки данных, подключения к Foursquare, анализа данных и кластеризации. Для этого проекта я собираюсь исследовать центры районов, а также пляжи. Таким образом, его могут использовать заинтересованные стороны, которые хотели бы построить отель либо прямо на юге Бали, либо конкретно рядом с пляжем. Детали каждого этапа будут рассмотрены далее.

Результат

Подготовка данных

Во-первых, я делаю веб-скрапинг, чтобы получить список районов на Бали, используя пакет BeautifulSoup в Python, и сохранить его в файл CSV. После создания CSV-файла следующим шагом будет чтение этого CSV-файла в кадр данных pandas. Данные, отображаемые в кадре данных, по-прежнему не соответствуют форме. Название районов проиндексировано как имена столбцов, поэтому я выполняю транспонирование фрейма данных, чтобы изменить название районов в виде строк и переименовать этот единственный столбец в District.

Затем я выполняю некоторый процесс преобразования данных, чтобы сделать его более ясным и понятным. Я сокращаю кадр данных до 9 строк, содержащих районы на юге Бали, поскольку это моя цель исследования. Для изучения районов я использую локацию Foursquare. Следовательно, для этого исследования необходимы координаты широты и долготы. Чтобы получить координаты, я использую пакет Geocoder в Python и помещаю их в два новых столбца с именами Latitude и Longitude.

Не все сгенерированные координаты генерировали правильные значения для каждого района. Например, для района Кедири в регентстве Табанан координаты относятся к регентству Кедири в провинции Восточная Ява, как вы можете видеть на рисунке выше. Поэтому, чтобы решить эту проблему, в другой ячейке своего блокнота я пытаюсь сгенерировать координаты для Кедири с четким адресом. Так же для другого района неправильно выдает координаты Кута Утара. Затем замените неправильные значения в фрейме данных двумя новыми сгенерированными координатами для каждого района.

Подключение к Foursquare

Создание площадок вокруг центра районов

Для разведки будут использоваться 9 районов на юге Бали, 8 районов на острове Бали и 1 район на острове Нуса-Пенида. Район Нуса-Пенида больше других районов, потому что он охватывает весь остров Нуса-Пенида. В связи с этим радиус исследования Нуса-Пениды устанавливается в 13 км от ее центра. Для других районов острова Бали радиус должен быть установлен в 5 км каждый от его центра.

Сгенерированные из Foursquare объекты для районов на острове Бали имеют общее количество объектов 739 объектов со 140 уникальными категориями, а для района острова Нуса-Пенида 73 объекта с 25 уникальными категориями. На рисунках ниже показана часть результатов сгенерированных площадок.

Создание площадок рядом с пляжами

Из сгенерированных мест, которые определяют их имена, координаты и категории, я фильтрую места, в которых категория — «Пляж». Затем я использую его как центр другого исследования. Есть 24 пляжа, сгенерированных из 9 районов. Вот изображение первых 10 пляжей в новом фрейме данных.

Из 24 пляжей, сгенерированных Foursquare, оказалось, что не все пляжи автоматически отображаются в кадре данных. Самые популярные и посещаемые пляжи, такие как пляж Семиньяк, пляж Легиан, пляж Джимбаран и другие красивые и популярные пляжи, не были созданы Foursquare автоматически. Это проблема, так как я оптимизирую исследование, особенно вокруг популярных пляжей. Итак, я вручную просматриваю список популярных пляжей, затем вставляю данные и использую пакет Geocoder в Python для генерации координат. Количество добавленных пляжей составляет 11 пляжей, поэтому общее количество пляжей в кадре данных теперь составляет 35. Эти 35 пляжей будут использоваться в качестве центра при изучении мест вокруг.

Следующим шагом будет генерация площадок в радиусе 500 метров от каждого пляжа. Есть 656 мест с 96 уникальными категориями со всех 35 пляжей. Вот изображение первых 10 мест в кадре данных.

Анализ данных

Изучение и анализ площадок вокруг центра районов

Первое исследование — узнать, какая категория заведений наиболее распространена на юге Бали. Как мы знаем, в округах насчитывается 812 площадок со 145 уникальными категориями. Первый шаг — подсчитать количество мест, сгруппированных по каждой категории. Затем выполняется сортировка по возрастанию по количеству площадок. Отображаются не все категории, отображаются только первые 15 категорий. График можно увидеть на следующем рисунке.

Как вы можете видеть выше, количество отелей, сгенерированных Foursquare на юге Бали, составляет 55. Затем из этих 55 отелей на юге Бали давайте конкретно изучим количество отелей в каждом районе. Первое, что нужно сделать, это отфильтровать фрейм данных, категорией которого является гостиница. В результате фильтрации в двух районах Денпасар-Утара и Кедири нет ни одного отеля. Итак, я вручную вставляю значение 0 для этих районов, чтобы мы могли видеть все результаты. Следующим шагом является подсчет количества отелей, сгруппированных по районам, и выполнение сортировки по возрастанию на его основе. График можно увидеть на следующем рисунке.

Изучение и анализ площадок рядом с пляжами

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

Как вы можете видеть выше, категория отелей находится на первом месте с 69 объектами из всех объектов рядом с пляжами. Теперь давайте уточним исследование, чтобы узнать количество отелей на каждом пляже. Первый шаг, который нужно сделать, такой же, как и в предыдущем исследовании, а именно: отфильтровать фрейм данных, категорией которого является отель, и подсчитать количество отелей, сгруппированных по пляжам.

Кластеризация

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

Группирование районов на юге Бали

Поскольку мы хотели бы знать сходство районов, мы должны знать, каких площадок больше всего в каждом районе. Первый шаг, который необходимо сделать, — это закодировать категории мест проведения с помощью метода «горячего» кодирования. Как только мы получим кадр данных кодирования, следующим шагом будет вычисление среднего или среднего значения для каждого места, сгруппированного по районам. Затем мы генерируем 10 лучших мест с самым высоким средним показателем. Следующим шагом является кластеризация района на 3 кластера с использованием алгоритма K-средних. В python кластеризация данных с использованием алгоритма K-Means может быть автоматически сгенерирована с помощью библиотеки машинного обучения Scikit-learn. Результат кластеризации можно увидеть на следующей карте, созданной с помощью Folium в Python. Подробный результат участников каждого кластера можно увидеть в полном отчете этого проекта на моем github. Ссылка будет в конце этой статьи.

Группировка пляжей на юге Бали

Как и в том, что мы сделали выше, первым шагом для кластеризации пляжей на юге Бали является кодирование категорий мест с использованием метода горячего кодирования. После того, как кадр данных горячего кодирования готов, следующим шагом будет вычисление среднего или среднего значения для каждого места, сгруппированного по пляжу. Затем мы генерируем 10 лучших мест с самыми высокими средними баллами и кластеризуем данные с помощью алгоритма K-Means. Подробный результат участников каждого кластера можно увидеть в полном отчете этого проекта на моем github. Ссылка будет в конце этой статьи.

Обсуждение

На этапе изучения и анализа районов на юге Бали индонезийский ресторан стоит на первом месте среди наиболее распространенных мест с общим количеством 79 мест для всех 9 районов. На втором месте отель с 55 заведениями, затем курорт, кофейня и кафе на третьем, четвертом и пятом местах по порядку. Кроме того, мы видели диаграмму количества отелей для каждого района, где в Куте больше всего отелей с 18 отелями, а Кута-Утара следует за вторым по количеству отелей с 12 отелями по всему району.

На приведенной выше карте, описывающей каждый кластер, фиолетовые кружки определяют метку кластера 0, красные кружки определяют метку кластера 1, а зеленые кружки определяют метку кластера 2. Как мы видели в разделе результатов, метка кластера 0, которая это район с фиолетовыми кругами, в котором гораздо больше отелей, чем в двух других кластерных метках. В него входят районы Денпасар Селатан, Кута и Кута Утара. Согласно диаграмме, показанной на рисунке «Количество отелей в каждом районе», эти три района входят в тройку лидеров по количеству отелей.

В двух других кластерах, красных кружках и зеленых кружках, не так много отелей. И Денпасар, Утара, и Кедири, в которых вообще нет отелей, становятся частью метки кластера 2, зеленых кругов, поскольку в этих двух районах есть много ресторанов, которые занимают первое место по распространенности, как и другой член этого кластера, которым является Денпасар. Барат и Денпасар Тимур. Для метки кластера 1 (красные кружки) 1-е и 2-е наиболее распространенные места в этих двух районах — это курорт и пляж. Как мы знаем, курорт чем-то похож на отель, но имеет небольшую разницу в удобствах и услугах.

Теперь давайте предположим, что новый отель должен находиться рядом с пляжем, поскольку Бали популярен благодаря своему прекрасному пляжу, поэтому он, вероятно, привлечет больше посетителей, чем другие места. Что касается исследования, которое мы провели ранее, из 69 отелей большинство находится на пляжах Легиан и Семиньяк. Это неудивительно, поскольку эти два пляжа являются самыми популярными на Бали. Оказывается, есть еще некоторые пляжи, на которых вообще нет отелей.

На приведенной выше карте, описывающей каждый пляж, розовые кружки определяют метку кластера 0, красные кружки определяют метку кластера 1, синие кружки определяют метку кластера 2, оранжевые кружки определяют метку кластера 3, а зеленые кружки определяют метку кластера 3. метка кластера 4. Метка кластера 0 имеет больше отелей, чем четыре других метки кластера. Пляж Легиан, пляж Семиньяк, Бродволк Кута, пляж Дискавери, пляж Чангу, пляж Танджунг Беноа, Пантай Кута и пляж Нуса Дуа, которые входят в восьмерку лучших пляжей по количеству отелей, являются членами этого кластера.

Ярлыки кластера 1, 2 и 4, красные, синие и зеленые круги по порядку, имеют меньше отелей, чем ярлык кластера 0, но у них много курортов, похожих на отели, с несколько другими удобствами и услугами. Между тем, пляжи в кластере с меткой 3 не имеют ни одного отеля или курорта с 1-го по 10-е место по популярности.

Вывод

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

  1. Лучшее место для нового отеля на юге Бали, если не требуется никаких дополнительных критериев, - это районы, входящие в состав кластера 2, особенно район Кедири в регентстве Табанан или Денпасар-Утара в Денпасаре, где нет ни одного отеля.
  2. Лучшее место для нового отеля рядом с пляжем на юге Бали — это пляжи кластера, состоящего из 3 членов, а именно Crystal Bay и Mangrove Beach.
  3. Другие варианты — на пляжах, на которых еще нет ни одного отеля, или на пляжах, где есть только один отель.

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

Полный отчет и коды этого проекта см. на моей странице Github по следующим ссылкам:

Вот ссылка на отчет

Вот ссылка на коды