Browse Source

Better documentation + fix a color inversion in visu

Lucas Verney 6 years ago
  1. 33


@ -1,9 +1,23 @@ @@ -1,9 +1,23 @@
#!/usr/bin/env python3
# coding: utf-8
Visualisation of Velib data
Note: This does not take into account the stations events.
Visualisation of Velib data.
The generated maps shows the number of available bikes for each stations,
plotted on the map of Paris. We use a Voronoi diagram to draw tiles on top of
Paris map (think of each tiles as the "area of influence" of a given Velib
station). Green represents a large number of available bikes, red represents a
low number of available bikes.
This script requires a couple of arguments from the command-line:
* The path to the SQLite DB file to use.
* The path to the folder in which generated images should be put.
* [Optional] A timestamp to start from, to resume operation for instance.
Note: This code does not take into account the stations events (change of
station size, new stations, stations deletion). Hence, there might be small
mistakes in the visualization, such as stations without data. This should be
handled in an improved version.
from __future__ import division
@ -28,23 +42,27 @@ def get_hue(percentage): @@ -28,23 +42,27 @@ def get_hue(percentage):
Convert a percentage to a hue,
to map a percentage to a color
in the green - yellow - orange - red scale.
Red means 0%, green means 100%.
value = percentage / 100.0
value = (100 - percentage) / 100.0
hue = (1 - value) * 120
return hue / 360.0
# Handle arguments from command-line
if len(sys.argv) < 3:
sys.exit('Usage: %s db_file out_dir' % sys.argv[0])
db_file = sys.argv[1]
out_dir = sys.argv[2]
# Handle optional first timestamp argument
first_timestamp = None
if len(sys.argv) > 3:
first_timestamp = int(sys.argv[3])
# Init progressbar and logging
progressbar.streams.wrap_stderr() # Required before logging.basicConfig
# Ensure out folder exists
@ -186,6 +204,9 @@ for t, in bar(time_data): @@ -186,6 +204,9 @@ for t, in bar(time_data):
region = vor_regions[station_data[0]]
region["mpl_surface"].set_color(matplotlib.colors.hsv_to_rgb([get_hue(percentage), 1.0, 1.0]))
except KeyError:
# This can happen for a station at the boundaries (we volontarily
# ignore them) or for station which disappeared at some point in
# the dataset (as we don't handle stations events by now).
logging.debug('Unknown Voronoi region for station %d.', station_data[0])
# Output frame if necessary