<jupyter_start><jupyter_text>Soal 1. Pemahaman k-means clusteringJelaskan bagaimana cara kerja k-means clustering! Jawab disini: ---Metode belajar mesin dibagi menjadi 2, yaitu Supervised Learning dan Unsupervised Learning. Unsupervised learning adalah metode belajar mesin yang tidak membutuhkan training data sets untuk belajar, melainkan Unsupervised Learning adalah metode untuk mengelompokkan sebuah no-labeled data.Salah satu metode Unsupervised Learning adalah K-Means Clustering. K-Means Clustering ini menggunakan metode centroid dan menghitung jarak dari setiap data yang ada ke centroidnya dan assign data tersebut ke centroid masing-masing (jarak yang paling dekat). --- Download disini [pelanggan.csv](https://drive.google.com/uc?export=download&id=1jX_rLPfcCfzEEgy9xaoALmpqfU2s5TTB)<jupyter_code>import pandas as pd
df = pd.read_csv('pelanggan_supermarket.csv')
df = df.fillna(method='ffill')
df.tail()<jupyter_output><empty_output><jupyter_text>Soal 2. Clustering data menggunakan k-means clusteringDalam soal ini, kalian diminta untuk melakukan clustering antara data Umur dan Skor Belanja(1-100). Namun, clustering tidak bisa dilakukan karena data memiliki outlier dan missing value. Maka, lakukanlah tahapan-tahapan berikut:*   Handling missing value dengan menggunakan method ='ffill'*   Handling outlier menggunakan metode Interquartile range*   Lakukan rescaling data menggunakan StandardScaler*   Lakukan clustering menggunakan kmeans clustering dengan k =2, dan visualisasikan.. *   Gunakan Elbow method untuk menemukan jumlah k kluster yang tepat*   Gunakan k=3 (rekomendasi methode Elbow) lalu visualisasikan*   Hitung silhoutte Coefficient dari ke dua hasil prediksi klustering tersebut<jupyter_code>#code here
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# df = df.fillna(method='ffill')

# K MEANS CLUSTERING
df_ = df[['Umur', 'Skor Belanja (1-100)']]
q3 = df_.quantile(.75)
q1 = df_.quantile(.25)
IQR = q3 - q1
df_clean = df_[((df_ >= q1 - 1.5 * IQR) & (df_ <= q3 + 1.5 * IQR))]
df_clean.dropna(axis=0, inplace=True)

scaler = StandardScaler()
df_scaled = scaler.fit_transform(df_clean.astype(float))

kmeans = KMeans(n_clusters=2).fit(df_scaled)
labels = kmeans.labels_
df_scaled = pd.DataFrame(data=df_scaled, columns=['Umur', 'Skor Belanja (1-100)'])
df_scaled['label'] = labels

df_kmeans_0 = df_scaled[df_scaled['label'] == 0]
df_kmeans_1 = df_scaled[df_scaled['label'] == 1]

fig1, axes1 = plt.subplots(figsize=(12, 7))
axes1.scatter(x=df_kmeans_0['Umur'], y=df_kmeans_0['Skor Belanja (1-100)'], c='red', s=100, edgecolor='green', linestyle='-')
axes1.scatter(x=df_kmeans_1['Umur'], y=df_kmeans_1['Skor Belanja (1-100)'], c='blue', s=100, edgecolor='green', linestyle='-')
axes1.set_xlabel('Umur')
axes1.set_ylabel('Skor Belanja (1-100)')

centers = kmeans.cluster_centers_
axes1.scatter(x=centers[:, 0], y=centers[:, 1], c='black', s=500)
plt.show()
# ELBOW GRAPH
wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, init='k-means++').fit(df_scaled)
    wcss.append(kmeans.inertia_)

plt.figure(figsize=(10, 6))
plt.plot(range(1, 11), wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.show()
# K MEANS N_CLUSTERS = 3
N = 3
kmeans = KMeans(n_clusters=N, random_state=42).fit(df_scaled)
labels2 = kmeans.labels_
df_scaled['label 2'] = labels2
colors = ['blue', 'red', 'green']
centers2 = kmeans.cluster_centers_
fig, axes = plt.subplots(figsize=(12, 8))

for i in range(N):
    df_kmeans = df_scaled[df_scaled['label 2'] == i]
    axes.scatter(x=df_kmeans['Umur'], y=df_kmeans['<NAME>ja (1-100)'], c=colors[i], s=100, edgecolor='green', linestyle='-')
    axes.scatter(x=centers2[i, 0], y=centers2[i, 1], c='black', s=500)

axes.set_xlabel('Umur')
axes.set_ylabel('Skor Belanja (1-100)')
plt.show()
# SILHOUETTE COEFFICIENT
from sklearn.metrics import silhouette_score

print(silhouette_score(df_scaled, labels))
print(silhouette_score(df_scaled, labels2))<jupyter_output>0.572806699868151
0.5881255010303492
{'fraction_non_alphanumeric': 0.12948402948402948, 'fraction_numerical': 0.0371007371007371, 'mean_word_length': 6.388384754990925, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 10, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '498743', 'license': 'MIT', 'n_tokens_mistral': 1764, 'n_tokens_neox': 1588, 'n_words': 365, 'path': 'Week 4/Tugas_Day_3(EDA).ipynb', 'repo_name': 'jo-adithya/IM-Sanbercode-DataScience-Batch-24', 'size': '4074'}