from sklearn.cluster import KMeans, AgglomerativeClustering

from sklearn.pipeline import Pipeline
scalerCrimes = StandardScaler(copy = False) # If modif in place, then ... see below. 
pcaCrimes = PCA(n_components = 3)
kmeansCrimes = KMeans(n_clusters = 3, random_state = 11715490)
crimesPipe = Pipeline([("scale", scalerCrimes), ("pca", pcaCrimes), ("kmeans", kmeansCrimes)])
# crimesPipe.fit(dfCrimes)
crimesKmeansClusters = crimesPipe.fit_predict(dfCrimes) # ... here must be fit_predict. 
# Not first fit then predict because dataset hs already been modified!
crimesKmeansClusters
crimesPipe.named_steps["kmeans"].cluster_centers_ 
crimesPipe.named_steps["pca"].explained_variance_ratio_.cumsum()
dfCrimes




hierarchiqueVilles = AgglomerativeClustering(n_clusters=4, linkage="ward")
villesHierarchiqueClusters = hierarchiqueVilles.fit_predict(dfVillesTransformees[:,:2])