JpsBookOfLife/ofac-sanctioned-vessels-dashboard

GitHub: JpsBookOfLife/ofac-sanctioned-vessels-dashboard

一个整合数据采集、清洗与交互式可视化的OFAC制裁船舶追踪仪表板,并配备AI智能体以支持自然语言查询。

Stars: 0 | Forks: 0

# OFAC 制裁船舶 — 爬虫、数据处理管道与分析师仪表板 这是一个 Python 项目,它拉取**最新的 OFAC SDN (Specially Designated Nationals) 列表**,筛选出每一艘**受制裁的船舶**,对记录进行清洗和丰富,并在交互式的 **Streamlit 仪表板**中展示它们——配备完整的制裁计划 ↔ 关联公司网络图,以及一个由 **Claude 驱动的分析师智能体**,可以回答有关该舰队的问题。 ![仪表板演示](https://static.pigsec.cn/wp-content/uploads/repos/cas/6d/6df578e62349e721318a60b27ae22ce6cc1009dc7051293af97c2c5445dd2938.gif) ## 功能介绍 - **抓取**官方 OFAC 制裁列表服务以获取最新的 SDN 列表 (`ofac_scrapper.py`) - 使用 pandas 对原始 CSV 进行**清洗与丰富** (`clean_ofac_data.py`): - 仅保留真实的船舶(包含有效 7 位 IMO 编号,并与经过审核的船舶参考列表进行交叉核对的行) - 从自由文本备注中提取 IMO,并去重以确保每艘船只有一行记录 - 将行政命令计划代码合并为其基础计划(例如 `DPRK3`, `DPRK4` → `DPRK`; `RUSSIA-EO14024` → `RUSSIA`),并将它们展开为按计划划分的 Yes/No 列 - 从参考列表中填补缺失的**载重吨位** - 在 Streamlit 中**可视化**舰队 (`dashboard.py`):核心指标、按计划和按船旗的图表、吨位分布、交互式的公司↔计划网络图,以及可过滤的原始数据 - 通过嵌入的数据集工具调用 AI 智能体**回答问题**,包括将查询移交至 MarineTraffic 以获取实时船舶位置 在撰写本文时,该数据处理管道已处理了分布在约 540 家关联公司和 58 个船旗下的约 1,480 艘受制裁船舶,其中 94% 的船舶拥有载重吨位数据。 ## 截图 ### 概览 — 指标、计划与船旗 侧边栏中的过滤器(制裁计划、船舶船旗)驱动着页面上的所有图表和表格。 ![概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/c2/c27af749d552dfc25d1d981c5f3ed8ad19861acabf10a19190cc62063afd6e24.png) ### 载重吨位分布 一目了然地查看舰队运力——从小型拖船到超过 30 万 DWT 的原油运输船。 ![载重吨位](https://static.pigsec.cn/wp-content/uploads/repos/cas/e3/e30be66a8e3eaa944f2049b54fac1d299c5e52de9d62fbafb037013d7dc22826.png) ### 网络:制裁计划 ↔ 关联公司 红色节点代表制裁计划,蓝色节点代表在船舶备注中提及的公司("Linked To: …")。连线粗细表示船舶数量。点击节点可列出该实体的船舶,并提供各船舶对应的 MarineTraffic 链接。RUSSIA、IRAN/SDGT、DPRK、GLOMAG 和 VENEZUELA 集群可以清晰地分辨开来。 ![网络图](https://static.pigsec.cn/wp-content/uploads/repos/cas/5b/5b7e8d5d41be24568b3bc9dc09953a7504080b659baf964b370fa588a99aa56e.png) ### 询问智能体 — 数据集问题 智能体(使用工具的 Claude)通过 IMO、船舶名称或关联公司搜索清洗后的数据集,并且对其能查看的数据边界非常明确。 ![智能体回答数据集问题](https://static.pigsec.cn/wp-content/uploads/repos/cas/b2/b28b15e2c19d19547ef8e111c1d7257036acc58de396ed309ba0ed54e0082146.png) ### 询问智能体 — 实时位置移交 由于数据集没有实时 AIS 数据,对于“它现在在哪里?”的问题,智能体会识别出该船舶,并按 IMO 将其移交给 MarineTraffic。 ![智能体返回 MarineTraffic 链接](https://static.pigsec.cn/wp-content/uploads/repos/cas/6c/6c06f33fdcf52571a4f1a465ccb28905138ba9e481cbc84040751ee3d42ec041.png) ## 工作原理 ``` ┌─────────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐ │ ofac_scrapper.py │ │ clean_ofac_data.py │ │ dashboard.py │ │ │────▶│ │────▶│ │ │ downloads SDN.CSV │ │ filter to vessels │ │ Streamlit + Plotly │ │ from OFAC Sanctions │ │ extract IMO, dedupe │ │ + vis.js network │ │ List Service │ │ consolidate programs │ │ + Claude agent │ │ → Data/data.csv │ │ enrich deadweight │ │ │ └─────────────────────┘ │ → Data/final_data.csv│ └─────────────────────┘ └──────────────────────┘ ``` **数据源** - `Data/data.csv` — 原始 SDN 列表,每次运行时都会从 [OFAC 制裁列表服务](https://sanctionslistservice.ofac.treas.gov/)下载(未提交至仓库;可通过爬虫重新生成) - `Data/enrichment.csv` — 以 IMO 为键的经过审核的船舶参考列表,用于确认 "IMO" 确实属于某艘船舶,并用于补全载重吨位 - `Data/final_data.csv` — 仪表板读取的清洗后的输出数据(已提交最新副本,以便仪表板开箱即用) **智能体**直接基于 Anthropic API 构建,包含两个工具: | 工具 | 用途 | |------|---------| | `find_vessels` | 通过 IMO、船舶名称或关联公司搜索清洗后的数据集;返回身份、船旗、吨位、呼号和制裁计划等信息 | | `marinetraffic_links` | 针对实时位置 / 速度 / 航向的问题,通过 IMO 返回船舶的 MarineTraffic URL——数据集本身没有实时 AIS 数据源 | 系统提示词将智能体的范围限定在 OFAC/船舶问题上,并指示其绝不编造船舶数据。 ## 运行说明 ``` pip install -r requirements.txt python ofac_scrapper.py # 1. download the latest SDN list python clean_ofac_data.py # 2. clean + enrich -> Data/final_data.csv streamlit run dashboard.py # 3. open the dashboard ``` 本仓库附带了一份最新的 `Data/final_data.csv`,因此您可以直接跳到第 3 步进行演示。 **智能体(可选):** 在您的环境中设置 `ANTHROPIC_API_KEY` 以启用“询问智能体”部分。若未设置,仪表板的其余功能仍可正常运行。 **macOS 快捷方式:** 双击 `Launch Dashboard.command` 即可运行以上三个步骤。 ## 仓库结构 ``` ofac_scrapper.py # step 1 — download raw SDN list clean_ofac_data.py # step 2 — clean, filter to vessels, enrich dashboard.py # step 3 — Streamlit dashboard + Claude agent Launch Dashboard.command # macOS one-click launcher (steps 1-3) requirements.txt Data/ enrichment.csv # vessel reference list (IMO -> deadweight) final_data.csv # cleaned output the dashboard reads docs/screenshots/ # images used in this README ``` ## 构建技术 Python · requests · pandas · Streamlit · Plotly · streamlit-agraph (vis.js) · Anthropic API (Claude)
标签:BeEF, DLL 劫持, Kubernetes, Python, Streamlit, 大语言模型, 无后门, 爬虫, 系统分析, 网络分析, 访问控制, 逆向工具