Spaces:
Sleeping
Sleeping
import pandas as pd | |
import gradio as gr | |
import numpy as np | |
import plotly.express as px | |
import pickle | |
from sklearn.preprocessing import StandardScaler | |
# Charger les modèles sauvegardés | |
with open("scaler.pkl", "rb") as f: | |
scaler = pickle.load(f) | |
with open("pca_model.pkl", "rb") as f: | |
pca_model = pickle.load(f) | |
with open("kmeans_model.pkl", "rb") as f: | |
model_cluster = pickle.load(f) | |
# Vérifie si le fichier existe et charge-le | |
try: | |
with open("lg.pkl", "rb") as f: | |
model_diabetes = pickle.load(f) | |
print("Model loaded successfully!") | |
except FileNotFoundError: | |
print("File 'lg.pkl' not found.") | |
except EOFError: | |
print("File 'lg.pkl' is empty or corrupted.") | |
# Charger le dataframe (assurez-vous de mettre le bon chemin vers votre fichier) | |
df_scaled = pd.read_csv("data.csv") # Remplacez par le chemin réel du fichier | |
# Appliquer PCA pour transformer les données en 2D et prédire les clusters | |
pca_result = pca_model.transform(df_scaled) | |
pca_df = pd.DataFrame(pca_result, columns=['PC1', 'PC2']) | |
pca_df['Cluster'] = model_cluster.predict(df_scaled) | |
# Fonction de prédiction du diabète | |
def predict_diabetes(pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, dpf, age): | |
input_data = np.array([[pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, dpf, age]]) | |
prediction = model_diabetes.predict(input_data)[0] # Utilise le modèle de régression logistique pour prédire | |
return "Diabétique" if prediction == 1 else "Non diabétique" | |
# Fonction pour afficher les clusters | |
def plot_clusters(selected_cluster): | |
# Filtrer par le cluster sélectionné (si "Tous" n'est pas choisi) | |
if selected_cluster != "Tous": | |
selected_data = pca_df[pca_df['Cluster'] == int(selected_cluster)] | |
else: | |
selected_data = pca_df | |
if selected_data.empty: | |
return px.scatter(title="Aucun point à afficher") | |
# Créer le graphique avec Plotly | |
fig = px.scatter(selected_data, x='PC1', y='PC2', color=selected_data['Cluster'].astype(str), | |
title=f"Visualisation du Cluster {selected_cluster}", labels={'color': 'Cluster'}) | |
return fig | |
# Fonction pour télécharger les clusters en CSV | |
def download_clusters(): | |
return df.to_csv(index=False), "clusters.csv" | |
# Interface utilisateur Gradio | |
with gr.Blocks() as app: | |
gr.Markdown("## Application Machine Learning : Classification et Clustering") | |
# **Section Classification** | |
gr.Markdown("### Prédiction du Diabète") | |
with gr.Row(): | |
pregnancies = gr.Number(label="Grossesses") | |
glucose = gr.Number(label="Glucose") | |
blood_pressure = gr.Number(label="Pression artérielle") | |
with gr.Row(): | |
skin_thickness = gr.Number(label="Épaisseur de peau") | |
insulin = gr.Number(label="Insuline") | |
bmi = gr.Number(label="IMC") | |
with gr.Row(): | |
dpf = gr.Number(label="DPF") | |
age = gr.Number(label="Âge") | |
predict_button = gr.Button("Prédire") | |
output_label = gr.Textbox(label="Résultat") | |
predict_button.click(fn=predict_diabetes, | |
inputs=[pregnancies, glucose, blood_pressure, skin_thickness, insulin, bmi, dpf, age], | |
outputs=output_label) | |
# **Section Clustering** | |
gr.Markdown("### Visualisation des Clusters des Réactions en Ligne") | |
# Calculate unique clusters after PCA and prediction | |
unique_clusters = pca_df['Cluster'].unique() | |
cluster_selector = gr.Dropdown(["Tous"] + [str(i) for i in unique_clusters], | |
label="Sélectionner un cluster") | |
cluster_plot = gr.Plot() | |
cluster_selector.change(fn=plot_clusters, inputs=[cluster_selector], outputs=[cluster_plot]) | |
# Téléchargement des clusters | |
download_button = gr.Button("Télécharger les clusters") | |
download_button.click(fn=download_clusters, outputs=gr.File()) | |
app.launch() |