转载

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

你对政治事件感兴趣吗? 你想玩转世界上最大的数据库之一吗? 如果你的回答是“是”,请往下阅读,相信你会对本文内容感兴趣!

本文承诺,接下来会使用 PHP 来操作 GDELT。

我会用一个简单例子来说明如何通过 BigQuery 和 PHP 来操作 GDELT,以及如何在网页上可视化结果等。

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

GDelt(“全球事件,语言和音调数据库”)是世界上最大的政治事件开放数据库。 它由 Kalev Leetaru(个人网站)根据 Philip A. Schrodt 和其他人在2011年的工作开发而来。数据可以通过 zip 文件下载,并且自2014年以来,可以在 Google 的 BigQuery 网络界面查询,并通过其 API 和 GDELT 分析提供服务。

GDELT 项目:

以超过100种语言来监测来自每个国家的几乎每个角落的广播,印刷和网络新闻,并且识别每分每秒推动全球社会的人,地点,组织,计数,主题,来源,情绪,报价,图像和事件,为整个世界创建一个免费开放的计算平台。

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

芝麻糖人

翻译于 3周前

0 人顶

翻译得不错哦!

在线测验

所有 GDELT 数据都由 BigQuery 提供。这个“大数据”数据库有一个 Web 接口,允许你查看表结构、预览数据,并支持使用自动提示功能进行查询的方式。

为在线体验 GDELT 数据集,你需要注册一个 Google 帐户,然后转至  BigQuery 信息中心。

如果你还没有 Google Cloud 项目,系统会提示您创建,因为此项目将是你的工作环境所必须的。

您可以通过“组合查询”创建自己的查询。 比如:

SELECT EventCode, Actor1Name, Actor2Name, SOURCEURL, SqlDate
FROM [gdelt-bq:gdeltv2.events]
WHERE Year = 2016
LIMIT 20
协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

Tocy

翻译于 3周前

0 人顶

翻译得不错哦!

GDELT 工具和 APIs

GDELT 允许你从其网站快速创建可视化数据。转到 分析页面 ,创建选择,随后可视化数据的链接将会以邮件形式发送给你。

GDELT 近期开放了两个 API,你可从单个 URL 中创建自定义数据反馈。这些 F 反馈可以直接进入 CartoDB,并用于创建实时可视化数据。

  • GKG GeoJSON 创建知识图的反馈( tutorial   教程)

  • 全文搜索API 是基于过去24小时的新闻报道的反馈

你可以查询 GDELT 并使用工具创建可视化数据。 应用示例参考:由  Kenneth Davis 制作的 为难民献爱心的方案 ,他从 GDELT 全局知识图 API 获取数据,并使用 CartoDB 可视化;由  CuriousGnu 制作的 大家是如何看待希拉里·克林顿和唐纳德·特朗普 ,他通过将查询结果下载为 CSV 文件,之后将其导入 CartoDB 中。

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

Tocy

翻译于 3周前

0 人顶

翻译得不错哦!

概念: CAMEO 的本体论

为了使用 GDELT,你需要知道至少一些基本概念。 这些概念是由 Philip A. Schrodt 创建的,最终形成 CAMEO 本体论(用于冲突和中介事件观察)。

  • 事件(Event)是两个团体间的政治互动。其事件代码描述了事件类型,例如,1411:“因领导变动而示威游行或集会”。

  • 行动发起者(Actor )是参与事件的二者之一。Actor 可能是在一个国家范围内,也可能超出国家范围,如国际组织、运动或公司。Actor 编码包含一个或多个三字母缩写序列。例如,每个三元组指定一个 actor。 NGO=非政府组织,NGOHLHRCR(NGO HLH RCR)=非政府组织/卫生/红十字会。

  • 事件的 音调(Tone) 是一个取值范围在 -100(负无穷)和 +100(正无穷)之间的分数。 最常见的值位于 -5 和 5 之间。

  • 事件的 戈德斯坦得分( Goldstein scale 是一个取值范围在 -10 和 +10 之间的分数值,其表征该类事件将对国家的稳定性可能产生的影响的大小。

包含所有 event 动词和 actor 类型码的完整 CAMEO Codebook  在 此处 查看。

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

Tocy

翻译于 2周前

0 人顶

翻译得不错哦!

创建 BigQuery 账号

在应用程式中使用BigQuery 存取 GDELT,必须用到 Google 的 Cloud Platform。

首先,你必须 创建一个 Google 账户 。然后,进入 你的控制台 ,如果你还没有项目,系统会要求你创建一个。

检查控制台。点击左上角的汉堡菜单(带有三条水平线的图标),即可访问平台的所有部分。

使用项目,需前往 API 库 并启用 BigQuery API。

接下来,你需要为项目创建 服务帐户 ,并为此帐户指定 BigQuery User 以运行查询,稍后你可在 IAM 选项卡上更改权限。在“member”处,请选择你的服务帐户 ID。

服务帐户 允许你创建一个密钥,这个密钥是  JSON 文件,下载 并保存在安全的位置。在 PHP 代码中你会用到它。

最后,您需要为您项目 设置结算帐户 。虽然在1太字节内,GDELT 提供免费访问,谷歌也不会收取任何费用,但这是创建的必要步骤。

Google 帐户 提供3个月的免费试用。如果你开始正式使用申请,需要提供银行卡或银行账户信息。

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

snake_007

翻译于 2周前

0 人顶

翻译得不错哦!

使用 PHP 访问数据

之前你可能是通过 Google APIs PHP 客户端访问 BigQuery,但现在的首选是适用于 PHP 的  Google Cloud 客户端库。

我们可以用  Composer 安装:

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
)
协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

Tocy

翻译于 3周前

0 人顶

翻译得不错哦!

历史

政治事件数据已存在好几年,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 2 和 PHP 来分析世界!

榆木可期

翻译于 5天前

0 人顶

翻译得不错哦!

GDELT 数据集

在 GDELT 项目网站的这个页面上 有相关数据集的概述。

数据集像这样被分组:

  • 源 GDELT 1 的数据集: full . 详情参阅 Kalev Leetaru 发表的 博客 。

  • GDELT 2  的数据集: gdeltv2 和  gdeltv2_ngrams

  • Hathi Trust Book 数据集: hathitrustbooks

  • 互联网档案(Internet Archive)数据集: internetarchivebooks , 此链接 展示了从互联网档案的书本数据上查询的例子。

GDELT 数据集(1 或 2)表和字段的文档请 在 GDELT 项目网站上的文档部分 查看   。 

文档的表和互联网档案字段,还有 HathiTrust Book 文档可在 互联网档案 和 HathiTrust 的页面 上找到。

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

无若

翻译于 3周前

0 人顶

翻译得不错哦!

收费情况

超过 1TB 的部分,谷歌按照 5 美元/TB 收费。

每月处理在数据在1 Terabyte 范围内是免费的,我认为 1TB/月完全够用,因此我输入了自己的银行帐户信息,并设置了几个简单的查询。

一个星期后进入了下一个月,我收到来自 Google Cloud 的消息:

“我们很快将会自动从您的银行账户中计费”

我被要求支付 10.96 欧元!这到底是怎么回事? 这时我仔细看了下定价策略。

Google Cloud 的定价页面 解释得很清楚。在查询 GDELT 的 Context 时,用户不需要为加载、复制和导出数据付费,也不需要支付元数据操作的费用(例如,列出现有表),但需支付查询费用。 准确来说:

查询定价是指执行 SQL 命令和用户定义函数的价格。BigQuery 通过使用统一标准为查询计费:实际处理的字节数。

它与查询的大小和结果集的大小无关,而与 BigQuery 实际处理的数据大小有关。看看我的 结算信息列表 ,我意识到 Google 向我收费是因为:

BigQuery 实际分析数据量: 3541.117 Gibibytes

BigQuery 已为我的查询处理了 3541Gibibytes 数据!除以 1024,它 转换 为 3,45812207TB。去除第一个免费 TB,再转换为欧元(当时的利率= 0.892),我最终需要付费 10.96 欧,而我计算出上面提到的单个 GDELT 示例查询(带有子查询的查询)的成本是 2.20 美元。

BigQuery 

提供了“totalBytesProcessed”的信息。 从这里,我们可以以美元为标准计算其成本:

$results = $bigQuery->runQuery($sql);
$info = $results->info();
$tb = ($info['totalBytesProcessed'] / Constants::BYTES_PER_TEBIBYTE); // 1099511627776
$cost = $tb * Constants::DOLLARS_PER_TEBIBYTE; // 5
协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

Tocy

翻译于 2周前

0 人顶

翻译得不错哦!

在 BigQuery 中查询

BigQuery 每次加载一整列数据,仅读取一个记录。 例如,我运行:

SELECT Actor1Name
FROM [gdelt-bq:gdeltv2.events]
WHERE GLOBALEVENTID = 526870433

在关系数据库中,这是一个快速的查询,它使用 GLOBALEVENTID 上的索引来查找和返回单个记录。在 BigQuery 中,它会加载全部的 3.02GB 的数据列,并需要几秒钟才能完成,因为BigQuery 不使用索引。每当它需要一个列时,它会读取整列数据。当列非常大时,它会将查询分担到多个机器上,这些机器通过并行运行完成查询。BigQuery 未针对小型表进行优化,但它可以在几秒钟内完成对 PB 级数据的查询。

如需深入了解 BigQuery 架构,请阅读 本文 或者参考 这本关于 Google BigQuery 分析的书籍

协作翻译 | 使用 GDELT 2 和 PHP 来分析世界!

Tocy

翻译于 3周前

0 人顶

翻译得不错哦!

原文  https://www.oschina.net/translate/using-gdelt-2-with-php-to-analyze-the-world
正文到此结束
Loading...