Dave-24's picture
Update app.py
0d5d928 verified
Raw History Blame Contribute Delete
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()