#python-3.x #pandas #matplotlib #geolocation #geopandas
Вопрос:
У меня есть простой фрейм данных, такой как
colC zipcode count
val1 71023 1
val2 75454 3
val3 77034 2
val2 78223 3
val2 91791 4
это все наши почтовые индексы.
Я хочу отобразить почтовые индексы и количество значений в ColC на карте. Например, почтовый индекс 75454 содержит val2, colC
поэтому он должен иметь другой цвет, чем почтовый индекс 71023, в котором указан val1 colC
Кроме того, я хочу создать тепловую карту, где count
столбец обозначает интенсивность тепловой карты по всей карте.
Я просмотрел некоторую документацию по геопандам, но, похоже, мне нужно преобразовать zipcodes либо в файлы формы, либо в geojson, чтобы определить границы. Я не в состоянии понять этот шаг.
Является ли геопанда лучшим инструментом для достижения этой цели?
Любая помощь будет очень признательна
Обновить
Я смог добиться некоторого прогресса, поскольку
import pandas as pd
import pandas_bokeh
import matplotlib.pyplot as plt
import pgeocode
import geopandas as gpd
from shapely.geometry import Point
from geopandas import GeoDataFrame
pandas_bokeh.output_notebook()
nomi = pgeocode.Nominatim('us')
edf = pd.read_csv('myFile.tsv', sep='t',header=None, index_col=False ,names=['colC','zipcode','count'])
edf['Latitude'] = (nomi.query_postal_code(edf['zipcode'].tolist()).latitude)
edf['Longitude'] = (nomi.query_postal_code(edf['zipcode'].tolist()).longitude)
geometry = [Point(xy) for xy in zip(edf['Longitude'], edf['Latitude'])]
gdf = GeoDataFrame(edf, geometry=geometry)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
gdf.plot(ax=world.plot(figsize=(10, 6)), marker='o', color='red', markersize=15);
plt.savefig('world.jpg')
тем не менее, это дает мне карту всего мира. как я могу уменьшить его, чтобы просто показать мне США, так как именно там находятся все мои почтовые индексы?
Ответ №1:
оказывается, сюжет лучше всего подходит для меня
import pandas as pd
import pandas_bokeh
import matplotlib.pyplot as plt
import pgeocode
import geopandas as gpd
from shapely.geometry import Point
from geopandas import GeoDataFrame
pandas_bokeh.output_notebook()
import plotly.graph_objects as go
nomi = pgeocode.Nominatim('us')
edf = pd.read_csv('myFile.tsv', sep='t',header=None, index_col=False ,names=['colC','zipcode','count'])
edf['Latitude'] = (nomi.query_postal_code(edf['zipcode'].tolist()).latitude)
edf['Longitude'] = (nomi.query_postal_code(edf['zipcode'].tolist()).longitude)
fig = go.Figure(data=go.Scattergeo(
lon = edf['Longitude'],
lat = edf['Latitude'],
text = edf['colC'],
mode = 'markers',
marker_color = edf['count'],
))
fig.update_layout(
title = 'colC Distribution',
geo_scope='usa',
)
fig.show()