#!/usr/bin/env python # coding: utf-8 # In[1]: # 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) # In[2]: # 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() # In[3]: import folium import folium.plugins # In[4]: colours = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'lightred', 'beige', 'darkblue', 'darkgreen', 'cadetblue', 'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen', 'gray', 'black', 'lightgray'] # In[5]: 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)]) # In[6]: from geopy.geocoders import Nominatim from geopy.exc import GeocoderTimedOut geolocator = Nominatim(user_agent="jakbadacdane.pl") # In[7]: 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))) # In[8]: 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]) # In[9]: my_map # In[10]: for feature_group in feature_groups: feature_group.add_to(my_map_int) my_map_int.add_child(folium.LayerControl()) my_map_int