你对政治事件感兴趣吗? 你想玩转世界上最大的数据库之一吗? 如果你的回答是“是”,请往下阅读,相信你会对本文内容感兴趣! GDELTGDelt(“全球事件,语言和音调数据库”)是世界上最大的政治事件开放数据库。 它由 Kalev Leetaru(个人网站)根据 Philip A. Schrodt 和其他人在2011年的工作开发而来。数据可以通过 zip 文件下载,并且自2014年以来,可以在 Google 的 BigQuery 网络界面查询,并通过其 API 和 GDELT 分析提供服务。
在线测验所有 GDELT 数据都由 BigQuery 提供。这个“大数据”数据库有一个 Web 接口,允许你查看表结构、预览数据,并支持使用自动提示功能进行查询的方式。 SELECT EventCode, Actor1Name, Actor2Name, SOURCEURL, SqlDate
FROM [gdelt-bq:gdeltv2.events]
WHERE Year = 2016
LIMIT 20 GDELT 工具和 APIsGDELT 允许你从其网站快速创建可视化数据。转到分析页面,创建选择,随后可视化数据的链接将会以邮件形式发送给你。
你可以查询 GDELT 并使用工具创建可视化数据。应用示例参考:由 Kenneth Davis 制作的为难民献爱心的方案,他从GDELT 全局知识图 API 获取数据,并使用 CartoDB 可视化;由 CuriousGnu 制作的大家是如何看待希拉里·克林顿和唐纳德·特朗普,他通过将查询结果下载为 CSV 文件,之后将其导入 CartoDB 中。 概念: CAMEO 的本体论为了使用 GDELT,你需要知道至少一些基本概念。 这些概念是由 Philip A. Schrodt 创建的,最终形成 CAMEO 本体论(用于冲突和中介事件观察)。
包含所有 event 动词和 actor 类型码的完整 CAMEO Codebook 在此处查看。 创建 BigQuery 账号在应用程式中使用BigQuery 存取 GDELT,必须用到 Google 的 Cloud Platform。 首先,你必须创建一个 Google 账户。然后,进入你的控制台,如果你还没有项目,系统会要求你创建一个。 检查控制台。点击左上角的汉堡菜单(带有三条水平线的图标),即可访问平台的所有部分。 使用项目,需前往 API 库并启用 BigQuery API。 接下来,你需要为项目创建服务帐户,并为此帐户指定 BigQuery User 以运行查询,稍后你可在 IAM 选项卡上更改权限。在“member”处,请选择你的服务帐户 ID。 服务帐户允许你创建一个密钥,这个密钥是 JSON 文件,下载并保存在安全的位置。在 PHP 代码中你会用到它。 最后,您需要为您项目设置结算帐户。虽然在1太字节内,GDELT 提供免费访问,谷歌也不会收取任何费用,但这是创建的必要步骤。 Google 帐户提供3个月的免费试用。如果你开始正式使用申请,需要提供{敏感词}或银行账户信息。 使用 PHP 访问数据之前你可能是通过 Google APIs PHP 客户端访问 BigQuery,但现在的首选是适用于 PHP 的 Google Cloud 客户端库。 composer require google/cloud 代码很简单,使用从 Google Cloud 控制台下载的项目密钥替换项目路径。 use Google\Cloud\BigQuery\BigQueryClient;
// setup Composer autoloading
require_once __DIR__ . '/vendor/autoload.php';
$sql = "SELECT theme, COUNT(*) as count
FROM (
select SPLIT(V2Themes,';') theme
from [gdelt-bq:gdeltv2.gkg]
where DATE>20150302000000 and DATE < 20150304000000 and AllNames like '%Netanyahu%' and TranslationInfo like '%srclc:heb%'
)
group by theme
ORDER BY 2 DESC
LIMIT 300
";
$bigQuery = new BigQueryClient([
'keyFilePath' => __DIR__ . '/path/to/your/google/cloud/account/key.json',
]);
// Run a query and inspect the results.
$queryResults = $bigQuery->runQuery($sql);
foreach ($queryResults->rows() as $row) {
print_r($row);
} 浏览数据集(Datasets)我们还可以查询元数据。先从列出项目的数据集开始(数据集是表的集合): $bigQuery = new BigQueryClient([
'keyFilePath' => '/path/to/your/google/cloud/account/key.json',
'projectId' => 'gdelt-bq'
]);
/** @var Dataset[] $datasets */
$datasets = $bigQuery->datasets();
$names = array();
foreach ($datasets as $dataset) {
$names[] = $dataset->id();
}
print_r($names); 注意,在查询元数据之前,客户端配置时必须提供项目 ID(gdelt-bq) 这是代码的查询结果: Array
(
[0] => extra
[1] => full
[2] => gdeltv2
[3] => gdeltv2_ngrams
[4] => hathitrustbooks
[5] => internetarchivebooks
[6] => sample_views
) 历史政治事件数据已存在好几年,2010 年综合危机预警系统(ICEWS)的出现是此数据的重要里程碑。 Philip A. Schrodt 写的 Automated Production of High-Volume, Near-Real-Time Political Event Data(自动产生大容量近实时性的政治事件数据),以一种十分幽默的方式对全球事件数据进行了回顾与评论。 新闻可以持续从大量资源中获取(如,非洲新闻,法新社,美联社,BBC监测处,基督教科学箴言报,美国合众国际新闻社,华盛顿邮报的新闻)。而数据则是从各种新闻资源收集而来。我们之前是用人工处理这个过程,现在我们可以用自然语言处理(NLP)技术来完成。 GDELT 1 采用 TABARI 的 C++ 库来解析新闻,并经编码后的数据存入数据库。TABARI 于1979年诞生,它使用一个基于模式的浅层解析器来解析文章,并可以进行命名实体识别。 这里有一个对 GDELT 早期的介绍,描述了新闻资源以及相关编程技术,作者是 LeetaruSc 和 Shrodt。 2015 年 2 月 GDELT 推出了 2.0 版。其中 TABARI 被 PETRARCH 库(语言为 Python)取代。GDELT 2.0 使用了斯坦福的 CoreNLP 解析器对文章进行翻译。(你可以从 Philip A. Schrodt’s slides 了解其改变原因。)GDELT 还通过全球知识图对事件数据进行了扩展。 2015 年 9 月,Internet Archive(互联网档案馆)和 Hathi Trust 数字图书馆的数据被合并进了 GDELT BigQuery 数据库。 GDELT 数据集在 GDELT 项目网站的这个页面上有相关数据集的概述。 数据集像这样被分组:
GDELT 数据集(1 或 2)表和字段的文档请在 GDELT 项目网站上的文档部分查看 。 文档的表和互联网档案字段,还有 HathiTrust Book 文档可在 互联网档案 和 HathiTrust 的页面 上找到。 收费情况超过 1TB 的部分,谷歌按照 5 美元/TB 收费。 每月处理在数据在1 Terabyte 范围内是免费的,我认为 1TB/月完全够用,因此我输入了自己的银行帐户信息,并设置了几个简单的查询。
我被要求支付 10.96 欧元!这到底是怎么回事? 这时我仔细看了下定价策略。
它与查询的大小和结果集的大小无关,而与 BigQuery 实际处理的数据大小有关。看看我的结算信息列表,我意识到 Google 向我收费是因为: BigQuery 实际分析数据量: 3541.117 Gibibytes BigQuery 已为我的查询处理了 3541Gibibytes 数据!除以 1024,它转换为 3,45812207TB。去除第一个免费 TB,再转换为欧元(当时的利率= 0.892),我最终需要付费 10.96 欧,而我计算出上面提到的单个 GDELT 示例查询(带有子查询的查询)的成本是 2.20 美元。 $results = $bigQuery->runQuery($sql);
$info = $results->info();
$tb = ($info['totalBytesProcessed'] / Constants::BYTES_PER_TEBIBYTE); // 1099511627776
$cost = $tb * Constants::DOLLARS_PER_TEBIBYTE; // 5 在 BigQuery 中查询BigQuery 每次加载一整列数据,仅读取一个记录。 例如,我运行: SELECT Actor1Name
FROM [gdelt-bq:gdeltv2.events]
WHERE GLOBALEVENTID = 526870433 在关系数据库中,这是一个快速的查询,它使用 GLOBALEVENTID 上的索引来查找和返回单个记录。在 BigQuery 中,它会加载全部的 3.02GB 的数据列,并需要几秒钟才能完成,因为BigQuery 不使用索引。每当它需要一个列时,它会读取整列数据。当列非常大时,它会将查询分担到多个机器上,这些机器通过并行运行完成查询。BigQuery 未针对小型表进行优化,但它可以在几秒钟内完成对 PB 级数据的查询。 如需深入了解 BigQuery 架构,请阅读本文或者参考这本关于 Google BigQuery 分析的书籍。 |