0% found this document useful (0 votes)
13 views9 pages

Practical 4

Uploaded by

nild3011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views9 pages

Practical 4

Uploaded by

nild3011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

10/10/24, 4:08 PM PRACTICAL_4

In [3]: import pandas as pd


import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

In [4]: df=pd.read_csv("mall.csv")
df

Out[4]: CustomerID Genre Age Annual Income (k$) Spending Score (1-100)

0 1 Male 19 15 39

1 2 Male 21 15 81

2 3 Female 20 16 6

3 4 Female 23 16 77

4 5 Female 31 17 40

... ... ... ... ... ...

195 196 Female 35 120 79

196 197 Female 45 126 28

197 198 Male 32 126 74

198 199 Male 32 137 18

199 200 Male 30 137 83

200 rows × 5 columns

In [5]: df.shape

Out[5]: (200, 5)

In [6]: df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 CustomerID 200 non-null int64
1 Genre 200 non-null object
2 Age 200 non-null int64
3 Annual Income (k$) 200 non-null int64
4 Spending Score (1-100) 200 non-null int64
dtypes: int64(4), object(1)
memory usage: 7.9+ KB

In [7]: X = df.iloc[ :,3:5].values


X

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 1/9
10/10/24, 4:08 PM PRACTICAL_4

Out[7]: array([[ 15, 39],


[ 15, 81],
[ 16, 6],
[ 16, 77],
[ 17, 40],
[ 17, 76],
[ 18, 6],
[ 18, 94],
[ 19, 3],
[ 19, 72],
[ 19, 14],
[ 19, 99],
[ 20, 15],
[ 20, 77],
[ 20, 13],
[ 20, 79],
[ 21, 35],
[ 21, 66],
[ 23, 29],
[ 23, 98],
[ 24, 35],
[ 24, 73],
[ 25, 5],
[ 25, 73],
[ 28, 14],
[ 28, 82],
[ 28, 32],
[ 28, 61],
[ 29, 31],
[ 29, 87],
[ 30, 4],
[ 30, 73],
[ 33, 4],
[ 33, 92],
[ 33, 14],
[ 33, 81],
[ 34, 17],
[ 34, 73],
[ 37, 26],
[ 37, 75],
[ 38, 35],
[ 38, 92],
[ 39, 36],
[ 39, 61],
[ 39, 28],
[ 39, 65],
[ 40, 55],
[ 40, 47],
[ 40, 42],
[ 40, 42],
[ 42, 52],
[ 42, 60],
[ 43, 54],
[ 43, 60],
[ 43, 45],
[ 43, 41],

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 2/9
10/10/24, 4:08 PM PRACTICAL_4

[ 44, 50],
[ 44, 46],
[ 46, 51],
[ 46, 46],
[ 46, 56],
[ 46, 55],
[ 47, 52],
[ 47, 59],
[ 48, 51],
[ 48, 59],
[ 48, 50],
[ 48, 48],
[ 48, 59],
[ 48, 47],
[ 49, 55],
[ 49, 42],
[ 50, 49],
[ 50, 56],
[ 54, 47],
[ 54, 54],
[ 54, 53],
[ 54, 48],
[ 54, 52],
[ 54, 42],
[ 54, 51],
[ 54, 55],
[ 54, 41],
[ 54, 44],
[ 54, 57],
[ 54, 46],
[ 57, 58],
[ 57, 55],
[ 58, 60],
[ 58, 46],
[ 59, 55],
[ 59, 41],
[ 60, 49],
[ 60, 40],
[ 60, 42],
[ 60, 52],
[ 60, 47],
[ 60, 50],
[ 61, 42],
[ 61, 49],
[ 62, 41],
[ 62, 48],
[ 62, 59],
[ 62, 55],
[ 62, 56],
[ 62, 42],
[ 63, 50],
[ 63, 46],
[ 63, 43],
[ 63, 48],
[ 63, 52],
[ 63, 54],

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 3/9
10/10/24, 4:08 PM PRACTICAL_4

[ 64, 42],
[ 64, 46],
[ 65, 48],
[ 65, 50],
[ 65, 43],
[ 65, 59],
[ 67, 43],
[ 67, 57],
[ 67, 56],
[ 67, 40],
[ 69, 58],
[ 69, 91],
[ 70, 29],
[ 70, 77],
[ 71, 35],
[ 71, 95],
[ 71, 11],
[ 71, 75],
[ 71, 9],
[ 71, 75],
[ 72, 34],
[ 72, 71],
[ 73, 5],
[ 73, 88],
[ 73, 7],
[ 73, 73],
[ 74, 10],
[ 74, 72],
[ 75, 5],
[ 75, 93],
[ 76, 40],
[ 76, 87],
[ 77, 12],
[ 77, 97],
[ 77, 36],
[ 77, 74],
[ 78, 22],
[ 78, 90],
[ 78, 17],
[ 78, 88],
[ 78, 20],
[ 78, 76],
[ 78, 16],
[ 78, 89],
[ 78, 1],
[ 78, 78],
[ 78, 1],
[ 78, 73],
[ 79, 35],
[ 79, 83],
[ 81, 5],
[ 81, 93],
[ 85, 26],
[ 85, 75],
[ 86, 20],
[ 86, 95],

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 4/9
10/10/24, 4:08 PM PRACTICAL_4

[ 87, 27],
[ 87, 63],
[ 87, 13],
[ 87, 75],
[ 87, 10],
[ 87, 92],
[ 88, 13],
[ 88, 86],
[ 88, 15],
[ 88, 69],
[ 93, 14],
[ 93, 90],
[ 97, 32],
[ 97, 86],
[ 98, 15],
[ 98, 88],
[ 99, 39],
[ 99, 97],
[101, 24],
[101, 68],
[103, 17],
[103, 85],
[103, 23],
[103, 69],
[113, 8],
[113, 91],
[120, 16],
[120, 79],
[126, 28],
[126, 74],
[137, 18],
[137, 83]], dtype=int64)

In [8]: WCSS=[]

In [9]: for i in range (1,11) :


kmeans = KMeans(n_clusters = i, init = 'k-means++',max_iter = 300, random_stat
kmeans.fit(X)
WCSS.append(kmeans.inertia_)

In [25]: plt.plot(range(1, 11), WCSS, marker='o')


plt.xticks(range(1, 11))
plt.title("Elbow Method")
plt.grid()
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')

Out[25]: Text(0, 0.5, 'WCSS')

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 5/9
10/10/24, 4:08 PM PRACTICAL_4

In [11]: kmeans = KMeans(n_clusters = 5, init = 'k-means++',max_iter = 300, random_state = 4


y_kmeans = kmeans.fit_predict(X)

In [12]: y_kmeans

Out[12]: array([4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2,
4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 0,
4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 1, 3, 1, 3, 1,
0, 1, 3, 1, 3, 1, 3, 1, 3, 1, 0, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
3, 1])

In [13]: y_kmeans.shape

Out[13]: (200,)

In [14]: plt.scatter(X [y_kmeans==0,0], X[y_kmeans==0,1] , s=200, c='red',label='cluster1')


plt.scatter(X [y_kmeans==1,0], X[y_kmeans==1,1] , s=200, c='blue',label='cluster2')
plt.scatter(X [y_kmeans==2,0], X[y_kmeans==2,1] , s=200, c='green',label='cluster3'
plt.scatter(X [y_kmeans==3,0], X[y_kmeans==3,1] , s=200, c='magenta',label='cluster
plt.scatter(X [y_kmeans==4,0], X[y_kmeans==4,1] , s=200, c='pink',label='cluster5')
plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s=300,c='yell
plt.title("KMeans Clustering")
plt.xlabel("Annual Income")

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 6/9
10/10/24, 4:08 PM PRACTICAL_4

plt.ylabel('Spending Score')
plt.legend()
plt.show()

In [15]: import matplotlib.cm as cm


from sklearn.metrics import silhouette_samples , silhouette_score

In [16]: range_n_clusters = [2,3,4,5,6]


for n_clusters in range_n_clusters:
clusterer = KMeans(n_clusters = n_clusters, random_state = 10)
cluster_labels = clusterer.fit_predict(X)
silhouette_avg = silhouette_score(X,cluster_labels)
print("For n_clusters = ", n_clusters, "The average silhouette score is : ", si

For n_clusters = 2 The average silhouette score is : 0.3774913479961559


For n_clusters = 3 The average silhouette score is : 0.46761358158775435
For n_clusters = 4 The average silhouette score is : 0.4937945814354117
For n_clusters = 5 The average silhouette score is : 0.553931997444648
For n_clusters = 6 The average silhouette score is : 0.5379675585622219

In [17]: import scipy.cluster.hierarchy as sch


plt.figure(figsize=(10,10))
dendrogram=sch.dendrogram(sch.linkage(X,method='single'))
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel("Euclidean Distances")
plt.show()

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 7/9
10/10/24, 4:08 PM PRACTICAL_4

In [18]: from sklearn.cluster import AgglomerativeClustering

In [23]: hc = AgglomerativeClustering(n_clusters=5, metric='euclidean', linkage='complete')


y_hc = hc.fit_predict(X)

In [24]: plt.figure(figsize=(8,8))
plt.scatter(X[y_hc == 0,0],X[y_hc==0,1],s=100,c='red',label='careful customers')
plt.scatter(X[y_hc == 1,0],X[y_hc==1,1],s=100,c='blue',label='standard customers')
plt.scatter(X[y_hc == 2,0],X[y_hc==2,1],s=100,c='green',label='target customers')
plt.scatter(X[y_hc == 3,0],X[y_hc==3,1],s=100,c='magenta',label='careless customers
plt.scatter(X[y_hc == 4,0],X[y_hc==4,1],s=100,c='pink',label='sensible customers')

plt.title("Clusters of Customers using hierarchical clusring")


plt.xlabel('Annual income (K$)')
plt.ylabel('spending Score(1-100)')
plt.legend()
plt.show()

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 8/9
10/10/24, 4:08 PM PRACTICAL_4

In [ ]:

file:///D:/omkar/PROGRAM/PRACTICAL_4/PRACTICAL_4.html 9/9

You might also like