Анализ выбора места жительства и борьбы с преступностью

1. Введение

Фон

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

Проблема

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

Решение

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

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

2. Данные

Для анализа используется набор данных о преступности Лондона. Описание того же приведено ниже:

1. lsoa_code: код Нижней зоны сверхвысокой производительности в Большом Лондоне.
2. Район: Общее название района Лондона.
3. major_category: Классификация преступлений на высоком уровне.
4. minor_category : Низкоуровневая категоризация преступлений в рамках основной категории.
5. значение: ежемесячное зарегистрированное количество категориальных преступлений в данном районе.
6. год: Год зарегистрированных подсчетов, 2008–2016 гг.
7. месяц: Месяц зарегистрированных подсчетов, 1–12.

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

Веб-парсинг

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

from bs4 import BeautifulSoup # library for web scrapping
wikipedia_link='https://en.wikipedia.org/wiki/List_of_London_boroughs'
#using beautiful soup to parse the XML code.
wikipedia_page=requests.get(wikipedia_link).text
soup = BeautifulSoup(wikipedia_page,'xml')
print(soup.prettify())

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

#extracting the table from webpage
table = soup.find_all('table',{'class':'wikitable sortable'})
print(table)
#converting table to dataframe
London_table = pd.read_html(str(table[0]), index_col=None, header=0)[0]
London_table.tail()

Набор данных о преступности в Лондоне

Загрузка набора данных.

df = pd.read_csv("london_crime_by_lsoa.csv")
#taking recent year - 2016
df.drop(df.index[df['year']!=2016],inplace=True)
#Removing all entries where crime value is null
df=df[df.value!=0]
#reset index & dropping previous one
df=df.reset_index(drop=True)

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

#change the column names
df.columns =['LSOA_Code','Borough','Major_Category','Minor_Category','No_of_Crimes','Year','Month']
#pivoting the table to view the no. of crimes for each major category in each Borough
London_crime = pd.pivot_table(df,values=['No_of_Crimes'],
                             index=['Borough'],
                             columns=['Major_Category'],
                             aggfunc=np.sum,fill_value=0)
#total crimes per borough
London_crime['Total']=London_crime.sum(axis=1)
London_crime.columns = ['Borough','Burglary', 'Criminal Damage','Drugs','Other Notifiable Offences',
                        'Robbery','Theft and Handling','Violence Against the Person','Total']
London_crime.head()

Теперь объедините обе таблицы.

#combining both dataframes
final_crime = pd.merge(London_crime, London_table, on='Borough')
final_crime.head()

3. Исследовательский анализ данных (EDA)

Функция описания в Python используется для получения статистики лондонских данных о преступности, она возвращает среднее значение, стандартное отклонение, минимум, максимум, 1-й квартиль (25%), 2-й квартиль (50%) и 3-й квартиль (75%). по каждой из основных категорий преступлений. Подсчет для каждой из основных категорий преступлений возвращает значение 33, которое представляет собой количество районов Лондона. «Кража и манипуляция» - это самое частое преступление, о котором сообщалось в 2016 году, за ним следуют «Насилие против личности», «Уголовный ущерб». Самые низкие зарегистрированные преступления - это «наркотики», «ограбление» и «другие преступления, подлежащие уведомлению».

London_crime.describe()

Визуализация 5 районов с НАИБОЛЬШИМ количеством преступлений.

Наблюдение: в Вестминстере больше всего преступлений.

Визуализация различных видов преступлений в районе Вестминстер.

Вывод: можно обнаружить, что в Вестминстере больше всего преступлений по сравнению с другими районами Лондона.

Визуализируйте 5 районов с НАИМЕНЬШИМ количеством преступлений.

Наблюдение: в районе Лондона самый низкий номер. преступлений, зарегистрированных за 2016 год.

Согласно странице Википедии, лондонский Сити является 33-м основным районом Большого Лондона, но не является лондонским районом.
Поэтому мы сосредоточимся на следующем районе с наименьшим уровнем преступности, то есть в Кингстоне-на-Темзе.

Визуализация различных видов преступлений в районе Кингстон-апон-Темс.

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

4. Интеграция FourSquare API.

Foursquare API позволяет разработчикам приложений взаимодействовать с платформой Foursquare. Сам API представляет собой набор адресов RESTful, на которые вы можете отправлять запросы, поэтому на ваш сервер действительно нечего загружать. Таким образом, мы будем использовать этот API для извлечения сведений о важных местах, таких как бар, гараж, ресторан и т. Д., Для каждого района в Кингстоне-апон-Темзе.

Но сначала нужно найти координаты окрестностей.

import geocoder 
from geopy.geocoders import Nominatim #to convert an address into latitude and longitude values
Latitude = []
Longitude = []
for i in range(len(Neighborhood)):
    address = '{},London,United Kingdom'.format(Neighborhood[i])
    geolocator = Nominatim(user_agent="London_agent")
    location = geolocator.geocode(address)
    Latitude.append(location.latitude)
    Longitude.append(location.longitude)
print(Latitude, Longitude)

Визуализация района Кингстон-апон-Темза с использованием библиотеки листов.

Теперь создаем URL-адрес запроса API и делаем запрос GET.

# 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']

Одно горячее кодирование

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

Итак, теперь применим эту кодировку.

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

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

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

Кластеризация похожих окрестностей вместе с использованием кластеризации k-средних.

# import k-means from clustering stage
from sklearn.cluster import KMeans
# set number of clusters
kclusters = 5
safe_grouped_clustering = safe_grouped.drop('Neighborhood', 1)
# run k-means clustering
kmeans = KMeans(n_clusters=kclusters, random_state=0).fit(safe_grouped_clustering)

Теперь визуализируем кластеры на карте с помощью folium.

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

6. Результаты

1-й кластер:

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

2-й кластер:

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

3-й кластер:

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

4-й кластер:

Наблюдение: Четвертый кластер имеет один район, который состоит из таких объектов, как вокзал, паб, еда, гастроном / винный погреб, химчистка и т. Д.

5-я группа:

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

7. Заключение

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