Как использовать zipcodes для создания графика карты в python

#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()