Zum Inhalt springen

Woche 9 | Session 3: K-means Clustering — Python Implementierung (Google Colab)

Kurs: Supply Chain Digitalisierung — Modul 3: Analytics im SCM



  • Vorherige Sessions: Konzept — was K-means ist, wie der Algorithmus funktioniert, WCSS, Elbow-Methode.
  • Diese Session: Implementierung — Python-Code in Google Colab schreiben, den Cluster-Output reproduzieren.
  • Datensatz: customer_location.csv — 811 Zeilen, 3 Spalten (Seriennummer, Breiten-, Längengrad).

Bibliothek / AliasZweck
pandas (pd)Datenmanipulation und -analyse — CSV lesen, DataFrames erstellen.
numpy (np)Numerical Python — mathematische und logische Operationen auf Arrays.
matplotlib.pyplot (plt)Plotting-Bibliothek — Liniendiagramme, Streudiagramme (Scatter Plots).
seaborn (sn)High-Level-Visualisierung — attraktive Cluster-Plots mit Farbcodierung.
sklearn.cluster.KMeansK-means-Implementierung — Cluster fitten, Labels & Zentroide extrahieren.

  1. Daten importieren: Laden von customer_location.csv mittels Pandas.
  2. Rohdaten plotten: Visualisierung aller 811 Punkte in einem Lat/Long-Streudiagramm (seaborn).
  3. Features auswählen: Seriennummer-Spalte entfernen — nur Lat & Long behalten.
  4. Optimales K finden: Schleife K=1 bis 9, WCSS berechnen, Elbow-Diagramm zeichnen.
  5. Cluster bilden: KMeans(n_clusters=4).fit() ausführen. IDs zuweisen.
  6. Cluster plotten: Farbcodiertes Streudiagramm.
  7. Zentroide ermitteln: cluster_centers_ (vorgeschlagene DC-Standorte) extrahieren.
  8. Zentroide plotten: Markierungen (‘x’) über das Cluster-Diagramm legen.

import pandas as pd
df = pd.read_csv('customer_location.csv')
df.head()
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sn
sn.lmplot(x='latitude', y='longitude', data=df, fit_reg=False, height=4)
plt.title('Kundenstandorte')
plt.show()

Irrelevante Spalten entfernen.

new_df = df[['latitude', 'longitude']]
from sklearn.cluster import KMeans
cluster_range = range(1, 10) # K = 1 bis 9
cluster_errors = [] # leere Liste für WCSS-Werte
for num_clusters in cluster_range:
clusters = KMeans(num_clusters)
clusters.fit(new_df)
cluster_errors.append(clusters.inertia_) # inertia_ = WCSS
plt.figure(figsize=(6, 4))
plt.plot(cluster_range, cluster_errors, marker='o')
plt.title('Elbow-Diagramm')
plt.xlabel('Anzahl der Cluster')
plt.ylabel('Summe der Fehlerquadrate (WCSS)')
plt.show()
clusters_new = KMeans(4) # K = 4 setzen
clusters_new.fit(new_df)
# Cluster-ID als neue Spalte hinzufügen
new_df.insert(loc=2, column='cluster_id', value=clusters_new.labels_)
sn.lmplot(x='latitude', y='longitude', data=new_df,
hue='cluster_id', fit_reg=False, height=4)
plt.show()
centers = np.array(clusters_new.cluster_centers_)
print(centers)
# Output-Beispiel:
# Cluster 0: [27.68, 80.90]
sn.lmplot(x='latitude', y='longitude', data=new_df,
hue='cluster_id', fit_reg=False, height=4)
plt.scatter(centers[:, 0], centers[:, 1], marker='x', s=100, c='black')
plt.show()

Nach Ausführung des Codes liefert K-means 4 Zentroide — die vorgeschlagenen DC-Standorte:

Cluster IDZentroid LatZentroid LongVorgeschlagenes DC bedient…
027.6880.90Blaue Cluster-Kunden
127.4281.15Orangefarbene Cluster-Kunden
227.3180.83Grüne Cluster-Kunden
327.5680.57Rote Cluster-Kunden

  • Pipeline: Import → Rohdaten plotten → Features wählen → Elbow-Diagramm → Fit K=4 → Cluster plotten → Zentroide extrahieren → Zentroide plotten.
  • Wichtigster Output: 4 Zentroid-Koordinaten = vorgeschlagene DC-Standorte; 811 Cluster-IDs = Kunden-DC-Zuweisung.
  • Tool: Google Colab.