[Contact]

Daily breaking news

πŸ”’
❌ About FreshRSS
There are new available articles, click to refresh the page.
Before yesterdayNews from Amsterdam

Holleweg

By DIRKMJK

It may be difficult to explore the maps on a mobile screen.

Holleweg in Rheden, seen from above. Notice how meticulously the cycle paths are cleaned in the Veluwezoom area

If you’re cycling in the Netherlands, especially in hilly areas, you may well find yourself on a road named Holleweg (Holloway). According to Wikipedia, the name refers to a road or track that is significantly lower than the land on either side, not formed by the (recent) engineering of a road cutting but possibly of much greater age.

A nice example is the Holleweg in Rheden, shown above. Then there’s the Oude Holleweg in Berg en Dal near Nijmegen, a short but tough climb. And a route down the Amerongenseberg will also take you along a Holleweg, but this one isn’t actually a holloway (anymore?). The Dutch national archive contains two photos of roads named Holleweg, both being used by cyclists.

I had the idea that if you’d create a map of all the roads named Holleweg, you might end up with a simplified elevation map of the Netherlands. However, things turned out to be a bit more complicated. Wageningen University & Research (WUR) have created a geomorphological map of the Netherlands (data, description). This map considers holloways a subcategory of dalvormige laagten (valley-shaped hollows), which suggests pretty much the opposite of elevation.

Below is a map showing roads named Holleweg (derived from Open Street Map), in red, and areas classified as holloway by WUR, in blue.

Larger version here.

The roads classified by WUR as holloways are concentrated in a number of areas, most notably Zuid-Limburg. There is very little overlap with roads that are named Holleweg. I suspect this is because the WUR definition refers to a specific type of holloway only.

Update 13 September 2019 - WUR explains: «The development of the geomorphological map spans a long period, and over time, many different people have worked on it. The holloway phenomenon has not been systematically mapped and has been charted mainly where it ‘competes’ with natural valley forms, for example in Zuid Limburg and Rijk van Nijmegen, as you suggest. In most cases, old cart tracks and hessenwegen cutting through sand ridges have not been identified as holloways, unfortunately. […] As we’re updating the map, we try to interpret those roads as holloways as well.

So how does the WUR classify the roads named Holleweg? Where possible, I’ve linked the street segments named Holleweg to a land form group on the WUR map. The result is shown below (I stick to the Dutch descriptions because I’m not sure of the correct English translations of the terms). The last column shows the total surface area of each land form group, as a percentage of the total area mapped by the WUR.

landvormgroep holleweg holleweg % area %
Geïsoleerde heuvels, heuvelruggen en dijken 58 32 14
Wanden 31 17 0
Heuvels en heuvelruggen met bijbehorende vlakten en laagten 27 15 17
Terrasvormen 18 10 1
Dalen 16 9 7
Vlakten 13 7 51
Waaiervormige glooiingen 8 4 0
Niet-waaiervormige glooiingen 5 2 2

Over half the area covered by the WUR map is classified as vlakte (plain). On the other hand, street segments named Holleweg are predominantly in land form groups that suggest relief, like heuvels (hills) and heuvelruggen (ridges).

In addition to land form groups, WUR identifies subgroups. For example, of the 58 street segments in the first table row, 40 are in the subgroup stuwwal (hills created by a glacier pushing up soft material). If I’m not mistaken, the examples in Rheden, Berg en Dal and Amerongen cited above are all on a stuwwal.

The Holleweg in Rheden again, about halfway up.

I thought it might be interesting to extend my analysis to foreign-language equivalents of Holleweg. This wasn’t easy. For example, Google Translate fails to offer reliable translations of holloway, which suggests the term isn’t used often enough to train the translation machine.

But I came across this tweet about Corredoira, the Galician translation of the book Holloway, by Robert Macfarlane, Stanley Donwood and Dan Richards. In the endless responses to the tweet, various other translations of the term are offered. Some of these served as clues to find yet other translations.

I exported roads from Open Street Map (OSM) with names containing one of the following terms: Holleweg (nl), Holloway (en), Chemin Creux (fr), Hohlweg (de), Corredoira (gl), Hulvejen (da), Hulvei (no) or Hålväg (sv). I ended up with over three thousand segments. In OSM, roads typically consist of multiple segments (ways).

I used the Google Elevation Api to look up elevation for the start and end points of all segments. As all data in this article, this comes with some caveats, discussed in the Method section below.

Based on the highest value for the start and end points, the median elevation of all segments is a little over 154m, with three-quarters below 290m and the highest at 2.149m. This suggests that streets named holloway may be found in hilly areas, but not very often in high mountains. As one would expect, median elevation varies across countries: for example, 22m in the Netherlands; 44 in Belgium; 63 in the UK; 136 in France; 152 in the US; 254 in Germany and 357 in Austria.

The median gradient of all segments is about 2% and three-quarters are below 5.3%.

Below is a map showing the segments, with different colours for the language versions.

Larger version here.

Unsurprisingly, language doesn’t always reflect (current) boundaries. There are streets named Holleweg in Germany, for example near Solingen. And in France, near the German border, there are a couple of streets named Rue Hohlweg.

One thing is clear: the Holleweg map isn’t a simplified elevation map. While the name may be used for roads in hilly areas, it appears to be rare in mountainous areas such as the Pyrenees or the Alps.

The same applies to Northern America: there are few Holloways in the Rocky Mountains.

And in Australia, Holloways seem to be located mainly on the margins of the Great Dividing Range.

Of course, all kinds of factors may influence the prevalence roads named Holloway. At a very basic level, you wouldn’t expect too many of them in areas with low population density. I imagine cultural factors could play a role as well. But geology also seems relevant. In their book Holloway, MacFarlane a.o. observe:

Holloways do not exist on the unyielding rock regions of the archipelago, where the paths stay high, riding the hard surface of the land. But where the stone is soft - malmstone, greensand, sandstone, chalk - there are many to be found, some more ravines than roads.

That makes sense. Perhaps the prevalence of streets named Holloway isn’t determined as much by height as by characteristics of the soil.

Oude Holleweg in Berg en Dal, view from above. As the road is steep and narrow, downhill traffic is not allowed (in fact they should ban cars altogether).

I’ll conclude with some other characteristics of the segments from OSM. According to Wikipedia, holloways are typically too narrow to allow vehicles to pass each other. Some of the OSM segments have a tag indicating whether it’s a one-way street, but there are too few of them to draw any conclusions. Seven hundred segments have a maximum speed tag; the median value is 32 km per hour.

Method

I used Python to download OSM data (using the Overpass API), to retrieve elevation data from the Google Elevation API, and for processing the data.

Some caveats:

  • While OSM data is pretty good, it depends on efforts of volunteers and coverage may vary across regions.
  • In OSM, streets typically consist of multiple segments (ways). I used segments as the unit of analysis.
  • The WUR map doesn’t seem to cover the entire area of the Netherlands (urban areas tend to be missing). As a result, not all street segments named Holleweg could be linked to an area in the WUR map. On the other hand, areas in the WUR map sometimes overlap. For each (Dutch) street segment named Holleweg, I checked for both the start and end points which WUR map areas they’re in. Due to overlap in the WUR map areas, a street segment can be associated with multiple areas and therefore with multiple classifications.
  • Translations of Holleweg may not have the exact same meaning as the Dutch term. And of course, Holloway can be a name. Before including foreign terms in my analysis, I tried to look up a few examples of roads with that name to see if they appear to refer to broadly the same phenomenon. I excluded a few translations, either because they are seldom used as a street name (ceu-ffordd), or because they often appear to refer to other phenomena (pugdandee). Of course, spelling variations may have messed things up.
  • There’s a lot of debate about the accuracy of Google Elevation data. Especially with short road segments, the grade calculated may be inaccurate. With the Google Elevation API, it’s possible to retrieve data for a few hundred locations per request, but this resulted in very low resolution data. I decided to retrieve data in batches of 10 locations, which seemed to solve the issue.

Python code used for querying Overpass and processing data here

  • September 8th 2019 at 08:40

Translating polls into policy outcomes

By DIRKMJK

In a report on last May’s Australian election, Nick Evershed of the Guardian translated live election results into support for specific policy outcomes.

We wanted to make an alternate view of election results that moves the results away from the ‘horse race’ and instead emphasises the policy outcomes of the election – that is, what the outcome will actually mean for people in the real world.

I reckoned you could do the same with polls instead of election results. I selected a number of proposals that have been put to a vote in the Dutch Lower House. Using Tom Louwerse’s Peilingwijzer ‘poll of polls’, I tracked developments in the combined virtual vote share of the parties that have voted in favour of those proposals.

The support for individual parties may show considerable fluctuations, but the combined support for policy proposals is relatively stable. This shouldn’t really come as a surprise. Voters may switch quite easily from one party to the other, but not randomly: they tend to stick to a set of parties with broadly similar values. This suggests that voters will often switch between parties that tend to support the same proposals.

Still, some proposals do show growth or decline in their combined virtual vote share. This includes proposals that were supported by either FvD or PVV but not both: FvD has seen considerable growth in the polls, partly at the expense of PVV. Proposals supported by left-wing parties also saw their support grow somewhat, but not if D66 was among the supporting parties.

So what does this all mean? The chart above doesn’t predict which policies will be implemented after the next election (just like the underlying polls aren’t simply a prediction of the next election result). However, it does appear to be a useful tool to make sense of fluctuations in polls.

Key to parties.

UPDATE 21 July 2019 - New Peilingwijzer data has been published since; the chart has been updated to include the fresh data. For the conclusions this doesn’t really make much of a difference.

Caveats

One could argue that how parties vote doesn’t always reflect their position, especially when coalition parties have to stick to concessions they have made in the coalition agreement. I dealt with this by using only proposals (with one exception) on which the coalition parties VVD, CDA, D66 and ChristenUnie did not vote unanimously. Apparently, there was no pressure to vote along coalition lines in these cases.

Voters (and respondents in polls) aren’t always aware of the positions of the parties they support. For example, many voters want the government to reduce income differences. They may (wrongly) assume that the party they support also wants to reduce income differences.

As for the chart: an area chart is always a bit problematic, but it would appear to be a defensible choice when you want to show developments in the combined vote share of a number of parties. I guess it could be improved by putting parties that show large variations in the polls on top and the more stable ones to the bottom.

  • July 14th 2019 at 10:33

Traffic flow maps

By DIRKMJK

Traffic Diagram of London, by Ludwig Karl Hilberseimer, 1944. Ludwig Karl Hilberseimer Archive, Ryerson and Burnham Archives, The Art Institute of Chicago.

A tweet by artist, designer and developer Jill Hubley drew my attention to a traffic flow map of London, created by Bauhaus architect Ludwig Karl Hilberseimer. The map shows the number of buses passing through London’s central arteries in one hour. «The traffic diagram of London shows both the typical congestion in the center and the lack of transportation facilities at outlying points,» he commented. Hilberseimer thought the solution to this transportation problem was to decentralise the city, by creating satellite cities with a population of at most 100,000.

Hubley has been tweeting numerous historical traffic flow maps, including a beautiful 1944 map showing transport along the waterways of Belgium and the Netherlands. What struck me about the Hilberseimer map is its similarity to a series of maps in a traffic study published by the city of Amsterdam in 1976. These maps were discovered by Marjolein de Lange of cyclists’ organisation Fietsersbond, and have been reproduced in the book Bike City Amsterdam she wrote with Fred Feddes.

From: Voorontwerp verkeerscirculatieplan Amsterdam, 1976. Photo Marjolein de Lange

The Amsterdam maps illustrate how cycling had declined in Amsterdam between 1961 and 1971, and how rising car use had created a congestion problem. It wasn’t until later that the city developed measures to promote cycling, as analysed in Bike City Amsterdam. I tried to create a 2016 version of the cycling map using Fietstelweek data, but it should be noted that the cycling routes of Fietstelweek participants may not be representative of overall bicycle traffic in Amsterdam.

Compared to Hilberseimer’s map, the maps created by the city of Amsterdam have a very clean design: all cartographic details that do not represent traffic data have been omitted. And then there’s the elegant legend. Hubley has tweeted a Swedish traffic flow map from 1977 with a similar type of legend, as well as a map of Florida from 1952, a map of St. Paul - Minneapolis from 1949, and a 1945 map of eastern Germany with a horizontal version of the legend. (Update - interesting variant on this 1963 Lincolnton map; plus see this 1921 map of Seattle.) I wonder whether earlier examples exist.

Were the flow maps in Amsterdam’s traffic circulation plan inspired by Hilberseimer’s Traffic Diagram of London? Possibly, but Hilberseimer wasn’t the first to create a traffic flow map. In fact, both Amsterdam’s map makers and Hilberseimer are indebted to a map created a century before Hilberseimer’s map, by the French civil engineer Charles-Joseph Minard.

Carte de la circulation des voyageurs par voitures publiques sur les routes de la contrée où sera placé le chemin de fer de Dijon à Mulhouse (source), by Charles-Joseph Minard, 1845. Reproduced with the kind permission of the Ecole nationale des ponts et chaussées.

In her book The Minard System, visualisation strategist Sandra Rendgen comments:

In this revolutionary map, created in the middle of a debate about where to project the railroads between Dijon and Mulhouse in eastern France, Minard analyzed the street traffic on preexisting roads in the region.

Apparently, the map was so influential in shaping the debate that a fake copy was made ‘in an attempt to prove another route to be more promising’.

Rendgen describes how Minard initially created bar charts to represent traffic along segments of a route. At some point, he decided to project these graphs onto a map, which resulted in the creation of the flow map. Over time, Minard’s flow maps gained in complexity, as he used colour to represent different types of data. Minard is sometimes credited with inventing the flow map, but Rendgen points out that the design was possibly invented more or less simultaneously in Ireland, France and Belgium.

Minard’s charts and maps often contain detailed descriptions of the data and methods he used. He collected data from a range of sources, and emphasised that graphs should accurately represent the data. On the other hand, he was willing to sacrifice geographic detail or accuracy for clarity. Rendgen points to the ‘clean and minimalist aesthetics’ of his work, devoid of decorations or other clutter. It is no wonder that Edward Tufte, the renowned proponent of clutter-free data visualisation, described Minard’s work as an example of ‘graphical excellence’ (in The Visual Display of Quantitative Information).

A recurrent theme in Minard’s explanatory notes is that he aimed to make relationships quickly apparent to the eye. One of these notes has an almost futurist sense of modernity to it: «The figurative maps are thoroughly in the spirit of the century in which one seeks to save time in all ways possible.»

One could argue that the 1976 Amsterdam traffic flow maps are true heirs to Minard’s approach, and especially to his first, monochrome flow map reproduced above. As Rendgen notes, Minard’s map is «extremely stripped down; it features barely any landscape details other than a network of local place names and rivers». Even those subtle geographical hints have been omitted from the Amsterdam traffic flow maps. Of course, this only works because of the very recognisable pattern of Amsterdam’s streets.

  • May 19th 2019 at 09:15

Scraping Airbnb

By DIRKMJK

Airbnb is not exactly keen to share data that might help analyse its impact on local housing markets. In 2016, the Amsterdam Municipality decided to collect Airbnb data using a scraper - a computer programme that automates the job of retrieving information from web pages.

Amsterdam is not the only government to use web scraping. Increasingly, this technique is used to obtain data about topics ranging from consumer prices to jobs vacancy statistics and business data. Collecting data from the internet has advantages, but it also poses some challenges. It may be difficult to aggregate data coming from different websites, and data found online may not cover all aspects of a phenomenon you’re trying to understand (for example, not all job vacancies are published online). On a more practical level, your web scraper code may break when websites change.

In March 2017, Amsterdam reported that its weekly scrapes of major platforms like Airbnb required little maintenance. But last week, it sent a report to the city council describing how Airbnb has been making changes to its website - perhaps in an attempt to frustrate efforts to collect information about its business practices. Initially, Amsterdam’s digital surveillance department succesfully updated its scraper, but following new changes to the Airbnb website since May 2018, Amsterdam now appears to have given up on scraping Airbnb.

This made me curious about the technical characteristics of the Airbnb website. Here are some observations, based on an (admittedly superficial) examination:

  • The initial download of a web page isn’t the final version: after downloading, the contents of the page are dynamically altered using Javascript. For some purposes like navigating search results, you may prefer the final version of the page, which you can get using Selenium. Selenium would especially come in handy for interacting with the calendar to get availability and price information, which seems to be rather tricky.
  • Some details on listings only appear to be available in the Javascript code. You can find them using patterns like '\"lat\"\:(.*?),\"lng\"\:(.*?),'
  • Airbnb uses NGINX to control access to its website. If you request too many pages too fast, you’ll hit a rate limit and get an error page. I guess it should be possible to avoid the rate limit by adding pauses to your programme, but it may take quite some time to figure out how often and how long they should be.

While it appears that barriers to scraping the Airbnb website may be surmountable, it’s quite possible that I underestimate what this would take. If you’d actually build a scraper and would use it to frequently collect information about all local listings, all kinds of new problems might arise.

Meanwhile, other sources of Airbnb data are available. In a previous post, I used data made available by Tom Slee and by Murray Cox’ Inside Airbnb. Slee has since stopped updating his data, but Inside Airbnb is still active. As the Amsterdam Municipality notes in its report, Inside Airbnb has succesfully adapted its scraping technique each time Airbnb changed its website.

UPDATE 13 May - See comments on Twitter: Jens von Bergmann from Vancouver also has a scraper that is working. Following some requests, Tom Slee recently updated his scraper; his code is available on Github.

  • May 12th 2019 at 10:00

Visualising Amsterdam’s cyclists

By DIRKMJK

Bike City Amsterdam, a new book by Fred Feddes and Marjolein de Lange, recounts how Amsterdam developed a cycling policy (more on the book below). An important source for the book is the archive of the Amsterdam branch of cyclists’ organisation Fietsersbond. In addition, traffic data was used to analyse trends.

An interesting dataset consists of counts of the number of cyclists, cars and other road users moving into and out of Amsterdam’s city centre, over the years 1980–2009. Most of the locations where traffic was counted are on the Singelgracht, which encircles Amsterdam’s city centre.

The data represents manual counts on a single day, between 7am and 7pm, of traffic in both directions.

I was asked to think about a way to visualise this dataset, which posed an interesting challenge (and was a lot of fun to do). Below, I’ll discuss a few of the options we considered.

Radar chart

Given the geographical distribution of counting locations, it seemed to make sense to try a circular chart design. In fact, that idea had also occurred to the city’s infrastructure department. In a 2007 fact sheet, they used a radar chart (or cobweb chart) to visualise the Singelgracht bicycle counts.

Incidentally, they didn’t use the term radar chart, but called it a fan (waaier). They used a bicycle metaphor to describe how it works: «from the middle, the counting locations around the city centre are connected like spokes in a bicycle wheel».

The chart looks really nice, but this chart type also has a drawback: there’s an implicit suggestion that the area within the purple line represents the number of crossings, which is in fact misleading (see this article for a discussion of a similar problem). Another limitation is that the chart doesn’t show how bicycle traffic changed - although it would be possible to make a version with separate lines representing 1980 and 2009.

Radial lollipop chart

As an alternative, I created what I’ll call a radial lollipop chart (to my knowledge, this chart type didn’t exist yet). The chart library that I use, D3.js, doesn’t seem to have a method to draw the ‘spokes’, or at least I couldn’t find it. Therefore, I wrote a function that calculates the start and end points of the lines. I had long forgotten how to use sine and cosine, so I had to look that up. I’ve published the code here.

Here’s a radial lollipop chart showing how cycling has increased at virtually all the Singelgracht crossings.

And here’s one showing the opposite effect for cars:

I love it when a chart has data points that break out of the chart area - although this is perhaps a bit extreme. The outliers are due to the fact that a large share of car traffic uses the Wibautstraat - IJtunnel route. I could have changed the scale to include those outliers, but then changes on other routes as well as changes in bicycle use would have become much more difficult to discern.

Area chart

I rather like the radial lollipop chart, but it has a limitation: it shows changes between 1980 and 2009, but not when those changes happened. Car use started to go down before cycling really started to increase, but from the radial lollipop chart you couldn’t tell.

This is why the chart used in the book is an area chart, with colours corresponding to the broad geographical orientation of the crossings. Simple, but effective. And if you want to explore the details, click here for a draft version of the charts: bicycle, car.

About the book and exhibition

On 4 April, the Amsterdam branch of cyclists’ organisation Fietsersbond has handed over its archive to the Municipal Archive. Marjolein de Lange, who coordinated a volunteer project to prepare the archive, came up with the idea to use the material as input for a book - a project she carried out with author Fred Feddes.

This resulted in a very interesting book about activism versus cooperation; the place of cycling in urban planning; and how the magic power of Amsterdam’s cycling culture decided the epic fight for the right to cycle through the passage under the Rijksmuseum. The book, which contains a wealth of great photos; maps and posters, is a must-read for anyone interested in cycling, Amsterdam, or activist poster design. It’s been published both in Dutch and in English. There’s also an exhibition at the Municipal Archive (until 30 June, Vijzelstraat 32, access is free).

  • April 6th 2019 at 09:48

Using a jagged baseline to indicate a broken y-axis

By DIRKMJK

In an article for the recently created Data Visualisation Society, R.J. Andrews suggests using a jagged baseline to indicate a broken y-axis (i.e., an axis that doesn’t start at zero). The idea - inspired by some beautiful charts dating back to WWI - is to suggest that the bottom part of the chart has been torn off. I like the idea - but I found it isn’t easy to implement.

Contrary to the view of some chart fundamentalists, using a y-axis that doesn’t start at zero can be perfectly ok in some situations. Still, one might want to alert the reader that the zero line is missing. One way is to add a little zigzag or some other symbol to the y-axis, as shown here. And then there’s Andrews’ suggestion to use a jagged baseline.

I tried to implement this in a chart that shows the number of flights at Schiphol Airport. For background: Schiphol has all but reached the cap of 500,000 flights per year, agreed on after negotiations between local residents and the aviation industry. There’s currently a heated debate on whether Schiphol should be allowed to grow further. Experts expect that maintaining the cap will result in more efficient use of the available slots (e.g. fewer short-distance flights, fewer low-cost flights, larger aircraft and fewer empty seats).

Creating a jagged baseline is a bit of a hassle: you have to remove the regular baseline, move the axis labels down a bit and create a new, jagged baseline.

And then there are some design issues. Having the baseline and the ‘regular’ chart lines look too similar may cause confusion. In fact, all of Andrews’ examples have very pronounced chart lines, which are clearly distinct from the baseline. If you prefer a more subtle approach, another solution is to use a light colour for the baseline.

Then again, it also matters whether there are gridlines. After some experimenting, I think the jagged baseline only works well with gridlines added; without them it looks a little weird. But see for yourself if you agree.

I’ve written a Python script to download and clean Schiphol Airport traffic data; find it on Github.

  • March 31st 2019 at 13:58

How to investigate assets: lessons from The Wire

By DIRKMJK

I’m rewatching The Wire. It’s a great series anyhow, but for researchers, episode 9 of the first season (2002) is especially interesting. It features detective Lester Freamon instructing detectives Roland Pryzbylewski and Leander Sydnor how to investigate the assets of drug kingpin Avon Barksdale.

They use microfilm instead of the Internet. They don’t have databases like Orbis, Companyinfo or OpenCorporates, and they don’t seem to calculate social network metrics. Yet the general principles behind Freamon’s methodology still make perfect sense today:

Start with the nightclub that Barksdale owns. Look up Orlando’s, by address, you match it, and you see it’s owned by - who?

Turns out it’s owned by D & B Enterprises. Freamon tells Prez to take that information to the state office buildings on Preston Street.

Preston Street?

Corporate charter office.

Corporate who?

They have the paperwork on every corporation and LLC licensed to do business in the state. You look up D & B Enterprises on the computer. You’re going to get a little reel of microfilm. Pull the corporate charter papers that way. Write down every name you see. Corporate officers, shareholders or, more importantly, the resident agent on the filing who is usually a lawyer. While they use front names as corporate officers, they usually use the same lawyer to do the charter filing. Find that agent’s name, run it through the computer, find out what other corporations he’s done the filing for, and that way we find other front companies.

This is pretty much the same approach you’d take when investigating shady temp agencies: trace connections via (former) shareholders, board members, company addresses and related party transactions. And, of course, try to figure out where the profits go.

On that aspect, Freamon also has some wisdom to share:

And here’s the rub. You follow drugs, you get drug addicts and drug dealers. But you start to follow the money, and you don’t know where the fuck it’s gonna take you.

  • February 15th 2019 at 22:44

My first Python package

By DIRKMJK

As a self-taught programmer, I sometimes feel a bit uneasy about the code I write. Sure, it may work, but there’s probably a more efficient and more elegant way to do it. These doubts notwithstanding, I’ve just published my first Python package: limepy.

Its purpose is simple: it helps you process and summarise LimeSurvey data. LimeSurvey is a survey tool, somewhat similar to Surveymonkey. It’s different in that it’s open source, and probably more versatile.

If you download survey data as a csv, the answers to question types such as multiple choice questions or blocks of questions (‘arrays’) will be spread out over multiple columns. One task of limepy is to make sure all the data for a specific item end up in one table.

Limepy will also help you with a number of other tasks, like downloading survey data, creating a codebook, printing answers to open-ended questions and printing the answers of an individual respondent.

Find the package on Github and PyPI. Install with pip install limepy. Feedback welcome.

  • January 13th 2019 at 10:31

Delete Facebook

By DIRKMJK

This is becoming a bit of a tradition: me writing about people who make a New Year’s resolution to quit Facebook. The story is simple: around the turn of the year, there’s a peak in people googling how to quit smoking, but there’s an even larger peak in people trying to figure out how to delete their Facebook account.

But this year, the story is a bit more complicated (and more interesting).

Google Trends data isn’t available yet for the last days of the year, so there’s no new peak in searches for “quit smoking” yet. Other than that, the yearly pattern is dwarfed by a huge peak in search volume for “delete Facebook” in the week starting on 18 March. What happened?

The Guardian has helpfully created an overview of Facebook-related incidents during 2018; I’ve added a few stories that also seemed relevant (for sources, see Method below; thanks to Vicki Boykis for the suggestion to annotate the Google Trends chart).

No surprise: the largest peak in “delete Facebook” searches happened a few days after the publication of the Cambridge Analytica story on 17 March. The news resulted in a veritable #deletefacebook campaign, although according to Mark Zuckerberg, «I don’t think we’ve seen a meaningful number of people act on that.»

Arwa Mahdawi has argued that deleting your Facebook account isn’t a bad New Year’s resolution, even though it probably won’t change how the company operates: «Facebook’s abuse of power isn’t a problem that we can solve as individuals. Technology giants must be regulated.»

So how much impact did the controversy have on Facebook? One way to try and answer this is to look at the share price.

The pattern for Facebook is rather interesting. The share price dropped after the publication of the Cambridge Analytica story, but quickly picked up again. But then it took a plunge on 25 July, resulting in ‘the biggest-ever one-day wipeout in U.S. stockmarket history’.

One possible interpretation is that investors initially thought the Cambridge Analytica story wasn’t going to harm Facebook’s profits. But when Facebook published its Q2 earnings report, they were shocked to learn that user growth had stalled.

But the chart also shows that all major tech companies saw their share prices go down. This suggests there’s more going on than users leaving Facebook. In addition to broader economic trends, a likely explanation is that investors fear more government regulation of major tech companies in response to the controversies they are involved in (and also to their dominant market position). While this may not be the whole story, it does seem to support Mahdawi’s view about the key role of regulation.

Method

Note that Google Trends data should be interpreted with caution because Google doesn’t provide much detail on the methodology used to produce the data.

For periods longer than three months, only weekly data can be downloaded. For the 2018 chart I wanted daily data. As suggested here, I downloaded three-month batches with overlapping data and then used the overlapping dates to calculate a ratio to adjust the scales. Here’s the code:

import pandas as pd
import numpy as np
 
def stitch(df1, df2):
    df1.index = df1.date
    df2.index = df2.date
    overlapping = [d for d in df1.date if d in list(df2.date)]
    ratios = [df1.loc[d, 'delete facebook'] /
              df2.loc[d, 'delete facebook']
              for d in overlapping]
    ratio = np.median(ratios)
    for var in ['delete facebook', 'quit smoking']:
        df2[var] *= ratio
    df = pd.concat([df1, df2[~df2.date.isin(overlapping)]])
    return df
 
df = dfs[0]
for df2 in dfs[1:]:
    df = stitch(df, df2)

I used this Guardian article as my main source on Facebook-related incidents in 2018. I added a few from other sources: in April, Facebook announced 87 million people had been affected by the Cambridge Analytica scandal. Subsequently, it announced that it would notify people who had been affected. Dutch comedian Arjen Lubach organised a Bye Bye Facebook event (reminiscent of the 2015 Facebook Farewell Party). In September, Pew found that one in four Americans had deleted the Facebook app from their phone; and later that month a Chinese hacker threatened to delete Mark Zuckerberg’s Facebook account.

  • December 30th 2018 at 08:51

Who use the Dafne Schippers bicycle bridge

By DIRKMJK

If all goes well, the Dafne Schippers bicycle bridge in Utrecht should reopen on Monday, after a short closure for maintenance. I have a special affinity with this bridge: it opened on the day I started working in Leidsche Rijn, west of the Amsterdam-Rhine Canal, and it’s part of my favourite cycle route to work.

Who else use this bridge? With the usual caveats, data of the Fietstelweek can provide some insights. The charts below show, for each direction of traffic, at what time cyclists use the bridges across the canal.

There’s a morning peak in cyclists crossing the canal from Leidsche Rijn (west) to the city centre (east), and a peak in cyclists going the opposite direction around 5 pm. This suggests that the bridges are popular among commuters from Leidsche Rijn. That doesn’t really come as a surprise: if you cycle to Leidsche Rijn during the morning rush hour, you ride past huge numbers of cyclists going in the opposite direction.

The map below shows the routes of cyclists using the bridges. From top to bottom: Hogeweidebrug (or Yellow Bridge), Dafne Schippers bridge and De Meern bridge.

It appears that many cyclists use the bridges to go to the area around Central Station. Users of the De Meern and Dafne Schippers bridges tend to use nice routes that converge along the Leidseweg. Users of the Yellow Bridge use the not-so-nice route along Vleutenseweg, or the slightly better route along the railway track.

Research has shown that cyclists don’t always prefer the shortest route to their destination; the quality of the cycle tracks also plays a role.

Yet the map suggests that many cyclists opt for the shortest route, even if a nicer alternative is available. For example, few cyclists from the northern part of Leidsche Rijn seem to use the Dafne Schippersbrug, or the route along Keulsekade (the latter avoids long waits at traffic lights).

See also this analysis by DUIC, which shows that the bridge is not only popular among cyclists, but also among runners, which is fitting given the name of the bridge.

  • November 4th 2018 at 10:24

Logos of rider unions

By DIRKMJK

A nice map circulating on Twitter (here, here and here, via) shows where food delivery workers are organising. Many of their logos proudly feature bicycle parts. The Finland-based Foodora campaign is the exception; their logo appears to have been inspired by Alexander Rodchenko’s КНИГИ poster. Also note the elegant logo of Collectif des coursier-e-s / KoersKollectief.

While their fight is about the future of work, some of these groups are independent of established trade unions - and some don’t consider themselves trade unions in the first place. Riders have used wildcat strikes and other forms of direct action, as well as initiatives such as crowdfunding a strike fund. With employers like Deliveroo trying to «disrupt» the labour market, it makes sense that their workers don’t play by the rules either, it has been argued.

Unfortunately, I couldn’t find an example of the Swiss fiery backpack logo.

UPDATE - added logos from Scotland and Finland

  • October 28th 2018 at 06:32

Which Amsterdam neighbourhoods might qualify for an Airbnb ban

By DIRKMJK

Last week, city council member Sofyan Mbarki (Social-Democrats) proposed a motion to ban holiday rentals in Amsterdam neighbourhoods such as the Haarlemmerbuurt, the Kinkerbuurt and the Wallen. A concentration of holiday rentals results in rising house prices, lower social cohesion, increasing pressure on the housing market and inequality, he argued. The motion has support from a majority of the council.

The city government is inclined to implement the motion, but alderman Laurens Ivens (Socialist Party) wants to study the legal aspects. He considers the neighbourhoods mentioned in the motion good candidates for a ban on holiday rentals, but he doesn’t rule out that other neighbourhoods may be selected.

So what neighbourhoods might qualify? One criterion might be Airbnb density, which is shown on the map below (for caveats see Method below).

Unsurprisingly, neighbourhoods with high Airbnb density overlap with areas where residents complain about holiday rentals: Centrum-West, Centrum-Oost, Westerpark, Oud-West/De Baarsjes and De Pijp/Rivierenbuurt (source).

Airbnb frequently claims that it contributes to tourist dispersion because many hosts are located outside the city centre. However, the map suggests that Airbnb is in fact heavily concentrated in neighbourhoods such as the Wallen, the Jordaan, the Pijp and the Kinkerbuurt. While some of these neighbourhoods are outside the city centre, the pattern appears to be concentration rather than dispersion.

While these neighbourhoods would be likely candidates for a ban on holiday rentals, Ivens may also want to anticipate future developments. A number of neighbourhoods still have a relatively low Airbnb density, but have seen their density double or even almost triple over the past three years: Transvaalbuurt, Hoofdweg e.o., Van Galenbuurt and Westindische Buurt.

UPDATE - It was rightly pointed out that Airbnb density partly reflects housing density. An alternative measure would be Airbnb relative to addresses or population. However, this would result in high values for some areas with low population density where holiday rentals don’t appear to be perceived as much as a problem as in some of the more densely populated areas.

See also:

  • Is tourist dispersion working? An analysis of Lonely Planet maps
  • Airbnb’s agreement with Amsterdam: some insights from scraped data

Method

Both Murray Cox’s Inside Airbnb and Tom Slee provide data collected by scraping the Airbnb website. While this data has some limitations, it’s probably the best publicly available data source on Airbnb. Since Tom Slee stopped collecting data last year, I used Inside Airbnb data for the current article. A discussion of methodological aspects related to that data is here.

In addition, I used land surface data from Statistics Netherlands (CBS). This data is for 2017.

I calculated an indicator for Airbnb density in the following way:

  • I assigned each listing to a neighbourhood (note that coordinates for listings aren’t 100% accurate as discussed by Cox);
  • For each listing, I calculated an indicator for the number of stays as: reviews per month (an indicator of the number of rentals) * the minimum length of stay (capped at 3 nights following this study) * the number of beds (an indicator for the number of guests, capped at 4 because that’s the maximum number of guests allowed by local regulations);
  • I summed that number for each neighbourhood and divided that by the land surface of the neighbourhood (ha).

Note that the indicator for the number stays will not be equal to the actual number of stays, for a number of reasons:

  • It’s possible that not all beds are occupied;
  • Not all guests write a review (Cox suggests the number of rentals could be twice as high as the number of reviews);
  • People may stay longer than the minimum number of nights;
  • Sometimes more than four people may stay in an Airbnb, despite the fact that that’s not allowed;
  • For some listings, the indicator could not be calculated because of missing data (about 11.4%).

According to Airbnb, the number of stays in Amsterdam is 2.5 million. Based on that number, the actual number of stays would be about 3 times as high as the indicator for the number of stays I calculated. Given the considerations listed above, that’s more or less what one would expect.

Python script here.

  • October 14th 2018 at 11:43

After the voter revolt: Collaboration in the Amsterdam city council

By DIRKMJK

The 21 March city council election saw a bit of a voter revolt. Four new parties got elected onto the city council, thanks primarily to voters in the less affluent, peripheral parts of the city. The election outcome reflects Amsterdam’s social divide.

As a result, the composition of the city council changed considerably. So how are the established parties and the new parties getting along?

Before trying to answer that question, let’s have a look at collaboration in the previous city council. There was a left-wing majority in the council, but the government was relatively right-leaning. There was an effective opposition, with GroenLinks (Green Party) and PvdA (Social-Democrats) frequently collaborating to file motions and amendmends.

The chart below shows collaboration in the current city council. The city now has a more left-leaning coalition of GroenLinks, D66, PvdA, and SP. The pattern of collaboration has changed considerably.

The chart suggests that there are three clusters in the city council. One contains the coalition parties GroenLinks, D66, PvdA, and SP. The second contains right-wing / conservative parties VVD, CDA, FvD and PvdO. And the third contains DENK, BIJ1 and ChristenUnie. PvdD (Party for the Animals) appears to be a bit of an outsider by this measure.

Opposition

Are opposition parties able to exert influence, despite their divisions? An interesting measure is whether they succeed in getting proposals adopted despite a part of the coalition voting against. So far, this has happened twice.

One case was a motion from Diederik Boomsma (CDA), asking to provide parking permits to people who have a private garage but have turned it into something else. Coalition party GroenLinks voted against, arguing that people who have made the decision to use their garage for other purposes are now turning to the city to solve their parking problem.

The second one was a motion from Sylvana Simons (BIJ1) asking to the local government to support teachers in their fight for fair wages. PvdA voted against, arguing that the alderwoman had already taken a stand.

The motions can be downloaded here, and here’s a Python script to process them.

  • October 7th 2018 at 10:52

Trust instead of algorithms

By DIRKMJK

UPDATE 11 March 2019 - A survey by Dutch trade union FNV found that 25% of participating municipalities apply algorithms to personal data to label welfare recipients as potential frauds. 9% said they hire a commercial organisation to do the analysis. FNV’s vice president Kitty Jong condemned the practice.

A number of Dutch cities have contracted a company named Totta data lab to predict which welfare recipients may have committed fraud (the cities were somewhat secretive about this approach, but newspaper NRC wrote about it last spring). Totta has trained algorithms on a considerable amount of personal data: 2 to 3 hundred variables over a period of 25 years.

Such analyses carry the risk that existing biases are reproduced:

Luk [A Totta spokesperson] says that in some municipalities more fraud is found among people who have a partner (e.g., they don’t report income), whereas in others it is people without a partner (failing to report they live together). «But it’s quite possible that only that group has been investigated and we build our algorithms on that.»

Luk says they sometimes add ‘deviant’ citizens to the suspects, apparently in an attempt to look beyond the usual suspects.

Another problem is the lack of transparency regarding how this type of algorithms work. Totta doesn’t disclose its algorithms because it wants to protect its business interests; further, it can be difficult to interpret and explain how algorithms work. As a result, the government is unable to explain what criteria it uses to prepare decisions that affect citizens. Recently, the Dutch Council of State expressed concerns over digital decision-making by the government.

Proponents of algorithms argue that they help to detect more fraud while reducing the burden for innocent citizens. In fact, there may not be such a clear distinction. The organisation of welfare agencies said that alleged welfare frauds are often people who mean no harm, but who get into trouble as a result of complex and ambiguous welfare rules.

Still, Amsterdam city council member Anne Marttin (VVD) finds the approach interesting. She asked if Amsterdam uses algorithms and data mining to detect welfare fraude. The answer is no. This is why:

The city government is aware of the use by other municipalities of algorithms and/or data mining to fight welfare fraud. The city does not use such instruments to deal with or prevent welfare fraud. […]

Our services for welfare recipients are based on trust. Further, the city government attaches great importance to the privacy of citizens and the way in which their data is used by the government, for example to develop algorithms. The city government thinks it’s very important that the use of data mining and algorithms doesn’t have a negative impact on the privacy and the legal protection of citizens.

Source (pdf)

  • September 16th 2018 at 13:18

Scooter-free cycle tracks in Amsterdam

By DIRKMJK

Amsterdam plans to ban scooters from most cycle tracks. Currently, cycle tracks are still used by the so-called snorfiets category which has a speed limit of 25km/h - although most ride (much) faster. The measure will make cycle tracks safer for cyclists, and it will also result in cleaner air on cycle tracks.

The city has produced a map showing the new snorfiets regime. By my calculations, snorfietsen will have to use the road on a total of 180km (blue on the map) and they will be banned from another 71km of routes where there’s only a cycle track (marked in red). However, they’ll still be allowed to use about 93km of cycle tracks (green), at least for now.

Busy cycle tracks

To decide where to ban scooters from the cycle track, the city used data from the Fietstelweek, the large-scale initiative to collect smartphone location data from cyclists. This is interesting, since governments have complained that the number of participants in the Fietstelweek is declining (they started experimenting with Strava data instead).

Perhaps that’s why the city of Amsterdam used the 2016 edition of the Fietstelweek (rather than 2017) to assess how busy cycle tracks are. It used its own traffic counts to validate the Fietstelweek data. The Mathematics Centre of the University of Amsterdam deemed the method used ‘reliable and suitable’.

I’ve created a map to show how the new snorfiets regime compares to Fietstelweek data. The width of the pink lines corresponds to the number of cyclists who used a route; the green dotted line shows where snorfietsen will still be allowed to use the cycle track.

It appears that the city has done a decent job at avoiding the busiest cycling routes (in some cases, this is because these routes don’t have separate bicycle tracks to begin with).

That said, some problems remain. One example is the cycle track along the IJ north of Central Station, which can be very busy and where some snorfiets riders overtake other traffic in a dangerous way. And there’s the Amsterdamse Brug and Schellingwouder Brug (the bridges to the northeast of Amsterdam), where cycle tracks are too narrow for snorfietsen.

Making all cycle tracks scooter-free

In the future, the city intends to ban scooters from all mandatory cycle tracks within the A10 Ring Road. Obviously, they want to do this without compromising the safety of snorfiets riders. This will be easier on routes where car speed is already low.

The map below shows the current average car speed on major roads. The green lines indicate where snorfiets riders will initially be allowed to continue using the cycle track.

Of course I don’t know what the situation is when you’re reading this, but likely some of the highest car speeds (on sections where snorfietsen will initially be allowed to use the cycle track) will be on the Gooiseweg, entering the city centre from the southeast, and the aforementioned Amsterdamsebrug and Schellingwouderbrug. On those bridges, many motorists exceed the speed limit. The city wants to change the road design to invite lower speeds before banning snorfietsen from the cycle track.

Elsewhere, it should be relatively easy to make the remaining cycle tracks scooter-free. Of course, a more practical solution would be to abolish the snorfiets category altogether.

If you wish to respond to the city’s plans, you can use this form. The deadline is 24 September.

Method

I used Qgis to create the first map and Leaflet for the second. I used GeoPandas and Shapely to calculate lengths. On the first map, the width of the pink may be slightly distorted due to varying distances between cycle routes in opposite directions.

  • September 2nd 2018 at 08:38

Alas! They don’t make the Joep bicycle anymore

By DIRKMJK

Photo: Gonca Akyar

[This is a translation of an article from 2016] - I think the Joep bicycle - and the women’s version Ari - were launched in 2008. Joep Salden, owner of a bicycle shop in Utrecht, designed a minimalistic, functional bicycle, without any unnecessary accessories. The only concession was a bicycle bell. «You’ll need one; on this bicycle you’ll overtake anyone», Salden said when I bought my greyish green Joep in 2009.

I’m happy with my Joep and I’m not the only one: Utrecht alderman Lot van Hooijdonk owns one too. TestKees, the bicycle tester of cyclists’ organisation Fietsersbond, tested a number of fast city bicycles in 2009. His conclusion at the time:

Joep and Ari mainly stand out because of the minimalistic assemblage and the beautiful classic look. The frame and the parts go well together. (…) It’s clearly faster than the VanMoof and much faster than the luxurious city bicycles with gear hub and suspension that have been so popular in the Netherlands for years.

For Salden, the fact that his bicycles look good came second. «I appreciate that people are enthousiastic about how it looks, but for me the most important thing is for them to ride off thinking: that’s a smooth ride!», he said in an interview. The bicycle was supposed to last at least ten years.

Imitation

Coincidence or imitation: by now, there are various bicycles on the market with designs and colours reminiscent of Salden’s bicycles. Take the citybike, since rebranded courier bike, introduced by the Hema department store in 2011. On the face of it, they look a lot like the Joep and Ari - even though the execution is inferior, with wide aluminium tubes and a comfort saddle.

In Amsterdam, I was once addressed by the owners of a bicycle shop at the Weesperplein. They said my Joep was a beautiful bicycle, but also an imitation of the Achielle bicycles they sold. But I don’t think it’s true Salden has imitated Achielle. That said, Achielle has beautiful Sam and Saar bicycles that show similarities to the Joep and Ari.[1]

Interestingly, Salden had his frames built in Belgium. Achielle is also based in Belgium, and has its origins in a family business of frame builders. It wouldn’t surprise me if the Joep frames used to be built by Achielle.

[Update: on Twitter, Achielle has since stated that they used to build the Joep bicycles and that the frames are the same as those of the Sam and Saar.]

Someone else once said my Joep is reminiscent of the VanMoof bicycle produced in Amsterdam, but I have to disagree. Tastes differ, but I think the Joep is restrained and elegant, whereas the VanMoof is neither.

Out of business

Currently, I use my Joep in Utrecht, where I work. It isn’t as shiny anymore as when I bought it, but it’s still a beautiful bicycle. What’s more, it still runs very smoothly, even though it has seen little maintenance.

Meanwhile, I needed a new bicyle in Amsterdam. I reckoned I’d just buy another Joep. But the website of Salden’s bicycle shop, Het Fietspad, was no longer online and its phone number had been disconnected.

At the location of Het Fietspad, there’s now another bicycle shop, Cycleworks, with beautiful old road bicycles hanging from the wall. They told me that Salden is out of business for good. In fact, he has been for a while, as I found out later.[2] Alas!

Meanwhile, I’ve placed an order for a shiny black Achielle Sam with path racer handlebars. Also quite nice.


  1. Especially the version with the lightly bent Miel handlebars. The oldest references to the Sam and Saar I could find on Google are from 2010 - that’s why I don’t think Salden imitated them.  ↩

  2. According to the Chamber of Commerce, Het Fietspad went out of business on 14 January 2015.  ↩

  • August 13th 2018 at 18:41

Is tourist dispersion working? An analysis of Lonely Planet maps

By DIRKMJK

Discussion

For more than fifteen years, Amsterdam has been trying to convince tourists to visit areas outside the city centre. There is a concern that the inner city is approaching the limit of how many tourists it can handle.

To explore the effect of these policies, I analysed changes in the maps in Lonely Planet guides. Over the past years, sights have been added in areas outside of the inner city - mostly areas that had already been affected by gentrification. Still, the large majority of sights are still in the traditional tourist areas, in the city centre and some parts of the Zuid district.

It appears that the effect of tourist dispersion policies is modest at best - and not nearly enough to compensate for the growth of tourism. Reducing the impact of tourism may well require a different approach - for example targeting hotel capacity and low-cost flights to Schiphol Airport.

Dispersion policies

In its coalition agreement, the new city government said that the positive aspects of tourism are increasingly overshadowed by its negative effects, putting the liveability of some neighbourhoods at risk. One of the ways to deal with this is spreading tourists over the city (and the surrounding region). Amsterdam is to be primarily a place where people live and do business, and only in the second place a tourist destination.

The idea to disperse tourists is not new. In 2016, Amsterdam launched a campaign to promote areas outside the inner city. Interestingly, the campaign caused a bit of a controversy when politicians noticed the Nieuw-West district had been left out of a promotional map. Amsterdam Marketing responded that ‘in our professional opinion’, the district is currently ‘less suitable to be offered as a primary alternative to the city centre’. They argued that neighbourhoods must first be embraced by locals, which suggests that city marketing follows gentrification.

In 2009, Amsterdam planned to promote the eastern parts of the city as ‘the new (2nd) Museum Quarter’; the Northern IJ Waterfront as ‘Creative City’, the Westerpark as a variation on Berlin’s ‘Kulturbrauerei’; the Eastern Harbour Area as Docklands; de Pijp as ‘Quartier Latin’ and Oud-West as ‘Notting Hill’.

And as early as 2001, the tourism board warned that the inner city had almost reached the limit of how many tourists it can handle. «But where should they go? To IJburg for architecture; fun shopping at the Arena Boulevard in Zuidoost and visit the former GVB tram depot in Oud-West.»

A common denominator of the campaigns is that they target repeat visitors. As the tourism board explained in 2001, «we don’t want to send first-time foreign visitors to the outskirts».

Lonely Planet maps

To get an idea of the impact of these policies, I analysed changes in the sights shown on maps in Lonely Planet guides (for caveats, see Method below). If tourists turn to new parts of the city, you’d expect these areas to show up on those maps. Further, in 2009, the tourism board started seinding information about sights outside the city centre to publishers of travel guides. «Inclusion in the guides is not guaranteed, but this often happens.»

2006 is a bit of an outlier. A number of sights outside of the city centre were added, only to disappear again in the next edition (see below, Sights that were dropped). If you zoom in on specific neighbourhoods, you’ll notice more changes. For example:

  • A number of sights in Oost were added in 2012: Oosterpark (including De Schreeuw, Slavery Memorial and Spreeksteen), Dappermarkt and Frankendael;
  • In 2018, a number of sights in Noord were added, including some at the former NDSM Wharf, EYE Film Museum and Nieuwendammerdijk.

The table below shows the percentage of sights per district:

District 2000 2006 2012 2016 2018
Stadsdeel Centrum 84 74 78 78 75
Stadsdeel Zuid 10 12 11 11 10
Stadsdeel Oost 1 3 6 5 6
Stadsdeel Noord 2 1 0 0 5
Stadsdeel West 3 5 4 5 4
Stadsdeel Nieuw-West 0 1 0 0 0
Stadsdeel Zuidoost 0 1 0 0 0
Wijk 00 Amstelveen 0 3 0 0 0

There has been an increase in especially Oost and Noord, but the large majority of sights are still in Centrum and in Zuid (which includes the Museumplein).

Sights that were dropped

In each edition, new sights are added and others are dropped. The latter category includes sights that don’t exist anymore, such as the Netherlands Media Art Centre, the Vakbondsmuseum (trade union museum) and temporary locations of the Stedelijk Museum. Other sights apparently fell out of grace with the authors.

The authors of the various editions have their own preferences and interests. For example, Andrew Bender, author of the 2006 edition, appears to be a bit of a health enthousiast. He added many sports facilities and fitness centres, which explains why his edition had more sights outside the city centre. Most of these were dropped in the next edition. In 2012, Karla Zimmerman and Sarah Chandler added many hofjes (~almshouses). Again, most of them didn’t make the next edition.

Method

I used the following editions of the Lonely Planet Amsterdam guide:

2000: Rob van Driesum, Nikki Hall
2006: Andrew Bender
2012: Karla Zimmerman, Sarah Chandler
2016: Catherine Le Nevez, Karla Zimmerman
2018: Catherine Le Nevez, Abigail Blasi

I analysed sights in the legends of the maps at the end of the guides. The maps also include categories like eating, drinking, sleeping and entertainment. I focused on sights, reckoning that this category would likely present less problems when you want to geocode information from old maps. Note that the classification of especially the 2000 edition is somewhat different from later editions.

It’s possible that errors occured in geocoding or in copying data from the guides. If you spot any errors, please let me know.

Obviously, Lonely Planet maps are not a perfect measure of tourism dispersion. On the other hand, if there had been major shifts in the areas tourists visit, it seems rather unlikely they wouldn’t be reflected in the sights Lonely Planet shows on its maps.

  • August 5th 2018 at 10:32

Circular Metro and Tram map of Amsterdam

By DIRKMJK

This weekend, Amsterdam’s new North-South metro line will open. To celebrate the occasion, Straatkrant Z! offers a free copy of Eric Hammink’s beautiful circular Metro and Tram map of Amsterdam. Z! is a newspaper sold by homeless people.

Seven years ago, Hammink designed the first version of his map, modelled after the pattern of the city’s canals. At the time, there was talk about Amsterdam’s public transport company GVB adopting the map, but apparently they haven’t. A missed opportunity.

The map is also used in Hammink’s iPhone route planner app.

  • July 20th 2018 at 16:46

Converting Election Markup Language (EML) to csv

By DIRKMJK

Note that the map above isn’t really a good illustration here because I used a different data source to create it.

Getting results of Dutch elections at the municipality level can be complicated, but what if you want to dig a little deeper and look at results per polling station? Or even per candidate, per polling station? For elections since 2009, that information is available from the data portal of the Dutch government.

Challenges

The data is in Election Markup Language, an international standard for election data. I didn’t know that format and processing the data posed a bit of a challenge. I couldn’t find a simple explanation of the data structure, and the Electoral Board states that it doesn’t provide support on the format.

For example, how do you connect a candidate ID to their name and other details? I think you need to identify the Kieskring (district) by the contest name of the results file. Then, find the candidate list for the Kieskring and look up the candidate’s details using their candidate ID and affiliation. But with municipal elections, you have to look up candidates in the city’s candidate list (which doesn’t seem to have a contest name).

Practical tips

If you plan to use the data, here are some practical tips:

  • Keep in mind that locations and names of polling stations may change between elections.
  • If you want to geocode the polling stations, the easiest way is to use the postcode, which is often added to the polling station name (only for recent elections). If the postcode is not available or if you need a more precise location, the lists of polling station names and locations provided by Open State (2017, 2018) may be of use. Use fuzzy matching to match on polling station name, or perhaps you could also match on postcode if available. Of course, such an approach is not entirely error-free.

Further, note that the data for the 2017 Lower House election is only available in EML format for some of the municipalities. I guess this has something to do with the fact that prior to the election, vulnerabilities had been discovered in software to count the votes, so they had to count the votes manually.

Python script

Here’s a Python script that converts EML files to csv. See caveats there.

  • July 20th 2018 at 08:14

The orientation of Amsterdam’s streets

By DIRKMJK

Eight days from now, Amsterdam will have a new metro line traversing the city from north to south. But what about the orientation of the city’s streets?

Geoff Boeing - who created a Python package for analysing street networks using data from OpenStreetMap - just published a series of polar histograms of American and ‘world’ cities. Amsterdam isn’t among them, but Boeing made his code available, so I used that to create charts for the largest cities in the Netherlands.

While the pattern isn’t nearly as monotonous as in most American cities, I’m still surprised how many streets in Amsterdam run from north to south or from east to west. The Hague has a strong diagonal orientation; Rotterdam doesn’t seem to have a dominant orientation and Utrecht is a bit in between.

With Boeing’s code, you can also do the analysis specifically for roads that are accessible to cyclists, but for Amsterdam that doesn’t make much difference since most roads are.

Discussion

15 July 2018 - There was some really interesting discussion on Twitter in response to my post from last Friday (I use Twitter names to refer to people; most sources are in Dutch).

Curved streets

Both Sanne and Egon Willighagen asked how the chart treats curved streets. I have to admit I hadn’t checked, but the docstring of the add_ege_bearings function explains that it calculates the compass bearing of edges from origin node to destination node, so that implies that streets are treated as if they were straight lines.

Is that a problem? Probably not for many US cities, for they seem to have few curved streets. As for Amsterdam: most people’s mental image of the city is probably dominated by the curved canals of the city centre. However, many neighbourhoods consist of grids of more or less straight streets. So perhaps curved streets have little impact on the analysis after all.

Length versus surface

Hans Wisbrun argues that the chart type is nice, but also deceptive. The number of streets is represented by the length of the wedges, but one may intuitively look at the surface, which increases with the square of the length. In a post from 2013 (based on a tip from Ionica Smeets), he used a chart by Florence Nightingale to discuss the problem.

Rogier Brussee agrees, but argues that a polar chart is still the right choice here, because what you want to show is the angle of streets.

In a more general sense, I think the charts are an exploratory tool that’ll give you an idea how street patterns differ between cities. If you really want to understand what the wedges represent, you’ll have to look at a map.

Beach ridges

That’s what Stephan Okhuijsen did. He noted that the chart for The Hague appears to reflect the orientation of the city’s coastline. Not quite, Christiaan Jacobs replied. The orientation of the city’s streets is not determined by the current coastline, but by the original beach ridges.

I don’t know much about geography (or about The Hague for that matter), but a bit of googling suggests Jacobs is right. See for example this map (from this detailed analysis of one of The Hague’s streets), with the old sand dunes shown in dark yellow.

See also links to previous similar work in this post by Nathan Yau (FlowingData).

  • July 13th 2018 at 07:55
❌