gl0bsec/get_gdelt_data

GitHub: gl0bsec/get_gdelt_data

GDELT 数据采集工具包,用于拉取、过滤、增强和导出 GDELT 全球事件数据,支持多格式导出与地理可视化。

Stars: 0 | Forks: 0

# GDELT 数据收集器 一个用于获取、过滤、丰富和导出 [GDELT](https://www.gdeltproject.org/) 事件数据的 Python 工具包。 ## 功能 - **收集** 来自 GDELT 事件表的任意日期范围事件 - **过滤** 按国家代码、文本规则(YAML/JSON)或自定义条件 - **丰富** 附带 CAMEO 事件描述和可读的国家名称 - **提取** 从源 URL 获取文章元数据(标题、作者、描述) - **导出** 为 KML 文件供 Google Earth 使用,并带有 Goldstein 加权地标 - **转换** 日期为 ISO 8601 格式以用于可视化工具(如 Foursquare Studio 等) - 捆绑 FIPS 和 CAMEO 查找表,支持 ISO-3 到 FIPS 的转换 - 完整的命令行界面(支持子命令)或作为 Python 库使用 ## 安装 ``` pip install -r requirements.txt ``` ## 命令行使用 ``` # 为日期范围收集事件 python -m gdelt_data collect 2024-01-01 2024-01-07 -o events.parquet # 使用自定义过滤规则收集 python -m gdelt_data collect 2024-01-01 2024-01-07 -f my_filters.yaml -o events.parquet # 收集原始未过滤数据 python -m gdelt_data collect 2024-01-01 2024-01-07 --no-filter -o raw.parquet # 按国家( FIPS 代码)过滤 python -m gdelt_data filter events.parquet ML -o mali.csv # 用事件描述和国家名称丰富数据 python -m gdelt_data enrich mali.csv -o mali_enriched.csv # 从源 URL 提取元数据 python -m gdelt_data extract-urls mali.csv -o mali_urls.csv --workers 8 # 导出为 KML(仅限负事件) python -m gdelt_data kml mali_enriched.csv -o mali.kml --max-goldstein 0 # 生成过滤规则模板 python -m gdelt_data template -o my_filters.yaml # 检查默认设置 python -m gdelt_data filters # show default filter rules python -m gdelt_data columns # show default output columns python -m gdelt_data operators # show all filter operators # 完整文档 python -m gdelt_data --help-all ``` ## Python 库使用 ### 收集、过滤、丰富、导出 ``` from datetime import datetime import pandas as pd from gdelt_data import ( collect_gdelt_data, filter_by_country, add_event_descriptions, add_country_names, to_kml, ) # 收集 collect_gdelt_data( start_date=datetime(2024, 1, 1), end_date=datetime(2024, 1, 7), output_file="events.parquet", ) # 筛选马里并丰富、导出 df = pd.read_parquet("events.parquet") mali = filter_by_country(df, "ML") mali = add_event_descriptions(mali) mali = add_country_names(mali) mali.to_csv("mali_events.csv", index=False) # 导出为 KML to_kml(mali, "mali.kml", max_goldstein=0) ``` ### 国家代码工具 GDELT 使用 FIPS 10-4 代码表示地理字段,使用 CAMEO/ISO-3 代码表示角色字段。该包会自动处理转换: ``` from gdelt_data import iso3_to_fips, fips_to_iso3, load_fips_dict iso3_to_fips("DEU") # "GM" (Germany) fips_to_iso3("GM") # "DEU" # 加载完整查找字典 fips = load_fips_dict() # {"US": "United States", "GM": "Germany", ...} ``` ### 过滤规则 过滤规则使用普通英文语法: ``` NumMentions greater than or equal 5 ActionGeo_CountryCode in [US, UK, FR] GoldsteinScale between -5 and 5 Actor1Name contains protest ActionGeo_Lat is not null _ ``` 创建模板并自定义: ``` python -m gdelt_data template -o my_filters.yaml ``` 或在 Python 中交互式构建过滤器: ``` from gdelt_data import interactive_filter_builder filters = interactive_filter_builder() ``` ### URL 元数据提取 ``` from gdelt_data import get_source_urls_with_metadata urls_df = get_source_urls_with_metadata( df, extract_metadata=True, dataF=True ) ``` ### 日期转换 ``` from gdelt_data import convert_dates_to_iso df = convert_dates_to_iso(df) # SQLDATE: 20250803 -> 2025-08-03 ``` ## 国家代码 GDELT 使用 FIPS 10-4 国家代码,**而非** ISO 字母二码。常见差异如下: | 国家 | FIPS | ISO | |---|---|---| | 德国 | GM | DE | | 澳大利亚 | AS | AU | | 瑞士 | SZ | CH | | 奥地利 | AU | AT | | 韩国 | KS | KR | | 日本 | JA | JP | 完整的 FIPS 查找表随软件包一起提供,可通过 `load_fips_dict()` 访问。 ## 项目结构 ``` gdelt_data/ # Core package collector.py # Data collection and filter engine cli.py # CLI with subcommands parsing.py # URL extraction, CAMEO parsing, dates country_codes.py # FIPS/CAMEO loaders, ISO-3 <-> FIPS enrich.py # Event descriptions, country names, filtering export.py # KML export data/ # Bundled lookup files FIPS.country.txt CAMEO.country.txt CAMEO.eventcodes.txt workflows/ # Project-specific collection scripts outputs/ # Generated data files (gitignored) report_generation/ # Original lookup tables ```
标签:GDELT, Homebrew安装, Mutation, Python, 代码示例, 可视化, 命令控制, 数据分析, 数据采集, 无后门, 逆向工具