isshagle's picture
Update app.py
2d2124e
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
# Load your dataset
dataset = pd.read_csv('Flipcart.com Clusturing Model.csv')
X = dataset.iloc[:, [2, 4]].values
# Create a K-Means clustering model
kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42)
y_means = kmeans.fit_predict(X)
# Function to perform clustering and return cluster labels and the cluster visualization image
def cluster_data(age, purchase_rating):
features = np.array([age, purchase_rating]).reshape(1, -1)
cluster = kmeans.predict(features)[0]
# Scatter plot to visualize clusters
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)
# Save the plot as an image
image_buffer = BytesIO()
plt.savefig(image_buffer, format='png')
image_buffer.seek(0)
# Create a PIL image from the buffer
pil_image = Image.open(image_buffer)
return f'Data point belongs to Cluster {cluster}', pil_image
# Create a Gradio interface for the clustering model
iface = gr.Interface(
fn=cluster_data,
inputs=[
gr.inputs.Number(label="Age"),
gr.inputs.Number(label="Purchase Rating")
],
outputs=[
gr.outputs.Textbox(label="Cluster"),
gr.outputs.Image(label="Cluster Visualization", type="pil")
],
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"
)
# Launch the Gradio app
iface.launch(inline=False)