使用Folium与GeoPandas展示格鲁吉亚区域访客数据的问题
格鲁吉亚区域访客数据地图可视化问题解决
问题原因
- 使用的
naturalearth_lowres是全球国家级地理数据集,仅包含格鲁吉亚整体的边界信息,没有内部区域(如Kakheti、Imereti)的细分边界,因此无法渲染区域级色块。 - 代码中
key_on='feature.properties.name'指定匹配国家名称,和你的区域访客数据维度不匹配,无法建立区域数据与地理边界的关联。
改进方案
1. 获取格鲁吉亚区域级地理数据
需要下载包含格鲁吉亚各州/区域边界的GeoJSON或Shapefile,可从格鲁吉亚官方统计机构或公开地理数据平台获取(确保数据中的区域名称和你处理后的Regions列名称完全匹配,注意大小写、空格、缩写等细节,比如Adjara A/R需对应地理数据中的同名字段)。
2. 修改可视化代码
以下是调整后的完整代码示例(假设已获取名为georgia_regions.geojson的区域地理文件):
import pandas as pd import folium import geopandas # 1. 复用原有数据处理逻辑 data = pd.read_excel("https://geostat.ge/media/52189/visits-by-visited-region.xlsx", skiprows=[0]) data.drop(["Year", "Quarter", "Total", "Other regions"], axis=1, inplace=True) data.columns.name = 'Regions' data = pd.melt(data, value_name='Visitors') data = data[data["Regions"].str.contains("Country") == False] data.dropna(axis=0, inplace=True) data = data.groupby(["Regions"])['Visitors'].sum().reset_index() # 2. 读取格鲁吉亚区域级地理数据 georgia_regions = geopandas.read_file("georgia_regions.geojson") # 确保区域名称匹配,此处假设地理数据中区域字段名为'name',需根据实际调整 merged_data = georgia_regions.merge(data, how="left", left_on=['name'], right_on=['Regions']) merged_data.dropna(axis=0, inplace=True) # 3. 创建区域级Choropleth地图 # 设置地图中心为格鲁吉亚大致坐标 m = folium.Map(location=[42.3154, 43.3569], zoom_start=7) folium.Choropleth( geo_data=merged_data, name='choropleth', data=merged_data, columns=['Regions', 'Visitors'], # 此处key_on需匹配地理数据中的区域名称字段,比如feature.properties.name key_on='feature.properties.name', fill_color='OrRd', fill_opacity=0.7, line_opacity=0.2, legend_name='Visitors per Region' ).add_to(m) # 添加图层控制器 folium.LayerControl().add_to(m) m.save('georgia_region_visitors.html')
关键注意事项
- 务必确保地理数据中的区域名称和你处理后的
Regions列完全一致,若存在名称差异,需提前做字符串清洗(如去除空格、统一缩写、调整大小写)。 - 如果找不到官方GeoJSON,可以尝试从OpenStreetMap相关工具导出格鲁吉亚的区域边界数据。
内容的提问来源于stack exchange,提问作者data science
相关产品推荐
相关产品推荐

