python - 根据邮政编码在真实地图上显示数据
问题描述
我尝试在真实地图上显示数据(数据应在加拿大安大略省内):我有 .csv 文件,其中包含 A 和 B 两列,A 是邮政编码,B 是其关联值(整数,1 到 5) ,我想找到 A 映射到的区域并根据关联的值对其进行着色。例如。邮政编码 P0G、P0A(加拿大邮政编码的前 3 位数字,代表一个区域),关联值为 2 和 5,我想在真实的这两个区域上显示不同的颜色(可能 2 为绿色,5 为红色)地图。
我不知道如何 tbh,也许使用 Python 或一些网站服务或一些 API?我以前没有在真实地图上可视化数据的经验。
我上面描述的问题是一个简化版本。实际问题有更多列(域),每行一个邮政编码,我需要|domains|
为每个域生成多个图形/地图。但我想一旦我知道如何做一个领域,那么我应该能够做所有事情。
我尝试使用像 SimplyAnalytics 这样的在线分析工具,但没有弄清楚如何同时显示许多不同颜色的区域。我试图搜索类似的问题,但似乎由于最终目标和数据格式不同,因此代码/方法的更改可能会有很大差异。
谢谢!!!
一些示例数据将是: 在此处输入图像描述
解决方案
如果你想用 python 来做,你可以使用 geopandas 库。下面是一个示例代码(Github Gist)。首先,我们需要获取定义每个邮政编码区域(转发分类区域)(链接)的 shapefile。然后过滤安大略省的邮政编码并将其与您要绘制的数据连接起来。
import geopandas
import pandas as pd
import pandas_bokeh
import matplotlib.pyplot as plt
pandas_bokeh.output_notebook()
canada = geopandas.read_file("./gfsa000b11a_e.shp")
ontario = canada[canada['PRUID'] == '35']
# Sample data to plot
df=pd.DataFrame({'PCODE': ['P0V','P0L','P0T','P0Y', 'P0G', 'P2N'], 'A':[6,3,5,2,2,4] })
# Join ontario dataset with sample data
new_df=ontario.join(df.set_index('PCODE'), on='CFSAUID')
new_df.plot_bokeh(simplify_shapes=20000,
category="A",
colormap="Spectral",
hovertool_columns=["CFSAUID","A"])
推荐阅读
- javascript - 自动计算器
- linux - 打开 AppImage 什么都不做。我能做些什么?
- python - 将 list[0], list[1], list[2],... 压缩成一个简单的语句
- java - 如何解决“无法应用适配器”错误?
- spring-cloud-stream - 了解 Spring Cloud Stream Kafka 和 Spring Retry
- tsql - 创建/更新索引时减少 CPU 和读取的策略不是一个选项
- amazon-connect - 我想添加到我的 Amazon Connect 调度应用程序的功能
- voiceover - VoiceOver 是否有类似于 JAWS 的链接列表和标题列表?
- java - 我应该使用一两个队列吗?
- postgresql - 将字符串转换为日期,然后减去几个月