Open Data and Municipal Election Results

As local readers will know, I created an election results dashboard for the municipal election that took place in Edmonton on October 18, made possible thanks to the City of Edmonton’s open data. I’d say it was very well-received! There was lots of positive feedback, and it resulted in the highest-trafficked day ever for ShareEdmonton. There were also hundreds of tweets about the dashboard, including some from people in other cities.

I was able to update the dashboard on-the-fly that night, fixing the graph colors and other issues as they were identified. Overall I was pretty happy with how it turned out, though I wish I had been able to add a few more features in time for the big event. Over the last couple days, I decided to extract the dashboard from ShareEdmonton and I have now added that new functionality. Specifically, the page updates automatically (no more refreshing) and there’s a mobile view as well, so it looks decent on your mobile device.

New Dashboards

Today is election day in Ontario, and thanks to open data from Toronto, Ottawa, and London, I was able to launch three new election results dashboards, all featuring the latest improvements:

Some new issues have appeared that I didn’t have to worry about in the Edmonton election (for example, there are 40 candidates for mayor in Toronto, so having them all appear on the graph is difficult at best) but the sites all seem to be running smoothly. I guess we’ll find out at 8 PM EST tonight when the results start to come in!

Open Data

All of these dashboards were made possible because the cities made election results data available, so kudos to each of them for doing so. The tricky thing for a developer like me is that all four cities (Edmonton, Toronto, Ottawa, and London) made the results available in a different format!

  • Edmonton – XML/JSON using OGDI
  • Toronto – plaintext, pipe-separated
  • Ottawa – plaintext, HTML scrape, kind of a pseudo-CSV
  • London – XML

Fortunately, when I had created the dashboard for Edmonton, I had built in a translation-layer. So instead of loading directly from the City’s catalogue into ShareEdmonton, I loaded it first into an internal format. So to get the dashboard working with the other cities, all I had to do was write that translation piece, from their catalogue to my internal format. As you can see, that strategy has worked fairly well (Ottawa was by far the most difficult, and did not provide me with enough information to calculate voter turnout, so that was removed from the ShareOttawa dashboard).

I’m not complaining about the need for this translation layer. I would much rather have a city make its data available than delay just to try to find a common format. But I do hope to see convergence over time. It would be great if these cities (and others that offer this data, like Vancouver) could agree on a common format. That would remove the extra work required to make an application reusable, and would hopefully result in even more applications that make use of the data.

And Beyond!

I’m pretty excited about the possibilities of open data, especially as it relates to politics and democracy. There are some really great apps being built, such as Vote.ca, and we’re really just scratching the surface. If we keep at it, I’m confident that open data will have a positive impact on the way we engage with politics.

7 thoughts on “Open Data and Municipal Election Results

  1. Thanks for putting this together. As an Edmontonian in Ottawa, it was great to be able to watch last week’s election online. Now I can also follow local elections here, too!

    Great work!

Leave a Reply to Jeff Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s