Aliou12's picture
Update app.py
4538ba0 verified
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()