www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home
Занимательная история, выдающиеся люди, малоизвестные факты, находки, открытия, фальсификации. Присоединяйся!

Отображение австралийских географических данных в Python

Дата публикации Jul 30, 2019

фотоВейн ТиснаUnsplash

Причина, по которой я начал эту статью, состоит в том, что я помню, какполный рабочий деньвыяснить способ нанесения определенных почтовых индексов на австралийскую карту, Я пытался сделать это с Google Data Studio, но это поддерживает только почтовые индексы США. Это заставляет меня задуматься: «Что, другие страны не важны? Это так? », Что побуждает меня исправить это, используя широту и долготу для отображения данных в Google Data Studio. Да, я пробовал это, но я не впечатлен. Вздох!

График широты / долготы в Google Data Studio

Это максимальный размер зума, когда я устанавливаю Zoom Area наСтрана> Австралия.Это что-то, но я не могу включить это в свой отчет, не так ли?

Затем я поговорил сНед Летчеркого я узнаю после его выступления вМельбурнская встреча Python Charmerи он показал мне путь и попросил меня пойти спрожилок, Спасибо, Нед! :)

Итак, я отложил Data Studio, принял его совет и начал новый проект на Python.

Теперь я приведу вас к моему сценарию:

Допустим, у меня есть клиенты, основанные на Виктории, Мельбурне, и мне нужно было определить, где находятся мои клиенты в прошлом финансовом году. У меня есть файл CSV, который имеет эти 5 столбцов:Почтовый индекс, пригород, штат, NumberOfClients,% клиентов в пригороде;который я извлек из моего хранилища данных с помощью Google Big Query. Я назову это как Таблица o1,

Схема сведений о клиенте в таблице BigQuery

Теперь я хотел сопоставить эти почтовые индексы с широтой и долготой, и мне нужно былоТочный (Потому что большинство бесплатных наборов данных далеко не точны)набор данных, который включает в себя все основные пригороды в Мельбурне. Затем снова приходит мой друг Нед и перенаправил меня к этомустраницакоторый имеет австралийские почтовые индексы + широта / долгота с более чем 16 000 записей. Теперь я впечатлен!

Детали пригорода для Виктории, Австралия.

Затем мне нужно было объединить эти два файла CSV и создать один (похожий на SQL Join), который включает в себя следующие поля данных:

  • салонов Почтовый
  • предместья
  • Количество клиентов
  • государственный
  • широта
  • Долгота

Я уверен, что существует множество способов объединить эти два файла, но, поскольку я больше являюсь другом GCP, я буду использовать BigQuery для объединения этих двух файлов (Таблицы данных). Я буду создавать новую таблицу данных какAus_PostalCodes_VICс помощью вышеуказанного набора данных.

Таблица данных Схема файла, который я скачал по ссылке.

Запустите простое соединение BigQuery и сохраните результат в другой таблице какAggregatedClientsByLocation.

Данные в объединенной таблице (объединенная таблица)

Круто. Теперь у меня есть набор данных, о котором я мечтал. Теперь вторая часть с Folium. Если на вашем компьютере не установлен folium, запустите команду pip, и она завершится через минуту или две.

Создайте новый блокнот в Jupyter и давайте сделаем немного кодирования!

фотоРод ЛонгнаUnsplash

Перво-наперво:

import folium
import pandas as pddf = pd.read_csv("AggregatedClientDetails2018_19.csv")
df
Данные в CSV

Поскольку я буду в основном фокусироваться на Мельбурне и окруженных пригородах, я буду использовать координаты для CBD в Мельбурне (город) и установлю размер увеличения до 8.

m = folium.Map([-38.043995, 145.264296], zoom_start=8)
m
Это мой городской приятель! ^ _ ^

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

Хорошо, теперь у меня есть эти требования для выполнения.

  • Поэтому я хочу прочитать каждую строку и получить столбец lat и long, чтобы отобразить местоположение на нашей милой карте.
  • Я хочу отобразить номер значения клиента при нажатии на каждое местоположение (Выскакивать).
  • Название места должно отображаться при наведении (ToolTip).
for index, row in df.iterrows():  folium.Marker([row['lat'], row['long']],
popup=row['COUNT_OF_CLIENTS'],
tooltip=row['SUBURB'],
).add_to(m)

Давайте посмотрим, что мы получили:

m
Счастье.

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

Я нажал на регион Южный Мельбурн, а в Южном Мельбурне 7 клиентов. Вы не можете увидеть всплывающую подсказку, так как мне нужно двигать мышью, чтобы сделать снимок экрана! Вздох! Но да, это тоже работает.

Теперь вы можете сохранить его с помощью следующей команды:

m.save('Client_Address_20118_19.html')

Круто верно? Мы уже закончили? Не боюсь.

фотоПаула МэйнаUnsplash

У меня есть карта, которую я хотел. Но это карта, о которой я мечтал? Я хочу чего-то большего, чем это. Что-то вроде этого; Только то, что мы живем за пределами США, не означает, что мы не можем подготовить это!

Это называется Bubble Map. Размер пузыря варьируется.

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

Не только это, я разделю количество клиентов на 5 разделов:

  • Количество клиентов> 150
  • Количество клиентов> 100
  • Количество клиентов> 50
  • Количество клиентов> 10
  • Количество клиентов <10

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

if row['COUNT_OF_CLIENTS'] >= 150:
marker_color = 'darkred'
fill_color = 'darkred'
elif row['COUNT_OF_CLIENTS'] >= 100:
marker_color = 'darkred'
fill_color = 'red'
elif row['COUNT_OF_CLIENTS'] >= 50:
marker_color = 'darkred'
fill_color = 'lightred'
elif row['COUNT_OF_CLIENTS'] >= 10:
marker_color = 'darkred'
fill_color = 'orange'
else:
marker_color='darkred'
fill_color = 'darkpurple'

Тогда вместо использованияFolium.Marker, Я используюпрожилок Круг

folium.Circle(
location=[row['lat'], row['long']],
popup= 'Clients:' +str(row['COUNT_OF_CLIENTS']),
tooltip=row['SUBURB'],
radius=row['COUNT_OF_CLIENTS']*10,
color=marker_color,
fill=True,
fill_color=fill_color,
).add_to(m)

Таким образом, полный цикл for должен выглядеть так:

for index, row in df.iterrows():if row['COUNT_OF_CLIENTS'] >= 150:
marker_color = 'darkred'
fill_color = 'darkred'
elif row['COUNT_OF_CLIENTS'] >= 100:
marker_color = 'darkred'
fill_color = 'red'
elif row['COUNT_OF_CLIENTS'] >= 50:
marker_color = 'darkred'
fill_color = 'lightred'
elif row['COUNT_OF_CLIENTS'] >= 10:
marker_color = 'darkred'
fill_color = 'orange'
else:
marker_color='darkred'
fill_color = 'darkpurple'

folium.Circle(
location=[row['lat'], row['long']],
popup= 'Clients:' +str(row['COUNT_OF_CLIENTS']),
tooltip=row['SUBURB'],
radius=row['COUNT_OF_CLIENTS']*10,
color=marker_color,
fill=True,
fill_color=fill_color,
).add_to(m)

Давайте посмотрим на результат сейчас, не так ли? :)

m
Теперь я впечатлен.

Давайте увеличим масштаб.

Да, я впечатлен

Итак, я хотел, чтобы моя карта была такой, и я собираюсь включить это в свой отчет.Нажмите здесь, чтобы увидеть полную карту(Скачать и просмотреть).Я надеюсь, что эта статья находит вас хорошо. Дайте мне знать, если у вас есть какие-либо вопросы или проблемы, касающиеся кода. Спасибо.

Увидимся в другой жизни!

Прощайте!

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map