# Kod 1
import pandas as pd
znaczki = pd.read_excel("../input/wykaz-zt-polski.xls", skiprows = 4)
znaczki.rename(columns={"GPS":"lat", "Unnamed: 5":"lon"}, inplace=True)
znaczki["lat"] = znaczki["lat"].astype(float)
znaczki["lon"] = znaczki["lon"].astype(float)
# Kod 2
from sklearn.cluster import KMeans
n_clusters = 12
kmeans = KMeans(n_clusters = n_clusters, random_state = 42)
coordinates = znaczki[["lat", "lon"]]
kmeans.fit(coordinates)
znaczki["grupa"] = kmeans.labels_
znaczki.head()
LP. | Numer znaczka | Nazwa znaczka | Województwo | lat | lon | grupa | |
---|---|---|---|---|---|---|---|
0 | 1 | No. 001 | Rysy – najwyższy szczyt polskich Tatr | małopolskie | 49.179628 | 20.087987 | 1 |
1 | 2 | No. 002 | Schronisko "Murowaniec" na Hali Gąsienicowej | małopolskie | 49.244167 | 20.007222 | 1 |
2 | 3 | No. 003 | Babia Góra – najwyższy szczyt Beskidu Żywieckiego | małopolskie | 49.573055 | 19.529444 | 4 |
3 | 4 | No. 004 | Schronisko Morskie Oko | małopolskie | 49.201378 | 20.071276 | 1 |
4 | 5 | No. 005 | Schronisko Głodówka | małopolskie | 49.302124 | 20.116664 | 1 |
import folium
import folium.plugins
colours = ['red', 'blue', 'green', 'purple', 'orange', 'darkred',
'lightred', 'beige', 'darkblue', 'darkgreen', 'cadetblue',
'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen',
'gray', 'black', 'lightgray']
lat_max = coordinates["lat"].max()
lat_min = coordinates["lat"].min()
lon_max = coordinates["lon"].max()
lon_min = coordinates["lon"].min()
boulder_coords = [lat_min + (lat_max - lat_min)/2, lon_min + (lon_max - lon_min)/2]
my_map = folium.Map(location = boulder_coords)
my_map_int = folium.Map(location = boulder_coords)
my_map.fit_bounds(bounds=[(lat_min, lon_min), (lat_max, lon_max)])
my_map_int.fit_bounds(bounds=[(lat_min, lon_min), (lat_max, lon_max)])
from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut
geolocator = Nominatim(user_agent="jakbadacdane.pl")
feature_groups = []
for feature_group in range(n_clusters):
coords_tmp = kmeans.cluster_centers_[feature_group]
location = geolocator.reverse("{}, {}".format(coords_tmp[0],coords_tmp[1]), timeout = 64)
feature_groups.append(folium.FeatureGroup(name=str(location)))
marker_groups = []
for cluster in range(n_clusters):
punkty = znaczki[znaczki["grupa"] == cluster]
color = colours[cluster]
print(cluster, len(punkty), color)
marker_groups.append(folium.plugins.MarkerCluster())
for index,punkt in punkty.iterrows():
first_marker = folium.Marker([punkt["lat"], punkt["lon"]],
icon=folium.Icon(color=color),
popup= punkt["Numer znaczka"]+ " " + punkt["Nazwa znaczka"])
second_marker = folium.Marker([punkt["lat"], punkt["lon"]],
icon=folium.Icon(color=color),
popup= punkt["Numer znaczka"]+ " " + punkt["Nazwa znaczka"])
first_marker.add_to(marker_groups[cluster])
second_marker.add_to(my_map)
marker_groups[cluster].add_to(feature_groups[cluster])
0 46 red 1 67 blue 2 92 green 3 47 purple 4 110 orange 5 121 darkred 6 95 lightred 7 30 beige 8 39 darkblue 9 37 darkgreen 10 34 cadetblue 11 30 darkpurple
my_map
for feature_group in feature_groups:
feature_group.add_to(my_map_int)
my_map_int.add_child(folium.LayerControl())
my_map_int