History of world_trade_wf
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: world_trade_wf 409df07
diff --git a/entries/world_trade_wf/__init__.py b/entries/world_trade_wf/__init__.py
new file mode 100644
index 0000000..32c7e70
--- /dev/null
+++ b/entries/world_trade_wf/__init__.py
@@ -0,0 +1,75 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2020-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 trade among 24 countries (Wasserman-Faust)"
+description = """Trade and diplomatic relations among 24 countries, selected by S. Wasserman and K. Faust (1994) for their social network analysis textbook from a list of 63 countries studied by D. A. Smith and D. R. White (1992), as a representative sample spanning the globe physically, economically and politically. The trade data refer to the period studied by Smith and White (1965-1980). The data were distributed by L. C. Freeman on his network data page at the University of California, Irvine (no longer online), from which this version was obtained via the Internet Archive.
+
+The network has five directed layers (relations), in which an edge (i, j) indicates exports (or diplomats sent) from country i to country j:
+
+- `MANUFACTURED_GOODS`
+- `FOODS`: food and live animals.
+- `CRUDE_MATERIALS`: crude materials, excluding food.
+- `MINERALS`: minerals and fuels.
+- `DIPLOMATIC_EXCHANGE`
+
+The network has the following properties:
+
+- Nodes: `name`, the name of the country; `pop_growth`, the average population growth between 1970 and 1981; `gnp_growth`, the average growth of the GNP per capita in the same period; `schools`, the secondary school enrollment ratio in 1981; `energy`, the energy consumption in 1981 (in kilo coal equivalents per capita). Missing values are NaN.
+- Edges: `layer`, the relation."""
+tags = ['Economic', 'Trade', 'Multilayer', 'Unweighted', 'Metadata']
+url = 'https://web.archive.org/web/20210115130726/http://moreno.ss.uci.edu/data.html#trade'
+citation = [('D. A. Smith, D. R. White, "Structure and dynamics of the global economy: Network analysis of international trade 1965-1980." Social Forces 70(4), 857-893 (1992)', 'https://doi.org/10.2307/2580193'),
+ ('S. Wasserman, K. Faust, "Social Network Analysis: Methods and Applications." Cambridge University Press (1994)', 'https://doi.org/10.1017/CBO9780511815478')]
+icon_hash = '586e98c8a411221d0e7c5b63'
+upstream_license = None
+upstream_prefix = 'https://web.archive.org/web/20210115130726id_/http://moreno.ss.uci.edu'
+files = [(('trade.dat', 'trade_attribute.dat'), None, None)]
+
+def fetch_upstream(force=False):
+ # The Wayback Machine refuses connections or fails when rate-limited, so
+ # retry with increasing pauses (files already fetched are skipped)
+ return retry_download(fetch_upstream_files, __name__.split(".")[-1],
+ upstream_prefix, files, force)
+
+@cache_network()
+@coerce_props(vforce={"pop_growth": "double", "gnp_growth": "double", "schools": "double", "energy": "double"})
+@annotate()
+def parse(alts=None):
+ global files
+ name = __name__.split(".")[-1]
+ for fnames, alt, fmt in files:
+ if alts is not None and alt not in alts:
+ continue
+ if isinstance(fnames, str):
+ fnames = [fnames]
+ with ExitStack() as stack:
+ fs = [stack.enter_context(open_upstream_file(name, fn, "rb"))
+ for fn in fnames]
+ ds = [read_dl(f, pad=False) for f in fs]
+ d, da = ds
+ assert d["rows"] == da["rows"]
+ g = matrix_graph(d["data"], True, layers=d["levels"], wtype=None)
+ g.vp.name = g.new_vp("string", vals=[n.title() for n in d["rows"]])
+ A = da["data"][0]
+ for k, p in enumerate(["pop_growth", "gnp_growth", "schools", "energy"]):
+ g.vp[p] = g.new_vp("double", vals=A[:, k])
+ yield alt, g