You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何将意大利企业数据生成地理可视化(含Choropleth Map)

实现意大利省/大区Choropleth地图的可行方案

核心思路

先从SQL提取按省/大区聚合的统计数据(比如企业数量、记录数),再结合意大利地理边界数据,用Python的地理可视化库生成Choropleth地图。以下是两种落地性强的方案:


方案1:Plotly(交互式地图,推荐)

Plotly的Choropleth支持直接调用内置地理数据或自定义GeoJSON,交互性强,适合团队展示。

步骤1:从SQL提取聚合数据

用Python连接你的SQL数据库,提取按Provincia或Regione分组的统计值:

import pandas as pd
import psycopg2  # PostgreSQL用这个,SQLite用sqlite3,MySQL用pymysql,按需替换

# 连接数据库(示例为PostgreSQL)
conn = psycopg2.connect(
    dbname="你的数据库名",
    user="用户名",
    password="密码",
    host="localhost"
)

# 按大区聚合的查询
query_regione = """
SELECT Regione, COUNT(*) as count
FROM 你的表名
GROUP BY Regione
"""
df_regione = pd.read_sql(query_regione, conn)

# 按省聚合的查询
query_provincia = """
SELECT Provincia, COUNT(*) as count
FROM 你的表名
GROUP BY Provincia
"""
df_provincia = pd.read_sql(query_provincia, conn)

conn.close()

步骤2:生成大区Choropleth地图

Plotly内置意大利大区地理匹配能力,直接用名称关联即可:

import plotly.express as px

fig_regione = px.choropleth(
    df_regione,
    locations="Regione",
    locationmode="country names",
    color="count",
    scope="europe",
    title="意大利大区企业分布",
    color_continuous_scale="YlOrRd",
    hover_name="Regione"
)
# 聚焦意大利区域,隐藏多余地图元素
fig_regione.update_geos(fitbounds="locations", visible=False)
fig_regione.show()

步骤3:生成省级Choropleth地图

省级需要加载自定义GeoJSON(提前下载意大利省边界数据保存到本地):

import json

# 加载本地GeoJSON文件
with open("italy_provinces.geojson") as f:
    italy_provinces_geo = json.load(f)

fig_provincia = px.choropleth(
    df_provincia,
    geojson=italy_provinces_geo,
    locations="Provincia",
    featureidkey="properties.name",  # 匹配GeoJSON中的省名字段
    color="count",
    title="意大利省级企业分布",
    color_continuous_scale="YlOrRd",
    hover_name="Provincia"
)
fig_provincia.update_geos(fitbounds="locations", visible=False)
fig_provincia.show()

方案2:GeoPandas + Matplotlib(静态地图,适合报告)

GeoPandas擅长处理地理数据,可生成高精度静态图,方便导出为图片/PDF。

步骤1:准备数据

先提取聚合数据,再加载意大利地理边界Shapefile:

import geopandas as gpd
import matplotlib.pyplot as plt

# 加载意大利大区/省的Shapefile(提前下载到本地)
gdf_regioni = gpd.read_file("italy_regions.shp")
gdf_province = gpd.read_file("italy_provinces.shp")

# 合并聚合数据与地理数据(确保名称字段匹配,比如gdf_regioni的"NAME"对应df_regione的"Regione")
gdf_regioni_merged = gdf_regioni.merge(df_regione, left_on="NAME", right_on="Regione", how="left")
gdf_province_merged = gdf_province.merge(df_provincia, left_on="NAME", right_on="Provincia", how="left")

步骤2:绘制静态Choropleth地图

# 大区地图
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
gdf_regioni_merged.plot(
    column="count",
    cmap="YlOrRd",
    linewidth=0.8,
    ax=ax,
    edgecolor="white",
    legend=True,
    legend_kwds={"label": "企业数量", "orientation": "horizontal"}
)
ax.set_title("意大利大区企业分布")
ax.axis("off")
plt.savefig("italy_regions_choropleth.png", dpi=300)

# 省级地图
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
gdf_province_merged.plot(
    column="count",
    cmap="YlOrRd",
    linewidth=0.8,
    ax=ax,
    edgecolor="white",
    legend=True,
    legend_kwds={"label": "企业数量", "orientation": "horizontal"}
)
ax.set_title("意大利省级企业分布")
ax.axis("off")
plt.savefig("italy_provinces_choropleth.png", dpi=300)

关键注意事项

  • 名称匹配:确保你的数据中Provincia/Regione的拼写和地理数据中的名称完全一致(比如重音、大小写差异),不一致的话用str.replace()或映射表统一。
  • 地理数据来源:可下载免费的意大利省/大区边界数据(Shapefile/GeoJSON格式),优先选官方或权威开源数据源。
  • 数据聚合:Choropleth需要数值型统计数据,必须先按地理区域聚合,不能直接用原始单条记录。

内容的提问来源于stack exchange,提问作者sickboy83

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 03:02:50