一个基于 Python 和 Folium 的供应链风险数据可视化工具,能够从 Markdown 格式的风险评估报告中自动提取地缘政治风险(GDP)和自然灾害风险(NDP)数据,并生成交互式的全球风险地图。
- 📊 自动数据提取:支持 LLM和正则表达式两种方式从报告中提取风险数据
- 🗺️ 交互式地图:使用 Folium 生成专业的交互式风险地图
- 🎯 多维度可视化:
- 地缘政治风险(GDP):以圆圈大小和颜色表示风险等级
- 自然灾害风险(NDP):以图标标记表示不同灾种
- 📈 风险概览面板:实时显示整体风险等级、GDP/NDP 综合概率、置信区间等关键指标
- 🎨 UI 设计:现代化的界面设计,支持信息提示、折叠面板等功能
.
├── main.py # 主程序文件
├── research_assessment_manager_report.md # 风险报告示例
├── honda_risk_viz.html # 生成的交互式地图
├── coordinate_cache.json # 坐标缓存文件(自动生成)
├── README.md # 项目说明文档
└── .gitignore # Git 忽略文件
- Python 3.8+
- 依赖包:
folium,pandas,openai,python-dotenv,requests
pip install folium pandas openai python-dotenv requests如果使用 LLM 提取数据,需要配置 DeepSeek API:
# Windows PowerShell
$env:DEEPSEEK_API_KEY="your-api-key-here"
$env:DEEPSEEK_API_BASE="https://api.deepseek.com"
# Linux/Mac
export DEEPSEEK_API_KEY="your-api-key-here"
export DEEPSEEK_API_BASE="https://api.deepseek.com"python main.py默认情况下,程序会:
- 读取
research_assessment_manager_report.md报告文件 - 使用 LLM 自动提取风险数据(如果配置了 API 密钥)
- 生成
honda_risk_viz.html交互式地图文件
报告应包含如下格式的表格:
| 关键供应国/地区 | 基准值(%) | 当前估算值(%) | 置信区间(95%) |
|------------------|-------------|------------------|------------------|
| 荷兰 | 3 | 12 | [10, 14] |
| 中国 | 2 | 6 | [4, 8] |报告应包含如下格式的表格:
| 灾种 | 独立概率(%) | 区域位置 | 贡献度(%) |
|------|----------------|----------|-------------|
| 地震 | 4.2 | 日本福岛(N32°4' E118°8') | 38% |
| 台风 | 3.5 | 越南中部(N15° E108°) | 32% |- 度分秒格式:
N32°4' E118°8'- 自动解析 - 国家名称:自动使用预设的国家中心坐标,或通过地理编码API获取
- 城市/地区名称:优先使用坐标修正表,未找到则通过地理编码API自动获取
- 自动地理编码:对于未知地点,系统会自动调用 Nominatim API 获取坐标并缓存
-
国家边界高亮:有风险的国家会以半透明彩色区域高亮显示
- 🟠 橙色:高风险国家(GDP>10%)
- 🟡 黄色:中风险国家(5%<GDP≤10%)
- 🔵 蓝色:低风险国家(GDP≤5%)
- 使用实际的国家边界 GeoJSON 数据
-
圆圈:表示地缘政治风险(GDP)
- 🟠 橙色:高风险(>10%)
- 🔵 蓝色:中低风险(≤10%)
- 圆圈大小与风险值成正比
-
图标标记:表示自然灾害风险(NDP)
- 🔴 红色:地震风险
- 🔵 蓝色:台风/洪水风险
- ER1 低:GDP<5% 且 NDP<7%
- ER2 中:GDP 5-15% 或 NDP 7-20%
- ER3 高:GDP>15% 且 NDP>20%
- 点击地图上的标记查看详细信息
- 左侧面板显示风险概览和详细数据表格
- 右侧面板显示图例和筛选说明
- 支持面板折叠/展开
-
LLM 提取(推荐)
- 使用 DeepSeek API 进行语义化提取
- 支持更灵活的报告格式
- 自动识别坐标、风险值等关键信息
-
正则表达式提取(备用)
- 基于预定义的正则模式
- 不依赖外部 API
- 适用于格式规范的报告
- 自动解析度分秒格式坐标
- 内置常用国家和城市的坐标映射
- 支持坐标修正表(如日本福岛、越南中部等)
✅ 核心函数验证:
-
geocode_location()函数- ✅ 缓存检查逻辑正确
- ✅ API请求参数正确
- ✅ 错误处理完善
- ✅ 缓存保存功能正常
-
get_location_coord()函数- ✅ 优先级顺序正确
- ✅ 参数传递正确
- ✅ 返回值格式正确
-
RiskReportParser类- ✅ 初始化参数支持
use_geocoding - ✅
extract_gdp_table()已集成自动坐标获取 - ✅
extract_ndp_table()已集成自动坐标获取
- ✅ 初始化参数支持
-
generate_map()函数- ✅ LLM提取路径已集成
- ✅ 正则表达式提取路径已集成
- ✅ 参数支持
use_geocoding
系统支持多种坐标获取方式,按优先级自动选择:
- 坐标修正表:已知城市/地区的精确坐标(如日本福岛、越南中部等)
- 国家坐标字典:常用国家的中心点坐标(作为缓存和备用)
- 度分秒坐标解析:自动解析报告中的度分秒格式坐标(如
N32°4' E118°8') - 地理编码API(推荐):使用 Nominatim(OpenStreetMap)自动获取未知地点的坐标
- 支持中文地点名称
- 自动缓存查询结果到
coordinate_cache.json - 避免重复查询,提高效率
✅ 已实现的功能:
-
地理编码API集成
- 使用Nominatim(OpenStreetMap)API
- 支持中文地点名称
- 遵守API速率限制(每秒1次请求)
- 自动处理错误和超时
-
坐标缓存机制
- 自动保存到
coordinate_cache.json - 下次查询时自动使用缓存
- 避免重复API调用
- 自动保存到
-
多级坐标获取策略
- 优先级1:坐标修正表(精确坐标)
- 优先级2:国家坐标字典(预设坐标)
- 优先级3:度分秒坐标解析
- 优先级4:地理编码API(自动获取)
-
全面集成
- LLM提取方法已集成
- 正则表达式提取方法已集成
- 向后兼容所有现有功能
- 运行
python main.py处理报告 - 系统会自动查询新地点的坐标
- 坐标会自动保存到缓存文件
- 可能需要一些时间(API速率限制)
- 已缓存的地点会立即加载
- 只有新地点才会调用API
- 速度会明显提升
如果需要禁用API(仅使用预设坐标):
generate_map("report.md", "output.html", use_llm=True, use_geocoding=False)欢迎提交 Issue 和 Pull Request!
按重要性降序
- 测试系统功能/BUG,测试更多报告实例
- 设计接口,系统输入:markdown文件;系统输出:html文件
国家/风险坐标问题✅- ✅ 列表(静态)- 已实现国家坐标字典和坐标修正表
- ✅ 随用随加(静态)- 坐标缓存自动保存
- ✅ 大模型自动添加(动态,推荐)- 已实现地理编码API自动获取
- 前后端分离,减少代码冗余