Как я могу выбрать страну, в которой я сопоставляю сети названий стран, используя GDELT? - PullRequest
0 голосов
/ 05 июня 2019

Я получаю доступ к глобальной базе данных новостей GDELT на BigQuery. У меня есть некоторый код SQL, который генерирует список смежных стран, которые упоминаются совместно. Этот результат был для всех глобальных новостей вместе взятых. Моя проблема в том, что я хочу ограничить результат новостями, происходящими в одной стране, чтобы я мог сравнить сети двух или более стран из упомянутых стран.

Вот вывод запроса:

https://docs.google.com/spreadsheets/d/1BBxUC9SRFAeBEo5AyX4EYgtK92VMmcEK9DLxte2Xhhk/edit?usp=sharing

К вашему сведению, вот сетевой график вывода:

https://drive.google.com/file/d/101h4_kgbfOBGAakqPR-x6dVvObxKwvI6/view?usp=sharing

SELECT c.Source SourceCountryCode, d.country Source, c.Target TargetCountryCode, e.country Target, Count RawCount, "Undirected" Type, RATIO_TO_REPORT(Count) OVER () Weight FROM (
SELECT a.name Source, b.name Target, COUNT(*) as Count
FROM (FLATTEN(
SELECT GKGRECORDID, UNIQUE(REGEXP_EXTRACT(SPLIT(V2Locations,';'),r'^[1- 
5]#.*?#(.*?)#')) name
FROM [gdelt-bq:gdeltv2.gkg] 
WHERE DATE > 20190101000000 and DATE < 20190605000000 AND V2Locations like '%United States%United States%' and (V2Themes like '%CYBER_ATTACK%' or DocumentIdentifier like '%cyber_attack%') ignore case
,name)) a
JOIN EACH (
SELECT GKGRECORDID, UNIQUE(REGEXP_EXTRACT(SPLIT(V2Locations,';'),r'^[1-5]#.*?#(.*?)#')) name
FROM [gdelt-bq:gdeltv2.gkg] 
WHERE DATE > 20190101000000 and DATE < 20190605000000 AND V2Locations like '%United States%United States%' and (V2Themes like '%CYBER_ATTACK%' or DocumentIdentifier like '%cyber_attack%') ignore case
) b
ON a.GKGRECORDID=b.GKGRECORDID
WHERE a.name<b.name
GROUP EACH BY 1,2
ORDER BY 3 DESC
LIMIT 1000
) c
JOIN EACH (
select fips, country from [gdelt-bq:extra.countryinfo]) d
ON c.Source = d.fips
JOIN EACH (
select fips, country from [gdelt-bq:extra.countryinfo]) e
ON c.Target = e.fips
order by Count Desc

1 Ответ

1 голос
/ 12 июня 2019

Просто добавьте ниже в конец запроса (но выше ORDER BY очевидно)

WHERE c.Source = 'US'   

Также последние два соединения могут быть переписаны, чтобы быть менее подробными

JOIN EACH [gdelt-bq:extra.countryinfo] d 
ON c.Source = d.fips
JOIN EACH [gdelt-bq:extra.countryinfo] e
ON c.Target = e.fips
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...