DEV Community

Hulk helios
Hulk helios

Posted on • Originally published at geoprizm.com

Building GeoPrizm: Turning Global News Events into a Bilateral Relations Index

I recently built GeoPrizm, a free and open-source dashboard for tracking bilateral relations through global news event signals.


The idea is simple: instead of reading dozens of headlines every day and trying to guess whether a relationship is improving or worsening, can we turn public news event data into a readable trend signal?

GeoPrizm is my attempt at that.

Website: https://www.geoprizm.com/en

GitHub: https://github.com/Haullk/relationship-temperature

The problem

International relations are usually discussed through headlines, speeches, official statements, and expert commentary.

That is valuable, but it creates a few practical problems:

  • It is hard to compare country pairs on the same scale.
  • A single headline can feel more important than it really is.
  • Readers often see conclusions before they see the underlying signals.
  • Most non-specialists do not have time to follow every event in detail.

I wanted a lightweight way to answer one question:

Based on public news event signals, is this bilateral relationship trending more cooperative, neutral, or tense?

Data source: GDELT

GeoPrizm uses the GDELT global news event database.

GDELT monitors global news coverage and converts news reports into structured event records. These records include fields such as:

  • actor countries
  • event date
  • CAMEO event category
  • GoldsteinScale value
  • number of mentions
  • number of articles
  • source information

For GeoPrizm, the key idea is to focus on events where two countries appear as actors, then aggregate the cooperation or conflict signals over time.

From event signals to an index

Each bilateral pair is converted into a 0-100 relationship index.

The midpoint is 50.

  • Above 50 means the recent signal is more cooperative or favorable.
  • Around 50 means the signal is relatively neutral or mixed.
  • Below 50 means the recent signal is more tense or conflict-heavy.

The rough process is:

  1. Select recent GDELT events for a country pair.
  2. Keep events where both actors are present and the GoldsteinScale value is available.
  3. Weight each event by coverage intensity.
  4. Smooth the daily signal with a rolling window.
  5. Map the result onto a 0-100 index.

The current version uses a 14-day rolling average to reduce single-day noise.

Why weighting matters

A small event mentioned once should not have the same impact as a major event covered across many outlets.

At the same time, one highly covered event should not completely dominate the entire index.

So GeoPrizm uses a log-style coverage weight:


text
weight = log1p(max(num_mentions, num_articles, 1))
Enter fullscreen mode Exit fullscreen mode

Top comments (0)