Spaces:
Build error
Build error
| 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() |