خوشه بندی داده های مکانی

چندی پیش شرکت اوبار که در زمینه ارسال سفارشات و حمل بار آنلاین در ایران فعالیت می کند یک مسابقه یادگیری ماشین در کگل برگزار کرد که در آن به صورت خلاصه هدف آن این بود که با استفاده از یک مجموعه از اطلاعات و متغیرهای مکانی مثل استان مبدا و مقصد و غیرمکانی مثل وزن بار و نوع وسیله قیمت بارهای حمل شده در سطح ایران به درستی پیش بینی شود تا بر اساس این پیش بینی یک سیاست گذاری ثابت برای قیمت گذاری بارها پیاده سازی شود.

نمودار نقطه ای خوشه ها
نمودار نقطه ای خوشه ها


یک خوشه بندی با روش kmeans روی مختصات جغرافیایی مبدا و مقصد پیاده شده است. تعداد خوشه های بهینه برابر 5 به دست آمده است.

نمودار Elbow
نمودار Elbow


کدها به صورت کامل آمده است:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import sklearn.cluster as cluster
import time
import warnings
warnings.filterwarnings(&quotignore&quot)
ubaar = pd.read_csv(&quottrain.csv.zip&quot)
ubaar.head()
df1 =ubaar[['sourceLatitude','sourceLongitude']]
df1.columns = ['Latitude','Longitude']
df2 =ubaar[['destinationLatitude','destinationLongitude']]
df2.columns = ['Latitude','Longitude']
frames = [df1,df2]
df = pd.concat(frames)
df.isnull().sum()
df.describe()
X = df.values
sns.set_style(&quotdarkgrid&quot, {&quotaxes.facecolor&quot: &quot.9&quot})
fig = plt.figure(figsize=(12,8))
from sklearn.cluster import KMeans
sse = []
for k in range(2,15):
    kmeans = KMeans(n_clusters = k)
    kmeans.fit(X)
    sse.append(kmeans.inertia_)
plt.plot(range(2,15),sse)
plt.title(&quotElbow Curve&quot)
plt.show()
kmeans = KMeans(n_clusters = 5).fit(X)
centroids = kmeans.cluster_centers_
plt.scatter(X[:,0],X[:,1], c = kmeans.labels_, cmap = &quotrainbow&quot)
plt.show()