地理数据分析库GeoPandas - 使用洲际数据绘制图表

4

我正在尝试使用 Geopandas 在各大洲上绘制数据。

我有一个数据透视表,显示了每个国家记录的票数:

    Number of Tickets
region
Africa            370
Americas         1130
Asia              873
Europe            671
Oceania           445

在我的工单列表数据帧中,记录了来自每个国家的案例。每个国家都映射到一个地区和一个洲。根据这种逻辑,每个记录的工单都有一个指定的国家、地区和洲。
为了能够绘制数据,我将Geopandas数据帧(国家几何数据)与我的工单数据帧合并,使用三个字母的国家代码,并确保结果数据帧是地理数据帧。
tickets_region = pd.merge(world, tickets, left_on='ISO_A3', right_on='code-3')

type(tickets_region)
geopandas.geodataframe.GeoDataFrame

我尝试使用以下代码绘制数据:

fig, ax = plt.subplots()
ax = tickets_region.plot('continent', cmap='Reds',scheme='headtailbreaks')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.title('Number of Tickets by Continent')
plt.box(False)
plt.show()

然而,这个代码块从不完成,占用大量内存和CPU周期,我必须按Ctrl-C来中止它。相同的代码可用于“code-3”(三字母国家代码)。

我认为这是由于geojson文件中未定义“continent”地理位置,但我期望Python通过累加门票数量来填充该地理位置。我看到我的期望在某些地方有破损的逻辑,但我无法看到那一点。

有关如何使内容绘图工作的任何想法吗?

谢谢。

编辑:“world”数据帧是从https://datahub.io/core/geo-countries下载的geojson文件。

2个回答

3

您可以使用GeoPandas数据框的方法dissolve()。 您可以查看这里的GeoPandas文档。 您的代码可以修改为:

tickets_region = tickets_region.dissolve(by='continent', aggfunc='sum')

fig, ax = plt.subplots()
ax = tickets_region.plot(column='Number of Tickets', cmap='Reds',scheme='headtailbreaks')
ax.tick_params(left=False, labelleft=False, bottom=False, labelbottom=False)
plt.title('Number of Tickets by Continent')
plt.box(False)
plt.show()

抱歉晚回复Pierre-Loic。我正在测试您提到的溶解,但它对20K行没有任何影响:iPython变得无响应。我仍在研究您的答案,并将在找到解决方案时回复您。 - tbalci
1
非常感谢,是的这就是解决方案。我只想指出,使用.dissolve时,当应用于数千行数据时,它不会结束。我建议先进行数据汇总(pivot_table、pivot...),然后再使用.dissolve。否则,它将消耗大量CPU周期和内存。 - tbalci

1

最近我利用这个线程进行了分析。数据缺少大陆坐标以绘制图表,所以我想导入现有数据集并将它们合并在一起。以下是导入和dissolve代码:

import geopandas as gpd

world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")).drop(['gdp_md_est'], axis=1)
world = world.dissolve(by='continent', aggfunc='sum')
world = world.merge(d, how='inner', left_on='continent', right_index=True)

Kaggle笔记本位于https://www.kaggle.com/code/pavfedotov/gtc-map

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接