dotJS 2018 Carbon footprint calculator

We'd love to have your feedback on some of the data or the general process of this calculator! Please write to [email protected] :)

All emissions are in CO2-equivalent kilograms.

1 - Transport

In [1]:
# List of different modes of transport and their CO2e emissions per passenger per km
TRANSPORTS = {

  # https://www.oui.sncf/aide/calcul-des-emissions-de-co2-sur-votre-trajet-en-train
  "train_fr_tgv": {
    "km": 0.0032
  },
  "train_fr_ter": {
    "km": 0.0292
  },
  "train_fr_eurostar": {
    "km": 0.0112
  },
  "train_fr_thalys": {
    "km": 0.0116
  },
  "train_fr_ratp": {
    "km": 0.0038
  },
  "bus_fr_ouibus": {
    "km": 0.0228
  },
  "bus_fr_ratp": {
    "km": 0.0947
  },
  "car_fr": {
    "km": 0.205
  },
  "plane_fr_national": {
    "km": 0.168
  },

  # https://eco-calculateur.dta.aviation-civile.gouv.fr/autres-trajets
  # TODO

  # https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/726911/2018_methodology_paper_FINAL_v01-00.pdf
  # Table 39
  "plane_uk_national": {
    "km": 0.1461
  },
  "plane_uk_europe": {
    "km": 0.0895
  },
  "plane_uk_international": {
    "km": 0.1041
  }
}
In [2]:
from geopy.geocoders import Nominatim
from geopy.distance import geodesic
import percache
import time

cache = percache.Cache("./geocode.cache")
geolocator = Nominatim(user_agent="carbon-footprint-estimator")
In [3]:
@cache
def geocode(location):
    time.sleep(1)  # simple rate limit
    return geolocator.geocode(location, addressdetails=True)

def coords(location):
    geo = geocode(location)
    if not geo:
        return None
    return (geo.latitude, geo.longitude)

def country(location):
    geo = geocode(location)
    if not geo:
        print "*ERROR: could not geocode: %s" % location
        return ""
    return geo.raw["address"]["country_code"]

def distance(p1, p2):
    if not p1 or not p2:
        return 0
    d = geodesic(p1, p2)
    return d.km

def footprint_transport(location1, location2, transport="guess"):
    km = distance(coords(location1), coords(location2))
    if km == 0:
        return 0
    if transport == "guess":
        transport = guess_transport(location1, location2)
    ghg = TRANSPORTS[transport]["km"] * km
    return ghg

def guess_transport(location1, location2):
    # Guess the most likely form of transport, with some default assumptions
    # based on travel to Paris
    c1 = country(location1)
    c2 = country(location2)
    km = distance(coords(location1), coords(location2))

    if km == 0 or not c1 or not c2:
        return ""

    if {c1, c2} in ({"fr"}, {"fr", "lu"}, {"fr", "ch"}):
        if km > 100:
            return "train_fr_tgv"
        else:
            return "train_fr_ter"

    if {c1, c2} == {"fr", "gb"}:
        if "london" in location1.lower()+location2.lower():
            return "train_fr_eurostar"
        else:
            return "plane_uk_europe"

    if {c1, c2} in ({"fr", "be"}, {"fr", "nl"}):
        return "train_fr_thalys"

    # International travel
    if len({c1, c2}) == 2:
        if km < 3500:
            return "plane_uk_europe"  # TODO plane_fr_europe
        else:
            return "plane_uk_international"

    raise Exception("%s => %s : Not supported" % (location1, location2))
In [4]:
from IPython.display import HTML, display
import tabulate
def display_table(data):
    display(HTML(tabulate.tabulate(data, tablefmt='html')))
In [5]:
# Test transports to Paris
origins = ["Versailles", "Lille", "Metz", "Bordeaux", "Amsterdam", "London", "Glasgow", "Berlin", "Madrid", "NYC", "Honolulu", "Sydney"]
display_table([o, guess_transport(o, "Paris"), footprint_transport(o, "Paris")] for o in origins)
Versaillestrain_fr_ter 0.511848
Lille train_fr_tgv 0.652776
Metz train_fr_tgv 0.900583
Bordeaux train_fr_tgv 1.59728
Amsterdam train_fr_thalys 4.99701
London train_fr_eurostar 3.85149
Glasgow plane_uk_europe 80.3984
Berlin plane_uk_europe 78.6352
Madrid plane_uk_europe 94.2384
NYC plane_uk_international 609.028
Honolulu plane_uk_international1247.87
Sydney plane_uk_international1765.23
In [6]:
from collections import Counter
origins = []
countries = Counter()
import csv

# CSV file includes speakers
with open("dotjs-2018-attendee-cities.csv", "r") as f:
    reader = csv.reader(f, delimiter=',', quotechar='"')
    for row in reader:
        origins.append("%s, %s" % (row[0], row[1]))
        countries[row[1]] += 1

print("Imported %s attendee origin cities" % len(origins))
print("Top countries:")
display_table(countries.most_common(20))
Imported 1488 attendee origin cities
Top countries:
FR882
GB 91
NL 72
DE 68
BE 48
US 37
DK 36
PT 31
NO 27
LT 26
SE 24
PL 23
ES 19
IT 12
IE 10
GR 9
HU 8
RO 8
CH 8
JP 4
In [7]:
display_table([repr(o), guess_transport(o, "Paris"), footprint_transport(o, "Paris")] for o in origins)
*ERROR: could not geocode: PARIS LA DEFENSE CEDEX, FR
*ERROR: could not geocode: PARIS LA DEFENSE CEDEX, FR
*ERROR: could not geocode: PARIS LA DEFENSE CEDEX, FR
*ERROR: could not geocode: PARIS LA DEFENSE CEDEX, FR
*ERROR: could not geocode: PARIS LA DEFENSE CEDEX, FR
*ERROR: could not geocode: PARIS LA DEFENSE CEDEX, FR
*ERROR: could not geocode: PARIS CEDEX 15, FR
*ERROR: could not geocode: PARIS CEDEX 15, FR
*ERROR: could not geocode: PARIS CEDEX 15, FR
*ERROR: could not geocode: PARIS CEDEX 15, FR
*ERROR: could not geocode: vik I sogn (Norway), NO
*ERROR: could not geocode: NEUILLY SUR SEINE CEDEX, FR
*ERROR: could not geocode: Kendal, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Paris 9ème, FR
*ERROR: could not geocode: Slinde, NO
*ERROR: could not geocode: Dnipro, FR
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Nogent Sur Marne, FR' train_fr_ter 0.306044
'Duivendrecht, NL' train_fr_thalys 4.9529
'Paris, FR' 0
'Kyiv, UA' plane_uk_europe 181.662
'Saint Mathieu de Treviers, FR' train_fr_tgv 1.84745
'Grenoble, FR' train_fr_tgv 1.54286
'Leipzig, DE' plane_uk_europe 68.7142
'The Hague, NL' train_fr_thalys 4.46108
'Dubai, AE' plane_uk_international 547.301
'Solms, DE' plane_uk_europe 42.4982
'Paris, FR' 0
'Aubervilliers, FR' train_fr_ter 0.199472
'PALAISEAU, FR' train_fr_ter 0.5147
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Bromley, GB' plane_uk_europe 29.4264
'Antwerpen, BE' train_fr_thalys 3.49317
'Antwerpen, BE' train_fr_thalys 3.49317
'Antwerpen, BE' train_fr_thalys 3.49317
'Antwerpen, BE' train_fr_thalys 3.49317
'Lille, FR' train_fr_tgv 0.652776
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'lyon, FR' train_fr_tgv 1.25509
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Milano, IT' plane_uk_europe 57.3372
'Berlin, DE' plane_uk_europe 78.6352
'Berlin, DE' plane_uk_europe 78.6352
'Berlin, DE' plane_uk_europe 78.6352
'Berlin, DE' plane_uk_europe 78.6352
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'Darmstadt, DE' plane_uk_europe 42.1702
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Darmstadt, DE' plane_uk_europe 42.1702
'rousset, FR' train_fr_tgv 0.957866
'rousset, FR' train_fr_tgv 0.957866
'Warszawa, PL' plane_uk_europe 123.031
'PARIS, FR' 0
'PARIS, FR' 0
'Villeurbanne, FR' train_fr_tgv 1.25663
'Villeurbanne, FR' train_fr_tgv 1.25663
'minsk, BY' plane_uk_europe 163.915
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Bratislava, SK' plane_uk_europe 98.0578
'Bratislava, SK' plane_uk_europe 98.0578
'Toronto, CA' plane_uk_international 626.462
'MADRID, ES' plane_uk_europe 94.2384
'MADRID, ES' plane_uk_europe 94.2384
'MADRID, ES' plane_uk_europe 94.2384
'Milano, IT' plane_uk_europe 57.3372
'Paris, FR' 0
'Paris, FR' 0
'MADRID, ES' plane_uk_europe 94.2384
'Kirchentellinsfurt, DE' plane_uk_europe 44.8983
'ESPARGO, PT' plane_uk_europe 110.222
'Kaunas, LT' plane_uk_europe 145.056
'London, GB' train_fr_eurostar 3.85149
'MADRID, ES' plane_uk_europe 94.2384
's-Gravenhage, NL' train_fr_thalys 4.46108
'Den Helder, NL' train_fr_thalys 5.65802
'Paris, FR' 0
'Gent, BE' train_fr_thalys 3.0567
'Ledeberg, BE' train_fr_thalys 3.04205
'LYON, FR' train_fr_tgv 1.25509
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Hamburg, DE' plane_uk_europe 66.815
'Paris, FR' 0
'Paris, FR' 0
'Amsterdam, NL' train_fr_thalys 4.99701
"Villeneuve d'Ascq, FR" train_fr_tgv 0.656563
"Villeneuve d'Ascq, FR" train_fr_tgv 0.656563
'Prague, CZ' plane_uk_europe 79.1561
'Prague, CZ' plane_uk_europe 79.1561
'Cluj-Napoca, RO' plane_uk_europe 143.389
'Cluj-Napoca, RO' plane_uk_europe 143.389
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Amsterdam, NL' train_fr_thalys 4.99701
'Namur, BE' train_fr_thalys 2.95766
'Namur, BE' train_fr_thalys 2.95766
'Namur, BE' train_fr_thalys 2.95766
'Namur, BE' train_fr_thalys 2.95766
'Velizy Villacoublay, FR' train_fr_ter 0.424601
'Velizy Villacoublay, FR' train_fr_ter 0.424601
'Velizy Villacoublay, FR' train_fr_ter 0.424601
'Velizy Villacoublay, FR' train_fr_ter 0.424601
'Szeged, HU' plane_uk_europe 122.344
'Szeged, HU' plane_uk_europe 122.344
'Szeged, HU' plane_uk_europe 122.344
'Newcastle upon Tyne, GB' plane_uk_europe 65.6332
'Newcastle upon Tyne, GB' plane_uk_europe 65.6332
'Barcelona, ES' plane_uk_europe 74.3474
'Barcelona, ES' plane_uk_europe 74.3474
'BARCELONA, ES' plane_uk_europe 74.3474
'Cambridge, GB' plane_uk_europe 36.1921
'Cambridge, GB' plane_uk_europe 36.1921
'Newcastle upon Tyne, GB' plane_uk_europe 65.6332
'Seyssinet-Pariset, FR' train_fr_tgv 1.53955
'Trondheim, NO' plane_uk_europe 151.688
'Utrecht, NL' train_fr_thalys 4.74653
'Utrecht, NL' train_fr_thalys 4.74653
'Utrecht, NL' train_fr_thalys 4.74653
'London, GB' train_fr_eurostar 3.85149
'Grenoble, FR' train_fr_tgv 1.54286
'Les Marches, FR' train_fr_tgv 1.48592
'PARIS, FR' 0
'Meyrin, CH' train_fr_tgv 1.29483
'Gland, CH' train_fr_tgv 1.27933
'Saint Louis, US' plane_uk_international 736.175
'St. Louis, US' plane_uk_international 736.175
'Bucharest, RO' plane_uk_europe 167.807
'Bucharest, RO' plane_uk_europe 167.807
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Freiburg, DE' plane_uk_europe 37.401
'Paris, FR' 0
'Paris, FR' 0
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Courbevoie, FR' train_fr_ter 0.239817
'Paris, FR' 0
'Paris, FR' 0
'Le V\xc3\xa9sinet, FR' train_fr_ter 0.48013
'Asni\xc3\xa8res, FR' train_fr_tgv 0.472927
'Nysa, PL' plane_uk_europe 97.9501
'Cascais, PT' plane_uk_europe 131.287
'Paris, FR' 0
'Skanderborg, DK' plane_uk_europe 84.9717
'Skanderborg, DK' plane_uk_europe 84.9717
'Skanderborg, DK' plane_uk_europe 84.9717
'Skanderborg, DK' plane_uk_europe 84.9717
'Skanderborg, DK' plane_uk_europe 84.9717
'MADRID, ES' plane_uk_europe 94.2384
'Trondheim, NO' plane_uk_europe 151.688
'Trondheim, NO' plane_uk_europe 151.688
'PARIS, FR' 0
'PARIS, FR' 0
'Encinitas, US' plane_uk_international 952.346
'Amsterdam, NL' train_fr_thalys 4.99701
'Bochum, DE' plane_uk_europe 40.6292
'Oslo, NO' plane_uk_europe 120.243
'Hounslow, GB' plane_uk_europe 31.2545
'Hounslow, GB' plane_uk_europe 31.2545
'Hounslow, GB' plane_uk_europe 31.2545
'Hounslow, GB' plane_uk_europe 31.2545
'Hounslow, GB' plane_uk_europe 31.2545
'Boulogne Billancourt, FR' train_fr_ter 0.24803
'Boulogne Billancourt, FR' train_fr_ter 0.24803
'Boulogne Billancourt, FR' train_fr_ter 0.24803
'Boulogne Billancourt, FR' train_fr_ter 0.24803
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'\xc4\xb0stanbul, TR' plane_uk_europe 202.25
'\xc4\xb0stanbul, TR' plane_uk_europe 202.25
'ENNEVELIN, FR' train_fr_tgv 0.62514
'ENNEVELIN, FR' train_fr_tgv 0.62514
'ENNEVELIN, FR' train_fr_tgv 0.62514
'Carrigaline, IE' plane_uk_europe 74.4333
'PARIS LA DEFENSE CEDEX, FR' 0
'PARIS LA DEFENSE CEDEX, FR' 0
'PARIS LA DEFENSE CEDEX, FR' 0
'PARIS LA DEFENSE CEDEX, FR' 0
'PARIS LA DEFENSE CEDEX, FR' 0
'PARIS LA DEFENSE CEDEX, FR' 0
'San Francisco, US' plane_uk_international 934.733
'Trollh\xc3\xa4ttan, SE' plane_uk_europe 110.238
'Zierikzee, NL' train_fr_thalys 3.83522
'Zierikzee, NL' train_fr_thalys 3.83522
'Zierikzee, NL' train_fr_thalys 3.83522
'Bilbao, ES' plane_uk_europe 66.5723
'Paris, FR' 0
'Victoria Gozo, MT' plane_uk_europe 154.16
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Ermington, AU' plane_uk_international1763.77
'Ermington, AU' plane_uk_international1763.77
'PARIS, FR' 0
'PARIS, FR' 0
'Paris, FR' 0
'Moscow, RU' plane_uk_europe 223.185
'Fall River, US' plane_uk_international 782.45
'Solna, SE' plane_uk_europe 138.386
'Solna, SE' plane_uk_europe 138.386
'Solna, SE' plane_uk_europe 138.386
'Berlin, DE' plane_uk_europe 78.6352
'Potsdam, DE' plane_uk_europe 76.3358
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'New York, US' plane_uk_international 609.028
'Los Angeles, US' plane_uk_international 948.025
'SANT CUGAT DEL VALLES, ES' plane_uk_europe 73.4676
'SANT CUGAT DEL VALLES, ES' plane_uk_europe 73.4676
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Hacketstown, County Carlow, IE'plane_uk_europe 68.8113
'PARIS CEDEX 15, FR' 0
'PARIS CEDEX 15, FR' 0
'PARIS CEDEX 15, FR' 0
'PARIS CEDEX 15, FR' 0
'Berlin, DE' plane_uk_europe 78.6352
'Cluj-Napoca, RO' plane_uk_europe 143.389
'Cluj-Napoca, RO' plane_uk_europe 143.389
'Cluj-Napoca, RO' plane_uk_europe 143.389
'Furn el Chebbak, LB' plane_uk_europe 286.235
'Furn el Chebbak, LB' plane_uk_europe 286.235
'Furn el Chebbak, LB' plane_uk_europe 286.235
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Wallisellen, CH' train_fr_tgv 1.57158
'Wallisellen, CH' train_fr_tgv 1.57158
'Gda\xc5\x84sk, PL' plane_uk_europe 114.462
'Paris, FR' 0
'Le Plessis-Robinson, FR' train_fr_ter 0.311411
'Riga, LV' plane_uk_europe 152.807
'Riga, LV' plane_uk_europe 152.807
'Riga, LV' plane_uk_europe 152.807
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'paris, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Paris, FR' 0
'Cordoba, AR' plane_uk_international1155.94
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Montreuil, FR' train_fr_tgv 0.587976
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Aachen, DE' plane_uk_europe 30.7045
'Aachen, DE' plane_uk_europe 30.7045
'Courbevoie, FR' train_fr_ter 0.239817
'Vik, NO' plane_uk_europe 123.687
'Kaunas, LT' plane_uk_europe 145.056
'Berlin, DE' plane_uk_europe 78.6352
'Berlin, DE' plane_uk_europe 78.6352
'Piraeus, GR' plane_uk_europe 187.671
'Charlbury, GB' plane_uk_europe 38.6888
'Paris, FR' 0
'H\xc3\xb8jbjerg, DK' plane_uk_europe 86.4542
'London, GB' train_fr_eurostar 3.85149
'Bournemouth, GB' plane_uk_europe 32.9903
'La Salvetat Saint Gilles, FR' train_fr_tgv 1.89699
'Munich, DE' plane_uk_europe 61.3923
'Glasgow, GB' plane_uk_europe 80.3984
'Inverness, GB' plane_uk_europe 94.3708
'Berlin, DE' plane_uk_europe 78.6352
'London, GB' train_fr_eurostar 3.85149
'Berlin, DE' plane_uk_europe 78.6352
'Leeds, GB' plane_uk_europe 54.851
'Leeds, GB' plane_uk_europe 54.851
'Brescia, IT' plane_uk_europe 62.6977
'Brescia, IT' plane_uk_europe 62.6977
'Brescia, IT' plane_uk_europe 62.6977
'Budapest, HU' plane_uk_europe 111.672
'Budapest, HU' plane_uk_europe 111.672
'Stuttgart, DE' plane_uk_europe 44.8739
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'Almere, NL' train_fr_thalys 5.18546
'Almere, NL' train_fr_thalys 5.18546
'Almere, NL' train_fr_thalys 5.18546
'Berlin, DE' plane_uk_europe 78.6352
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'PARIS, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'K\xc3\xb6ln, DE' plane_uk_europe 36.1507
'S\xc3\xb8rum, NO' plane_uk_europe 122.138
'Oslo, NO' plane_uk_europe 120.243
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'FORT LEE, US' plane_uk_international 608.088
'Vienna, AT' plane_uk_europe 92.7702
'Hamburg, DE' plane_uk_europe 66.815
'Barcelona, ES' plane_uk_europe 74.3474
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'Z\xc3\xbcrich, CH' train_fr_tgv 1.56542
'Paris, FR' 0
'Berlin, DE' plane_uk_europe 78.6352
'Paris, FR' 0
'Paris, FR' 0
'Roseville, US' plane_uk_international 919.309
'Athens, GR' plane_uk_europe 187.868
'lausanne, CH' train_fr_tgv 1.32169
'Berlin, DE' plane_uk_europe 78.6352
'Zwijndrecht, BE' train_fr_thalys 3.47171
'New York, US' plane_uk_international 609.028
'New York, US' plane_uk_international 609.028
'Berlin, DE' plane_uk_europe 78.6352
'Munich, DE' plane_uk_europe 61.3923
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Vilnius, LT' plane_uk_europe 152.23
'Vilnius, LT' plane_uk_europe 152.23
'Vilnius, LT' plane_uk_europe 152.23
'Ramat Gan, IL' plane_uk_europe 294.131
'Ramat Gan, IL' plane_uk_europe 294.131
'Ramat Gan, IL' plane_uk_europe 294.131
'Ramat Gan, IL' plane_uk_europe 294.131
'Oslo, NO' plane_uk_europe 120.243
'Brooklyn, US' plane_uk_international 609.314
'Aachen, DE' plane_uk_europe 30.7045
'Aachen, DE' plane_uk_europe 30.7045
'Lyon, FR' train_fr_tgv 1.25509
'LILLE, FR' train_fr_tgv 0.652776
'LILLE, FR' train_fr_tgv 0.652776
'LILLE, FR' train_fr_tgv 0.652776
'LILLE, FR' train_fr_tgv 0.652776
'LILLE, FR' train_fr_tgv 0.652776
'Obfelden, CH' train_fr_tgv 1.55414
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Hamburg, DE' plane_uk_europe 66.815
'BOULOGNE-BILLANCOURT, FR' train_fr_ter 0.24803
'BOULOGNE-BILLANCOURT, FR' train_fr_ter 0.24803
'BOULOGNE-BILLANCOURT, FR' train_fr_ter 0.24803
'vik I sogn (Norway), NO' 0
'Paris, FR' 0
'Paris, FR' 0
'Cambridge, GB' plane_uk_europe 36.1921
'Cambridge, GB' plane_uk_europe 36.1921
'Cambridge, GB' plane_uk_europe 36.1921
'Cambridge, GB' plane_uk_europe 36.1921
'TROFA, PT' plane_uk_europe 107.343
'Kharkov, UA' plane_uk_europe 218.646
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Boulogne-Billancourt, FR' train_fr_ter 0.24803
'Boulogne-Billancourt, FR' train_fr_ter 0.24803
'Unterf\xc3\xb6hring, DE' plane_uk_europe 61.7499
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Gliwice, PL' plane_uk_europe 106.33
'Chelan, US' plane_uk_international 830.064
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'Tallinn, EE' plane_uk_europe 166.703
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Clichy, FR' train_fr_ter 0.178898
'Clichy, FR' train_fr_ter 0.178898
'Trier, DE' plane_uk_europe 29.3438
'Warszawa, PL' plane_uk_europe 123.031
'Warszawa, PL' plane_uk_europe 123.031
'Warszawa, PL' plane_uk_europe 123.031
'Schifflange, LU' train_fr_tgv 0.884633
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'Cumberland, US' plane_uk_international 718.081
'Stockholm, SE' plane_uk_europe 138.407
'Budapest, HU' plane_uk_europe 111.672
'Berlin, DE' plane_uk_europe 78.6352
'Skopje, MK' plane_uk_europe 149.636
'Skopje, MK' plane_uk_europe 149.636
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Kawasaki, JP' plane_uk_international1015.27
'Amsterdam, NL' train_fr_thalys 4.99701
'Paris, FR' 0
'Bilbao, ES' plane_uk_europe 66.5723
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Vilnius, LT' plane_uk_europe 152.23
'Bruxelles, BE' train_fr_thalys 3.0618
'Lisboa, PT' plane_uk_europe 130.22
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Milano, IT' plane_uk_europe 57.3372
'Paris, FR' 0
'Gliwice, PL' plane_uk_europe 106.33
'Bridlington, GB' plane_uk_europe 54.4305
'Budapest, HU' plane_uk_europe 111.672
'Bristol, GB' plane_uk_europe 40.8552
'Corroios, PT' plane_uk_europe 130.827
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'SAFFRE, FR' train_fr_tgv 1.05205
'Montreal, CA' plane_uk_international 575.066
'Paris, FR' 0
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Paris, FR' 0
'Milano, IT' plane_uk_europe 57.3372
'Milano, IT' plane_uk_europe 57.3372
'Milano, IT' plane_uk_europe 57.3372
'Milano, IT' plane_uk_europe 57.3372
'Kharkiv, UA' plane_uk_europe 218.646
'Paris, FR' 0
'Paris, FR' 0
'Aix en Provence, FR' train_fr_tgv 2.04277
'Aix en Provence, FR' train_fr_tgv 2.04277
'New York, US' plane_uk_international 609.028
'Kl\xc3\xb8fta, NO' plane_uk_europe 122.597
'Baarn, NL' train_fr_thalys 4.93608
'Preston, GB' plane_uk_europe 58.0942
'Nea Ionia, GR' plane_uk_europe 187.675
'Nea Ionia, GR' plane_uk_europe 187.675
'Nea Ionia, GR' plane_uk_europe 187.675
'Nea Ionia, GR' plane_uk_europe 187.675
'Nea Ionia, GR' plane_uk_europe 187.675
'Nea Ionia, GR' plane_uk_europe 187.675
'Nea Ionia, GR' plane_uk_europe 187.675
'LE PLESSIS-TREVISE, FR' train_fr_ter 0.504514
'Paris, FR' 0
'Belgi\xc3\xab, BE' train_fr_thalys 3.00672
'Belgi\xc3\xab, BE' train_fr_thalys 3.00672
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'PARIS, FR' 0
'PARIS, FR' 0
'Mannheim, DE' plane_uk_europe 40.3947
'Mannheim, DE' plane_uk_europe 40.3947
'Mannheim, DE' plane_uk_europe 40.3947
'Mannheim, DE' plane_uk_europe 40.3947
'MONTIGNY LE BRETONNEUX, FR' train_fr_ter 0.728671
'MONTIGNY LE BRETONNEUX, FR' train_fr_ter 0.728671
'MONTIGNY LE BRETONNEUX, FR' train_fr_ter 0.728671
'MONTIGNY LE BRETONNEUX, FR' train_fr_ter 0.728671
'Paris, FR' 0
'Paris, FR' 0
'Stockholm, SE' plane_uk_europe 138.407
'Stockholm, SE' plane_uk_europe 138.407
'Stockholm, SE' plane_uk_europe 138.407
'NEUILLY SUR SEINE CEDEX, FR' 0
'Groot-Bijgaarden, BE' train_fr_thalys 3.04944
'Paris, FR' 0
'Munich, DE' plane_uk_europe 61.3923
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Mechelen, BE' train_fr_thalys 3.31513
'Ivry-Sur-Seine, FR' train_fr_ter 0.163225
'Honselersdijk, NL' train_fr_thalys 4.35236
'London, GB' train_fr_eurostar 3.85149
'Berlin, DE' plane_uk_europe 78.6352
'Ivry sur Seine, FR' train_fr_ter 0.163225
'Amsterdam, NL' train_fr_thalys 4.99701
'Levallois-Perret, FR' train_fr_ter 0.185841
'Kendal, FR' 0
'Levallois-Perret, FR' train_fr_ter 0.185841
'Paris, FR' 0
'Paris, FR' 0
'Clichy, FR' train_fr_ter 0.178898
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Rennes, FR' train_fr_tgv 0.98974
'Paris, FR' 0
'Paris, FR' 0
'Gennevilliers, FR' train_fr_ter 0.255113
'Paris, FR' 0
'V\xc3\xa9lizy-Villacoublay, FR'train_fr_ter 0.424601
'V\xc3\xa9lizy-Villacoublay, FR'train_fr_ter 0.424601
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'MALM\xc3\x96, SE' plane_uk_europe 93.3814
'MALM\xc3\x96, SE' plane_uk_europe 93.3814
'MALM\xc3\x96, SE' plane_uk_europe 93.3814
'MALM\xc3\x96, SE' plane_uk_europe 93.3814
'MALM\xc3\x96, SE' plane_uk_europe 93.3814
'MALM\xc3\x96, SE' plane_uk_europe 93.3814
'Paris, FR' 0
'Paris, FR' 0
'Ridgewood, US' plane_uk_international 608.25
'London, FR' train_fr_tgv 1.0297
'Bilbao, ES' plane_uk_europe 66.5723
'Kontich, BE' train_fr_thalys 3.41595
'Bois Colombes, FR' train_fr_ter 0.260969
'levallois perret, FR' train_fr_ter 0.185841
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Nantes, FR' train_fr_tgv 1.099
'Brooklyn, US' plane_uk_international 609.314
'Arvada, US' plane_uk_international 821.131
'BROOKLYN, US' plane_uk_international 609.314
'Bruxelles, BE' train_fr_thalys 3.0618
'Bruxelles, BE' train_fr_thalys 3.0618
'Bruxelles, BE' train_fr_thalys 3.0618
'Bruxelles, BE' train_fr_thalys 3.0618
'Portsmouth, GB' plane_uk_europe 29.3661
'Fareham, GB' plane_uk_europe 30.3747
'Portsmouth, GB' plane_uk_europe 29.3661
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Velizy-Villacoublay, FR' train_fr_ter 0.424601
'Velizy-Villacoublay, FR' train_fr_ter 0.424601
'Velizy-Villacoublay, FR' train_fr_ter 0.424601
'Munich, DE' plane_uk_europe 61.3923
'Munich, DE' plane_uk_europe 61.3923
'Velizy-Villacoublay, FR' train_fr_ter 0.424601
'Velizy-Villacoublay, FR' train_fr_ter 0.424601
'Velizy-Villacoublay, FR' train_fr_ter 0.424601
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Oslo, NO' plane_uk_europe 120.243
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Le Kremlin Bicetre, FR' train_fr_ter 0.143432
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Skopje, MK' plane_uk_europe 149.636
'Twickenham, GB' plane_uk_europe 30.958
'PARIS, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Paris 9\xc3\xa8me, FR' 0
'Brno, CZ' plane_uk_europe 93.2618
"Ronco All'Adige, IT" plane_uk_europe 69.7587
'Barcelona, ES' plane_uk_europe 74.3474
'Pescantina, IT' plane_uk_europe 66.7771
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Bruz, FR' train_fr_tgv 1.01439
'Paris, FR' 0
'Paris, FR' 0
'PARIS 9, FR' 0
'PARIS 9, FR' 0
'PARIS 9, FR' 0
'PARIS 9, FR' 0
'PARIS 9, FR' 0
'Paderborn, DE' plane_uk_europe 49.8248
'Paderborn, DE' plane_uk_europe 49.8248
'Paris, FR' 0
'Paris, FR' 0
'chessington, GB' plane_uk_europe 30.1311
'chessington, GB' plane_uk_europe 30.1311
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Doylestown, US' plane_uk_international 620.027
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Praha, CZ' plane_uk_europe 79.1561
'Sligo, IE' plane_uk_europe 85.9945
'Sligo, IE' plane_uk_europe 85.9945
'jakarta selatan, ID' plane_uk_international1206.51
'W\xc3\xbcrzburg, DE' plane_uk_europe 50.1755
'W\xc3\xbcrzburg, DE' plane_uk_europe 50.1755
'Montpellier, FR' train_fr_tgv 1.90326
'Montpellier, FR' train_fr_tgv 1.90326
'MONTPELLIER, FR' train_fr_tgv 1.90326
'MONTPELLIER, FR' train_fr_tgv 1.90326
'Montpellier, FR' train_fr_tgv 1.90326
'Montpellier, FR' train_fr_tgv 1.90326
'San Francisco, US' plane_uk_international 934.733
'Vilnius, LT' plane_uk_europe 152.23
'Paris, FR' 0
'Paris, FR' 0
'Antwerpen, BE' train_fr_thalys 3.49317
'Beograd, RS' plane_uk_europe 129.616
'Bois Colombes, FR' train_fr_ter 0.260969
'Paris, FR' 0
'Bois-Colombes, FR' train_fr_ter 0.260969
'la garenne colombes, FR' train_fr_ter 0.277851
'Taipei, FR' train_fr_ter 0.0580034
'Montpellier, FR' train_fr_tgv 1.90326
'LILLE, FR' train_fr_tgv 0.652776
'LILLE, FR' train_fr_tgv 0.652776
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'MONCHEAUX, FR' train_fr_tgv 0.593311
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'BROOKLYN, US' plane_uk_international 609.314
'LA CHAPELLE THOUARAULT, FR' train_fr_tgv 1.03049
'Antwerpen, BE' train_fr_thalys 3.49317
'Antwerpen, BE' train_fr_thalys 3.49317
'Leusden, NL' train_fr_thalys 4.9069
'Leusden, NL' train_fr_thalys 4.9069
'Leusden, NL' train_fr_thalys 4.9069
'Vilnius, LT' plane_uk_europe 152.23
'Vilnius, LT' plane_uk_europe 152.23
'Vilnius, LT' plane_uk_europe 152.23
'Vilnius, LT' plane_uk_europe 152.23
'Vilnius, LT' plane_uk_europe 152.23
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Walldorf, DE' plane_uk_europe 41.3662
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'mougon, FR' train_fr_tgv 1.11451
'PARIS, FR' 0
'PARIS, FR' 0
'Munchen, DE' plane_uk_europe 61.3923
'M\xc3\xbcnchen, DE' plane_uk_europe 61.3923
'Wals, AT' plane_uk_europe 71.1771
'Bruxelles, BE' train_fr_thalys 3.0618
'Budapest, HU' plane_uk_europe 111.672
'Munich, DE' plane_uk_europe 61.3923
'PARIS, FR' 0
'PARIS, FR' 0
'Rotterdam, NL' train_fr_thalys 4.33682
'Rotterdam, NL' train_fr_thalys 4.33682
'Rotterdam, NL' train_fr_thalys 4.33682
'Rotterdam, NL' train_fr_thalys 4.33682
'Rotterdam, NL' train_fr_thalys 4.33682
'Paris, FR' 0
'Cambridge, GB' plane_uk_europe 36.1921
'Paris, FR' 0
'Paris, FR' 0
'Tassin, FR' train_fr_tgv 1.21965
'BOUGUENAIS, FR' train_fr_tgv 1.12073
'BOUGUENAIS, FR' train_fr_tgv 1.12073
'BOUGUENAIS, FR' train_fr_tgv 1.12073
'BOUGUENAIS, FR' train_fr_tgv 1.12073
'BOUGUENAIS, FR' train_fr_tgv 1.12073
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'Merksem, BE' train_fr_thalys 3.5439
'Merksem, BE' train_fr_thalys 3.5439
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Labege, FR' train_fr_tgv 1.90571
'Nice, FR' train_fr_tgv 2.19749
'Paris, FR' 0
'Antibes, FR' train_fr_tgv 2.21202
'Nice, FR' train_fr_tgv 2.19749
'Cambridge, GB' plane_uk_europe 36.1921
'Paris, FR' 0
'Helsinki, FI' plane_uk_europe 171.217
'Bourguillon, CH' train_fr_tgv 1.3676
'Oslo, NO' plane_uk_europe 120.243
'Paris, FR' 0
'Biot, FR' train_fr_tgv 2.19679
'Brabrand, DK' plane_uk_europe 86.4819
'Brabrand, DK' plane_uk_europe 86.4819
'Brabrand, DK' plane_uk_europe 86.4819
'Brabrand, DK' plane_uk_europe 86.4819
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Lomme, FR' train_fr_tgv 0.65284
'Lomme, FR' train_fr_tgv 0.65284
'Amsterdam, NL' train_fr_thalys 4.99701
'Nesoddtangen, NO' plane_uk_europe 119.562
'Slinde, NO' 0
'Oslo, NO' plane_uk_europe 120.243
'Antibes, FR' train_fr_tgv 2.21202
'Gent, BE' train_fr_thalys 3.0567
'Issy les Moulineaux, FR' train_fr_ter 0.196173
'Paris, FR' 0
'THIAIS, FR' train_fr_ter 0.31131
'Kortrijk, BE' train_fr_thalys 2.65502
'Kortrijk, BE' train_fr_thalys 2.65502
'Metz, FR' train_fr_tgv 0.900583
'Metz, FR' train_fr_tgv 0.900583
'Metz, FR' train_fr_tgv 0.900583
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'Montpellier, FR' train_fr_tgv 1.90326
'MAISONS-ALFORT, FR' train_fr_ter 0.247787
'Stuttgart, DE' plane_uk_europe 44.8739
'Kontich, BE' train_fr_thalys 3.41595
'Kontich, BE' train_fr_thalys 3.41595
'MOUGINS, FR' train_fr_tgv 2.19209
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Sunnyvale, US' plane_uk_international 936.404
'Montpelier, VT, US' plane_uk_international 575.781
'Bucuresti, RO' plane_uk_europe 167.807
'Paris, FR' 0
'Paris, FR' 0
'Druskininkai, LT' plane_uk_europe 143.362
'Druskininkai, LT' plane_uk_europe 143.362
'Druskininkai, LT' plane_uk_europe 143.362
'Paris, FR' 0
'Paris, FR' 0
'Moscow, RU' plane_uk_europe 223.185
'Leeds, GB' plane_uk_europe 54.851
'Leeds, GB' plane_uk_europe 54.851
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Amsterdam, NL' train_fr_thalys 4.99701
'Portsmouth, GB' plane_uk_europe 29.3661
'Amsterdam, NL' train_fr_thalys 4.99701
'Bournemouth, GB' plane_uk_europe 32.9903
'Bournemouth, GB' plane_uk_europe 32.9903
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Kaunas, LT' plane_uk_europe 145.056
'Paris, FR' 0
'High Wycombe, GB' plane_uk_europe 33.9433
'Stuttgart, DE' plane_uk_europe 44.8739
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'M\xc3\xb6lndal, SE' plane_uk_europe 104.727
'M\xc3\xb6lndal, SE' plane_uk_europe 104.727
'M\xc3\xb6lndal, SE' plane_uk_europe 104.727
'M\xc3\xb6lndal, SE' plane_uk_europe 104.727
'M\xc3\xb6lndal, SE' plane_uk_europe 104.727
'Epinay sur Orge, FR' train_fr_ter 0.600454
'Bristol, FR' train_fr_tgv 2.21752
'New York, US' plane_uk_international 609.028
'Oxford, GB' plane_uk_europe 36.8758
'Oxford, GB' plane_uk_europe 36.8758
'Vitry sur Seine, FR' train_fr_ter 0.240052
'Istanbul, FR' train_fr_ter 2.30167
'Istanbul, FR' train_fr_ter 2.30167
'Istanbul, FR' train_fr_ter 2.30167
'Stuttgart, DE' plane_uk_europe 44.8739
'Dampmart, FR' train_fr_ter 0.827868
'Villeurbanne, FR' train_fr_tgv 1.25663
'Warszawa, PL' plane_uk_europe 123.031
'Bournemouth, GB' plane_uk_europe 32.9903
'Vilnius, LT' plane_uk_europe 152.23
'Paris, FR' 0
'Paris, FR' 0
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Porto, PT' plane_uk_europe 108.696
'Berlin, DE' plane_uk_europe 78.6352
'Lambersart, FR' train_fr_tgv 0.656008
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'BAGNEUX, FR' train_fr_tgv 0.819903
'BAGNEUX, FR' train_fr_tgv 0.819903
'BAGNEUX, FR' train_fr_tgv 0.819903
'BAGNEUX, FR' train_fr_tgv 0.819903
'BAGNEUX, FR' train_fr_tgv 0.819903
'Oslo, NO' plane_uk_europe 120.243
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'PARIS, FR' 0
'Rotterdam, NL' train_fr_thalys 4.33682
'MONTROUGE, FR' train_fr_ter 0.156711
'Paris, FR' 0
'Paris, FR' 0
'paris, FR' 0
'paris, FR' 0
'paris, FR' 0
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Lisboa, PT' plane_uk_europe 130.22
'Baillargues, FR' train_fr_tgv 1.8929
'Lakewood, US' plane_uk_international 822.116
'Montreuil, FR' train_fr_tgv 0.587976
'Paris, FR' 0
'Paris, FR' 0
'Preston, GB' plane_uk_europe 58.0942
'Dublin, IE' plane_uk_europe 70.0296
'Galway, IE' plane_uk_europe 83.8232
'Heidelberg, DE' plane_uk_europe 41.7812
'Lyon, FR' train_fr_tgv 1.25509
'Lyon, FR' train_fr_tgv 1.25509
'Lyon, FR' train_fr_tgv 1.25509
'Lyon, FR' train_fr_tgv 1.25509
'Lyon, FR' train_fr_tgv 1.25509
'Lyon, FR' train_fr_tgv 1.25509
'London, GB' train_fr_eurostar 3.85149
'Amsterdam, NL' train_fr_thalys 4.99701
'Antwerpen, BE' train_fr_thalys 3.49317
'Paris, FR' 0
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'Villers-Bretonneux, FR' train_fr_tgv 0.362289
'rennes, FR' train_fr_tgv 0.98974
'Kirchentellinsfurt, DE' plane_uk_europe 44.8983
'Dnipro, FR' 0
'paris, FR' 0
'Crepy-en-Valois, FR' train_fr_ter 1.68471
'Arpajon, FR' train_fr_ter 0.89306
'Paris, FR' 0
'Paris, FR' 0
'Asni\xc3\xa8res-sur-Seine, FR' train_fr_ter 0.2205
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Warszawa, PL' plane_uk_europe 123.031
'Den Haag, NL' train_fr_thalys 4.46108
'Paris, FR' 0
'Boulder, CO, US' plane_uk_international 819.751
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Fontenay-sous-Bois, FR' train_fr_ter 0.265641
'Paris, FR' 0
'Berlin, DE' plane_uk_europe 78.6352
'Bougival, FR' train_fr_ter 0.458612
'Bougival, FR' train_fr_ter 0.458612
'Bougival, FR' train_fr_ter 0.458612
'Stafford, GB' plane_uk_europe 48.3542
'Stafford, GB' plane_uk_europe 48.3542
'PARIS, FR' 0
'PARIS, FR' 0
'Harpenden, GB' plane_uk_europe 34.1683
'Purmerend, NL' train_fr_thalys 5.16538
'Minsk, FR' train_fr_tgv 1.54044
'Minsk, BY' plane_uk_europe 163.915
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'H\xc3\xb8rsholm, DK' plane_uk_europe 93.2142
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Copenhagen, DK' plane_uk_europe 92.1407
'Walnut Creek, US' plane_uk_international 931.389
'Dublin, IE' plane_uk_europe 70.0296
'Warszawa, PL' plane_uk_europe 123.031
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Helsinki, FI' plane_uk_europe 171.217
'Banska Bystrica, SK' plane_uk_europe 110.286
'Amsterdam, NL' train_fr_thalys 4.99701
'Hasselt, BE' train_fr_thalys 3.65381
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Montreuil, FR' train_fr_tgv 0.587976
'Paris, FR' 0
'Paris, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Lima, PE' plane_uk_international1066.73
'Tokyo, JP' plane_uk_international1013.84
'Tokyo, JP' plane_uk_international1013.84
'Levallois Perret, FR' train_fr_ter 0.185841
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Warszawa, PL' plane_uk_europe 123.031
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Munich, DE' plane_uk_europe 61.3923
'Munich, DE' plane_uk_europe 61.3923
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'ASNIERES SUR SEINE, FR' train_fr_ter 0.2205
'Dublin, IE' plane_uk_europe 70.0296
'Dublin, IE' plane_uk_europe 70.0296
'Dublin, IE' plane_uk_europe 70.0296
'San Francisco, US' plane_uk_international 934.733
'Warszawa, PL' plane_uk_europe 123.031
'Copenhagen S, DK' plane_uk_europe 92.1407
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Soborg, DK' plane_uk_europe 92.2323
'PARIS 10, FR' 0
'PARIS 10, FR' 0
'PARIS 10, FR' 0
'PARIS 10, FR' 0
'PARIS 10, FR' 0
'Sheffield, GB' plane_uk_europe 50.9988
'Mannheim, DE' plane_uk_europe 40.3947
'Mannheim, DE' plane_uk_europe 40.3947
'Mannheim, DE' plane_uk_europe 40.3947
'Mannheim, DE' plane_uk_europe 40.3947
'PARIS, FR' 0
'PARIS, FR' 0
'PARIS, FR' 0
'Madrid, ES' plane_uk_europe 94.2384
'Madrid, ES' plane_uk_europe 94.2384
'Madrid, ES' plane_uk_europe 94.2384
'Camarate, PT' plane_uk_europe 129.497
'Oslo, NO' plane_uk_europe 120.243
'Oslo, NO' plane_uk_europe 120.243
'Nancy, FR' train_fr_tgv 0.903038
'Nancy, FR' train_fr_tgv 0.903038
'Stockholm, SE' plane_uk_europe 138.407
'Stockholm, SE' plane_uk_europe 138.407
'Stockholm, SE' plane_uk_europe 138.407
'Stockholm, SE' plane_uk_europe 138.407
'Levallois-Perret, FR' train_fr_ter 0.185841
'Levallois-Perret, FR' train_fr_ter 0.185841
'Levallois-Perret, FR' train_fr_ter 0.185841
'Levallois-Perret, FR' train_fr_ter 0.185841
'Levallois-Perret, FR' train_fr_ter 0.185841
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Diemen, NL' train_fr_thalys 4.98144
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Berlin, DE' plane_uk_europe 78.6352
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Berlin, DE' plane_uk_europe 78.6352
'Berlin, DE' plane_uk_europe 78.6352
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'London, GB' train_fr_eurostar 3.85149
'PARIS, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Paris, FR' 0
'Seattle, US' plane_uk_international 839.579
'New York, US' plane_uk_international 609.028
'Chicago, US' plane_uk_international 694.214
'Kyoto, JP' plane_uk_international1003.11
'San Francisco, US' plane_uk_international 934.733
'Stockholm, SE' plane_uk_europe 138.407
'Cincinnati, US' plane_uk_international 694.124
'Orlando, US' plane_uk_international 753.668
'Oakland, US' plane_uk_international 933.386
'San Francisco, US' plane_uk_international 934.733
In [8]:
total_footprint_transport_attendees = sum([
    footprint_transport(o, "Paris")
    for o in origins
])
total_distance = sum([
    distance(coords(o), coords("Paris"))
    for o in origins
])
print "Total km:", total_distance
print "Total CO2e kg footprint:", total_footprint_transport_attendees
print "Average km/attendee", total_distance / len(origins)
print "Average CO2e kg/attendee:", total_footprint_transport_attendees / len(origins)
Total km: 926773.611555
Total CO2e kg footprint: 80051.0079611
Average km/attendee 622.831728196
Average CO2e kg/attendee: 53.797720404
In [9]:
from bokeh.io import output_notebook, show
from bokeh.plotting import figure
from bokeh.models import (
  ColumnDataSource, Circle, LogColorMapper, BasicTicker, ColorBar,
    DataRange1d, PanTool, WheelZoomTool, BoxSelectTool
)
from bokeh.models.mappers import ColorMapper, LinearColorMapper
from bokeh.palettes import Viridis5
from bokeh.tile_providers import CARTODBPOSITRON_RETINA

import json, math
import bokeh.tile_providers

output_notebook()

def coords2mercator(coords):
    lat, lon = coords
    
    r_major = 6378137.000
    x = r_major * math.radians(lon)
    scale = x/lon
    y = 180.0/math.pi * math.log(math.tan(math.pi/4.0 + 
        lat * (math.pi/180.0)/2.0)) * scale
    return (x, y)

p = figure(x_range=(-16000000, 18000000), y_range=(-4000000, 9000000),
           x_axis_type="mercator", y_axis_type="mercator", plot_width=900, plot_height=450)

p.add_tile(CARTODBPOSITRON_RETINA)

unique_coords = Counter()
for o in origins:
    if geocode(o):
        unique_coords[json.dumps([geocode(o).latitude,geocode(o).longitude])] += 1

source = ColumnDataSource(
    data=dict(
        lat=[coords2mercator(json.loads(k))[1] for k, v in unique_coords.most_common()],
        lon=[coords2mercator(json.loads(k))[0] for k, v in unique_coords.most_common()],
        
        x=[(coords2mercator(json.loads(k))[0], coords2mercator(coords("Paris"))[0])  for k, v in unique_coords.most_common()],
        y=[(coords2mercator(json.loads(k))[1], coords2mercator(coords("Paris"))[1])  for k, v in unique_coords.most_common()],
        
        size=[(v*20)**(0.3) for k, v in unique_coords.most_common()],
        width=[math.sqrt(v) for k, v in unique_coords.most_common()],
        color=["green" for k, v in unique_coords.most_common()]
    )
)

lines_glyph = p.multi_line('x', 'y', color = 'color', line_width = "width", 
                            line_alpha = 0.2, hover_line_alpha = 1.0, hover_line_color = 'color',
                            source = source)

p.circle(x="lon", y="lat", size="size", fill_color="color", fill_alpha=0.5, line_color=None, source=source)

show(p)
Loading BokehJS ...
In [10]:
# Commute to the conference

# Compute subway emissions, considering ~90% usage among attendees to get to the conference
split_subway = 0.90
split_car = 0.10

average_distance = 7  # Distance from Chatelet to Docks
subway_co2ekm = 0.0038
total_footprint_subway = len(origins) * 2 * split_subway * average_distance * subway_co2ekm
print "Total subway footprint:", total_footprint_subway

average_distance = 7  # Distance from Chatelet to Docks
subway_co2ekm = 0.205
total_footprint_car = len(origins) * 2 * split_car * average_distance * subway_co2ekm
print "Total car footprint:", total_footprint_car

total_footprint_commute = total_footprint_subway + total_footprint_car
print "Total commute footprint:", total_footprint_commute
Total subway footprint: 71.24544
Total car footprint: 427.056
Total commute footprint: 498.30144
In [11]:
# Other transports

# Food
# Deliveries
total_footprint_transport = total_footprint_transport_attendees + total_footprint_commute
print "Total transport footprint:", total_footprint_transport
Total transport footprint: 80549.3094011

2 - Hotels

In [12]:
# https://www.consoglobe.com/impact-ecologique-d-une-nuit-d-hotel-cg
one_night_ghg = 6.9
average_stay = 2
# Any attendee with an origin further than this (in km) will be considered as sleeping in a hotel
hotel_km_limit = 100 

hotel_attendees = len([
    o
    for o in origins
    if distance(coords(o), coords("Paris")) > hotel_km_limit
])

total_footprint_hotels = hotel_attendees * average_stay * one_night_ghg
print "Total hotel nights:", average_stay * hotel_attendees
print "Total hotel footprint:", total_footprint_hotels
Total hotel nights: 1438
Total hotel footprint: 9922.2

3 - Energy

In [13]:
docks_surface = 3200

# Watts estimate
heating_kwh = 474 * 24
# https://www.rte-france.com/en/eco2mix/eco2mix-co2-en
kwh_co2e = 0.08
total_heating = heating_kwh * kwh_co2e

# lights, screen, tech
total_other_energy = 0.5 * total_heating  # TODO

total_footprint_energy = total_heating + total_other_energy
print "Total energy footprint:", total_footprint_energy
Total energy footprint: 1365.12

4 - Food

In [14]:
attendees = len(origins)
kg_per_attendee = 0.5

# http://www.greeneatz.com/foods-carbon-footprint.html
# TODO: find better FR source
cheese_ghg = 13.5

# Let's just consider everyone eats only cheese! (among the worst offenders)
total_footprint_food = attendees * kg_per_attendee * cheese_ghg
print "Total food footprint", total_footprint_food
Total food footprint 10044.0

5 - Hardware

In [15]:
# Badges & print
badges_paper = 0.3
badges_format = 0.075 * 0.120

rollups_surface = 12 * (0.8 * 2) + 6 * (1.6 * 2) + 5 * (2 * 2)
rollups_paper = 0.5

total_paper_kg = (badges_paper * badges_format * len(origins)) + (rollups_surface * rollups_paper)

# https://www.epa.vic.gov.au/~/media/Publications/972.pdf
total_footprint_paper = 2.727 * total_paper_kg

# Stage
stage_wood_kg = 4 * 15
stage_cardboard_kg = 26 * 0.5

# Swag
tshirts = 100 + 450
# https://www.carbontrust.com/media/38358/ctc793-international-carbon-flows-clothing.pdf
total_footprint_tshirts = tshirts * 15

hoodies = 0

# Cardboard
total_footprint_hardware = total_footprint_paper + stage_wood_kg + stage_cardboard_kg + total_footprint_tshirts
print "Total hardware footprint:", total_footprint_hardware
Total hardware footprint: 8413.5843952

Conclusion

In [16]:
total_footprint = total_footprint_transport + total_footprint_hotels + total_footprint_energy + total_footprint_food + total_footprint_hardware
print "Total footprint:", total_footprint
print "Footprint per attendee", total_footprint / len(origins)
Total footprint: 110294.213796
Footprint per attendee 74.1224555083
In [17]:
from bokeh.palettes import Category10
from bokeh.transform import cumsum
import pandas as pd
from math import pi

raw = {
    'Transport': total_footprint_transport,
    'Hotels': total_footprint_hotels,
    'Energy': total_footprint_energy,
    'Food': total_footprint_food,
    'Hardware': total_footprint_hardware
}

data = pd.Series(raw).reset_index(name='value').rename(columns={'index':'label'})
data['angle'] = data['value']/data['value'].sum() * 2*pi
data['color'] = Category10[len(raw)]

p = figure(plot_height=350, title="Footprint by category", toolbar_location=None,
           tools="hover", tooltips="@label: @value", x_range=(-0.5, 1.0))

p.wedge(x=0, y=1, radius=0.4,
        start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        line_color="white", fill_color='color', legend='label', source=dict(data))

p.axis.axis_label=None
p.axis.visible=False
p.grid.grid_line_color = None

show(p)
print raw
{'Food': 10044.0, 'Hardware': 8413.5843952, 'Energy': 1365.1200000000001, 'Transport': 80549.30940108416, 'Hotels': 9922.2}