import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
orderedStreetTrikkBussMetroTog = pd.read_csv('./orderedStreetTrikkBusMetroTog.csv')
orderedStreetTrikkBussMetroTog.head()
Street | Street Latitude | Street Longitude | Trikk | Trikk Distance | 0 | 1 | 2 | 3 | 4 | ... | 16 | 17 | T-bane_1 | T-bane_2 | T-bane_3 | T-bane_4 | Train Station | Total Transport | Total Bus | Binned Transport | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Lilletorget | 59.913500 | 10.755900 | Jernbanetorget (Trikk/B) | 356.0 | buss 500 | Buss 30 | Buss 252 | Buss 70 | Buss 34 | ... | 550 Oslo Bussterminal - Lillestrøm | Plattform 18 - Buss 411 Lillestrøm | ('Jernbanetorget (T)', 248) | ('Grønland (T)', 318) | NaN | NaN | ('Oslo Sentralstasjon', 332) | 22 | 18 | 19-22 |
1 | Europarådets plass | 59.912000 | 10.749300 | Jernbanetorget (Trikk/B) | 48.0 | Buss 31 E | Buss 34 | Buss 542 Seiersten Ekspress | Buss 54 | Buss 82E | ... | 81A-bussen | platform 29 oslo bussterminal | ('Jernbanetorget (T)', 164) | ('Stortinget (T)', 420) | NaN | NaN | ('Oslo Sentralstasjon', 300) | 22 | 18 | 19-22 |
2 | Brugata | 59.914005 | 10.755774 | Jernbanetorget (Trikk/B) | 375.0 | Buss 30 | buss 500 | Buss 252 | Buss 54 | Buss 70 | ... | Plattform 18 - Buss 411 Lillestrøm | NaN | ('Jernbanetorget (T)', 277) | ('Grønland (T)', 345) | NaN | NaN | ('Oslo Sentralstasjon', 384) | 21 | 17 | 19-22 |
3 | Pløens gate | 59.913900 | 10.749325 | Jernbanetorget (Trikk/B) | 187.0 | Buss 54 | Buss 31 | Buss 54 | Buss 30 | Buss 37 | ... | platform 29 oslo bussterminal | NaN | ('Jernbanetorget (T)', 241) | ('Stortinget (T)', 428) | NaN | NaN | ('Oslo Sentralstasjon', 443) | 21 | 17 | 19-22 |
4 | Sonja Henies plass | 59.912700 | 10.755500 | NaN | NaN | Buss 252 | platform 29 oslo bussterminal | buss 500 | Buss 70 | Buss 30 | ... | 550 Oslo Bussterminal - Lillestrøm | plattform 20-Buss 501 enebakk-Lillestrøm | ('Jernbanetorget (T)', 190) | ('Grønland (T)', 327) | NaN | NaN | ('Oslo Sentralstasjon', 240) | 21 | 18 | 19-22 |
5 rows × 31 columns
#K-means clustering on Total Transport
kclusters = 7
#Create object
kmClust = KMeans(init = 'k-means++', n_clusters = kclusters, n_init= 12, random_state= 1)
#Fit
kmLabels = kmClust.fit(orderedStreetTrikkBussMetroTog[['Total Transport']])
#Check labels
kmLabels.labels_[0:6]
array([3, 3, 3, 3, 3, 3], dtype=int32)
#Insert into dataframe of ordered bus trikk
#orderedStreetTrikkBussMetroTog.drop('Cluster', axis = 'columns', inplace = True)#In case Cluster exists already from previous rounds
orderedStreetTrikkBussMetroTog.insert(3, 'Cluster', kmLabels.labels_)
orderedStreetTrikkBussMetroTog.head(20)
Street | Street Latitude | Street Longitude | Cluster | Trikk | Trikk Distance | 0 | 1 | 2 | 3 | ... | 16 | 17 | T-bane_1 | T-bane_2 | T-bane_3 | T-bane_4 | Train Station | Total Transport | Total Bus | Binned Transport | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Lilletorget | 59.913500 | 10.755900 | 3 | Jernbanetorget (Trikk/B) | 356.0 | buss 500 | Buss 30 | Buss 252 | Buss 70 | ... | 550 Oslo Bussterminal - Lillestrøm | Plattform 18 - Buss 411 Lillestrøm | ('Jernbanetorget (T)', 248) | ('Grønland (T)', 318) | NaN | NaN | ('Oslo Sentralstasjon', 332) | 22 | 18 | 19-22 |
1 | Europarådets plass | 59.912000 | 10.749300 | 3 | Jernbanetorget (Trikk/B) | 48.0 | Buss 31 E | Buss 34 | Buss 542 Seiersten Ekspress | Buss 54 | ... | 81A-bussen | platform 29 oslo bussterminal | ('Jernbanetorget (T)', 164) | ('Stortinget (T)', 420) | NaN | NaN | ('Oslo Sentralstasjon', 300) | 22 | 18 | 19-22 |
2 | Brugata | 59.914005 | 10.755774 | 3 | Jernbanetorget (Trikk/B) | 375.0 | Buss 30 | buss 500 | Buss 252 | Buss 54 | ... | Plattform 18 - Buss 411 Lillestrøm | NaN | ('Jernbanetorget (T)', 277) | ('Grønland (T)', 345) | NaN | NaN | ('Oslo Sentralstasjon', 384) | 21 | 17 | 19-22 |
3 | Pløens gate | 59.913900 | 10.749325 | 3 | Jernbanetorget (Trikk/B) | 187.0 | Buss 54 | Buss 31 | Buss 54 | Buss 30 | ... | platform 29 oslo bussterminal | NaN | ('Jernbanetorget (T)', 241) | ('Stortinget (T)', 428) | NaN | NaN | ('Oslo Sentralstasjon', 443) | 21 | 17 | 19-22 |
4 | Sonja Henies plass | 59.912700 | 10.755500 | 3 | NaN | NaN | Buss 252 | platform 29 oslo bussterminal | buss 500 | Buss 70 | ... | 550 Oslo Bussterminal - Lillestrøm | plattform 20-Buss 501 enebakk-Lillestrøm | ('Jernbanetorget (T)', 190) | ('Grønland (T)', 327) | NaN | NaN | ('Oslo Sentralstasjon', 240) | 21 | 18 | 19-22 |
5 | Nygata | 59.913150 | 10.750750 | 3 | Jernbanetorget (Trikk/B) | 108.0 | Buss 54 | Buss 54 | Buss 34 | Buss 30 | ... | platform 29 oslo bussterminal | NaN | ('Jernbanetorget (T)', 126) | ('Stortinget (T)', 492) | NaN | NaN | ('Oslo Sentralstasjon', 329) | 21 | 17 | 19-22 |
6 | Kirkeristen | 59.913000 | 10.747450 | 3 | Jernbanetorget (Trikk/B) | 166.0 | Buss 37 | Buss 31 E | Buss 54 | Buss 54 | ... | 81A-bussen | NaN | ('Jernbanetorget (T)', 276) | ('Stortinget (T)', 307) | NaN | NaN | ('Oslo Sentralstasjon', 447) | 21 | 17 | 19-22 |
7 | Lybekkergata | 59.913567 | 10.752767 | 3 | Jernbanetorget (Trikk/B) | 212.0 | Buss 30 | Buss 54 | Buss 54 | Buss 34 | ... | 150 Oslo Bussterminal - Gullhaug - Oslo Busst... | 81A-bussen | ('Jernbanetorget (T)', 147) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 329) | 21 | 18 | 19-22 |
8 | Jernbanetorget | 59.911300 | 10.750425 | 3 | Jernbanetorget (Trikk/B) | 107.0 | Buss 31 E | Buss 542 Seiersten Ekspress | Buss 82E | Buss 143 | ... | platform 29 oslo bussterminal | NaN | ('Jernbanetorget (T)', 146) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 210) | 20 | 17 | 19-22 |
9 | Stenersgata | 59.913111 | 10.752633 | 3 | Jernbanetorget (Trikk/B) | 174.0 | Buss 30 | Buss 34 | Buss 70 | Buss 54 | ... | 150 Oslo Bussterminal - Gullhaug - Oslo Busst... | NaN | ('Jernbanetorget (T)', 96) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 281) | 20 | 17 | 19-22 |
10 | Biskop Gunnerus’ gate | 59.912050 | 10.752583 | 3 | Jernbanetorget (Trikk/B) | 144.0 | Buss 70 | Buss 34 | Buss 143 | Buss 252 | ... | NaN | NaN | ('Jernbanetorget (T)', 33) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 172) | 19 | 16 | 19-22 |
11 | Skippergata | 59.910339 | 10.747331 | 3 | Jernbanetorget (Trikk/B) | 260.0 | Buss 542 Til Drøbak | Buss 542 Seiersten Ekspress | Buss 82E | 81B-Bussen | ... | NaN | NaN | ('Jernbanetorget (T)', 346) | ('Stortinget (T)', 408) | NaN | NaN | ('Oslo Sentralstasjon', 373) | 18 | 14 | 16-18 |
12 | Stortorvet | 59.912733 | 10.745589 | 3 | Jernbanetorget (Trikk/B) | 253.0 | Buss 37 | Buss 83 | Buss 31 E | Buss 542 Til Drøbak | ... | NaN | NaN | ('Jernbanetorget (T)', 371) | ('Stortinget (T)', 203) | NaN | NaN | NaN | 18 | 15 | 16-18 |
13 | Strandgata | 59.909950 | 10.749200 | 3 | Jernbanetorget (Trikk/B) | 259.0 | 81B-Bussen | Buss 82E | Buss 542 Til Drøbak | Buss 542 Seiersten Ekspress | ... | NaN | NaN | ('Jernbanetorget (T)', 307) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 279) | 17 | 14 | 16-18 |
14 | Olafiagangen | 59.912900 | 10.759117 | 3 | Brugata (trikk) | 379.0 | Buss 490E | buss 500 | Plattform 18 - Buss 411 Lillestrøm | 550 Oslo Bussterminal - Lillestrøm | ... | NaN | NaN | ('Grønland (T)', 127) | ('Jernbanetorget (T)', 392) | NaN | NaN | ('Oslo Sentralstasjon', 378) | 17 | 13 | 16-18 |
15 | Anne-Cath. Vestlys plass | 59.908700 | 10.752100 | 3 | Jernbanetorget (Trikk/B) | 411.0 | Buss 82E | Buss 143 | Buss 542 Til Drøbak | Buss 542 Seiersten Ekspress | ... | NaN | NaN | ('Jernbanetorget (T)', 397) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 243) | 16 | 13 | 16-18 |
16 | Robert Levins gate | 59.908433 | 10.753400 | 3 | NaN | NaN | Konkurenten Bus 28 | Buss 82E | Buss 143 | Buss 542 Til Drøbak | ... | NaN | NaN | ('Jernbanetorget (T)', 432) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 251) | 15 | 13 | 13-15 |
17 | Fred. Olsens gate | 59.909600 | 10.747857 | 3 | Jernbanetorget (Trikk/B) | 318.0 | Buss 542 Til Drøbak | 81A-bussen | Buss 82E | 81B-Bussen | ... | NaN | NaN | ('Jernbanetorget (T)', 383) | NaN | NaN | NaN | ('Oslo Sentralstasjon', 362) | 15 | 12 | 13-15 |
18 | Henny Mürers gang | 59.908256 | 10.754389 | 0 | Jernbanetorget (trikk) | 434.0 | Buss 143 | Buss 82E | buss 500 | Buss 252 | ... | NaN | NaN | NaN | NaN | NaN | NaN | ('Oslo Sentralstasjon', 269) | 14 | 12 | 13-15 |
19 | Youngstorget | 59.914583 | 10.749083 | 0 | Jernbanetorget (Trikk/B) | 265.0 | Buss 31 | Buss 54 | Buss 54 | Buss 37 | ... | NaN | NaN | ('Jernbanetorget (T)', 310) | ('Stortinget (T)', 443) | NaN | NaN | NaN | 14 | 11 | 13-15 |
20 rows × 32 columns
# Matplotlib and associated plotting modules
import matplotlib.cm as cm
import matplotlib.colors as colors
import folium
#Make map object
latitude = 59.9133301
longitude = 10.7389701
map_cluster = folium.Map(location=[latitude, longitude], zoom_start=11)
# set color scheme for the clusters
x = np.arange(kclusters)#kclusters
ys = [i + x + (i*x)**2 for i in range(kclusters)]#kclusters
colors_array = cm.rainbow(np.linspace(0, 1, len(ys)))
rainbow = [colors.rgb2hex(i) for i in colors_array]
# add markers to map
markers_colors = []
for lat, lng, street, cluster, group in zip(orderedStreetTrikkBussMetroTog['Street Latitude'], orderedStreetTrikkBussMetroTog['Street Longitude'],
orderedStreetTrikkBussMetroTog['Street'], orderedStreetTrikkBussMetroTog['Cluster'].astype('int'), orderedStreetTrikkBussMetroTog['Binned Transport']):
#label = folium.Popup(str(street) + ' Cluster ' + str(cluster) + ' ' + str(group), parse_html=True)
label = folium.Popup(str(street) + ' Group:' + str(group) + '\nCluster:'+ str(cluster) , parse_html = True)
folium.CircleMarker(
[lat, lng],
radius=5,
popup=label,
color=rainbow[cluster-1],
fill=True,
fill_color=rainbow[cluster-1],
fill_opacity=0.7).add_to(map_cluster)
map_cluster