Blog

17 novembre 2020 · Education · Berlin

Berlin Primary schools

Vizualizing Berlin School distribution.

Article en anglais.

Using publicly available data from the Berlin Senate, and with an healthy dose of webscrapping, i did a small visualization based on two factors :

  • Entry Acceptance Rate of kids per school,
  • non-German origin ("NDH") of the kids per school.

The result is a sad reflection of the current situation.

Try it

In Berlin, each address belongs to the catchment area of one primary school. Parents can ask for another school instead (a Wechselwunsch), and the Senate publishes, for every school, how many families asked to go elsewhere and how many asked to come in.

The first chart tells the whole story. In schools where less than a fifth of the pupils are of non-German heritage, requests to leave amount to about 18% of the entry places, as many as the requests to join. Above 80%, they climb to about 65% of the places, while the requests to join stay flat: many families who can manage it opt out of their local school, and the gap widens by itself.

The data covers the public primary schools for the school years 2019/20 and 2020/21 (Senate answer to a parliamentary question), and the share of pupils of non-German heritage from the Senate school directory (2010/11 to 2019/20). The bilingual SESB branches share the address of their school and have no heritage figure of their own.

Why not Tableau

This dashboard was first published on Tableau Public, and rebuilt here in Svelte.

As a sidenote, using Tableau is pretty straightforward when it comes to basic operations, but as soon as some advanced interactions are required, (e.g implement a dynamic filtering on several fields, or even worse, triggering a model computation), the amount of trickery becomes mindboggling, see for instance how to implement a basic Sankey Chart in Tableau.

An other shortcoming of Tableau is the lack of dynamic setting of data source. There is the Tableau Web Connector, but this only allows users to define the data source once at the creation of the dashboard.

That is why when you need a real dynamic binding between your dashboard and the backend (think compute a new prediction), i definitely would stick on Javascript (the D3js library and its wrapper offers endless possibilities and customization), especially as current Javascripts frameworks (react, vue) have become mature and well maintained.

You can find the related Source Code here.