Clustering metode Mix K-Prototypes untuk data Kategorik dan Numerik terhadap Penjualan Buku Novel with Python
Assalamua’laikum,
Halo statistician, pada artikel sebelumnya penulis sudah melakukan scraping data, preprocessing data dan visualisasi data untuk data penjualan buku novel di e-commerce shopee. Untuk pembahasannya dapat di lihat di link berikut https://falahadlin.medium.com/scraping-dan-analisis-data-visualisasi-terhadap-data-e-commerce-novel-dengan-tableau-d56a0c291570.
Sehingga sekarang akan dilakukan analisis lebih lanjut yaitu untuk mengelompokan pembelian buku novel dari variabel harga, jumlah terjual, asal daerah toko dan genre novel dalam mebeli buku novel di e-commerce. Dimana variabel genre diperoleh dari asumsi penulis. Sehingga terdapat variabel numerik dan kategorik yang dimana untuk melakukan clustering dapat menggunakan metode k-prototypes. Clustering K-Prototypes menggunakan ukuran jarak campuran yang dicirikan oleh γ. Variabel γ merupakan parameter penimbang yang digunakan untuk menyeimbangkan proporsi dua fungsi jarak untuk data bertipe numerik dan kategorik. Dalam analisis data ini penulis menggunakan R Studio dan python.
Tahap pertama kita melakukan stndarisasi data agar skala untuk seluruh variabel sama dengan cara scaling data menggunakan syntax R Seperti berikut.
# scaling data novel
novel<-read.delim(“clipboard”)
novel2<-novel[,2:3]
View(novel2)
# pemisahan data outlier
novel2<-novel[,2:3]
# standarisasi data menggunakan z-score normalization
data_standarisasi = scale(novel2)
data_standarisasi
write.csv(data_standarisasi, file=”D://Ada Kuliah//Data Mining//UAS//scaling_novel.csv”)
Selanjutnya, penulis terlebih dahulu menginstall dan mengaktifkan module dan packages yang digunakan di pemograman python seperti berikut:
pip install pulppip install kmodespip install plotninefrom pulp import *
import numpy as np
import pandas as pd
import re
import matplotlib.pyplot as plt
from IPython.display import Image
%matplotlib inline# plot
from plotnine import *
import plotnine# Import module for k-protoype cluster
from kmodes.kprototypes import KPrototypes
# boxplot
import seaborn as sns
Syntax from pulp import untuk menginstall model pulp.Syntax import numpy as np untuk numerical python atau operasi matematika.Syntax import pandas as pd untuk menggunakan data frame dan input file csv.Syntax import re untuk ekspresi tambahan tertentu.Syntax import matplotlib.pyplot as plt untuk membuat plot.Syntax from IPhython.display import image untuk memasukan gambar.Syntax %matplotlib inline untuk membuat hasil plot berada di satu baris.Syntax from plotnine import untuk menginstall model plotnine.Syntax import plotnine untuk membuat plot.Syntax from kmodes.kprototypes import KPrototypes untuk menginstall model K-Prototypes.Syntax import seaborn as sns untuk membuat boxplot.
Kemudian, memasukan data set penjualan buku novel dengan syntax python berikut:
# Memasukan data set DAC
df_buku=pd.read_csv(‘D://Ada Kuliah//Data Mining//UAS//scaling_novel_3.csv’)
df_buku
Lalu, menseleksi variabel data yang diperlukan saja untuk analisis cluster dengan syntax berikut:
# menseleksi data
df_buku = df_buku.drop([‘judul’], axis=1)
df_buku
Berikutnya, penulis membuat boxplot untuk variabel numerik yang ada yaitu variabel harga dan terjual dengan syntax berikut:
# membuat boxplot
sns.boxplot(x=’harga’, data=df_buku)# membuat boxplot
sns.boxplot(x=’terjual’, data=df_buku)
Kemudian, penulis akan melihat jumlah K optimal dengan metode elbow menggunakan syntax berikut:
# Get the position of categorical columns
catColumnsPos = [df_buku.columns.get_loc(col) for col in list(df_buku.select_dtypes(‘object’).columns)]
print(‘Categorical columns : {}’.format(list(df_buku.select_dtypes(‘object’).columns)))
print(‘Categorical columns position : {}’.format(catColumnsPos))# Convert dataframe to matrix
dfMatrix = df_buku.to_numpy()
dfMatrix# Choose optimal K using Elbow method
cost = []
for cluster in range(1, 5):
try:
kprototype = KPrototypes(n_jobs = -1, n_clusters = cluster, init = ‘Huang’, random_state = 0)
kprototype.fit_predict(dfMatrix, categorical = catColumnsPos)
cost.append(kprototype.cost_)
print(‘Cluster initiation: {}’.format(cluster))
except:
break# Converting the results into a dataframe and plotting them
df_cost = pd.DataFrame({‘Cluster’:range(1, 5), ‘Cost’:cost})
df_cost.head()# menampilkan plot elbow
plotnine.options.figure_size = (8, 4.8)
(
ggplot(data = df_cost)+
geom_line(aes(x = ‘Cluster’,
y = ‘Cost’))+
geom_point(aes(x = ‘Cluster’,
y = ‘Cost’))+
geom_label(aes(x = ‘Cluster’,
y = ‘Cost’,
label = ‘Cluster’),
size = 10,
nudge_y = 1000) +
labs(title = ‘Optimal number of cluster with Elbow Method’)+
xlab(‘Number of Clusters k’)+
ylab(‘Cost’)+
theme_minimal()
)
Setelah itu, penulis melakukan pembuatan model K-prototypes dengan jumlah cluster sebanyak 3 kelompok dengan syntax berikut:
# Clustering KPrototypes
model=KPrototypes(n_clusters=3,verbose=2,max_iter=20)
klaster=model.fit_predict(dfMatrix,categorical=[2, 3])
Lalu, penulis membuat centroid terhadap data tersebut dengan syntax berikut:
# membuat centroid
print(model.cluster_centroids_)
Kemudian, penulis menampilkan hasil cluster dengan syntax berikut:
# menampilkan hasil cluster
cluster_dict=[]
for c in klaster:
cluster_dict.append(c)
Berikutnya, penulis menampilkan hasil data cluster dengan data frame aru dengan syntax seperti berikut:
# menampilkan hasil cluster dengan data frame baru
df_buku[‘cluster’]=cluster_dict
df_buku
Berikutnya melihat data untuk tiap cluster yang ada dengan syntax berikut:
# cluster 1
df_buku[df_buku[‘cluster’]==0].head(10)# cluster 2
df_buku[df_buku[‘cluster’]==1].head(10)# cluster 3
df_buku[df_buku[‘cluster’]==2].head(10)
Kemudian export data frame hasil cluster berupa file csv dengan syntax berikut:
# export data fram
df_buku.to_csv(r’D:\Ada Kuliah\Data Mining\UAS\buku_cluster.csv’, index = False)
Berikutnya, penulis membuat profiliasi data untuk cluster yang telah terbentuk dengan syntax berikut:
# Cluster interpretation
df_buku.rename(columns = {‘Cluster Labels’:’Total’}, inplace = True)
df_buku_profilisasi=df_buku.groupby(‘cluster’).agg(
{
‘harga’: ‘mean’,
‘terjual’: ‘mean’,
‘genre’: lambda x: x.value_counts().index[0],
‘kota_toko’: lambda x: x.value_counts().index[0],
}
).reset_index()
Lalu, export data frame profilisasi berupa file csv dengan syntax berikut:
# export data profilisasi
df_buku_profilisasi.to_csv(r’D:\Ada Kuliah\Data Mining\UAS\buku_profilisasi.csv’, index = False)
Selanjutnya penulis akan mebahas output yang diperoleh. Pertama akan diperoleh data set penjualan buku novel di e-commerce yang telah di standarisasi seperti berikut:
Kemudian, akan diperoleh data set yang telah dimasukan ke dalam python seperti berikut:
Lalu, akan diperoleh data set yang telah diseleksi berupa variabel numerik dan kategorik seperti berikut:
Berikutnya diperoleh boxplot untuk variabel harga dan terjual seperti berikut:
Dapat dilihat bahwa pada data variabel harga dan terjual terdapat data outlier, tetapi penulis berasumsi bahwa data outlier terseut penting untuk tetap digunakan sehingga data outlier tidak dihilangkan.
Dari gambar di atas dapat dilihat bahwa dengan metode elbow pada bagian titik k yang melandai secara signifikan yang menunjukan jumlah kluster terbaik sehingga diperoleh jumlah kluster terbaik sebanyak 3 kelompok.
Sehingga dengan jumlah K sebanyak 3 maka diperoleh hasil clustering sebagai berikut:
Kemudian, dibentuk tabel yang menunjukan anggota kelompok pada masing-masing kelompok yang ada yaitu cluster 1, 2 dan 3. Dari hasil visualisasi cluster metode K-Prototypes terlihat bahwa dengan penetuan k metode elbow k=3 memberikan hasil pengelompokkan yang baik. Dari output pada Gambar 3.8 diperoleh anggota-anggota dalam cluster sebagai berikut:
Berdasarkan Tabel 5.5, warna biru menunjukkan variabel numerik dengan kategori tinggi, warna kuning menunjukkan variabel numerik dengan kategori sedang dan warna merah menunjukkan variabel numerik dengan kategori rendah. Dilakukan perhitungan rataan dari setiap cluster untuk mengetahui ciri atau karakteristik masing-masing cluster berdasarkan varibel harga buku, jumlah terjual buku, kota toko dan genre buku novel, sebagai berikut:
1) Cluster 1 beranggotakan 9 judul buku novel yang memiliki variabel harga dengan kategori sedang dan pada variabel terjual dengan kategori tinggi. Dimana paling banyak tokonya berasal dari Kab. Tangerang dengan dominan bergenre romance.
2) Cluster 2 beranggotakan 73 judul buku novel yang memiliki variabel harga dengan kategori rendah dan pada variabel terjual dengan kategori sedang. Dimana paling banyak tokonya berasal dari Kota Depok dengan dominan bergenre romance.
3) Cluster 3 beranggotakan 9 judul buku novel yang memiliki variabel harga dengan kategori tinggi dan pada variabel terjual dengan kategori rendah. Dimana paling banyak tokonya berasal dari Kab. Bantul dengan dominan bergenre romance.
Referensi :