logo Netzschleuder network catalog, repository, and centrifuge

History of tgbn_trade

The changes to the source code of this entry in the repository, newest first, each with the differences it made to the entry's files. They are also listed on GitLab.

[entries] New entry: tgbn_trade by Tiago de Paula Peixoto af0e7d4
diff --git a/entries/tgbn_trade/__init__.py b/entries/tgbn_trade/__init__.py
new file mode 100644
index 0000000..a3c6284
--- /dev/null
+++ b/entries/tgbn_trade/__init__.py
@@ -0,0 +1,64 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2026 Tiago de Paula Peixoto <tiago@skewed.de>
+#
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Affero General Public License along
+# with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+
+from .. import *
+
+
+title = "International agricultural trade shares (tgbn-trade, TGB, 1986-2016)"
+description = """Yearly directed networks of the international trade in agricultural products between the nations of the United Nations from 1986 to 2016, from the `tgbn-trade` dataset of the Temporal Graph Benchmark (TGB), based on the data of MacDonald et al. (2015), compiled from FAOSTAT. Each node is a nation, and an edge from nation A to nation B in a year means that A traded agricultural products with B in that year (the edges of all years form a single network, with the year as an edge property). The weight of an edge is the share of the trade of A that goes to B in that year, i.e. the trade values (the sum over all agricultural products) normalized by TGB so that the weights of the edges from each nation in each year sum to one; the trade values themselves are not included in the data.
+
+The network has the following properties:
+
+- `name`: the name of the nation.
+- Edge `year`: the year of the trade.
+- Edge `share`: the share of the trade of the source nation with the target nation in that year."""
+tags = ['Economic', 'Trade', 'Weighted', 'Multigraph', 'Timestamps', 'Metadata']
+url = ['https://tgb.complexdatalab.com/docs/nodeprop/',
+       'https://github.com/shenyangHuang/TGB']
+citation = [('S. Huang, F. Poursafaei, J. Danovitch, M. Fey, W. Hu, E. Rossi, J. Leskovec, M. Bronstein, G. Rabusseau, R. Rabbany, "Temporal Graph Benchmark for Machine Learning on Temporal Graphs." Advances in Neural Information Processing Systems 36 (Datasets and Benchmarks Track) (2023)', 'https://doi.org/10.48550/arXiv.2307.01026'),
+            ('G. K. MacDonald, K. A. Brauman, S. Sun, K. M. Carlson, E. S. Cassidy, J. S. Gerber, P. C. West, "Rethinking Agricultural Trade Relationships in an Era of Globalization." BioScience 65(3), 275-289 (2015)', 'https://doi.org/10.1093/biosci/biu225')]
+icon_hash = None
+upstream_license = ('MIT', None)
+upstream_prefix = 'https://object-arbutus.alliancecan.ca/swift/v1/14c95234f6cd4a21a47deafe20cce2a7/tgb'
+files = [('tgbn-trade.zip:tgbn-trade_edgelist.csv', None, None)]
+
+def fetch_upstream(force=False):
+    return fetch_upstream_files(__name__.split(".")[-1], upstream_prefix, files,
+                                force)
+
+@cache_network()
+@coerce_props()
+@annotate()
+def parse(alts=None):
+    global files
+    name = __name__.split(".")[-1]
+    for fname, alt, fmt in files:
+        if alts is not None and alt not in alts:
+            continue
+        with open_upstream_file(name, fname, "r") as f:
+            rows = list(csv.DictReader(f))
+        g = Graph(directed=True)
+        g.vp.name = g.add_edge_list([(r["nation"], r["trading nation"],
+                                      int(r["year"]), float(r["weight"]))
+                                     for r in rows], hashed=True,
+                                    eprops=[("year", "int"), ("share", "double")])
+        g.ep.year = g.ep["year"]
+        g.ep.share = g.ep["share"]
+        yield alt, g