Spaces:
Runtime error
Runtime error
Download app.py from Dave-24/DataCleaner_Copilot: direct link, hf CLI and curl.
- Browser
- Download file 2.97 kB
-
https://huggingface.co/spaces/Dave-24/DataCleaner_Copilot/resolve/main/app.py
- Command line
-
hf download hf://spaces/Dave-24/DataCleaner_Copilot/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Dave-24/DataCleaner_Copilot/resolve/main/app.py
2.97 kB
| # app.py | |
| import gradio as gr | |
| import pandas as pd | |
| import os | |
| import io | |
| from transformers import pipeline | |
| from evidently.report.report import Report | |
| from evidently.metric_preset import DataQualityPrese | |
| # Charger le modèle LLM open-source depuis Hugging Face | |
| llm = pipeline( | |
| "text-generation", | |
| model="Qwen/Qwen2.5-1.5B-Instruct", | |
| trust_remote_code=True, | |
| device_map="auto" | |
| ) | |
| def load_file(file): | |
| if file is None: | |
| return None, "Aucun fichier" | |
| fname = file.name | |
| ext = os.path.splitext(fname)[1].lower() | |
| file.seek(0) | |
| try: | |
| if ext in [".csv"]: | |
| df = pd.read_csv(file) | |
| elif ext in [".xlsx", ".xls"]: | |
| df = pd.read_excel(file) | |
| elif ext in [".json"]: | |
| df = pd.read_json(file) | |
| elif ext in [".parquet"]: | |
| df = pd.read_parquet(file) | |
| else: | |
| return None, "Format non pris en charge" | |
| return df, f"✅ {fname} chargé avec {len(df)} lignes et {len(df.columns)} colonnes." | |
| except Exception as e: | |
| return None, f"Erreur de chargement : {e}" | |
| def profile_dataset(df): | |
| report = Report(metrics=[DataQualityPreset()]) | |
| report.run(reference_data=df, current_data=df) | |
| html = report.as_html() | |
| return html | |
| def generate_insights(df): | |
| # Générer une description textuelle du DataFrame | |
| desc = df.describe(include='all').to_string() | |
| schema = str(df.dtypes.to_dict()) | |
| prompt = f""" | |
| Tu es un assistant expert en data cleaning et data analysis. | |
| Voici le résumé d'un jeu de données : | |
| --- | |
| Types de colonnes : {schema} | |
| Statistiques : {desc} | |
| --- | |
| Tâches : | |
| 1. Identifie les problèmes de qualité potentiels. | |
| 2. Propose des actions de nettoyage. | |
| 3. Suggère des idées clés d'analyse ou des indicateurs intéressants. | |
| 4. Donne des insights potentiels ou des relations à explorer. | |
| Réponds de manière structurée et claire. | |
| """ | |
| output = llm(prompt, max_new_tokens=512)[0]['generated_text'] | |
| return output | |
| def process_file(file): | |
| df, msg = load_file(file) | |
| if df is None: | |
| return msg, "", "" | |
| report_html = profile_dataset(df) | |
| suggestions = generate_insights(df) | |
| return msg, report_html, suggestions | |
| with gr.Blocks(title="DataCleaner Copilot") as app: | |
| gr.Markdown("# 🧠 DataCleaner Copilot (Open Source Edition)") | |
| gr.Markdown("Chargez vos données et laissez l’IA vous aider à nettoyer, analyser et trouver des insights.") | |
| with gr.Row(): | |
| file_input = gr.File(label="Uploader un fichier (CSV, Excel, JSON, Parquet)") | |
| process_btn = gr.Button("Analyser les données") | |
| info_box = gr.Textbox(label="📄 Informations sur le fichier") | |
| report_box = gr.HTML(label="📊 Rapport Evidently") | |
| insight_box = gr.Textbox(label="💡 Suggestions et insights de l'IA", lines=15) | |
| process_btn.click(process_file, inputs=[file_input], outputs=[info_box, report_box, insight_box]) | |
| app.launch() | |