使用 bigquery 从 GDELT 收集数据
Data collection from GDELT using bigquery
我正在尝试根据 gdelt 数据库中具有特定客串代码的所有事件构建一个经济指标。
所以我的想法是收集从 1990 年至今的数据,看看经济合作如何根据某些词的新闻出现而变化。 CAMEO代码具体为0211、0311、061、1011、1211
我的问题是如何提取这些特定客串代码的数据。如果你能指导我找到任何来源,那将有很大帮助。
有人建议我尝试使用 bigquery。老实说,我到现在都不知道如何浏览 google bigquery 页面(我尽力了,可能来自非技术背景,这对我来说有点不知所措)。如果你们中的任何人可以帮助解决一个 Cameo 代码数据提取示例,那么我可以尝试其他事件。
编辑:我正在编辑以显示我取得的进展以及我在 运行查询时遇到的问题。
SELECT
*
FROM
[gdelt-bq:full.events]
WHERE
Year >= 1979
AND EventCode IN ('0211', '0311','061', '1011', '1211')
AND Actor1CountryCode != Actor2CountryCode
此查询将在 运行 时处理 228 GB,并且还排除两个国家代码都为空的情况。它有超过 200 万行,我无法从 bigquery 平台将其下载为 csv 文件。
我需要帮助的部分如下,
有什么办法可以得到满足以下条件的每个事件代码的事件总数
- Actor1Countrycode 和 Actor2CountryCode 应该不同,除非它们为 null
- 每个月对满足上述条件的每个事件代码进行统计
PS:可以运行下面答案中Ben P给出的代码,查看数据库中列的数量和类型。
Edit2:我正在尝试编写另一个查询,其中具有指定代码的事件的 AvgTone 大于该特定月份所有事件的平均 AvgTone。关于如何写这篇文章的任何线索都会非常有帮助。假设我添加了一个 WHERE 子句,其中 AvgTone 大于该特定时期(在本例中为 MonthYear)所有事件的平均 AvgTone。我的疑问是如何以查询格式编写它。
SELECT
MonthYear,
COUNT(*)
FROM
[gdelt-bq:full.events]
WHERE
EventCode IN ('0211',
'0311',
'061')
AND Actor1CountryCode != Actor2CountryCode
AND AvgTone > (SELECT AVG(AvgTone) FROM [gdelt-bq:full.events] GROUP BY MonthYear ORDER BY MonthYear)
GROUP BY
MonthYear
ORDER BY
MonthYear
错误:ELEMENT 只能应用于 0 或 1 行的结果。
有人可以帮我解决上述问题吗?谢谢
GDELT 数据库是 available in BigQuery。
这是他们可用数据集的 link,您的第一步是确定其中包含您感兴趣的信息:
https://blog.gdeltproject.org/the-datasets-of-gdelt-as-of-february-2016/
然后网站的这一部分包含示例查询,您可以将其用作起点并尝试根据您的需要进行调整(请注意,这些示例在我看来主要是旧版 SQL,我建议您将它们用作指南 rewrite then in Standard SQL):
https://blog.gdeltproject.org/a-compilation-of-gdelt-bigquery-demos/
如果您在完成此操作后有任何具体的 SQL/BigQuery 问题,我建议您回来提出新问题并分享您的工作代码示例,详细说明您已经尝试过的内容以及您期望的结果见。
快速浏览了一下,我必须说我不熟悉数据集,但这可能是一个简单的查询,可以让您开始自己的工作:
-- first we select all columns from the event dataset, which seems
-- to be the one you want, containing cameo codes
SELECT * FROM `gdelt-bq.full.events`
-- then we add a filter to only look at events in or after 1990
WHERE Year >= 1990
-- and another filter to look at only the specific camera
--codes you provided (I think EventCode is the correct column here,
AND EventCode IN ('0211','0311','061','1011','1211')
-- finally, we add a limit to our query, so we don't bring back ALL
-- the results while testing, once we are happy with our query, we'd remove this!
LIMIT 100
最后,GDELT tag right here on Whosebug 包含一些非常棒的内容。
希望对您有所帮助,GDELT 看起来是一个引人入胜的项目!
我终于找到了一种使用 bigquery 从 GDELT 中提取数据的方法。虽然查询很简单,但我 SQL 知识的缺乏使它变得困难。感谢 Ben 提供了最初的帮助。以下是满足题中条件的查询。
SELECT
MonthYear,
COUNT(*)
FROM
[gdelt-bq:full.events]
WHERE
EventCode IN ('0211', '0311','061')
AND Actor1CountryCode IS NULL
AND Actor2CountryCode IS NULL
GROUP BY
MonthYear
ORDER BY
MonthYear
SELECT
MonthYear,
COUNT(*)
FROM
[gdelt-bq:full.events]
WHERE
EventCode IN ('0211', '0311','061')
AND Actor1CountryCode != Actor2CountryCode
GROUP BY
MonthYear
ORDER BY
MonthYear
我正在尝试根据 gdelt 数据库中具有特定客串代码的所有事件构建一个经济指标。
所以我的想法是收集从 1990 年至今的数据,看看经济合作如何根据某些词的新闻出现而变化。 CAMEO代码具体为0211、0311、061、1011、1211
我的问题是如何提取这些特定客串代码的数据。如果你能指导我找到任何来源,那将有很大帮助。
有人建议我尝试使用 bigquery。老实说,我到现在都不知道如何浏览 google bigquery 页面(我尽力了,可能来自非技术背景,这对我来说有点不知所措)。如果你们中的任何人可以帮助解决一个 Cameo 代码数据提取示例,那么我可以尝试其他事件。
编辑:我正在编辑以显示我取得的进展以及我在 运行查询时遇到的问题。
SELECT
*
FROM
[gdelt-bq:full.events]
WHERE
Year >= 1979
AND EventCode IN ('0211', '0311','061', '1011', '1211')
AND Actor1CountryCode != Actor2CountryCode
此查询将在 运行 时处理 228 GB,并且还排除两个国家代码都为空的情况。它有超过 200 万行,我无法从 bigquery 平台将其下载为 csv 文件。
我需要帮助的部分如下, 有什么办法可以得到满足以下条件的每个事件代码的事件总数
- Actor1Countrycode 和 Actor2CountryCode 应该不同,除非它们为 null
- 每个月对满足上述条件的每个事件代码进行统计
PS:可以运行下面答案中Ben P给出的代码,查看数据库中列的数量和类型。
Edit2:我正在尝试编写另一个查询,其中具有指定代码的事件的 AvgTone 大于该特定月份所有事件的平均 AvgTone。关于如何写这篇文章的任何线索都会非常有帮助。假设我添加了一个 WHERE 子句,其中 AvgTone 大于该特定时期(在本例中为 MonthYear)所有事件的平均 AvgTone。我的疑问是如何以查询格式编写它。
SELECT
MonthYear,
COUNT(*)
FROM
[gdelt-bq:full.events]
WHERE
EventCode IN ('0211',
'0311',
'061')
AND Actor1CountryCode != Actor2CountryCode
AND AvgTone > (SELECT AVG(AvgTone) FROM [gdelt-bq:full.events] GROUP BY MonthYear ORDER BY MonthYear)
GROUP BY
MonthYear
ORDER BY
MonthYear
错误:ELEMENT 只能应用于 0 或 1 行的结果。
有人可以帮我解决上述问题吗?谢谢
GDELT 数据库是 available in BigQuery。
这是他们可用数据集的 link,您的第一步是确定其中包含您感兴趣的信息:
https://blog.gdeltproject.org/the-datasets-of-gdelt-as-of-february-2016/
然后网站的这一部分包含示例查询,您可以将其用作起点并尝试根据您的需要进行调整(请注意,这些示例在我看来主要是旧版 SQL,我建议您将它们用作指南 rewrite then in Standard SQL):
https://blog.gdeltproject.org/a-compilation-of-gdelt-bigquery-demos/
如果您在完成此操作后有任何具体的 SQL/BigQuery 问题,我建议您回来提出新问题并分享您的工作代码示例,详细说明您已经尝试过的内容以及您期望的结果见。
快速浏览了一下,我必须说我不熟悉数据集,但这可能是一个简单的查询,可以让您开始自己的工作:
-- first we select all columns from the event dataset, which seems
-- to be the one you want, containing cameo codes
SELECT * FROM `gdelt-bq.full.events`
-- then we add a filter to only look at events in or after 1990
WHERE Year >= 1990
-- and another filter to look at only the specific camera
--codes you provided (I think EventCode is the correct column here,
AND EventCode IN ('0211','0311','061','1011','1211')
-- finally, we add a limit to our query, so we don't bring back ALL
-- the results while testing, once we are happy with our query, we'd remove this!
LIMIT 100
最后,GDELT tag right here on Whosebug 包含一些非常棒的内容。
希望对您有所帮助,GDELT 看起来是一个引人入胜的项目!
我终于找到了一种使用 bigquery 从 GDELT 中提取数据的方法。虽然查询很简单,但我 SQL 知识的缺乏使它变得困难。感谢 Ben 提供了最初的帮助。以下是满足题中条件的查询。
SELECT
MonthYear,
COUNT(*)
FROM
[gdelt-bq:full.events]
WHERE
EventCode IN ('0211', '0311','061')
AND Actor1CountryCode IS NULL
AND Actor2CountryCode IS NULL
GROUP BY
MonthYear
ORDER BY
MonthYear
SELECT
MonthYear,
COUNT(*)
FROM
[gdelt-bq:full.events]
WHERE
EventCode IN ('0211', '0311','061')
AND Actor1CountryCode != Actor2CountryCode
GROUP BY
MonthYear
ORDER BY
MonthYear