Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
import numpy as np | |
import plotly.express as px | |
from sklearn.cluster import KMeans, AgglomerativeClustering, SpectralClustering | |
from sklearn.preprocessing import StandardScaler | |
from sklearn.decomposition import PCA | |
def perform_clustering(data_file, model_type, n_clusters): | |
# Lire les données | |
df = pd.read_csv(data_file.name) | |
# Nettoyage supplémentaire au cas où (suppression des NaN) | |
df = df.dropna() | |
# Standardisation des données | |
scaler = StandardScaler() | |
X_scaled = scaler.fit_transform(df) | |
# Réduction de dimension pour visualisation (si plus de 2 features) | |
if X_scaled.shape[1] > 2: | |
pca = PCA(n_components=2) | |
X_vis = pca.fit_transform(X_scaled) | |
else: | |
X_vis = X_scaled | |
# Application du clustering | |
if model_type == "KMeans": | |
model = KMeans(n_clusters=n_clusters, random_state=42) | |
elif model_type == "CAH": | |
model = AgglomerativeClustering(n_clusters=n_clusters) | |
elif model_type == "Spectral Clustering": | |
model = SpectralClustering(n_clusters=n_clusters, affinity='nearest_neighbors', random_state=42) | |
clusters = model.fit_predict(X_scaled) | |
# Création du dataframe de résultats | |
results_df = df.copy() | |
results_df['Cluster'] = clusters | |
# Visualisation | |
if X_vis.shape[1] >= 2: | |
fig = px.scatter( | |
x=X_vis[:, 0], | |
y=X_vis[:, 1], | |
color=clusters, | |
title=f"Visualisation des clusters ({model_type}, k={n_clusters})", | |
labels={'x': 'Composante 1', 'y': 'Composante 2'}, | |
color_continuous_scale=px.colors.qualitative.Plotly | |
) | |
else: | |
fig = px.scatter( | |
x=range(len(X_vis)), | |
y=X_vis[:, 0], | |
color=clusters, | |
title=f"Visualisation des clusters ({model_type}, k={n_clusters})", | |
labels={'x': 'Index', 'y': 'Valeur'}, | |
color_continuous_scale=px.colors.qualitative.Plotly | |
) | |
return fig, results_df | |
# Interface Gradio | |
iface = gr.Interface( | |
fn=perform_clustering, | |
inputs=[ | |
gr.File(label="Uploader votre jeu de données (CSV)"), | |
gr.Dropdown(["KMeans", "CAH", "Spectral Clustering"], label="Modèle de clustering", value="KMeans"), | |
gr.Slider(2, 10, step=1, label="Nombre de clusters (k)", value=3) | |
], | |
outputs=[ | |
gr.Plot(label="Visualisation des clusters"), | |
gr.Dataframe(label="Données avec labels de cluster") | |
], | |
title="Application de Clustering", | |
description="""Uploader un jeu de données nettoyé, choisissez un modèle de clustering | |
et le nombre de clusters pour obtenir une visualisation et les résultats.""" | |
) | |
iface.launch() |