champagne anarchist | armchair activist

Network

How to make a d3js force layout stay within the chart area - even with multiple components

For a post on analysing networks of corporate control, I wanted to create some network graphs with d3.js. The new edition of Scott Murray’s great book on d3.js, which is updated to version 4, contains a good example to get you started. However, I was still struggling with some practical issues, as the chart below illustrates (reload the page to see the problem develop).

A large part of the graph drifts out of the chart area, and the problem only gets worse on a mobile screen. But I figured out some sort of solution.

As Murray explains, you can vary the strength value of the force layout. Positive values attract, negative values repel. The default value is –30. You could set d3.forceManyBody().strength(-3) to create a more compact graph.

Of course, the ideal setting will depend on screen size. You could vary the strength value according to screen width. While you’re at it, you may also want to vary the radius of nodes and the stroke-width of edges. For example with something like this:

if(w > 380){
    var strength = -3;
    var r = 3;
    var sw = 0.3;
}
else{
    var strength = -1;
    var r = 3;
    var sw = 0.15;
}

Now this may make the graph more compact, but it doesn’t solve one specific problem: components not connected to the rest of the chart will still drift out of the chart area. In my example, there are four components: a large one, and three pairs of nodes that are only connected to each other and not to the rest of the graph.

The way in which I dealt with this was to create four different graphs and attach the small components to a forceCenter at the margin of the chart area. For example, d3.forceCenter().x(0.1 * w).y(0.9 * h)) will put one of them in the bottom left corner. Here’s the result:

It’s still a lot of code - I can’t help feeling there should be a more efficient way to do this. Also, it’s slightly weird that the small components immediately freeze, whereas the large one takes its time to develop into its final shape. And the text labels could be improved. But at least it seems to work.

The network of Dutch firms

One of the ways in which firms are linked is through board members who also sit on the boards of other firms. Researchers use these board interlocks to determine which firms occupy a central position in the corporate network. This «is widely considered as an indication of a powerful or at least advantageous position», Frank Takes and Eelke Heemskerk explain in an interesting paper on the subject.

Two Dutch newspapers, de Volkskrant and NRC Handelsblad, have published visualisations of the Dutch (corporate) elite and their board memberships. You can use the data from those visualisations to create board interlock networks. Below is an example using data from NRC Handelsblad from 2017:

Darker nodes represent organisations with a more central position in the network, as measured by their betweenness centrality. Below is another example, using data from de Volkskrant from 2013:

The most obvious difference is that the second graph contains far more nodes (organisations) and edges (shared board members) than the 2017 chart. But there’s more. The 2017 dataset contains only nodes that have at least two edges - probably the result of a selection criterion used by NRC Handelsblad because of the type of visualisation they wanted to make. Further, the 2013 dataset consists of multiple components: three sets of organisations only share board members with each other; not with the rest of the network.

Given the differences between the datasets, would it still be meaningful to make comparisons between the two? The table below shows the top 10 of organisations with the highest centrality scores, for 2013 and 2017. The comparison is limited to organisations that are included in both datasets.

2013 2017
VNO-NCW VNO-NCW
DNB Ahold
Concertgebouw Concertgebouw
KLM KLM
ABN Amro Schiphol
Aegon NV FrieslandCampina
Concertgebouw Fonds Philips
DSM DNB
Philips Rabobank Groep
Heineken NV Vopak

Organisations like employers’ organisation VNO-NCW, the Concertgebouw concert hall and airline KLM seem to occupy a pretty stable position at the centre of the network. VNO-NCW has a huge non-executive board with representatives from a wide range of industries. The Concertgebouw has been described years ago as the living room of the [Dutch] elite.

Aside from these stable elements, there are substantial differences between the two rankings. The rank correlation is only 0.33 and not statistically significant. This may be due to differences in the way the datasets were created; the small size of the overlap between them (only 34 organisations) and other data quality issues.

On the other hand, some changes in the ranking appear to reflect genuine changes in the position firms occupy. Two examples:

  • One of the fastest risers is Ahold. Ahold merged with Belgian retailer Delhaize in 2016. It would seem plausible that this has strengthened their position in the corporate network.
  • ABN Amro disappeared from the top 10. The bank used to have a board with well-connected members like Gerrit Zalm and Joop Wijn (both have gone through the revolving door between government and the corporate world), Peter Wakkie and Marjan Oudeman (one of the most influential Dutch women according to various rankings). In 2015, chairman Wakkie stepped down over a commotion caused by excessive executive board remunerations (the bank was still state-owned after having been bailed out with public money in 2008). Subsequently, Oudeman, Zalm and Wijn also left the bank, for reasons partly related to its upcoming flotation. It appears the current board has a lower profile.

This type of analyses could benefit enormously from having a larger dataset available. This is yet another reason why the Dutch Company Register should be opened up as open data: this will allow for better understanding of the networks of corporate control.

Method and data

Both de Volkskrant (2013, 2014) and NRC Handelsblad (2017) have published visualisations of the Dutch (corporate) elite and their board memberships. Note that these board memberships not only include companies, but also employers’ organisations, cultural institutions and other types of organisations the collectors of the data deemed relevant for analysing corporate elite networks.

Before comparisons can be made, the names of the organisations need to be cleaned up. Beyond correcting typos and dealing with additions like N.V. (plc) and B.V. (ltd), this involves deciding when to consider units as part of the same organisation. Pragmatically, I decided to treat businesses that are part of the same corporate structure as identical. This may not always be the ideal approach; on the other hand, it’s not always possible to determine what unit a name refers to (e.g. ING could refer to the holding or to one of its subsidiaries). I did treat foundations (e.g. charities linked to a company) as separate from the company.

There are different ways to measure the centrality of a node in a network. Taking my cue from Takes and Heemskerk, I used betweenness centrality, which is based on how often a node is on the shortest path between two other nodes. I calculated centrality for the entire network, that is, before taking a subgraph. I included endpoints to prevent many nodes having a score of zero.

I used the Python library networkx to analyse the graphs (here’s the code and here’s the accompanying text file for cleaning up organisation names). I used d3.js to visualise the network graphs - here’s a description of the problems I ran into and how I dealt with them.

Het netwerk van Nederlandse ondernemingen

Een van de manieren waarop bedrijven met elkaar verbonden zijn, is door gedeelde bestuurders: een commissaris bij een bepaald bedrijf zal soms ook commissaris zijn bij andere bedrijven. Onderzoekers gebruiken deze ‘board interlocks’ om te analyseren welke bedrijven een centrale plek innemen in het ondernemingennetwerk. Dit «wordt veelal beschouwd als indicatie voor een machtige of tenminste gunstige positie», aldus Frank Takes en Eelke Heemskerk in een interessant artikel over dit onderwerp.

Zowel de Volkskrant als NRC Handelsblad hebben visualisaties gemaakt van de (zakelijke) elite en hun commissariaten en andere functies. De gegevens van die visualisaties kan je weer gebruiken om netwerken te maken op basis van board interlocks. Hieronder een voorbeeld met gegevens van NRC Handelsblad uit 2017:

Donkere nodes verwijzen naar organisaties met een centrale positie in het netwerk, afgemeten aan hun betweenness centrality. Hieronder nog een voorbeeld, op basis van gegevens van de Volkskrant uit 2013:

Het duidelijkste verschil is dat de tweede grafiek veel meer nodes (organisaties) en edges (gedeelde bestuurders) bevat dan de grafiek over 2017. Maar er zijn nog meer verschillen. De dataset uit 2017 bevat alleen nodes met tenminste twee edges - waarschijnlijk het gevolg van een selectiecriterium dat NRC Handelsblad heeft gebruikt vanwege het type visualisatie dat ze wilden maken. De dataset uit 2013 bestaat verder uit meerdere componenten: drie sets van organisaties zijn alleen onderling verbonden en niet met de rest van het netwerk.

Er zijn dus flinke verschillen tussen de datasets. Is het desondanks zinvol om ze onderling te vergelijken? De tabel hieronder laat voor beide jaren de top–10 van organisaties met de hoogste betweenness centrality zien. De vergelijking beperkt zich tot organisaties die in beide datasets voorkomen.

2013 2017
VNO-NCW VNO-NCW
DNB Ahold
Concertgebouw Concertgebouw
KLM KLM
ABN Amro Schiphol
Aegon NV FrieslandCampina
Concertgebouw Fonds Philips
DSM DNB
Philips Rabobank Groep
Heineken NV Vopak

Organisaties als VNO-NCW, het Concertgebouw en KLM lijken een vrij stabiele centrale positie in te nemen. VNO-NCW heeft een omvangrijke Raad van Commissarissen met vertegenwoordigers uit uiteenlopende sectoren. Het Concertgebouw werd jaren geleden al omschreven als de huiskamer van de elite.

Naast deze constante factoren zijn er flinke verschillen tussen de twee ranglijsten. De rangcorrelatie is slechts 0.33 en niet statistische significant. Dit kan te maken hebben met verschillen in de manier waarop de datasets zijn samengesteld; de kleine omvang van de overlap tussen de twee dataset (slechts 34 organisaties) en andere problemen die te maken hebben met de kwaliteit van de gegevens.

Aan de andere kant, sommige verschillen tussen de ranglijstjes lijken wel degelijk overeen te komen met daadwerkelijke veranderingen in de positie van ondernemingen. Twee voorbeelden:

  • Een van de snelste stijgers is Ahold. Ahold is in 2016 met Delhaize gefuseerd. Het lijkt plausibel dat dit hun positie in het bedrijvennetwerk heeft versterkt.
  • ABN Amro is verdwenen uit de top–10. Vroeger had de bank commissarissen met veel connecties, zoals Gerrit Zalm en Joop Wijn (die allebei door de draaideur tussen overheid en bedrijfsleven zijn gegaan), Peter Wakkie en Marjan Oudeman (volgens verschillende lijstjes één van de meest invloedrijke Nederlandse vrouwen). In 2015 stapte voorzitter Wakkie op na een rel over buitensporige beloningen (de bank was nog altijd in handen van de staat nadat hij in 2008 met publiek geld was gered). Vervolgens verlieten ook Oudeman, Zalm en Wijn de bank, deels vanwege de beursgang die eraan kwam. Het huidige bestuur lijkt een bescheidener profiel te hebben.

Bij dit soort analyses zou het enorm helpen om meer gegevens te hebben. Dat is nog een extra reden waarom het Handelsregister beschikbaar zou moeten komen als open data: dat biedt meer inzicht in de onderlinge verhoudingen in zakelijk Nederland.

Methode en gegevens

Zie de Engelstalige versie van dit artikel.

Mijn Facebookvrienden vinden FNV Schoongenoeg leuk. En Hans Spekman

Viz3

Eigenlijk ben ik niet zo’n fan van Facebook, maar nu ik doorkrijg wat voor analyses je ermee kan doen begin ik er ook wel een beetje de lol van in te zien. Hierboven zie je m’n Facebooknetwerk. Ik heb opgezocht welke pagina’s mensen leuk vinden. Het populairst is FNV Schoongenoeg, de pagina van de schoonmakerscampagne; deze is door 45 mensen in m’n netwerk geliked. Terecht.

Andere voorbeelden van populaire pagina’s zijn FNV Supermarkt (34), Hans Spekman (22, daar keek ik van op) en de campagne om van 1 mei een nationale feestdag te maken (13).

Dit betekent niet dat mensen in m’n netwerk alleen maar pagina’s leuk vinden die met vakbonden of politiek te maken hebben. Zo vinden ze samen 631 pagina’s leuk die met muziek te maken hebben, maar ze vinden meestal niet dezelfde muziekpagina’s leuk. Wie FNV Schoongenoeg leuk vindt deelt deze like met 44 anderen; degene die Mark E. Smith (The Fall) leuk vindt deelt deze like met niemand anders. (Dezelfde persoon blijkt ook Iggy And The Stooges leuk te vinden. Mooi zo.)

De grafiek hierboven laat zien dat hier een patroon in zit. Lichtblauwe cirkels zijn mensen die hun voorkeuren gemiddeld met weinig anderen delen (althans, weinig anderen binnen m’n netwerk). Donkerblauwe cirkels zijn mensen die juist vaak pagina’s leuk vinden die anderen in m’n netwerk ook leuk vinden. Daar zitten veel mensen tussen met een achtergrond in de vakbeweging. Daar wordt flink campagne gevoerd; wellicht zorgt dat ervoor dat bepaalde pagina’s door veel mensen worden geliked.

Als je wil weten welke cirkel je bent in de grafiek hierboven, laat het dan even weten.

Methode

Een flink deel van de analyse is gebaseerd op de cursus Social Network Analysis van Lada Adamic en hoofdstuk 2 van Mining the Social Web van Matthew Russel. Allebei aanbevolen. Ik heb Python gebruikt om gegevens te ontfutselen aan de Facebook Graph API en om de gegevens te verwerken (mensen die in de privacysettings hun likes hebben afgeschermd heb ik bij de analyse buiten beschouwing gelaten). De scripts zijn hier te vinden. De grafiek heb ik gemaakt met Gephi.

Overigens leert een zogenaamde modulariteitsanalyse dat de groep die ik had aangemerkt als mensen met een vakbondsachtergrond in feite uit twee clusters (zie deze grafiek) bestaat: één met vooral mensen die betrokken zijn bij mijn eigen bond en één met mensen die bij andere bonden en sociale bewegingen betrokken zijn. De eerste van deze clusters heeft het meeste gedeelde likes.

Why some pages are popular among my Facebook friends - and others not

Viz3

I’m not crazy about Facebook, but now that I’m finding out what kind of analyses can be done with it, I’m starting to appreciate the fun of it. Above is my Facebook network. I’ve looked up which pages people like. Most popular is FNV Schoongenoeg, the page of the Dutch cleaners’ campaign for decent work, which has been liked by 45 people in my network. Rightly so.

Other examples of popular pages include FNV Supermarkt, the trade union page for supermarket workers (34); Hans Spekman, the page of the leader of the social-democrat party (22); and the page of the campaign to make 1 May a national holiday in the Netherlands (13).

This doesn’t mean that people in my network only like pages related to trade unions or politics. For example, they jointly like 631 pages related to music – but they don’t often like the same music pages. Someone who likes FNV Schoongenoeg shares this like with 44 others; the person who likes Mark E. Smith (The Fall) shares this like with no-one else. (It turns out the same person also likes Iggy And The Stooges. Good.)

The graph above shows there’s a pattern to all this. Light blue circles are people who, on average, share their likes with few others (that is, few others within my network). Dark blue circles are people who tend to like pages that are also liked by others in my network. This group includes many people with a trade union background. Quite a bit of campaigning goes on in those circles, which is perhaps why some pages are liked by a lot of people.

If you’d like to know which circle you are in the graph above, let me know.

Method

Much of this analysis is based on Lada Adamic’ Social Network Analysis course and chapter 2 of Mining the Social Web by Matthew Russell. Both highly recommended. I used Python to retrieve the data from the Facebook Graph API and for processing (I excluded people who chose not to display their likes in their privacy settings). The scripts can be found here. I used Gephi to create the graph.

Incidentally, a modularity analysis shows that the group I interpreted als people with a background in the trade union movement in fact consists of two clusters (see this graph): one consisting mainly of people involved with my own union, and one consisting of people involved with other unions and social movements. The first of those clusters has the highest level of shared likes.