|
import numpy as np |
|
import pandas as pd |
|
import gradio as gr |
|
from sklearn.cluster import KMeans |
|
import matplotlib.pyplot as plt |
|
from PIL import Image |
|
from io import BytesIO |
|
|
|
|
|
dataset = pd.read_csv('Flipcart.com Clusturing Model.csv') |
|
X = dataset.iloc[:, [2, 4]].values |
|
|
|
|
|
kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42) |
|
y_means = kmeans.fit_predict(X) |
|
|
|
|
|
def cluster_data(age, purchase_rating): |
|
features = np.array([age, purchase_rating]).reshape(1, -1) |
|
cluster = kmeans.predict(features)[0] |
|
|
|
|
|
plt.figure(figsize=(8, 6)) |
|
plt.scatter(X[y_means == 0, 0], X[y_means == 0, 1], s=100, c='magenta', label='Cluster 1') |
|
plt.scatter(X[y_means == 1, 0], X[y_means == 1, 1], s=100, c='blue', label='Cluster 2') |
|
plt.scatter(X[y_means == 2, 0], X[y_means == 2, 1], s=100, c='red', label='Cluster 3') |
|
plt.scatter(X[y_means == 3, 0], X[y_means == 3, 1], s=100, c='cyan', label='Cluster 4') |
|
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='black', label='Centroids') |
|
plt.title('Cluster of Amazon users') |
|
plt.xlabel('Age') |
|
plt.ylabel('Purchase Rating') |
|
plt.legend() |
|
plt.grid(True) |
|
|
|
|
|
image_buffer = BytesIO() |
|
plt.savefig(image_buffer, format='png') |
|
image_buffer.seek(0) |
|
|
|
|
|
pil_image = Image.open(image_buffer) |
|
|
|
return f'Data point belongs to Cluster {cluster}', pil_image |
|
|
|
|
|
iface = gr.Interface( |
|
fn=cluster_data, |
|
inputs=[ |
|
gr.Number(label="Age"), |
|
gr.Number(label="Purchase Rating") |
|
], |
|
outputs=[ |
|
gr.Textbox(label="Cluster"), |
|
gr.Image(label="Cluster Visualization") |
|
], |
|
examples=[[23, 44], [26, 91], [72, 5]], |
|
live=True, |
|
description="Press flag if any erroneous output comes", |
|
theme=gr.themes.Soft(), |
|
title="FlipKart User Segmentation" |
|
) |
|
|
|
|
|
iface.launch(inline=False) |
|
|