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

Введение

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

«Нет настоящего мельбурнского блюда или кухни. Скорее, выбор еды в городе безграничен, потому что это мультикультурный плавильный котел. Еда — это портал в культуру, и яркая иммиграционная история Мельбурна остается в авангарде его культуры отчасти из-за его несомненно интернациональной кухни».

Проблема

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

Целью этого проекта является изучение пищевых предпочтений/вкусов различных пригородов Мельбурна путем сегментирования закусочных в различных пригородах на основе кухни, которую они предлагают. В этом проекте «Places API» Foursquare будет использоваться для поиска заведений в каждом пригородном районе, а дополнительный алгоритм «K-Means» будет использоваться для разделения этих мест на кластеры с похожими кухнями. Кроме того, будет подготовлен профиль для каждого пригорода с описанием наиболее распространенных типов закусочных с использованием Исследовательского анализа данных (EDA), что поможет узнать больше о культуре и разнообразии района.

Сбор данных

Получение необходимых библиотек

# importing pandas and numpy
import pandas as pd 
pd.set_option(‘display.max_columns’, None)
pd.set_option(‘display.max_rows’, None)
import numpy as np
# geopy to get coordinates of an address
from geopy import Nominatim

# Required for GET requests
import requests
# To read json data 
import json
from collections import Counter # count occurrences
# sci-kit learn libraries 
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Data Visualisation Libraries 
import folium #library to visualise geo-location data
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors

print(‘Libraries import done!’)

Набор данных города Мельбурн

Набор данных города Мельбурн был получен по следующей ссылке:
https://github.com/matthewproctor/australianpostcodes. Данные доступны в различных форматах, однако для простоты данные были загружены в формате .csv.

API Foursquare Places

Places API предлагает доступ в режиме реального времени к глобальной базе данных Foursquare с богатыми данными о местах проведения мероприятий и пользовательским контентом.
Ссылка: https://developer.foursquare.com/docs/places-api/

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

Пример ответа в формате JSON, показывающий место, где можно поесть недалеко от Саутбэнка, Мельбурн, из одного из запросов, показан ниже:

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

{

"result".response.groups[].items.venue.name: Название места

"result".response.groups[].items.venue.location.lat:Значение широты

"result".response.groups[].items.venue.location.lng:Значение долготы

"result".response.groups[].items.venue.categories[].name: Vкатегория enue

}

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

Данные о местоположении в Мельбурне

Исходный набор данных содержал информацию о местонахождении и почтовом индексе районов Австралии.

Общий набор данных состоит из 18275 строк и 14 столбцов, как показано выше.

Чтобы получить данные о местоположении Мельбурна, этот набор данных был отфильтрован по двум столбцам: «Штат =VIC», который представляет «Виктория», штат, в котором расположен Мельбурн, и «Регион =R1”, что представляет большую часть Мельбурна.

postal_code_Melb_df = postal_code_aus_df[(postal_code_aus_df[‘state’]==’VIC’) & (postal_code_aus_df[‘region’]==’R1')]
postal_code_Melb_df.reset_index(inplace=True)
postal_code_Melb_df

Требуемые столбцы были выбраны и переименованы для согласованности следующим образом:

{‘postcode’:’Postcode’, ’sa3name’:’Region’, ‘locality’:’Suburb’, ‘long’:’Long’, ‘lat’:’Lat’

# getting the required columns from the dataset 
required_col = [‘postcode’, ‘sa3name’, ‘locality’, ‘long’,’lat’]
# Filtering data with the required columns 
postal_code_Melb_df = pd.DataFrame(postal_code_Melb_df[required_col])
#Renaming the columns
postal_code_Melb_df.rename(columns={‘postcode’:’Postcode’,’sa3name’:’Region’, ‘locality’:’Suburb’, ‘long’:’Long’, ‘lat’:’Lat’ }, inplace=True)
postal_code_Melb_df

Проверить наличие пропущенных значений

Было замечено, что в некоторых строках «Регион», «Долгота» и «Широта»отсутствовали.

# checking for missing region and geo-coordinates rows
missing_region = postal_code_Melb_df[postal_code_Melb_df[‘Region’].isna()]
missing_region

#Замена значений отсутствующих регионов

Отсутствующие значения в столбце Регион для этих строк были заменены на основе сведений о Территории местного самоуправления от Google, как показано ниже.

# Adding Region value to all the rows based on information available about Local Government Area on Google 
postal_code_Melb_df.loc[6, ‘Region’] = ‘Melbourne City’
postal_code_Melb_df.loc[107, ‘Region’] = ‘Keilor’
postal_code_Melb_df.loc[232, ‘Region’] = ‘Boroondara’
postal_code_Melb_df.loc[403, ‘Region’]=’Dandenong’
postal_code_Melb_df.loc[487, ‘Region’] = ‘Melton — Bacchus Marsh’
postal_code_Melb_df.loc[488, ‘Region’] = ‘Melton — Bacchus Marsh’
postal_code_Melb_df.loc[489, ‘Region’] = ‘Melton — Bacchus Marsh’
# Proof Checking 
missing_region = postal_code_Melb_df[postal_code_Melb_df[‘Region’].isna()]
missing_region

#Замена отсутствующих значений долготы и широты

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

# defining functions to get geo-coordinates for missing coordinates using geopy library 
def get_lat(address):
 locator = Nominatim(user_agent=’myGeocoder’)
 location = locator.geocode(address)
 
 return location.latitude
def get_long(address):
 locator = Nominatim(user_agent=’myGeocoder’)
 location = locator.geocode(address)
 
 return location.longitude

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

# passing the addresses to the functions to get geo-coordinates and populating them in the dataframe
postal_code_Melb_df[‘Lat’] = postal_code_Melb_df.apply(lambda x:get_lat(x.Suburb + “ Victoria Australia “) 
 if x.Lat ==0 else x.Lat,axis=1)
postal_code_Melb_df[‘Long’] = postal_code_Melb_df.apply(lambda x:get_long(x.Suburb + “ Victoria Australia”) 
 if x.Long ==0 else x.Long,axis=1)

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

Значения в столбце пригорода были преобразованы в список, как показано ниже.

# grouping localities based on longitudes and latitudes, to get single row for each pair of coordinates
melb_post_code_grp= postal_code_Melb_df.groupby([‘Long’, ‘Lat’])[‘Suburb’].apply(list).reset_index()

Тщательно подобранный набор данных о пригородах Мельбурна был визуализирован с помощью библиотеки Folium. Folium – это библиотека Python, используемая для визуализации геопространственных данных.

Сбор данных из API Foursquare

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

Кроме того, можно было уточнить результаты с помощью параметра RADIUS, т. е. радиуса поиска в метрах. Этот параметр будет сильно влиять на количество возвращаемых результатов. Если требуется больше результатов, значения параметров RADIUS можно увеличить, в этом проекте RADIUS = 1000 (в метрах) использовался для получения приличного размера набора данных.

Другим параметром является LIMIT=100, т.е. количество возвращаемых результатов. был использован в этом проекте.

Ниже показана функция возврата рекомендуемых мест из баз данных Foursquare. Данные, полученные из запроса GET, добавляются в список Python. Наконец, функция возвращает фрейм данных, содержащий близлежащие места для каждого географического местоположения.

#creating a dataframe for all nearbuy venues for all neighbourhoods in Toronto
Melb_venues= get_nearby_venues(melb_post_code_grp.Suburb, melb_post_code_grp.Lat, melb_post_code_grp.Long)
Melb_venues

К этому моменту было создано три фрейма данных:

  • "postal_code_Melb_df": содержит почтовый индекс, долготу, широту, регион, названия пригородоввсех пригородов Мельбурна.
  • "melb_post_code_grp": содержит долготу, широту, названия пригородов, сгруппированные по долготе, широтеценности.
  • Melb_venues: содержит названия пригородов, долготу, широтузначения и близлежащие названия мест, долготу, широту вместе с названием категории мест проведения.

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

Анализ категорий площадок

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

{«Пиццерия»: 158, «Итальянский ресторан»: 133, «Ресторан быстрого питания»: 125

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

Список общих категорий подготавливается и загружается в список Python вручную, как описано ранее. Всего было 278общих категорий.

После этого простая функция pandas.DataFrame.isin(values)была применена к фрейму данныхгде значения – это список, передаваемый функции. Функция pandas.DataFrame.isin проверяет, содержится ли каждый элемент в DataFrame или значение столбца DataFrame в значениях.
Поскольку требовалось сохранить строки, которых не было в списке, для достижения желаемых результатов к функции добавляется символ "~".

# Filtering out general caltegories 
Melb_venues = Melb_venues[~ Melb_venues[‘Venue Category’].isin(general_cat)]
print(f"There are {len(Melb_venues['Venue Category'].unique())} remained after filtering out general categories")

После фильтрации общих категорий в наборе данных осталась 121 категория.

Визуализация 10 лучших категорий мест проведения

Было взято значение счетчика столбца «Категория места проведения», и были выбраны первые 10 лучших строк. Полученный фрейм данных был построен с помощью библиотеки «Seaborn».

# Visualising the Top-10 Venue Categories Based on the number of locations within a category
category_count = pd.DataFrame(Melb_venues[‘Venue Category’].value_counts())
x=category_count.head(10)
ax= plt.figure(figsize=(40,10), frameon=False)
ax=sns.barplot( x=x.index, y=’Venue Category’ , data=x, linewidth=0 )
ax.spines[‘top’].set_visible(False)
ax.spines[‘right’].set_visible(False)
#ax.spines[‘bottom’].set_visible(False)
ax.spines[‘left’].set_visible(False)
plt.ylabel(‘No of Venues’, fontsize=25)
plt.xlabel(‘Venue Category’, fontsize=25)
plt.xticks(fontsize= 20)
plt.yticks(fontsize= 20)
plt.title(‘Top 10 venue categories vs No of venues per category’, fontsize=30)

Можно заметить, что "итальянские", "фаст-фуд" и "южно-азиатские" заведения общественного питания являются основными категориями блюд, возвращенными из API Foursquare.

Визуализация 10 лучших пригородов для каждой из 10 лучших категорий мест проведения

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

Анализ данных о пригородах

На этом шаге сначала было взято значение счетчика столбца «Пригород». Затем данные были сгруппированы по столбцу 'Пригород', и все пригороды/группы, имеющие менее 4 строк, были удалены из набора данных, поскольку одной из целей проекта является порекомендовать не менее 5 популярных мест
из каждого района.

# Dropping Regions with less than 5 recommended venues
Melb_venues= Melb_venues[Melb_venues.groupby(‘Suburb’)[[‘Suburb’,’Suburb Latitude’,’Suburb Longitude’,
 ‘Venue’, ‘Venue Latitude’, 
 ‘Venue Longitude’,
 ‘Venue Category’]].transform(‘count’) > 4]
Melb_venues.dropna(inplace=True)
Melb_venues.shape

1 921  образцы остаются после фильтрации пригородов с менее чем 5
площадками.

Разработка функций

Для данных, которые будут использоваться с алгоритмом «К-средних», категориальные данные, то есть категории мест проведения, должны быть преобразованы в числовые значения, поскольку алгоритм не может обрабатывать нечисловые значения.

Столбец «Категория объекта» в наборе данных подвергается горячему кодированию с использованием pandas.dummies, а столбец «Пригород» был добавлен обратно. Фрейм данных содержит 1921 образеци 121 категорию мест проведения.

# one hot encoding
melb_one_hot = pd.get_dummies(Melb_venues[[‘Venue Category’]], prefix=””, prefix_sep=””)
# add Suburb column back to dataframe
melb_one_hot[‘Suburb’] = Melb_venues[‘Suburb’]
# move Region column to the first column
fixed_columns = [melb_one_hot.columns[-1]] + list(melb_one_hot.columns[:-1])
melb_one_hot = melb_one_hot[fixed_columns]
melb_one_hot.shape

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

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

Набор данных до этого момента содержал 99выборок и 120 объектов.

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

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 = 5
indicators = [‘st’, ‘nd’, ‘rd’]
# create columns according to number of top venues
columns = [‘Suburb’]
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[‘Suburb’] = melb_grp.index
for ind in np.arange(melb_grp.shape[0]):
 neighborhoods_venues_sorted.iloc[ind, 1:] = return_most_common_venues(melb_grp.iloc[ind, :], num_top_venues)
neighborhoods_venues_sorted

Масштабирование функций

В качестве примера распределение нескольких объектов в сгруппированном наборе данных было построено, как показано ниже.

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

Для масштабирования использовался стандартный скейлер из библиотеки sci-kit Learn. Стандартный скейлер приводит к тому, что признаки имеют среднее значение 0 и единичное стандартное отклонение по всем образцам.

# scaling the dataset features 
scaler = StandardScaler()
melb_scale = scaler.fit_transform(melb_grp)
melb_scale

Кластерный анализ

Выбор количества кластеров

Метод локтя:

Основная интуиция, стоящая за использованием метода локтя, состоит в том, чтобы найти оптимальное значение K' из диапазона значений K',таких, чтобы внутрикластерная вариация или общая сумма квадратов внутри кластеров минимизируется.

wcss=[]
#this loop will fit the k-means algorithm to our data and 
#second we will compute the within cluster sum of squares and #appended to our wcss list.
for i in range(2,25): 
 kmeans = KMeans(n_clusters=i, init =’k-means++’, n_init=20, max_iter=300, random_state=42)
 
#i above is between 2–25 numbers. init parameter is selected a K-means++ 
#max_iter parameter the maximum number of iterations there can be to 
#find the final clusters when the K-meands algorithm is running. A default value of 300 is used
#the next parameter is n_init which is the number of times the #K_means algorithm will be run with
#different initial centroid. Using default values of 10.
kmeans.fit(melb_scale)
#kmeans algorithm fits to the X dataset
 wcss.append(kmeans.inertia_)
#kmeans inertia_ attribute is: Sum of squared distances of samples #to their closest cluster center.
#4.Plot the elbow graph
plt.plot(range(2,25),wcss, ‘bx-’)
plt.title(‘Choosing optimal number of clusters with the elbow method’)
plt.xlabel(‘Number of clusters- K’)
plt.ylabel(‘WCSS- within cluster sum of squared error’)
plt.show()

Хотя наблюдается постепенное уменьшение суммы квадратов расстояний, однако, по наблюдениям, было трудно выбрать оптимальное значение K, поскольку при K = 5, 9 наблюдается несколько точек изгиба.Это нормально. произойдет с методом локтя. Поэтому был использован другой метод, т. е. метод средней оценки силуэта.

Средний балл силуэта:

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

Формула для расчета коэффициента силуэта:

где,

s(o): коэффициент силуэта точки o.

b(o): среднее межкластерное расстояние между o и остальными точками внутри кластера
, которому o не принадлежит.

a(o):среднее внутрикластерное расстояние между o и остальными точками в кластере
, к которому принадлежит o.

sil = []
K_sil = range(2,25)
# minimum 2 clusters required, to define dissimilarity
for k in K_sil:
 print(k, end=’ ‘)
 kmeans = KMeans(init=”k-means++”, n_clusters=k,n_init=50, max_iter=300, random_state=42).fit(melb_scale)
 labels = kmeans.labels_
 sil.append(silhouette_score(melb_scale, labels, metric = ‘euclidean’))
plt.plot(K_sil, sil, ‘bx-’)
plt.xlabel(‘Number of clusters (K)’)
plt.ylabel(‘Average Silhouette Score’)
plt.title(‘Average Silhouette score vs Number of clusters (K)’)
plt.show()

Максимальный балл наблюдался при K = 4,поэтому это значение было выбрано в качестве
оптимального значения количества кластеров.

Кластеризация K-средних

Библиотека sklearn для реализации алгоритма K-средних использовалась с числом кластеров = 4. Следующий блок кода реализует алгоритм и возвращает количество выборок в каждом кластере и метки кластера.

from collections import Counter # count occurrences 
# set number of clusters
kclusters = 4
# run k-means clustering
kmeans = KMeans(init=”k-means++”,n_init=50, max_iter=300, random_state=42, n_clusters=kclusters).fit(melb_grp)
print(Counter(kmeans.labels_))

Результаты

Метки кластера были добавлены к фрейму данных, и этот набор данных объединен с фреймом данных, содержащим данные геолокации. Результирующий фрейм данных с метками кластера и геолокацией показан ниже:

Далее кластеры визуализируются на карте с помощью библиотеки Folium. Эта карта представляет собой сегментацию пригородов Мельбурна на основе культуры питания в соответствующих пригородах.

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

Общий кластерный анализ разбит на кластеры, как описано ниже.

Кластер 1:

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

Здесь следует отметить, что, согласно переписи населения Австралии 2016 года, большинство пригородов в этом кластере являются многоэтническими, однако они в основном состоят из австралийских и других западноевропейских этнических групп.

Среди 5 лучших категорий заведений «Пицца», «Итальянские рестораны»составляют большинство мест в этом кластере, это можно объяснить сильным влиянием итальянской кухни. о культуре питания Мельбурна на протяжении веков. За категориями следуют "японская", "тайская", которые также являются ключевой частью кухни Мельбурна. Cultureвместе с "Burger Joints", которые славятся своими австралийскими говяжьими бургерами.

Поэтому, глядя на категории мест проведения и культурную историю, этот кластер можно назвать «Мельбурнским».

Кластер 2:

Пригороды в этом кластере в основном состоят из северо-западных пригородов Мельбурна. Хотя в этом кластере всего несколько пригородов, в основном потому, что было недостаточно данных, возвращаемых из API Foursquare для этих пригородов.

Однако, согласно переписи населения Австралии 2016 года, высокий процент вьетнамцев наряду с китайскими этническими группами составляет основную часть демографии в этих регионах.

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

Следовательно, этот кластер можно отнести к преимущественно южноазиатскому.

Кластер 3.
Большинство районов этого кластера – это центр коммерческой деятельности в Мельбурне, а также различные ночные клубы.

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

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

Кластер 4:
Этот кластер содержит наибольшее количество пригородов, большинство пригородов
в этом кластере расположены на окраинах Мельбурна. Можно сделать вывод, что влияние этносов или культуры питания уменьшается по мере продвижения к внешним регионам Мельбурна.

В этом кластере преобладают заведения «Фаст-фуд», «Пицца» и «Сэндвич». Следовательно, этот кластер можно назвать кластером Fast-Food.

Обсуждение

В этом проекте я сегментировал пригороды на основе их культуры питания. Было в основном шесть кластеров, определенных после внедрения кластеризации K-средних на данных, собранных о почтовом индексе Мельбурна, и данных на основе местоположения из API Foursquare.

Каждый из кластеров, определенных в этом анализе, имеет свои уникальные характеристики, как показано в таблице ниже:

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

Однако с индивидуальной точки зрения можно получить четкое представление о распространении культуры питания в Мельбурне, а именно:

  • Большинство популярных австралийских кухонь можно найти недалеко от главного города.
  • Северо-западные и западные пригороды предлагают больше «южноазиатской» кухни.
  • Чем дальше от города, тем варианты питания ограничиваются «фаст-фудом».

Кроме того, с точки зрения бизнеса можно сделать следующие выводы:

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

Заключение

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

С другой стороны, в проекте были определенные ограничения в отношении данных, собранных из API Foursquare, поскольку было замечено, что существует ограниченный объем данных о некоторых категориях кухонь или мест, которые можно было собрать из API; большинство категорий мест, возвращенных из API, были категориями, не связанными с едой, или категориями популярных блюд. Тем не мение,

Поскольку в Мельбурне есть множество предприятий общественного питания, вполне возможно, что данные об этих местах не были доступны на платформе Foursquare.

Сказав это, такие приложения, как Yelp, Zomato или даже Google Places API, должны быть в состоянии предоставить широкий спектр данных о местах, связанных с едой. Возможно, это потенциал

возможность стать частью будущего объема анализа.

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

Ссылки

[1] Записная книжка, созданная Алексом Аклсоном и Полонг Лином для курса «Applied Data Science Capstone» на Coursera.

[2] Быстрая статистика переписи населения 2016 г.: Австралия. (2016). Получено 13 января 2021 г. с https://quickstats.censusdata.abs.gov.au/census_services/getproduct/census/2016/quickstat/036.

[3] API мест. Получено 2 января 2021 г. с https://developer.foursquare.com/docs/places-api/

Спасибо, что заглянули!

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

Полный блокнот смотрите здесь

Связано