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