Введение:

Бангалор - мегаполис, третий по численности населения город и пятая по численности городская агломерация в Индии. Бангалор иногда называют «Силиконовой долиной Индии» (или «ИТ-столицей Индии») из-за его роли в качестве ведущего национального экспортера информационных технологий (ИТ). Индийские технологические организации ISRO, Infosys, Wipro и HAL расположены в городе. Бангалор - это демографически разнообразный город, второй по темпам роста крупный мегаполис Индии. В Бангалоре одна из самых высокообразованных сотрудников в мире. Он является домом для многих образовательных и исследовательских учреждений, таких как Индийский институт науки (IISc), Индийский институт менеджмента (Бангалор) (IIMB), Международный институт информационных технологий, Бангалор (IIITB), Национальный институт модных технологий, Бангалор. .

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

Итак, кому может быть полезна эта работа?

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

Как ??

В нашем проекте мы будем помогать предпринимателям, рекомендуя им лучшее место для открытия своего бизнеса, предоставляя основные детали, такие как:

  1. Есть ли в этой области конкуренты? если да, то как у них дела?
  2. Используя обзоры, полученные их конкурентами, мы можем предоставить ключевые идеи относительно областей, в которых им нужно больше сосредоточиться на своем бизнесе, чтобы превзойти своих коллег.
  3. Используя данные, которые у нас были, мы можем спрогнозировать цену на новые квартиры, дав некоторые новые спецификации.
  4. Технические характеристики здания, такие как площадь здания, место для парковки и т. Д.
  5. Предоставив подробную информацию об окрестностях, например, человек, который хочет открыть ресторанный дворик, хочет, чтобы его бизнес находился в полностью переполненном районе, где могут проживать многие ИТ-компании, колледжи и т. Д.
  6. Какие параметры влияют на рост цен?
  7. На каком расстоянии моя квартира находится от ресторана?

Точно так же мы можем помочь людям, которые переезжают в Бангалор, учитывая, что вы впервые переезжаете в Бангалор. Возможно, вы не знаете Бангалора и не имеете там никаких связей, поэтому вам будет очень трудно там поселиться. Итак, чтобы решить эту проблему, мы будем использовать алгоритмы машинного обучения вместе с Foursquare API, чтобы получить подробную информацию о различных квартирах в Бангалоре, а также их точную широту и долготу (см. Ниже). Теперь, чтобы выбрать лучшую квартиру, нужно учесть следующие факты:

  1. На каком расстоянии от квартиры находится мой офис?
  2. Есть ли рестораны поблизости от квартиры ?.
  3. Есть ли поблизости какое-нибудь кафе?
  4. Какие параметры влияют на рост цен?
  5. «Готовы ли они к заселению»? Если нет, когда я могу переехать в квартиру?
  6. какие квадратные метры в квартире?
  7. на каком расстоянии я могу найти площадку для бадминтона от моей квартиры?

Идея !!

мы будем использовать Foursquare API для извлечения информации обо всех ресторанах, кафе, парках, отелях и торговых центрах по всему Бангалору. Эти сведения включают расположение зданий, характеристики, отзывы и оценки. Позже мы будем применять методы машинного обучения к извлеченным отзывам, чтобы собрать вышеупомянутую важную информацию. Чтобы собрать подробную информацию о свободных квартирах, я использую свободно доступный набор данных, который содержит подробную информацию обо всех квартирах вокруг города Бангалор вместе с их характеристиками. К этому набору данных я добавил координаты широты и долготы, чтобы упростить построение графика, позже я запустил Foursquare API для этого набора данных, чтобы найти самые известные места вокруг квартир. Чтобы клиенту было проще выбрать более подходящую квартиру, удовлетворяющую его метрикам.

Требования: -

Методология и выполнение: -

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

Приступим к кодированию

- Импорт необходимых библиотек:

import os # Operating System
import numpy as np
import pandas as pd
import datetime as dt # Datetime
import json # library to handle JSON files
#!conda install -c conda-forge geopy --yes
from geopy.geocoders import Nominatim # convert an address into latitude and longitude values
import requests # library to handle requests
from pandas.io.json import json_normalize # tranform JSON file into a pandas dataframe
# Matplotlib and associated plotting modules
import matplotlib.cm as cm
import matplotlib.colors as colors
#!conda install -c conda-forge folium=0.5.0 --yes
import folium #import folium # map rendering library

- Чтение Dataset:

# Reading The DataSet
df_bglr=pd.read_csv("Bengaluru_House_Data.csv")
df_bglr.head()

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

# Adding Latitude and logitude columns for our later use
df_bglr["latitude"]=np.NaN
df_bglr["longitude"]=np.NaN
for i in range(0,13320):
    df_bglr["latitude"]="a"
    df_bglr["longitude"]="a"

- Теперь, чтобы извлечь подробную информацию о широте и долготе, мы будем использовать службу геолокации под названием Nominatim, которая имеет свой класс геокодеры. Пример: - давайте получим широту и долготу Бангалора.

from geopy.geocoders import Nominatim
address = 'Bangalore, KA'
geolocator = Nominatim(user_agent="bg_explorer")
location = geolocator.geocode(address)
latitude = location.latitude
longitude = location.longitude
print('The geograpical coordinate of Bangalore City are {}, {}.'.format(latitude, longitude))

Вывод: - «Географические координаты города Бангалор: 12.9791198, 77.5912997.»

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

df_bglr_tail_venues=df_bglr["location"]
df_bglr_tail_venues=df_bglr_tail_venues.unique() #extracting only the unique locations
#print(len(df_bglr_venues))
j=0
for i in df_bglr_tail_venues: #Updating the values of latitude and longitudes by iterating over the dataset
    address_venue=i
    print(i)
    geolocator = Nominatim(user_agent="bg_explorer")
    location = geolocator.geocode(address_venue,timeout=10000)
    if location !=None:                #Taking only values without null location values #Foursquare May not find the location for all locations so we are removing such undefined locations
        print(location.latitude) 
        df_bglr.at[j,"latitude"] = location.latitude
        df_bglr.at[j,"longitude"]= location.longitude
        j=j+1

- Вот набор данных после обновления столбца широты и долготы:

  • Очистка данных:

  1. Как показано на рис. 4, в столбце «total_sqft» есть некоторые нечисловые значения, мы должны удалить их, иначе мы получим ошибки при интерпретации нечисловых значений во время визуализации данных.
df_bglr=df_bglr[df_bglr.total_sqft.apply(lambda x: x.isnumeric())]

2. Foursquare может не находить значения широты и долготы для некоторых местоположений, поэтому мы удаляем такие неопределенные местоположения.

df_bglr=df_bglr[df_bglr.latitude !='a']

3. Удаление всех значений NaN.

df_bglr.dropna(inplace=True)

— — — — — — —

  • Визуализация данных:

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

  1. Area_type против цены
import seaborn as sns
import matplotlib.pyplot as plt
plts = pd.read_csv('df_bglr.csv')
sns.catplot(x="area_type", y="price", data=plts);

sns.barplot(x="area_type", y="price", data=tips);

Из рис5 видно, что в « сверхзастроенной зоне » больше квартир в этом ценовом диапазоне (0–150) по сравнению с другие типы площадей.

2. Размер квартиры в сравнении с ценой

sns.catplot(x="size", y="price", data=tips);

sns.boxplot(x="size", y="price", data=tips);

sns.barplot(x="size", y="price", data=tips);

Итак, если вы посмотрите на рис.9, для 5BHK неясно, сколько там квартир, поэтому если вы посмотрите на рис. 8 или 7, то ясно увидите, что доступна только одна квартира 5BHK. Поэтому не рекомендуется использовать только одну технику визуализации, мы должны применять все доступные техники визуализации.

— — — — — —

Давайте погрузимся в наш основной проект

Изучение окрестностей вокруг квартир

  1. Расположение квартир на карте Бангалора:

Мы будем использовать Folium для отображения наших квартир. folium является частью библиотеки leaflet.js и позволяет нам визуализировать данные.

# create map of New York using latitude and longitude values
map_bnglr = folium.Map(location=[latitude, longitude], zoom_start=10)
# add markers to map
for lat, lng, borough, neighborhood in zip(df_bglr_155['latitude'], df_bglr_155['longitude'], df_bglr_155['society'], df_bglr_155['location']):
    label = '{}, {}'.format(neighborhood, borough)
    label = folium.Popup(label, parse_html=True)
    folium.CircleMarker(
        [lat, lng],
        radius=5,
        popup=label,
        color='blue',
        fill=True,
        fill_color='#3186cc',
        fill_opacity=0.7,
        parse_html=False).add_to(map_bnglr)  
    
map_bnglr

2. Выделение площадок вокруг квартир:

мы будем использовать Foursquare API для извлечения информации о местах проведения мероприятий в каждой квартире. Foursquare - это локальное приложение для поиска и обнаружения. Это дает персональные рекомендации, куда можно пойти рядом с пользователем.

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

  1. Посетите веб-сайт Foursquare. : Https://foursquare.com/
  2. Нажмите кнопку Ресурсы в верхнем левом углу, после чего появится раскрывающийся список вариантов, нажмите Портал разработчика, и вы будете перенаправлены на страницу регистрации. Теперь создайте учетную запись.
  3. Выбрав уровень учетной записи Sandbox, он будет иметь следующие характеристики, которые достаточны для наших текущих требований.
  • 950 обычных звонков в день
  • 50 премиальных звонков в день
  • 1 фото на объект
  • 1 совет на заведение

4. После создания учетной записи для входа на портал и создания нового приложения вы получите новый идентификатор клиента и секрет клиента.

- Теперь скопируйте свой ИДЕНТИФИКАТОР КЛИЕНТА и СЕКРЕТ КЛИЕНТА и сохраните их в переменных, как показано ниже:

CLIENT_ID = 'paste your client ID here, under the Apostrophe' # your Foursquare ID
CLIENT_SECRET = 'paste your client secret here, under the Apostrophe' # your Foursquare Secret
VERSION = '20180605' # Foursquare API version

- Теперь давайте протестируем наш Foursquare API -

мы найдем места поблизости от « Electronic City Phase II » с помощью нашего API.

neighborhood_latitude = df_bglr_155.loc[0, 'latitude'] # neighborhood latitude value for "electroniccityphaseII"
neighborhood_longitude = df_bglr_155.loc[0, 'longitude'] # neighborhood longitude value for "electroniccityphaseII"
neighborhood_name = df_bglr_155.loc[0, 'location'] # neighborhood name
print('Latitude and longitude values of {} are {}, {}.'.format(neighborhood_name, 
                                                               neighborhood_latitude, 
                                                               neighborhood_longitude))

output: Значения широты и долготы для Electronic City Phase II: 12,8468545, 77,6769267.

Теперь давайте найдем лучшие 6 заведений, которые находятся в районе «фазы II электронного города».

LIMIT = 6# limit of number of venues returned by Foursquare API
radius = 500 # define radius
url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}'.format(
    CLIENT_ID, 
    CLIENT_SECRET, 
    VERSION, 
    neighborhood_latitude, 
    neighborhood_longitude, 
    radius, 
    LIMIT)
url

мы создадим файл JSON и сохраним в нем 50 лучших заведений.

results = requests.get(url).json()
results

Выход:

{'meta': {'code': 200, 'requestId': '5e818d6e98205d001b5b9702'},
 'response': {'suggestedFilters': {'header': 'Tap to show:',
   'filters': [{'name': 'Open now', 'key': 'openNow'}]},
  'headerLocation': 'Current map view',
  'headerFullLocation': 'Current map view',
  'headerLocationGranularity': 'unknown',
  'totalResults': 6,
  'suggestedBounds': {'ne': {'lat': 12.851354504500003,
    'lng': 77.68153362366434},
   'sw': {'lat': 12.842354495499995, 'lng': 77.67231977633566}},
  'groups': [{'type': 'Recommended Places',
    'name': 'recommended',
    'items': [{'reasons': {'count': 0,
       'items': [{'summary': 'This spot is popular',
         'type': 'general',
         'reasonName': 'globalInteractionReason'}]},
      'venue': {'id': '4e0855c8b61c60b0454a7cbb',
       'name': 'TCS Think Campus',
       'location': {'address': '#42, Electronic City',
        'crossStreet': 'Phase II',
        'lat': 12.847598224906433,
        'lng': 77.6791380938702,
        'labeledLatLngs': [{'label': 'display',
          'lat': 12.847598224906433,
          'lng': 77.6791380938702}],
        'distance': 253,
        'postalCode': '560100',
        'cc': 'IN',
        'city': 'Bangalore',
        'state': 'Karnātaka',
        'country': 'India',
        'formattedAddress': ['#42, Electronic City (Phase II)',
         'Bangalore 560100',
         'Karnātaka',
         'India']},
       'categories': [{'id': '4bf58dd8d48988d174941735',
         'name': 'Coworking Space',
         'pluralName': 'Coworking Spaces',
         'shortName': 'Coworking Space',
         'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/building/office_coworkingspace_',
          'suffix': '.png'},
         'primary': True}],
       'photos': {'count': 0, 'groups': []}},
      'referralId': 'e-0-4e0855c8b61c60b0454a7cbb-0'},
     {'reasons': {'count': 0,
       'items': [{'summary': 'This spot is popular',
         'type': 'general',
         'reasonName': 'globalInteractionReason'}]},
      'venue': {'id': '4eebe42077c82b92f636bb4f',
       'name': 'TCS Think Campus Ground',
       'location': {'address': 'Electronic city',
        'lat': 12.848343641377438,
        'lng': 77.67926678752525,
        'labeledLatLngs': [{'label': 'display',
          'lat': 12.848343641377438,
          'lng': 77.67926678752525}],
        'distance': 303,
        'postalCode': '560100',
        'cc': 'IN',
        'city': 'Bangalore',
        'state': 'Karnātaka',
        'country': 'India',
        'formattedAddress': ['Electronic city',
         'Bangalore 560100',
         'Karnātaka',
         'India']},
       'categories': [{'id': '4bf58dd8d48988d1e1941735',
         'name': 'Basketball Court',
         'pluralName': 'Basketball Courts',
         'shortName': 'Basketball Court',
         'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/parks_outdoors/basketballcourt_',
          'suffix': '.png'},
         'primary': True}],
       'photos': {'count': 0, 'groups': []}},
      'referralId': 'e-0-4eebe42077c82b92f636bb4f-1'},
     {'reasons': {'count': 0,
       'items': [{'summary': 'This spot is popular',
         'type': 'general',
         'reasonName': 'globalInteractionReason'}]},
      'venue': {'id': '50fe76dde4b06b7ff49c608c',
       'name': 'Coffee Day Xpress',
       'location': {'address': '42, Think Campus- TCS,',
        'crossStreet': 'Electronic City, Phase 2,',
        'lat': 12.848826839267772,
        'lng': 77.67894642513268,
        'labeledLatLngs': [{'label': 'display',
          'lat': 12.848826839267772,
          'lng': 77.67894642513268}],
        'distance': 310,
        'postalCode': '560010',
        'cc': 'IN',
        'city': 'Bangalore',
        'state': 'Karnātaka',
        'country': 'India',
        'formattedAddress': ['42, Think Campus- TCS, (Electronic City, Phase 2,)',
         'Bangalore 560010',
         'Karnātaka',
         'India']},
       'categories': [{'id': '4bf58dd8d48988d16d941735',
         'name': 'Café',
         'pluralName': 'Cafés',
         'shortName': 'Café',
         'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/food/cafe_',
          'suffix': '.png'},
         'primary': True}],
       'photos': {'count': 0, 'groups': []}},
      'referralId': 'e-0-50fe76dde4b06b7ff49c608c-2'},
     {'reasons': {'count': 0,
       'items': [{'summary': 'This spot is popular',
         'type': 'general',
         'reasonName': 'globalInteractionReason'}]},
      'venue': {'id': '50fe5c8fe4b0d36cb9d9913d',
       'name': 'Mint-The Kitchen, Think Campus.',
       'location': {'address': '42, Think Campus-TCS',
        'crossStreet': 'Electronic City,  Phase 2',
        'lat': 12.848941327230767,
        'lng': 77.6789602817386,
        'labeledLatLngs': [{'label': 'display',
          'lat': 12.848941327230767,
          'lng': 77.6789602817386}],
        'distance': 320,
        'postalCode': '560010',
        'cc': 'IN',
        'city': 'Bangalore',
        'state': 'Karnātaka',
        'country': 'India',
        'formattedAddress': ['42, Think Campus-TCS (Electronic City,  Phase 2)',
         'Bangalore 560010',
         'Karnātaka',
         'India']},
       'categories': [{'id': '4bf58dd8d48988d1d3941735',
         'name': 'Vegetarian / Vegan Restaurant',
         'pluralName': 'Vegetarian / Vegan Restaurants',
         'shortName': 'Vegetarian / Vegan',
         'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/food/vegetarian_',
          'suffix': '.png'},
         'primary': True}],
       'photos': {'count': 0, 'groups': []}},
      'referralId': 'e-0-50fe5c8fe4b0d36cb9d9913d-3'},
     {'reasons': {'count': 0,
       'items': [{'summary': 'This spot is popular',
         'type': 'general',
         'reasonName': 'globalInteractionReason'}]},
      'venue': {'id': '52fe2d9211d2c8e9f718d193',
       'name': 'Foodies Express',
       'location': {'address': 'Electronics City Phase 2',
        'lat': 12.847622629612248,
        'lng': 77.68072608901532,
        'labeledLatLngs': [{'label': 'display',
          'lat': 12.847622629612248,
          'lng': 77.68072608901532}],
        'distance': 421,
        'postalCode': '560100',
        'cc': 'IN',
        'city': 'Bangalore',
        'state': 'Karnātaka',
        'country': 'India',
        'formattedAddress': ['Electronics City Phase 2',
         'Bangalore 560100',
         'Karnātaka',
         'India']},
       'categories': [{'id': '4bf58dd8d48988d147941735',
         'name': 'Diner',
         'pluralName': 'Diners',
         'shortName': 'Diner',
         'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/food/diner_',
          'suffix': '.png'},
         'primary': True}],
       'photos': {'count': 0, 'groups': []}},
      'referralId': 'e-0-52fe2d9211d2c8e9f718d193-4'},
     {'reasons': {'count': 0,
       'items': [{'summary': 'This spot is popular',
         'type': 'general',
         'reasonName': 'globalInteractionReason'}]},
      'venue': {'id': '4d9d82c0c97a236a82a2be99',
       'name': 'Aastha',
       'location': {'address': '108 Gokul Complex',
        'crossStreet': 'Nr. TCS, Electronic City',
        'lat': 12.849795443905391,
        'lng': 77.6793909072876,
        'labeledLatLngs': [{'label': 'display',
          'lat': 12.849795443905391,
          'lng': 77.6793909072876}],
        'distance': 422,
        'cc': 'IN',
        'city': 'Bangalore',
        'state': 'Karnātaka',
        'country': 'India',
        'formattedAddress': ['108 Gokul Complex (Nr. TCS, Electronic City)',
         'Bangalore',
         'Karnātaka',
         'India']},
       'categories': [{'id': '4bf58dd8d48988d10f941735',
         'name': 'Indian Restaurant',
         'pluralName': 'Indian Restaurants',
         'shortName': 'Indian',
         'icon': {'prefix': 'https://ss3.4sqi.net/img/categories_v2/food/indian_',
          'suffix': '.png'},
         'primary': True}],
       'photos': {'count': 0, 'groups': []}},
      'referralId': 'e-0-4d9d82c0c97a236a82a2be99-5'}]}]}}

В выходных данных выше вы можете увидеть выделенные места. Теперь извлечем подробную статистику по каждой площадке:

# function that extracts the category of the venue
def get_category_type(row):
    try:
        categories_list = row['categories']
    except:
        categories_list = row['venue.categories']
        
    if len(categories_list) == 0:
        return None
    else:
        return categories_list[0]['name']

venues = results['response']['groups'][0]['items']
    
nearby_venues = json_normalize(venues) # flatten JSON
# filter columns
filtered_columns = ['venue.name', 'venue.categories', 'venue.location.lat', 'venue.location.lng']
nearby_venues =nearby_venues.loc[:, filtered_columns]
# filter the category for each row
nearby_venues['venue.categories'] = nearby_venues.apply(get_category_type, axis=1)
# clean columns
nearby_venues.columns = [col.split(".")[-1] for col in nearby_venues.columns]

Теперь мы повторим ту же процедуру для всех местоположений квартир и сохраним все лучшие места в файле CSV для дальнейшего анализа.

def getNearbyVenues(names, latitudes, longitudes, radius=500):
    
    venues_list=[]
    for name, lat, lng in zip(names, latitudes, longitudes):
        print(name)
            
        # create the API request URL
        url = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}'.format(
            CLIENT_ID, 
            CLIENT_SECRET, 
            VERSION, 
            lat, 
            lng, 
            radius, 
            LIMIT)
            
        # make the GET request
        results = requests.get(url).json()["response"]['groups'][0]['items']
        
        # return only relevant information for each nearby venue
        venues_list.append([(
            name, 
            lat, 
            lng, 
            v['venue']['name'], 
            v['venue']['location']['lat'], 
            v['venue']['location']['lng'],  
            v['venue']['categories'][0]['name']) for v in results])
nearby_venues = pd.DataFrame([item for venue_list in venues_list for item in venue_list])
    nearby_venues.columns = ['Neighborhood', 
                  'Neighborhood Latitude', 
                  'Neighborhood Longitude', 
                  'Venue', 
                  'Venue Latitude', 
                  'Venue Longitude', 
                  'Venue Category']
    
    return(nearby_venues)

— —

banglore_venues = getNearbyVenues(names=df_bglr_155['location'],
                                   latitudes=df_bglr_155['latitude'],
                                   longitudes=df_bglr_155['longitude'])
banglore_venues.to_csv("banglore_venues.csv")
banglore_venues

Мы отфильтруем все уникальные категории мест, присутствующие в наборе данных.

banglore_venues['Venue Category'].unique()

Теперь мы применим горячую кодировку к нашим «banglore_venue», чтобы получить подробное представление о категориях мест проведения мероприятий.

# one hot encoding
banglore_onehot = pd.get_dummies(banglore_venues[['Venue Category']], prefix="", prefix_sep="")
# add neighborhood column back to dataframe
banglore_onehot['Neighborhood'] = banglore_venues['Neighborhood']
# move neighborhood column to the first column
fixed_columns = [banglore_onehot.columns[-1]] + list(banglore_onehot.columns[:-1])
banglore_onehot = banglore_onehot[fixed_columns]
banglore_onehot.head()

banglore_grouped = banglore_onehot.groupby('Neighborhood').mean().reset_index()
banglore_grouped

- Теперь выделим 10 самых посещаемых и высоко оцененных заведений возле каждой квартиры.

num_top_venues = 10
for hood in banglore_grouped['Neighborhood']:
    print("----"+hood+"----")
    temp = banglore_grouped[banglore_grouped['Neighborhood'] == hood].T.reset_index()
    temp.columns = ['venue','freq']
    temp = temp.iloc[1:]
    temp['freq'] = temp['freq'].astype(float)
    temp = temp.round({'freq': 2})
    print(temp.sort_values('freq', ascending=False).reset_index(drop=True).head(num_top_venues))
    print('\n')

- наша следующая задача - скопировать вышеперечисленные площадки в более понятный формат CSV для лучшей наглядности.

def return_most_common_venues(row, num_top_venues):
    row_categories = row.iloc[1:]
    row_categories_sorted = row_categories.sort_values(ascending=False)
    
    return row_categories_sorted.index.values[0:num_top_venues]
---------
num_top_venues = 10
indicators = ['st', 'nd', 'rd']
# create columns according to number of top venues
columns = ['Neighborhood']
for ind in np.arange(num_top_venues):
    try:
        columns.append('{}{} Most Common Venue'.format(ind+1, indicators[ind]))
    except:
        columns.append('{}th Most Common Venue'.format(ind+1))
# create a new dataframe
neighborhoods_venues_sorted = pd.DataFrame(columns=columns)
neighborhoods_venues_sorted['Neighborhood'] = banglore_grouped['Neighborhood']
for ind in np.arange(banglore_grouped.shape[0]):
    neighborhoods_venues_sorted.iloc[ind, 1:] = return_most_common_venues(banglore_grouped.iloc[ind, :], num_top_venues)
neighborhoods_venues_sorted.head()

neighborhoods_venues_sorted['Neighborhood Latitude'] = banglore_venues['Neighborhood Latitude'].astype(float)
neighborhoods_venues_sorted['Neighborhood Longitude'] = banglore_venues['Neighborhood Longitude'].astype(float)
neighborhoods_venues_sorted['1st Most Common Venue'].value_counts()

Кластеризация площадок

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

from sklearn.cluster import KMeans
# set number of clusters
kclusters = 10
banglore_grouped_clustering = banglore_grouped.drop('Neighborhood', 1)
# run k-means clustering
kmeans = KMeans(n_clusters=kclusters, random_state=42).fit(banglore_grouped_clustering)
# check cluster labels generated for each row in the dataframe
kmeans.labels_[0:11]

# add clustering labels
neighborhoods_venues_sorted.insert(0, 'Cluster Labels', kmeans.labels_)
banglore_merged = df_bglr
# merge toronto_grouped with toronto_data to add latitude/longitude for each neighborhood
banglore_merged = banglore_merged.join(neighborhoods_venues_sorted.set_index('Neighborhood'), on='location')
banglore_merged.drop(banglore_merged.loc[banglore_merged['1st Most Common Venue']==np.NaN].index, inplace=True)
banglore_merged = banglore_merged.dropna()

- Наша следующая задача - нанести на карту кластеры с помощью фолиума:

# create map
map_clusters = folium.Map(location=[latitude, longitude], zoom_start=11)
# set color scheme for the clusters
x = np.arange(kclusters)
ys = [i + x + (i*x)**2 for i in range(kclusters)]
colors_array = cm.rainbow(np.linspace(0, 1, len(ys)))
rainbow = [colors.rgb2hex(i) for i in colors_array]
# add markers to the map
markers_colors = []
for lat, lon, poi, cluster in zip(banglore_merged_final['latitude'], banglore_merged_final['longitude'], banglore_merged_final['location'], banglore_merged_final['Cluster Labels']):
    label = folium.Popup(str(poi) + ' Cluster ' + str(cluster), parse_html=True)
    folium.CircleMarker(
        [lat, lon],
        radius=5,
        popup=label,
        color=rainbow[int(cluster)-1],
        fill=True,
        fill_color=rainbow[int(cluster)-1],
        fill_opacity=0.7).add_to(map_clusters)
       
map_clusters

Давайте погрузимся в наш Основной проект, Ура !!

Задание 1:

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

Вопрос 1: где вы можете открыть новый «ресторан» с минимальной конкуренцией и доступным для дальнейшего продвижения?

мы возьмем набор данных banglore_merged и отфильтруем области, поблизости от которых нет ресторанов. Теперь, когда у нас есть окончательный набор данных, нашим следующим шагом будет выбор других характеристик, таких как: «Готова ли территория к переезду?», «Цена на площадь», «Есть ли ИТ-центры рядом с рестораном?» И т. Д.,

Шаг 1:. Фильтруя области, в которых нет ресторанов в их местности. Для этого мы выберем области, в которых нет ресторанов, центров быстрого питания или кафе. их 1-й, 2-й или 3-й список самых посещаемых мест. Таким образом мы можем выделить районы, поблизости от которых нет хорошего ресторана.

best_places_for_restaurant = banglore_merged[(~banglore_merged["1st Most Common Venue"].str.contains('Restaurant'))&(~banglore_merged["2nd Most Common Venue"].str.contains('Restaurant'))&(~banglore_merged["3rd Most Common Venue"].str.contains('Restaurant'))&(~banglore_merged["1st Most Common Venue"].str.contains('Food'))&(~banglore_merged["2nd Most Common Venue"].str.contains('Food'))&(~banglore_merged["3rd Most Common Venue"].str.contains('Food'))&(~banglore_merged["1st Most Common Venue"].str.contains('Pizza'))&(~banglore_merged["2nd Most Common Venue"].str.contains('Pizza'))&(~banglore_merged["3rd Most Common Venue"].str.contains('Pizza'))]

Шаг 2:. Теперь наш следующий приоритет - применить дополнительные фильтры, такие как: «Готова ли территория к переезду?», «Цена площади», «Есть ли ИТ-центры. возле ресторана? »и т. д.,

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

best_places_for_restaurant=best_places_for_restaurant.loc[best_places_for_restaurant['availability'] == 'Ready To Move']

Мы упростим выбор, рассортируя области по цене.

best_places_for_restaurant=best_places_for_restaurant.sort_values("price")

Посмотрим на результат:

pd.set_option('display.max_columns', None)
best_places_for_restaurant

У нашего клиента есть 11 лучших мест для своего ресторана, кроме того, он может применить другие фильтры и выбрать лучшее место для открытия своего ресторана.

- Построение отфильтрованных областей для лучшей визуализации.

# create map of New York using latitude and longitude values
map_bnglr = folium.Map(location=[latitude, longitude], zoom_start=10)
# add markers to map
for lat, lng, borough, neighborhood in zip(best_places_for_restaurant['latitude'], best_places_for_restaurant['longitude'], best_places_for_restaurant['society'], best_places_for_restaurant['location']):
    label = '{}, {}'.format(neighborhood, borough)
    label = folium.Popup(label, parse_html=True)
    folium.CircleMarker(
        [lat, lng],
        radius=5,
        popup=label,
        color='red',
        fill=True,
        fill_color='#3186cc',
        fill_opacity=0.7,
        parse_html=False).add_to(map_bnglr)  
    
map_bnglr

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

мы возьмем набор данных banglore_merged и отфильтруем области, поблизости от которых нет кортов для бадминтона, и наша следующая задача - выбрать район с ресторанным двориком по соседству.

Шаг 1: Фильтрация областей, где нет площадок для бадминтона в их местности. Для этого мы выберем области, в которых нет «площадок для бадминтона» в их 1-м, 2-м или 3-м месте. Список наиболее часто посещаемых мест.

best_places_for_badminton_court = banglore_merged[(~banglore_merged["1st Most Common Venue"].str.contains('Badminton Court'))&(~banglore_merged["2nd Most Common Venue"].str.contains('Badminton Court'))&(~banglore_merged["3rd Most Common Venue"].str.contains('Badminton Court'))&((banglore_merged["1st Most Common Venue"].str.contains('Restaurant'))|(banglore_merged["1st Most Common Venue"].str.contains('Food'))|(banglore_merged["1st Most Common Venue"].str.contains('Pizza')))]

Шаг 2: Теперь наша следующая приоритетная задача - применить дополнительные фильтры, такие как: «Готова ли территория к перемещению?», «Цена площади» и т. д.,

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

best_places_for_badminton_court=best_places_for_badminton_court.loc[best_places_for_badminton_court['availability'] == 'Ready To Move']
best_places_for_badminton_court=best_places_for_badminton_court.sort_values("price")
best_places_for_badminton_court

best_places_for_badminton_court.shape
(55, 25)

У нашего клиента есть 55 лучших мест для своего ресторана, кроме того, он может применить другие фильтры и выбрать лучшее место для открытия своего ресторана.

- Построение отфильтрованных областей для лучшей визуализации.

Задача 2:

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

Вопрос 1: я хочу, чтобы моя квартира была рядом с автобусной остановкой, так где мне арендовать?

мы возьмем набор данных banglore_merged и отфильтруем области, в которых есть автобусная станция.

Шаг 1:. Фильтрация областей с автовокзалом в их местности. Для этого мы должны выбрать области, в которых есть «автобусные станции». в их 1-м, 2-м или 3-м списке самых посещаемых мест.

placenearestto_bustand = banglore_merged[(banglore_merged["1st Most Common Venue"]=="Bus Station")|(banglore_merged["2nd Most Common Venue"]=="Bus Station")|(banglore_merged["3rd Most Common Venue"]=="Bus Station")]

Шаг 2: Теперь наша следующая приоритетная задача - применить дополнительные фильтры, такие как: «Готова ли территория к перемещению?», «Цена площади» и т. д.,

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

placenearestto_bustand=placenearestto_bustand.loc[placenearestto_bustand['availability'] == 'Ready To Move']
placenearestto_bustand=placenearestto_bustand.sort_values("price")
placenearestto_bustand
placenearestto_bustand

Всего 4 квартиры удовлетворяют требованиям клиента.

- Построение отфильтрованных областей для лучшей визуализации.

Запрос 2: наш клиент хочет построить свое тело, как скала !!, поэтому он хочет, чтобы его квартира была очень близко к спортзалу, а также ему нужна квартира 2BHK

мы возьмем набор данных banglore_merged и отфильтруем апартаменты 2BHK, поблизости от которых есть тренажерный зал.

Шаг 1: Фильтрация областей с тренажерным залом в их местности. Для этого мы должны выбрать области, в которых есть «тренажерный зал». 1-й, 2-й или 3-й список часто посещаемых мест.

best_places_for_apartment_gym = banglore_merged[(banglore_merged["1st Most Common Venue"].str.contains('Gym'))|(banglore_merged["2nd Most Common Venue"].str.contains('Gym'))|(banglore_merged["3rd Most Common Venue"].str.contains('Gym'))]

Теперь отфильтруем квартиры стоимостью 2 BHK:

best_places_for_apartment_gym[best_places_for_apartment_gym['size']=='2 BHK']

у нашего клиента был только один вариант на выбор.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -

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