Spaces:
Sleeping
Sleeping
File size: 2,778 Bytes
803f04a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
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() |