{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## How to plot a map\n", "\n", "In this last notebook, we'll finally plot our colour-coded map of Singapore, with each road colour representing a different linguistic origin. But first, we need to merge a few files so that our original GeoJSON file that has all the linestring information is augmented with linguistic origin information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Merging files with (Geo)Pandas" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import geopandas as gpd" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryhighwayname
0 LINESTRING (103.8284048 1.3068666, 103.8287382... primary Orchard Road
1 LINESTRING (103.8858462 1.3517778, 103.8859356... residential Hougang Avenue 1
2 LINESTRING (103.8387571 1.3126764, 103.83872 1... primary Scotts Road
3 LINESTRING (103.8395387 1.3132203, 103.8396493... tertiary Keng Lee Road
4 LINESTRING (103.8392505 1.3134495, 103.8394598... primary Newton Road
5 LINESTRING (103.8373031 1.3147037, 103.8359738... residential Sarkies Road
6 LINESTRING (103.8318305 1.3050277, 103.8315539... primary Patterson Road
7 LINESTRING (103.8348293 1.3004045, 103.8342528... secondary Orchard Boulevard
8 LINESTRING (103.8348293 1.3004045, 103.8346883... secondary Grange Road
9 LINESTRING (103.830813 1.3039006, 103.8302888 ... primary Paterson Hill
10 LINESTRING (103.8313547 1.2960058, 103.83227 1... primary River Valley Road
11 LINESTRING (103.842836 1.291596, 103.8422129 1... residential Unity Street
12 LINESTRING (103.8430392 1.2934171, 103.842244 ... residential Merbau Road
13 LINESTRING (103.8387207 1.2909753, 103.8388778... residential Mohamed Sultan Road
14 LINESTRING (103.8387207 1.2909753, 103.8386978... residential Saiboo Street
15 LINESTRING (103.843357 1.2895812, 103.8436285 ... residential Merchant Loop
16 LINESTRING (103.8412716 1.2886074, 103.8414779... primary Clemenceau Avenue
17 LINESTRING (103.8420526 1.2900233, 103.8421061... secondary Merchant Road
18 LINESTRING (103.8447163 1.2885069, 103.8448984... residential Read Cresent
19 LINESTRING (103.8513753 1.3967862, 103.8518491... motorway Tampines Expressway
20 LINESTRING (103.8579655 1.3941346, 103.8580422... motorway Seletar Expressway
21 LINESTRING (103.8443907 1.3109684, 103.8445533... motorway Central Expressway
22 LINESTRING (103.8021677 1.2727921, 103.8022844... primary Telok Blangah Road
23 LINESTRING (103.6372541 1.3480363, 103.6373882... motorway Ayer Rajah Expressway
24 LINESTRING (103.8341079 1.2723657, 103.8361228... motorway Ayer Rajah Expressway
25 LINESTRING (103.8541001 1.3977878, 103.8545108... motorway Seletar Expressway
26 LINESTRING (103.8541409 1.3976207, 103.8537589... motorway Seletar Expressway
27 LINESTRING (103.7572461 1.4233889, 103.757277 ... primary Turf Club Avenue
28 LINESTRING (103.7740277 1.3968194, 103.7740856... motorway Kranji Expressway
29 LINESTRING (103.7024781 1.3606672, 103.7029984... motorway Kranji Expressway
............
10606 LINESTRING (103.7456548 1.3238507, 103.7456587... primary Jurong Town Hall Road
10607 LINESTRING (103.9278275 1.3236756, 103.9294382... primary New Upper Changi Road
10608 LINESTRING (103.9090633 1.4008567, 103.9089959... tertiary Punggol Central
10609 LINESTRING (103.9085407 1.4013837, 103.9090685... tertiary Punggol Central
10610 LINESTRING (103.8635402 1.3219606, 103.8636524... primary Serangoon Road
10611 LINESTRING (103.9878283 1.3174213, 103.9873099... secondary Tanah Merah Coast Road
10612 LINESTRING (103.9819889 1.32008, 103.9822557 1... secondary Tanah Merah Coast Road
10613 LINESTRING (103.9880358 1.3171467, 103.9882954... unclassified Tanah Merah Ferry Road
10614 LINESTRING (103.7480459 1.3364131, 103.7477151... unclassified Toh Guan Road East
10615 LINESTRING (103.7471773 1.3321312, 103.7473666... secondary Toh Guan Road
10616 LINESTRING (103.7476578 1.3368285, 103.7476645... secondary Toh Guan Road
10617 LINESTRING (103.7587476 1.3306791, 103.7580119... unclassified Toh Tuck Link
10618 LINESTRING (103.7605157 1.3375774, 103.760884 ... residential Toh Tuck Road
10619 LINESTRING (103.7717609 1.3410362, 103.7718022... residential Toh Tuck Road
10620 LINESTRING (103.8737945 1.3560351, 103.8735798... secondary Yio Chu Kang Link
10621 LINESTRING (103.7667516 1.2907781, 103.7671805... secondary Harbour Drive
10622 LINESTRING (103.7666223 1.2908582, 103.7667516... secondary West Coast Ferry Road
10623 LINESTRING (103.8479024 1.2838138, 103.8482049... residential China Street
10624 LINESTRING (103.8448404 1.2907019, 103.8447671... residential Clarke Quay
10625 LINESTRING (103.7465423 1.4078451, 103.7462293... secondary Sungei Kadut Drive
10626 LINESTRING (103.7469404 1.4300587, 103.7469354... secondary Sungei Kadut Drive
10627 LINESTRING (103.8301091 1.2795678, 103.8297781... unclassified Macalister Road
10628 LINESTRING (103.8377302 1.3901191, 103.8380534... residential Countryside Walk
10629 LINESTRING (103.850795 1.339425, 103.8508394 1... residential Lorong 4 Toa Payoh
10630 LINESTRING (103.8515894 1.3395955, 103.8513506... residential Lorong 4 Toa Payoh
10631 LINESTRING (103.8517761 1.3396263, 103.8520148... secondary_link Lorong 6 Toa Payoh
10632 LINESTRING (103.67452 1.3306795, 103.6770103 1... residential PIE
10633 LINESTRING (103.7878953 1.3008067, 103.7879641... residential Nepal Park
10634 LINESTRING (103.7878222 1.3015588, 103.7881668... residential Nepal Park
10635 LINESTRING (103.9098645 1.3024331, 103.909354 ... residential Marine Drive
\n", "

10636 rows × 3 columns

\n", "
" ], "text/plain": [ " geometry highway \\\n", "0 LINESTRING (103.8284048 1.3068666, 103.8287382... primary \n", "1 LINESTRING (103.8858462 1.3517778, 103.8859356... residential \n", "2 LINESTRING (103.8387571 1.3126764, 103.83872 1... primary \n", "3 LINESTRING (103.8395387 1.3132203, 103.8396493... tertiary \n", "4 LINESTRING (103.8392505 1.3134495, 103.8394598... primary \n", "5 LINESTRING (103.8373031 1.3147037, 103.8359738... residential \n", "6 LINESTRING (103.8318305 1.3050277, 103.8315539... primary \n", "7 LINESTRING (103.8348293 1.3004045, 103.8342528... secondary \n", "8 LINESTRING (103.8348293 1.3004045, 103.8346883... secondary \n", "9 LINESTRING (103.830813 1.3039006, 103.8302888 ... primary \n", "10 LINESTRING (103.8313547 1.2960058, 103.83227 1... primary \n", "11 LINESTRING (103.842836 1.291596, 103.8422129 1... residential \n", "12 LINESTRING (103.8430392 1.2934171, 103.842244 ... residential \n", "13 LINESTRING (103.8387207 1.2909753, 103.8388778... residential \n", "14 LINESTRING (103.8387207 1.2909753, 103.8386978... residential \n", "15 LINESTRING (103.843357 1.2895812, 103.8436285 ... residential \n", "16 LINESTRING (103.8412716 1.2886074, 103.8414779... primary \n", "17 LINESTRING (103.8420526 1.2900233, 103.8421061... secondary \n", "18 LINESTRING (103.8447163 1.2885069, 103.8448984... residential \n", "19 LINESTRING (103.8513753 1.3967862, 103.8518491... motorway \n", "20 LINESTRING (103.8579655 1.3941346, 103.8580422... motorway \n", "21 LINESTRING (103.8443907 1.3109684, 103.8445533... motorway \n", "22 LINESTRING (103.8021677 1.2727921, 103.8022844... primary \n", "23 LINESTRING (103.6372541 1.3480363, 103.6373882... motorway \n", "24 LINESTRING (103.8341079 1.2723657, 103.8361228... motorway \n", "25 LINESTRING (103.8541001 1.3977878, 103.8545108... motorway \n", "26 LINESTRING (103.8541409 1.3976207, 103.8537589... motorway \n", "27 LINESTRING (103.7572461 1.4233889, 103.757277 ... primary \n", "28 LINESTRING (103.7740277 1.3968194, 103.7740856... motorway \n", "29 LINESTRING (103.7024781 1.3606672, 103.7029984... motorway \n", "... ... ... \n", "10606 LINESTRING (103.7456548 1.3238507, 103.7456587... primary \n", "10607 LINESTRING (103.9278275 1.3236756, 103.9294382... primary \n", "10608 LINESTRING (103.9090633 1.4008567, 103.9089959... tertiary \n", "10609 LINESTRING (103.9085407 1.4013837, 103.9090685... tertiary \n", "10610 LINESTRING (103.8635402 1.3219606, 103.8636524... primary \n", "10611 LINESTRING (103.9878283 1.3174213, 103.9873099... secondary \n", "10612 LINESTRING (103.9819889 1.32008, 103.9822557 1... secondary \n", "10613 LINESTRING (103.9880358 1.3171467, 103.9882954... unclassified \n", "10614 LINESTRING (103.7480459 1.3364131, 103.7477151... unclassified \n", "10615 LINESTRING (103.7471773 1.3321312, 103.7473666... secondary \n", "10616 LINESTRING (103.7476578 1.3368285, 103.7476645... secondary \n", "10617 LINESTRING (103.7587476 1.3306791, 103.7580119... unclassified \n", "10618 LINESTRING (103.7605157 1.3375774, 103.760884 ... residential \n", "10619 LINESTRING (103.7717609 1.3410362, 103.7718022... residential \n", "10620 LINESTRING (103.8737945 1.3560351, 103.8735798... secondary \n", "10621 LINESTRING (103.7667516 1.2907781, 103.7671805... secondary \n", "10622 LINESTRING (103.7666223 1.2908582, 103.7667516... secondary \n", "10623 LINESTRING (103.8479024 1.2838138, 103.8482049... residential \n", "10624 LINESTRING (103.8448404 1.2907019, 103.8447671... residential \n", "10625 LINESTRING (103.7465423 1.4078451, 103.7462293... secondary \n", "10626 LINESTRING (103.7469404 1.4300587, 103.7469354... secondary \n", "10627 LINESTRING (103.8301091 1.2795678, 103.8297781... unclassified \n", "10628 LINESTRING (103.8377302 1.3901191, 103.8380534... residential \n", "10629 LINESTRING (103.850795 1.339425, 103.8508394 1... residential \n", "10630 LINESTRING (103.8515894 1.3395955, 103.8513506... residential \n", "10631 LINESTRING (103.8517761 1.3396263, 103.8520148... secondary_link \n", "10632 LINESTRING (103.67452 1.3306795, 103.6770103 1... residential \n", "10633 LINESTRING (103.7878953 1.3008067, 103.7879641... residential \n", "10634 LINESTRING (103.7878222 1.3015588, 103.7881668... residential \n", "10635 LINESTRING (103.9098645 1.3024331, 103.909354 ... residential \n", "\n", " name \n", "0 Orchard Road \n", "1 Hougang Avenue 1 \n", "2 Scotts Road \n", "3 Keng Lee Road \n", "4 Newton Road \n", "5 Sarkies Road \n", "6 Patterson Road \n", "7 Orchard Boulevard \n", "8 Grange Road \n", "9 Paterson Hill \n", "10 River Valley Road \n", "11 Unity Street \n", "12 Merbau Road \n", "13 Mohamed Sultan Road \n", "14 Saiboo Street \n", "15 Merchant Loop \n", "16 Clemenceau Avenue \n", "17 Merchant Road \n", "18 Read Cresent \n", "19 Tampines Expressway \n", "20 Seletar Expressway \n", "21 Central Expressway \n", "22 Telok Blangah Road \n", "23 Ayer Rajah Expressway \n", "24 Ayer Rajah Expressway \n", "25 Seletar Expressway \n", "26 Seletar Expressway \n", "27 Turf Club Avenue \n", "28 Kranji Expressway \n", "29 Kranji Expressway \n", "... ... \n", "10606 Jurong Town Hall Road \n", "10607 New Upper Changi Road \n", "10608 Punggol Central \n", "10609 Punggol Central \n", "10610 Serangoon Road \n", "10611 Tanah Merah Coast Road \n", "10612 Tanah Merah Coast Road \n", "10613 Tanah Merah Ferry Road \n", "10614 Toh Guan Road East \n", "10615 Toh Guan Road \n", "10616 Toh Guan Road \n", "10617 Toh Tuck Link \n", "10618 Toh Tuck Road \n", "10619 Toh Tuck Road \n", "10620 Yio Chu Kang Link \n", "10621 Harbour Drive \n", "10622 West Coast Ferry Road \n", "10623 China Street \n", "10624 Clarke Quay \n", "10625 Sungei Kadut Drive \n", "10626 Sungei Kadut Drive \n", "10627 Macalister Road \n", "10628 Countryside Walk \n", "10629 Lorong 4 Toa Payoh \n", "10630 Lorong 4 Toa Payoh \n", "10631 Lorong 6 Toa Payoh \n", "10632 PIE \n", "10633 Nepal Park \n", "10634 Nepal Park \n", "10635 Marine Drive \n", "\n", "[10636 rows x 3 columns]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are our three files\n", "\n", "# File 1: The filtered list of roads\n", "roads_df = gpd.read_file(\"singapore-roads-filtered.geojson\")\n", "roads_df" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namefinal_nameroad_nameroad_tag
0 Orchard Road Orchard Road Orchard Road
1 Hougang Avenue 1 Hougang Avenue 1 Hougang Avenue
2 Scotts Road Scotts Road Scotts Road
3 Keng Lee Road Keng Lee Road Keng Lee Road
4 Newton Road Newton Road Newton Road
5 Sarkies Road Sarkies Road Sarkies Road
6 Patterson Road Paterson Road Paterson Road
7 Orchard Boulevard Orchard Boulevard Orchard Boulevard
8 Grange Road Grange Road Grange Road
9 Paterson Hill Paterson Hill Paterson Hill
10 River Valley Road River Valley Road River Valley Road
11 Unity Street Unity Street Unity Street
12 Merbau Road Merbau Road Merbau Road
13 Mohamed Sultan Road Mohamed Sultan Road Mohamed Sultan Road
14 Saiboo Street Saiboo Street Saiboo Street
15 Merchant Loop Merchant Loop Merchant Loop
16 Clemenceau Avenue Clemenceau Avenue Clemenceau Avenue
17 Merchant Road Merchant Road Merchant Road
18 Read Cresent Read Crescent Read Crescent
19 Tampines Expressway Tampines Expressway Tampines Expressway
20 Seletar Expressway Seletar Expressway Seletar Expressway
21 Central Expressway Central Expressway Central Expressway
22 Telok Blangah Road Telok Blangah Road Telok Blangah Road
23 Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah Expressway
24 Turf Club Avenue Turf Club Avenue Turf Club Avenue
25 Kranji Expressway Kranji Expressway Kranji Expressway
26 Prinsep Street Prinsep Street Prinsep Street
27 Tanglin Road Tanglin Road Tanglin Road
28 Alexandra Road Alexandra Road Alexandra Road
29 Nicoll Highway Nicoll Highway Nicoll Highway
...............
3404 Seletar North Link Seletar North Link Seletar Link
3405 Ghim Moh Link Ghim Moh Link Ghim Moh Link
3406 Hougang Street 31 Hougang Street 31 Hougang Street
3407 Hougang Street 32 Hougang Street 32 Hougang Street
3408 Serangoon Lane Serangoon Lane Serangoon Lane
3409 Gambir Walk Gambir Walk Gambir Walk
3410 Upper Serangoon Crescent Upper Serangoon Crescent Serangoon Crescent
3411 Ubi Close Ubi Close Ubi Close
3412 Sin Ming Lane Sin Ming Lane Sin Ming Lane
3413 Compassvale Lane Compassvale Lane Compassvale Lane
3414 Lorong 5 Realty Park Lorong 5 Realty Park Lorong Realty Park
3415 Wee Nam Road Wee Nam Road Wee Nam Road
3416 Tampines Street 72 Tampines Street 72 Tampines Street
3417 Changi South Lane Changi South Lane Changi Lane
3418 Telegraph Street Telegraph Street Telegraph Street
3419 Biopolis Street Biopolis Street Biopolis Street
3420 Biopolis Link Biopolis Link Biopolis Link
3421 Plymouth Avenue Plymouth Avenue Plymouth Avenue
3422 Gentle Road Gentle Road Gentle Road
3423 Leicester Road Leicester Road Leicester Road
3424 Simon Walk Simon Walk Simon Walk
3425 Joo Hong Road Joo Hong Road Joo Hong Road
3426 Florence Close Florence Close Florence Close
3427 Hoot Kiam Road Hoot Kiam Road Hoot Kiam Road
3428 Yishun Avenue 8 Yishun Avenue 8 Yishun Avenue
3429 Choa Chu Kang Avenue 6 Choa Chu Kang Avenue 6 Choa Chu Kang Avenue
3430 Clarke Quay Clarke Quay Clarke Quay
3431 Countryside Walk Countryside Walk Countryside Walk
3432 PIE Pan-Island Expressway Pan-Island Expressway
3433 Nepal Park Nepal Park Nepal Park
\n", "

3434 rows × 4 columns

\n", "
" ], "text/plain": [ " name final_name road_name \\\n", "0 Orchard Road Orchard Road Orchard \n", "1 Hougang Avenue 1 Hougang Avenue 1 Hougang \n", "2 Scotts Road Scotts Road Scotts \n", "3 Keng Lee Road Keng Lee Road Keng Lee \n", "4 Newton Road Newton Road Newton \n", "5 Sarkies Road Sarkies Road Sarkies \n", "6 Patterson Road Paterson Road Paterson \n", "7 Orchard Boulevard Orchard Boulevard Orchard \n", "8 Grange Road Grange Road Grange \n", "9 Paterson Hill Paterson Hill Paterson \n", "10 River Valley Road River Valley Road River \n", "11 Unity Street Unity Street Unity \n", "12 Merbau Road Merbau Road Merbau \n", "13 Mohamed Sultan Road Mohamed Sultan Road Mohamed Sultan \n", "14 Saiboo Street Saiboo Street Saiboo \n", "15 Merchant Loop Merchant Loop Merchant \n", "16 Clemenceau Avenue Clemenceau Avenue Clemenceau \n", "17 Merchant Road Merchant Road Merchant \n", "18 Read Cresent Read Crescent Read \n", "19 Tampines Expressway Tampines Expressway Tampines \n", "20 Seletar Expressway Seletar Expressway Seletar \n", "21 Central Expressway Central Expressway Central \n", "22 Telok Blangah Road Telok Blangah Road Telok Blangah \n", "23 Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah \n", "24 Turf Club Avenue Turf Club Avenue Turf Club \n", "25 Kranji Expressway Kranji Expressway Kranji \n", "26 Prinsep Street Prinsep Street Prinsep \n", "27 Tanglin Road Tanglin Road Tanglin \n", "28 Alexandra Road Alexandra Road Alexandra \n", "29 Nicoll Highway Nicoll Highway Nicoll \n", "... ... ... ... \n", "3404 Seletar North Link Seletar North Link Seletar \n", "3405 Ghim Moh Link Ghim Moh Link Ghim Moh \n", "3406 Hougang Street 31 Hougang Street 31 Hougang \n", "3407 Hougang Street 32 Hougang Street 32 Hougang \n", "3408 Serangoon Lane Serangoon Lane Serangoon \n", "3409 Gambir Walk Gambir Walk Gambir \n", "3410 Upper Serangoon Crescent Upper Serangoon Crescent Serangoon \n", "3411 Ubi Close Ubi Close Ubi \n", "3412 Sin Ming Lane Sin Ming Lane Sin Ming \n", "3413 Compassvale Lane Compassvale Lane Compassvale \n", "3414 Lorong 5 Realty Park Lorong 5 Realty Park Lorong Realty \n", "3415 Wee Nam Road Wee Nam Road Wee Nam \n", "3416 Tampines Street 72 Tampines Street 72 Tampines \n", "3417 Changi South Lane Changi South Lane Changi \n", "3418 Telegraph Street Telegraph Street Telegraph \n", "3419 Biopolis Street Biopolis Street Biopolis \n", "3420 Biopolis Link Biopolis Link Biopolis \n", "3421 Plymouth Avenue Plymouth Avenue Plymouth \n", "3422 Gentle Road Gentle Road Gentle \n", "3423 Leicester Road Leicester Road Leicester \n", "3424 Simon Walk Simon Walk Simon \n", "3425 Joo Hong Road Joo Hong Road Joo Hong \n", "3426 Florence Close Florence Close Florence \n", "3427 Hoot Kiam Road Hoot Kiam Road Hoot Kiam \n", "3428 Yishun Avenue 8 Yishun Avenue 8 Yishun \n", "3429 Choa Chu Kang Avenue 6 Choa Chu Kang Avenue 6 Choa Chu Kang \n", "3430 Clarke Quay Clarke Quay Clarke \n", "3431 Countryside Walk Countryside Walk Countryside \n", "3432 PIE Pan-Island Expressway Pan-Island \n", "3433 Nepal Park Nepal Park Nepal \n", "\n", " road_tag \n", "0 Road \n", "1 Avenue \n", "2 Road \n", "3 Road \n", "4 Road \n", "5 Road \n", "6 Road \n", "7 Boulevard \n", "8 Road \n", "9 Hill \n", "10 Valley Road \n", "11 Street \n", "12 Road \n", "13 Road \n", "14 Street \n", "15 Loop \n", "16 Avenue \n", "17 Road \n", "18 Crescent \n", "19 Expressway \n", "20 Expressway \n", "21 Expressway \n", "22 Road \n", "23 Expressway \n", "24 Avenue \n", "25 Expressway \n", "26 Street \n", "27 Road \n", "28 Road \n", "29 Highway \n", "... ... \n", "3404 Link \n", "3405 Link \n", "3406 Street \n", "3407 Street \n", "3408 Lane \n", "3409 Walk \n", "3410 Crescent \n", "3411 Close \n", "3412 Lane \n", "3413 Lane \n", "3414 Park \n", "3415 Road \n", "3416 Street \n", "3417 Lane \n", "3418 Street \n", "3419 Street \n", "3420 Link \n", "3421 Avenue \n", "3422 Road \n", "3423 Road \n", "3424 Walk \n", "3425 Road \n", "3426 Close \n", "3427 Road \n", "3428 Avenue \n", "3429 Avenue \n", "3430 Quay \n", "3431 Walk \n", "3432 Expressway \n", "3433 Park \n", "\n", "[3434 rows x 4 columns]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# File 2: The list of corrected road names. This is a \"bridge\" between the name given\n", "# in the GeoJSON file and the actual name used in the classification step.\n", "\n", "bridge_df = gpd.pd.read_csv(\"singapore-roadnames-final-split.csv\")\n", "bridge_df.drop([\"Unnamed: 0\", \"has_malay_road_tag\"], inplace=True, axis=1)\n", "bridge_df" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
road_nameclassification
0 Abingdon British
1 Abu Talib Malay
2 Adam British
3 Adat Malay
4 Adis Other
5 Admiralty British
6 Ah Hood Chinese
7 Ah Soo Chinese
8 Ahmad Ibrahim Malay
9 Aida Other
10 Airport Generic
11 Alexandra British
12 Aliwal Indian
13 Aljunied Other
14 Allanbrooke British
15 Allenby British
16 Almond Generic
17 Alnwick British
18 Alps Other
19 Ama Keng Chinese
20 Amber Other
21 Amoy Chinese
22 Ampang Malay
23 Ampas Malay
24 Ampat Malay
25 Anak Bukit Malay
26 Anak Patong Malay
27 Anamalai Indian
28 Anchorvale Generic
29 Anderson British
.........
1721 Woodgrove Generic
1722 Woodland Generic
1723 Woodlands Generic
1724 Woodleigh British
1725 Woodsville Generic
1726 Woollerton British
1727 Worthing British
1728 Xilin Chinese
1729 Yan Kit Chinese
1730 Yarrow British
1731 Yarwood British
1732 Yasin Malay
1733 Yio Chu Kang Chinese
1734 Yishun Chinese
1735 Yong Siak Chinese
1736 York British
1737 Youngberg British
1738 Yuan Ching Chinese
1739 Yuk Tong Chinese
1740 Yung An Chinese
1741 Yung Ho Chinese
1742 Yung Kuang Chinese
1743 Yung Sheng Chinese
1744 Yunnan Chinese
1745 Zamrud Malay
1746 Zehnder Other
1747 Zion Other
1748 Zubir Said Malay
1749 kukoh Malay
1750 one-north Gateway Generic
\n", "

1751 rows × 2 columns

\n", "
" ], "text/plain": [ " road_name classification\n", "0 Abingdon British\n", "1 Abu Talib Malay\n", "2 Adam British\n", "3 Adat Malay\n", "4 Adis Other\n", "5 Admiralty British\n", "6 Ah Hood Chinese\n", "7 Ah Soo Chinese\n", "8 Ahmad Ibrahim Malay\n", "9 Aida Other\n", "10 Airport Generic\n", "11 Alexandra British\n", "12 Aliwal Indian\n", "13 Aljunied Other\n", "14 Allanbrooke British\n", "15 Allenby British\n", "16 Almond Generic\n", "17 Alnwick British\n", "18 Alps Other\n", "19 Ama Keng Chinese\n", "20 Amber Other\n", "21 Amoy Chinese\n", "22 Ampang Malay\n", "23 Ampas Malay\n", "24 Ampat Malay\n", "25 Anak Bukit Malay\n", "26 Anak Patong Malay\n", "27 Anamalai Indian\n", "28 Anchorvale Generic\n", "29 Anderson British\n", "... ... ...\n", "1721 Woodgrove Generic\n", "1722 Woodland Generic\n", "1723 Woodlands Generic\n", "1724 Woodleigh British\n", "1725 Woodsville Generic\n", "1726 Woollerton British\n", "1727 Worthing British\n", "1728 Xilin Chinese\n", "1729 Yan Kit Chinese\n", "1730 Yarrow British\n", "1731 Yarwood British\n", "1732 Yasin Malay\n", "1733 Yio Chu Kang Chinese\n", "1734 Yishun Chinese\n", "1735 Yong Siak Chinese\n", "1736 York British\n", "1737 Youngberg British\n", "1738 Yuan Ching Chinese\n", "1739 Yuk Tong Chinese\n", "1740 Yung An Chinese\n", "1741 Yung Ho Chinese\n", "1742 Yung Kuang Chinese\n", "1743 Yung Sheng Chinese\n", "1744 Yunnan Chinese\n", "1745 Zamrud Malay\n", "1746 Zehnder Other\n", "1747 Zion Other\n", "1748 Zubir Said Malay\n", "1749 kukoh Malay\n", "1750 one-north Gateway Generic\n", "\n", "[1751 rows x 2 columns]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# And lastly, this file gives us the classification info\n", "\n", "classification_df = gpd.pd.read_csv('singapore-roadnames-final-classified.csv')\n", "classification_df.drop([\"has_malay_road_tag\", \"Unnamed: 0\", \"comment\"], inplace=True, axis=1)\n", "classification_df" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namefinal_nameroad_nameroad_tagclassification
0 Orchard Road Orchard Road Orchard Road Generic
1 Hougang Avenue 1 Hougang Avenue 1 Hougang Avenue Chinese
2 Scotts Road Scotts Road Scotts Road British
3 Keng Lee Road Keng Lee Road Keng Lee Road Chinese
4 Newton Road Newton Road Newton Road British
5 Sarkies Road Sarkies Road Sarkies Road Other
6 Patterson Road Paterson Road Paterson Road British
7 Orchard Boulevard Orchard Boulevard Orchard Boulevard Generic
8 Grange Road Grange Road Grange Road British
9 Paterson Hill Paterson Hill Paterson Hill British
10 River Valley Road River Valley Road River Valley Road Generic
11 Unity Street Unity Street Unity Street Generic
12 Merbau Road Merbau Road Merbau Road Malay
13 Mohamed Sultan Road Mohamed Sultan Road Mohamed Sultan Road Malay
14 Saiboo Street Saiboo Street Saiboo Street Indian
15 Merchant Loop Merchant Loop Merchant Loop Generic
16 Clemenceau Avenue Clemenceau Avenue Clemenceau Avenue Other
17 Merchant Road Merchant Road Merchant Road Generic
18 Read Cresent Read Crescent Read Crescent British
19 Tampines Expressway Tampines Expressway Tampines Expressway Malay
20 Seletar Expressway Seletar Expressway Seletar Expressway Malay
21 Central Expressway Central Expressway Central Expressway Generic
22 Telok Blangah Road Telok Blangah Road Telok Blangah Road Malay
23 Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah Expressway Malay
24 Turf Club Avenue Turf Club Avenue Turf Club Avenue Generic
25 Kranji Expressway Kranji Expressway Kranji Expressway Malay
26 Prinsep Street Prinsep Street Prinsep Street British
27 Tanglin Road Tanglin Road Tanglin Road Chinese
28 Alexandra Road Alexandra Road Alexandra Road British
29 Nicoll Highway Nicoll Highway Nicoll Highway British
..................
3404 Seletar North Link Seletar North Link Seletar Link Malay
3405 Ghim Moh Link Ghim Moh Link Ghim Moh Link Chinese
3406 Hougang Street 31 Hougang Street 31 Hougang Street Chinese
3407 Hougang Street 32 Hougang Street 32 Hougang Street Chinese
3408 Serangoon Lane Serangoon Lane Serangoon Lane Malay
3409 Gambir Walk Gambir Walk Gambir Walk Malay
3410 Upper Serangoon Crescent Upper Serangoon Crescent Serangoon Crescent Malay
3411 Ubi Close Ubi Close Ubi Close Malay
3412 Sin Ming Lane Sin Ming Lane Sin Ming Lane Chinese
3413 Compassvale Lane Compassvale Lane Compassvale Lane Generic
3414 Lorong 5 Realty Park Lorong 5 Realty Park Lorong Realty Park Generic
3415 Wee Nam Road Wee Nam Road Wee Nam Road Chinese
3416 Tampines Street 72 Tampines Street 72 Tampines Street Malay
3417 Changi South Lane Changi South Lane Changi Lane Malay
3418 Telegraph Street Telegraph Street Telegraph Street Generic
3419 Biopolis Street Biopolis Street Biopolis Street Generic
3420 Biopolis Link Biopolis Link Biopolis Link Generic
3421 Plymouth Avenue Plymouth Avenue Plymouth Avenue British
3422 Gentle Road Gentle Road Gentle Road British
3423 Leicester Road Leicester Road Leicester Road British
3424 Simon Walk Simon Walk Simon Walk British
3425 Joo Hong Road Joo Hong Road Joo Hong Road Chinese
3426 Florence Close Florence Close Florence Close Chinese
3427 Hoot Kiam Road Hoot Kiam Road Hoot Kiam Road Chinese
3428 Yishun Avenue 8 Yishun Avenue 8 Yishun Avenue Chinese
3429 Choa Chu Kang Avenue 6 Choa Chu Kang Avenue 6 Choa Chu Kang Avenue Chinese
3430 Clarke Quay Clarke Quay Clarke Quay British
3431 Countryside Walk Countryside Walk Countryside Walk Generic
3432 PIE Pan-Island Expressway Pan-Island Expressway Generic
3433 Nepal Park Nepal Park Nepal Park Other
\n", "

3434 rows × 5 columns

\n", "
" ], "text/plain": [ " name final_name road_name \\\n", "0 Orchard Road Orchard Road Orchard \n", "1 Hougang Avenue 1 Hougang Avenue 1 Hougang \n", "2 Scotts Road Scotts Road Scotts \n", "3 Keng Lee Road Keng Lee Road Keng Lee \n", "4 Newton Road Newton Road Newton \n", "5 Sarkies Road Sarkies Road Sarkies \n", "6 Patterson Road Paterson Road Paterson \n", "7 Orchard Boulevard Orchard Boulevard Orchard \n", "8 Grange Road Grange Road Grange \n", "9 Paterson Hill Paterson Hill Paterson \n", "10 River Valley Road River Valley Road River \n", "11 Unity Street Unity Street Unity \n", "12 Merbau Road Merbau Road Merbau \n", "13 Mohamed Sultan Road Mohamed Sultan Road Mohamed Sultan \n", "14 Saiboo Street Saiboo Street Saiboo \n", "15 Merchant Loop Merchant Loop Merchant \n", "16 Clemenceau Avenue Clemenceau Avenue Clemenceau \n", "17 Merchant Road Merchant Road Merchant \n", "18 Read Cresent Read Crescent Read \n", "19 Tampines Expressway Tampines Expressway Tampines \n", "20 Seletar Expressway Seletar Expressway Seletar \n", "21 Central Expressway Central Expressway Central \n", "22 Telok Blangah Road Telok Blangah Road Telok Blangah \n", "23 Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah \n", "24 Turf Club Avenue Turf Club Avenue Turf Club \n", "25 Kranji Expressway Kranji Expressway Kranji \n", "26 Prinsep Street Prinsep Street Prinsep \n", "27 Tanglin Road Tanglin Road Tanglin \n", "28 Alexandra Road Alexandra Road Alexandra \n", "29 Nicoll Highway Nicoll Highway Nicoll \n", "... ... ... ... \n", "3404 Seletar North Link Seletar North Link Seletar \n", "3405 Ghim Moh Link Ghim Moh Link Ghim Moh \n", "3406 Hougang Street 31 Hougang Street 31 Hougang \n", "3407 Hougang Street 32 Hougang Street 32 Hougang \n", "3408 Serangoon Lane Serangoon Lane Serangoon \n", "3409 Gambir Walk Gambir Walk Gambir \n", "3410 Upper Serangoon Crescent Upper Serangoon Crescent Serangoon \n", "3411 Ubi Close Ubi Close Ubi \n", "3412 Sin Ming Lane Sin Ming Lane Sin Ming \n", "3413 Compassvale Lane Compassvale Lane Compassvale \n", "3414 Lorong 5 Realty Park Lorong 5 Realty Park Lorong Realty \n", "3415 Wee Nam Road Wee Nam Road Wee Nam \n", "3416 Tampines Street 72 Tampines Street 72 Tampines \n", "3417 Changi South Lane Changi South Lane Changi \n", "3418 Telegraph Street Telegraph Street Telegraph \n", "3419 Biopolis Street Biopolis Street Biopolis \n", "3420 Biopolis Link Biopolis Link Biopolis \n", "3421 Plymouth Avenue Plymouth Avenue Plymouth \n", "3422 Gentle Road Gentle Road Gentle \n", "3423 Leicester Road Leicester Road Leicester \n", "3424 Simon Walk Simon Walk Simon \n", "3425 Joo Hong Road Joo Hong Road Joo Hong \n", "3426 Florence Close Florence Close Florence \n", "3427 Hoot Kiam Road Hoot Kiam Road Hoot Kiam \n", "3428 Yishun Avenue 8 Yishun Avenue 8 Yishun \n", "3429 Choa Chu Kang Avenue 6 Choa Chu Kang Avenue 6 Choa Chu Kang \n", "3430 Clarke Quay Clarke Quay Clarke \n", "3431 Countryside Walk Countryside Walk Countryside \n", "3432 PIE Pan-Island Expressway Pan-Island \n", "3433 Nepal Park Nepal Park Nepal \n", "\n", " road_tag classification \n", "0 Road Generic \n", "1 Avenue Chinese \n", "2 Road British \n", "3 Road Chinese \n", "4 Road British \n", "5 Road Other \n", "6 Road British \n", "7 Boulevard Generic \n", "8 Road British \n", "9 Hill British \n", "10 Valley Road Generic \n", "11 Street Generic \n", "12 Road Malay \n", "13 Road Malay \n", "14 Street Indian \n", "15 Loop Generic \n", "16 Avenue Other \n", "17 Road Generic \n", "18 Crescent British \n", "19 Expressway Malay \n", "20 Expressway Malay \n", "21 Expressway Generic \n", "22 Road Malay \n", "23 Expressway Malay \n", "24 Avenue Generic \n", "25 Expressway Malay \n", "26 Street British \n", "27 Road Chinese \n", "28 Road British \n", "29 Highway British \n", "... ... ... \n", "3404 Link Malay \n", "3405 Link Chinese \n", "3406 Street Chinese \n", "3407 Street Chinese \n", "3408 Lane Malay \n", "3409 Walk Malay \n", "3410 Crescent Malay \n", "3411 Close Malay \n", "3412 Lane Chinese \n", "3413 Lane Generic \n", "3414 Park Generic \n", "3415 Road Chinese \n", "3416 Street Malay \n", "3417 Lane Malay \n", "3418 Street Generic \n", "3419 Street Generic \n", "3420 Link Generic \n", "3421 Avenue British \n", "3422 Road British \n", "3423 Road British \n", "3424 Walk British \n", "3425 Road Chinese \n", "3426 Close Chinese \n", "3427 Road Chinese \n", "3428 Avenue Chinese \n", "3429 Avenue Chinese \n", "3430 Quay British \n", "3431 Walk Generic \n", "3432 Expressway Generic \n", "3433 Park Other \n", "\n", "[3434 rows x 5 columns]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# First we merge the last two files.\n", "\n", "merged_df = bridge_df.merge(classification_df, how=\"left\", on=\"road_name\")\n", "merged_df" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
geometryhighwaynamefinal_nameroad_nameroad_tagclassification
0 LINESTRING (103.8284048 1.3068666, 103.8287382... primary Orchard Road Orchard Road Orchard Road Generic
1 LINESTRING (103.8858462 1.3517778, 103.8859356... residential Hougang Avenue 1 Hougang Avenue 1 Hougang Avenue Chinese
2 LINESTRING (103.8387571 1.3126764, 103.83872 1... primary Scotts Road Scotts Road Scotts Road British
3 LINESTRING (103.8395387 1.3132203, 103.8396493... tertiary Keng Lee Road Keng Lee Road Keng Lee Road Chinese
4 LINESTRING (103.8392505 1.3134495, 103.8394598... primary Newton Road Newton Road Newton Road British
5 LINESTRING (103.8373031 1.3147037, 103.8359738... residential Sarkies Road Sarkies Road Sarkies Road Other
6 LINESTRING (103.8318305 1.3050277, 103.8315539... primary Patterson Road Paterson Road Paterson Road British
7 LINESTRING (103.8348293 1.3004045, 103.8342528... secondary Orchard Boulevard Orchard Boulevard Orchard Boulevard Generic
8 LINESTRING (103.8348293 1.3004045, 103.8346883... secondary Grange Road Grange Road Grange Road British
9 LINESTRING (103.830813 1.3039006, 103.8302888 ... primary Paterson Hill Paterson Hill Paterson Hill British
10 LINESTRING (103.8313547 1.2960058, 103.83227 1... primary River Valley Road River Valley Road River Valley Road Generic
11 LINESTRING (103.842836 1.291596, 103.8422129 1... residential Unity Street Unity Street Unity Street Generic
12 LINESTRING (103.8430392 1.2934171, 103.842244 ... residential Merbau Road Merbau Road Merbau Road Malay
13 LINESTRING (103.8387207 1.2909753, 103.8388778... residential Mohamed Sultan Road Mohamed Sultan Road Mohamed Sultan Road Malay
14 LINESTRING (103.8387207 1.2909753, 103.8386978... residential Saiboo Street Saiboo Street Saiboo Street Indian
15 LINESTRING (103.843357 1.2895812, 103.8436285 ... residential Merchant Loop Merchant Loop Merchant Loop Generic
16 LINESTRING (103.8412716 1.2886074, 103.8414779... primary Clemenceau Avenue Clemenceau Avenue Clemenceau Avenue Other
17 LINESTRING (103.8420526 1.2900233, 103.8421061... secondary Merchant Road Merchant Road Merchant Road Generic
18 LINESTRING (103.8447163 1.2885069, 103.8448984... residential Read Cresent Read Crescent Read Crescent British
19 LINESTRING (103.8513753 1.3967862, 103.8518491... motorway Tampines Expressway Tampines Expressway Tampines Expressway Malay
20 LINESTRING (103.8579655 1.3941346, 103.8580422... motorway Seletar Expressway Seletar Expressway Seletar Expressway Malay
21 LINESTRING (103.8443907 1.3109684, 103.8445533... motorway Central Expressway Central Expressway Central Expressway Generic
22 LINESTRING (103.8021677 1.2727921, 103.8022844... primary Telok Blangah Road Telok Blangah Road Telok Blangah Road Malay
23 LINESTRING (103.6372541 1.3480363, 103.6373882... motorway Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah Expressway Malay
24 LINESTRING (103.8341079 1.2723657, 103.8361228... motorway Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah Expressway Malay
25 LINESTRING (103.8541001 1.3977878, 103.8545108... motorway Seletar Expressway Seletar Expressway Seletar Expressway Malay
26 LINESTRING (103.8541409 1.3976207, 103.8537589... motorway Seletar Expressway Seletar Expressway Seletar Expressway Malay
27 LINESTRING (103.7572461 1.4233889, 103.757277 ... primary Turf Club Avenue Turf Club Avenue Turf Club Avenue Generic
28 LINESTRING (103.7740277 1.3968194, 103.7740856... motorway Kranji Expressway Kranji Expressway Kranji Expressway Malay
29 LINESTRING (103.7024781 1.3606672, 103.7029984... motorway Kranji Expressway Kranji Expressway Kranji Expressway Malay
........................
10606 LINESTRING (103.7456548 1.3238507, 103.7456587... primary Jurong Town Hall Road Jurong Town Hall Road Jurong Town Hall Road Malay
10607 LINESTRING (103.9278275 1.3236756, 103.9294382... primary New Upper Changi Road New Upper Changi Road Changi Road Malay
10608 LINESTRING (103.9090633 1.4008567, 103.9089959... tertiary Punggol Central Punggol Central Punggol NaN Malay
10609 LINESTRING (103.9085407 1.4013837, 103.9090685... tertiary Punggol Central Punggol Central Punggol NaN Malay
10610 LINESTRING (103.8635402 1.3219606, 103.8636524... primary Serangoon Road Serangoon Road Serangoon Road Malay
10611 LINESTRING (103.9878283 1.3174213, 103.9873099... secondary Tanah Merah Coast Road Tanah Merah Coast Road Tanah Merah Coast Road Malay
10612 LINESTRING (103.9819889 1.32008, 103.9822557 1... secondary Tanah Merah Coast Road Tanah Merah Coast Road Tanah Merah Coast Road Malay
10613 LINESTRING (103.9880358 1.3171467, 103.9882954... unclassified Tanah Merah Ferry Road Tanah Merah Ferry Road Tanah Merah Ferry Road Malay
10614 LINESTRING (103.7480459 1.3364131, 103.7477151... unclassified Toh Guan Road East Toh Guan Road East Toh Guan Road Chinese
10615 LINESTRING (103.7471773 1.3321312, 103.7473666... secondary Toh Guan Road Toh Guan Road Toh Guan Road Chinese
10616 LINESTRING (103.7476578 1.3368285, 103.7476645... secondary Toh Guan Road Toh Guan Road Toh Guan Road Chinese
10617 LINESTRING (103.7587476 1.3306791, 103.7580119... unclassified Toh Tuck Link Toh Tuck Link Toh Tuck Link Chinese
10618 LINESTRING (103.7605157 1.3375774, 103.760884 ... residential Toh Tuck Road Toh Tuck Road Toh Tuck Road Chinese
10619 LINESTRING (103.7717609 1.3410362, 103.7718022... residential Toh Tuck Road Toh Tuck Road Toh Tuck Road Chinese
10620 LINESTRING (103.8737945 1.3560351, 103.8735798... secondary Yio Chu Kang Link Yio Chu Kang Link Yio Chu Kang Link Chinese
10621 LINESTRING (103.7667516 1.2907781, 103.7671805... secondary Harbour Drive Harbour Drive Harbour Drive Generic
10622 LINESTRING (103.7666223 1.2908582, 103.7667516... secondary West Coast Ferry Road West Coast Ferry Road Coast Ferry Road Generic
10623 LINESTRING (103.8479024 1.2838138, 103.8482049... residential China Street China Street China Street Chinese
10624 LINESTRING (103.8448404 1.2907019, 103.8447671... residential Clarke Quay Clarke Quay Clarke Quay British
10625 LINESTRING (103.7465423 1.4078451, 103.7462293... secondary Sungei Kadut Drive Sungei Kadut Drive Sungei Kadut Drive Malay
10626 LINESTRING (103.7469404 1.4300587, 103.7469354... secondary Sungei Kadut Drive Sungei Kadut Drive Sungei Kadut Drive Malay
10627 LINESTRING (103.8301091 1.2795678, 103.8297781... unclassified Macalister Road MacAlister Road MacAlister Road British
10628 LINESTRING (103.8377302 1.3901191, 103.8380534... residential Countryside Walk Countryside Walk Countryside Walk Generic
10629 LINESTRING (103.850795 1.339425, 103.8508394 1... residential Lorong 4 Toa Payoh Lorong 4 Toa Payoh Toa Payoh Lorong Chinese
10630 LINESTRING (103.8515894 1.3395955, 103.8513506... residential Lorong 4 Toa Payoh Lorong 4 Toa Payoh Toa Payoh Lorong Chinese
10631 LINESTRING (103.8517761 1.3396263, 103.8520148... secondary_link Lorong 6 Toa Payoh Lorong 6 Toa Payoh Toa Payoh Lorong Chinese
10632 LINESTRING (103.67452 1.3306795, 103.6770103 1... residential PIE Pan-Island Expressway Pan-Island Expressway Generic
10633 LINESTRING (103.7878953 1.3008067, 103.7879641... residential Nepal Park Nepal Park Nepal Park Other
10634 LINESTRING (103.7878222 1.3015588, 103.7881668... residential Nepal Park Nepal Park Nepal Park Other
10635 LINESTRING (103.9098645 1.3024331, 103.909354 ... residential Marine Drive Marine Drive Marine Drive Generic
\n", "

10636 rows × 7 columns

\n", "
" ], "text/plain": [ " geometry highway \\\n", "0 LINESTRING (103.8284048 1.3068666, 103.8287382... primary \n", "1 LINESTRING (103.8858462 1.3517778, 103.8859356... residential \n", "2 LINESTRING (103.8387571 1.3126764, 103.83872 1... primary \n", "3 LINESTRING (103.8395387 1.3132203, 103.8396493... tertiary \n", "4 LINESTRING (103.8392505 1.3134495, 103.8394598... primary \n", "5 LINESTRING (103.8373031 1.3147037, 103.8359738... residential \n", "6 LINESTRING (103.8318305 1.3050277, 103.8315539... primary \n", "7 LINESTRING (103.8348293 1.3004045, 103.8342528... secondary \n", "8 LINESTRING (103.8348293 1.3004045, 103.8346883... secondary \n", "9 LINESTRING (103.830813 1.3039006, 103.8302888 ... primary \n", "10 LINESTRING (103.8313547 1.2960058, 103.83227 1... primary \n", "11 LINESTRING (103.842836 1.291596, 103.8422129 1... residential \n", "12 LINESTRING (103.8430392 1.2934171, 103.842244 ... residential \n", "13 LINESTRING (103.8387207 1.2909753, 103.8388778... residential \n", "14 LINESTRING (103.8387207 1.2909753, 103.8386978... residential \n", "15 LINESTRING (103.843357 1.2895812, 103.8436285 ... residential \n", "16 LINESTRING (103.8412716 1.2886074, 103.8414779... primary \n", "17 LINESTRING (103.8420526 1.2900233, 103.8421061... secondary \n", "18 LINESTRING (103.8447163 1.2885069, 103.8448984... residential \n", "19 LINESTRING (103.8513753 1.3967862, 103.8518491... motorway \n", "20 LINESTRING (103.8579655 1.3941346, 103.8580422... motorway \n", "21 LINESTRING (103.8443907 1.3109684, 103.8445533... motorway \n", "22 LINESTRING (103.8021677 1.2727921, 103.8022844... primary \n", "23 LINESTRING (103.6372541 1.3480363, 103.6373882... motorway \n", "24 LINESTRING (103.8341079 1.2723657, 103.8361228... motorway \n", "25 LINESTRING (103.8541001 1.3977878, 103.8545108... motorway \n", "26 LINESTRING (103.8541409 1.3976207, 103.8537589... motorway \n", "27 LINESTRING (103.7572461 1.4233889, 103.757277 ... primary \n", "28 LINESTRING (103.7740277 1.3968194, 103.7740856... motorway \n", "29 LINESTRING (103.7024781 1.3606672, 103.7029984... motorway \n", "... ... ... \n", "10606 LINESTRING (103.7456548 1.3238507, 103.7456587... primary \n", "10607 LINESTRING (103.9278275 1.3236756, 103.9294382... primary \n", "10608 LINESTRING (103.9090633 1.4008567, 103.9089959... tertiary \n", "10609 LINESTRING (103.9085407 1.4013837, 103.9090685... tertiary \n", "10610 LINESTRING (103.8635402 1.3219606, 103.8636524... primary \n", "10611 LINESTRING (103.9878283 1.3174213, 103.9873099... secondary \n", "10612 LINESTRING (103.9819889 1.32008, 103.9822557 1... secondary \n", "10613 LINESTRING (103.9880358 1.3171467, 103.9882954... unclassified \n", "10614 LINESTRING (103.7480459 1.3364131, 103.7477151... unclassified \n", "10615 LINESTRING (103.7471773 1.3321312, 103.7473666... secondary \n", "10616 LINESTRING (103.7476578 1.3368285, 103.7476645... secondary \n", "10617 LINESTRING (103.7587476 1.3306791, 103.7580119... unclassified \n", "10618 LINESTRING (103.7605157 1.3375774, 103.760884 ... residential \n", "10619 LINESTRING (103.7717609 1.3410362, 103.7718022... residential \n", "10620 LINESTRING (103.8737945 1.3560351, 103.8735798... secondary \n", "10621 LINESTRING (103.7667516 1.2907781, 103.7671805... secondary \n", "10622 LINESTRING (103.7666223 1.2908582, 103.7667516... secondary \n", "10623 LINESTRING (103.8479024 1.2838138, 103.8482049... residential \n", "10624 LINESTRING (103.8448404 1.2907019, 103.8447671... residential \n", "10625 LINESTRING (103.7465423 1.4078451, 103.7462293... secondary \n", "10626 LINESTRING (103.7469404 1.4300587, 103.7469354... secondary \n", "10627 LINESTRING (103.8301091 1.2795678, 103.8297781... unclassified \n", "10628 LINESTRING (103.8377302 1.3901191, 103.8380534... residential \n", "10629 LINESTRING (103.850795 1.339425, 103.8508394 1... residential \n", "10630 LINESTRING (103.8515894 1.3395955, 103.8513506... residential \n", "10631 LINESTRING (103.8517761 1.3396263, 103.8520148... secondary_link \n", "10632 LINESTRING (103.67452 1.3306795, 103.6770103 1... residential \n", "10633 LINESTRING (103.7878953 1.3008067, 103.7879641... residential \n", "10634 LINESTRING (103.7878222 1.3015588, 103.7881668... residential \n", "10635 LINESTRING (103.9098645 1.3024331, 103.909354 ... residential \n", "\n", " name final_name road_name \\\n", "0 Orchard Road Orchard Road Orchard \n", "1 Hougang Avenue 1 Hougang Avenue 1 Hougang \n", "2 Scotts Road Scotts Road Scotts \n", "3 Keng Lee Road Keng Lee Road Keng Lee \n", "4 Newton Road Newton Road Newton \n", "5 Sarkies Road Sarkies Road Sarkies \n", "6 Patterson Road Paterson Road Paterson \n", "7 Orchard Boulevard Orchard Boulevard Orchard \n", "8 Grange Road Grange Road Grange \n", "9 Paterson Hill Paterson Hill Paterson \n", "10 River Valley Road River Valley Road River \n", "11 Unity Street Unity Street Unity \n", "12 Merbau Road Merbau Road Merbau \n", "13 Mohamed Sultan Road Mohamed Sultan Road Mohamed Sultan \n", "14 Saiboo Street Saiboo Street Saiboo \n", "15 Merchant Loop Merchant Loop Merchant \n", "16 Clemenceau Avenue Clemenceau Avenue Clemenceau \n", "17 Merchant Road Merchant Road Merchant \n", "18 Read Cresent Read Crescent Read \n", "19 Tampines Expressway Tampines Expressway Tampines \n", "20 Seletar Expressway Seletar Expressway Seletar \n", "21 Central Expressway Central Expressway Central \n", "22 Telok Blangah Road Telok Blangah Road Telok Blangah \n", "23 Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah \n", "24 Ayer Rajah Expressway Ayer Rajah Expressway Ayer Rajah \n", "25 Seletar Expressway Seletar Expressway Seletar \n", "26 Seletar Expressway Seletar Expressway Seletar \n", "27 Turf Club Avenue Turf Club Avenue Turf Club \n", "28 Kranji Expressway Kranji Expressway Kranji \n", "29 Kranji Expressway Kranji Expressway Kranji \n", "... ... ... ... \n", "10606 Jurong Town Hall Road Jurong Town Hall Road Jurong Town Hall \n", "10607 New Upper Changi Road New Upper Changi Road Changi \n", "10608 Punggol Central Punggol Central Punggol \n", "10609 Punggol Central Punggol Central Punggol \n", "10610 Serangoon Road Serangoon Road Serangoon \n", "10611 Tanah Merah Coast Road Tanah Merah Coast Road Tanah Merah \n", "10612 Tanah Merah Coast Road Tanah Merah Coast Road Tanah Merah \n", "10613 Tanah Merah Ferry Road Tanah Merah Ferry Road Tanah Merah Ferry \n", "10614 Toh Guan Road East Toh Guan Road East Toh Guan \n", "10615 Toh Guan Road Toh Guan Road Toh Guan \n", "10616 Toh Guan Road Toh Guan Road Toh Guan \n", "10617 Toh Tuck Link Toh Tuck Link Toh Tuck \n", "10618 Toh Tuck Road Toh Tuck Road Toh Tuck \n", "10619 Toh Tuck Road Toh Tuck Road Toh Tuck \n", "10620 Yio Chu Kang Link Yio Chu Kang Link Yio Chu Kang \n", "10621 Harbour Drive Harbour Drive Harbour \n", "10622 West Coast Ferry Road West Coast Ferry Road Coast Ferry \n", "10623 China Street China Street China \n", "10624 Clarke Quay Clarke Quay Clarke \n", "10625 Sungei Kadut Drive Sungei Kadut Drive Sungei Kadut \n", "10626 Sungei Kadut Drive Sungei Kadut Drive Sungei Kadut \n", "10627 Macalister Road MacAlister Road MacAlister \n", "10628 Countryside Walk Countryside Walk Countryside \n", "10629 Lorong 4 Toa Payoh Lorong 4 Toa Payoh Toa Payoh \n", "10630 Lorong 4 Toa Payoh Lorong 4 Toa Payoh Toa Payoh \n", "10631 Lorong 6 Toa Payoh Lorong 6 Toa Payoh Toa Payoh \n", "10632 PIE Pan-Island Expressway Pan-Island \n", "10633 Nepal Park Nepal Park Nepal \n", "10634 Nepal Park Nepal Park Nepal \n", "10635 Marine Drive Marine Drive Marine \n", "\n", " road_tag classification \n", "0 Road Generic \n", "1 Avenue Chinese \n", "2 Road British \n", "3 Road Chinese \n", "4 Road British \n", "5 Road Other \n", "6 Road British \n", "7 Boulevard Generic \n", "8 Road British \n", "9 Hill British \n", "10 Valley Road Generic \n", "11 Street Generic \n", "12 Road Malay \n", "13 Road Malay \n", "14 Street Indian \n", "15 Loop Generic \n", "16 Avenue Other \n", "17 Road Generic \n", "18 Crescent British \n", "19 Expressway Malay \n", "20 Expressway Malay \n", "21 Expressway Generic \n", "22 Road Malay \n", "23 Expressway Malay \n", "24 Expressway Malay \n", "25 Expressway Malay \n", "26 Expressway Malay \n", "27 Avenue Generic \n", "28 Expressway Malay \n", "29 Expressway Malay \n", "... ... ... \n", "10606 Road Malay \n", "10607 Road Malay \n", "10608 NaN Malay \n", "10609 NaN Malay \n", "10610 Road Malay \n", "10611 Coast Road Malay \n", "10612 Coast Road Malay \n", "10613 Road Malay \n", "10614 Road Chinese \n", "10615 Road Chinese \n", "10616 Road Chinese \n", "10617 Link Chinese \n", "10618 Road Chinese \n", "10619 Road Chinese \n", "10620 Link Chinese \n", "10621 Drive Generic \n", "10622 Road Generic \n", "10623 Street Chinese \n", "10624 Quay British \n", "10625 Drive Malay \n", "10626 Drive Malay \n", "10627 Road British \n", "10628 Walk Generic \n", "10629 Lorong Chinese \n", "10630 Lorong Chinese \n", "10631 Lorong Chinese \n", "10632 Expressway Generic \n", "10633 Park Other \n", "10634 Park Other \n", "10635 Drive Generic \n", "\n", "[10636 rows x 7 columns]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Now we do the second road of merging:\n", "\n", "final_df = roads_df.merge(merged_df, how=\"left\", on=\"name\")\n", "final_df" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "pandas.core.frame.DataFrame" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# There are a few NaNs in here as a result of the order in which I did filtering in\n", "# the first notebook, so let's just drop them again\n", "\n", "final_df2 = final_df[final_df['classification'].notnull()]\n", "type(final_df2)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# we lost the Geo-ness, convert back to GeoDataFrame\n", "final_df2 = gpd.GeoDataFrame(final_df2)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Let's save it\n", "\n", "final_df2.to_file(\"singapore-roads-classified.geojson\", driver=\"GeoJSON\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting the map\n", "\n", "In this notebook, I'm going to show you the easiest way I know of to plot a map like this, using GeoPandas' plotting functions and another library called [`mplleaflet`](https://github.com/jwass/mplleaflet) by Jake Wasserman. It's not on `pip` yet so you'll have to install it from git:\n", "\n", "`pip install git+git://github.com/jwass/mplleaflet.git`\n", "\n", "It also requires the library `mplexporter`:\n", "\n", "`pip install git+git://github.com/mpld3/mplexporter.git`\n", "\n", "Because there is limited control of styling with GeoPandas/mplleaflet, afterwards I'll list a few ways I know about of making prettier maps." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import mplleaflet" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "final_df2 = gpd.read_file(\"singapore-roads-classified.geojson\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# GeoPandas' plot function can take a column and colour-code by this column\n", "ax = final_df2.plot(column='classification', colormap='Accent')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "At this point, we have a matplotlib map. We could export it to PDF, but it's not a terribly good way to present our data. Let me show you a nifty way to open this very map in an interactive interface - moreover, on top of a basemap that shows extra information like roadnames." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", "\n", "\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mplleaflet.display(fig=ax.figure, crs=final_df2.crs, tiles='cartodb_positron')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can pan, zoom in, etc - right within this notebook, which is super cool. And it took only a couple of commands. If you want to use this map elsewhere, you can export it with the following command: just replace `display` with `show`, and supply a filepath." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mplleaflet.show(fig=ax.figure, crs=final_df2.crs, tiles='cartodb_positron', path='sgmap.html')" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Now, there's some problems with this map. We weren't controlling what colours were assigned to each road, for example. We can't control the thickness of the linestrings at various zoom levels (a Leaflet issue). Also, there's no legend. While I don't know how to solve the second two problems, there is a way to solve the first, which is to define a custom colormap in the order in which GeoPandas draws each batch of linestrings." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[u'British', u'Chinese', u'Generic', u'Indian', u'Malay', u'Other']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# the order is this: a sorted list of values\n", "categories = list(set(final_df2['classification'].values))\n", "categories.sort()\n", "\n", "categories" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# define the colormap with logical colours (for a Singaporean at least):\n", "# blue for British\n", "# red for Chinese\n", "# etc\n", "from matplotlib.colors import LinearSegmentedColormap\n", "cmap = LinearSegmentedColormap.from_list('my cmap', ['blue', \n", " 'red',\n", " 'gray',\n", " 'yellow',\n", " 'green',\n", " 'purple'])" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# pass the custom colormap\n", "ax2 = final_df2.plot(column='classification', colormap=cmap)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", "\n", "\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mplleaflet.display(fig=ax2.figure, crs=final_df2.crs, tiles='cartodb_positron')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mplleaflet.show(fig=ax2.figure, crs=final_df2.crs, tiles='cartodb_positron', path='sgmap2.html')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Alternatives to mplleaflet\n", "\n", "`mplleaflet` is awesome for exploratory data analysis, but you might want to have more control over how your map looks. For this, I recommend using one of the following:\n", "\n", "* QGIS (C++ but has Python bindings)\n", "* Mapnik (C++ but has Python bindings)\n", " * Tilemill (GUI built on top of Mapnik)\n", "* Folium (maybe, haven't investigated fully)\n", "\n", "A nice feature of Tilemill is that it allows you to define your map styling using CartoCSS. For example, here's how we would define the colours:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "raw", "metadata": {}, "source": [ " [classification='Malay']{\n", "\tline-color: green;\n", " }\n", " [classification='British']{\n", "\tline-color: blue;\n", " }\n", " [classification='Chinese']{\n", "\tline-color: red;\n", " }\n", " [classification='Indian']{\n", "\tline-color: yellow;\n", " }\n", " [classification='Other']{\n", "\tline-color: purple;\n", " }\n", " [classification='Generic']{\n", "\tline-color: gray;\n", " }\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also control the line width at various zoom levels:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "line-opacity: 0.7;\n", " \n", "[zoom>18] {line-width: 10;}\n", "[zoom=18] {line-width: 7;}\n", "[zoom=17] {line-width: 6;}\n", "[zoom=16] {line-width: 5;}\n", "[zoom=15] {line-width: 3.5;}\n", "[zoom=14] {line-width: 3;}\n", "[zoom=13] {line-width: 1.5;}\n", "[zoom<13] {line-width: 1;}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some web map sites like CartoDB also use CartoCSS. Here's a map I made in CartoDB, nicely styled with a legend." ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import HTML\n", "HTML(\"\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's all, folks!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }