Aller au contenu principal

Générer des graphiques et visualisations

Generer des graphiques et visualisations

Code Interpreter dispose de matplotlib, seaborn et plotly pour creer des graphiques directement dans l’API. Le modele genere le code de visualisation, l’execute, et retourne les images resultantes.

Graphiques simples avec matplotlib

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.3",
    input="Cree un graphique en barres montrant les ventes par mois : "
          "Jan=120, Fev=98, Mar=145, Avr=167, Mai=189, Jun=210, "
          "Jul=195, Aou=178, Sep=220, Oct=245, Nov=267, Dec=312. "
          "Style professionnel, couleurs bleues, titre et labels.",
    tools=[{"type": "code_interpreter"}],
    instructions="Utilise matplotlib avec un style professionnel. "
                "Police sans-serif, grille legere, pas de cadre superieur ni droit."
)

# Recuperer l'image generee
for item in response.output:
    if item.type == "code_interpreter_call":
        for result in item.results:
            if hasattr(result, "files"):
                for f in result.files:
                    contenu = client.files.content(f.file_id)
                    with open("ventes_mensuelles.png", "wb") as out:
                        out.write(contenu.read())

Graphiques a partir de donnees fichier

L’usage le plus courant : visualiser des donnees depuis un CSV ou Excel :

with open("performance_equipe.csv", "rb") as f:
    fichier = client.files.create(file=f, purpose="assistants")

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "A partir de ce fichier, cree un dashboard avec 4 graphiques : "
                "1. Evolution du chiffre d'affaires par mois (line chart) "
                "2. Repartition par categorie de produit (pie chart) "
                "3. Top 10 des clients par CA (horizontal bar chart) "
                "4. Correlation entre quantite et montant (scatter plot) "
                "Arrange les 4 graphiques dans une grille 2x2."
            )},
            {"type": "input_file", "file_id": fichier.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}],
    instructions="Cree une figure matplotlib avec 4 sous-graphiques. "
                "Utilise une palette de couleurs coherente. "
                "Resolution 1920x1080, DPI 150. "
                "Exporte en PNG haute qualite."
)

Visualisations statistiques avec seaborn

Pour des analyses statistiques visuelles :

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "Analyse statistique visuelle de ces donnees : "
                "1. Heatmap de la matrice de correlation "
                "2. Distribution de chaque variable numerique (histogrammes + KDE) "
                "3. Boxplots par categorie pour identifier les outliers "
                "4. Pairplot des 5 variables principales"
            )},
            {"type": "input_file", "file_id": fichier.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}],
    instructions="Utilise seaborn avec le theme 'whitegrid'. "
                "Annote les valeurs dans la heatmap. "
                "Utilise la palette 'coolwarm' pour les correlations."
)

Graphiques interactifs avec plotly

Le modele peut generer des visualisations interactives en HTML :

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": (
                "Cree un graphique interactif plotly montrant l'evolution "
                "des ventes avec : "
                "- Zoom et selection de plage de dates "
                "- Tooltip au survol avec details "
                "- Boutons pour filtrer par categorie "
                "- Export en fichier HTML autonome"
            )},
            {"type": "input_file", "file_id": fichier.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}]
)

# Recuperer le fichier HTML interactif
for item in response.output:
    if item.type == "code_interpreter_call":
        for result in item.results:
            if hasattr(result, "files"):
                for f in result.files:
                    if f.name.endswith(".html"):
                        contenu = client.files.content(f.file_id)
                        with open("dashboard_interactif.html", "wb") as out:
                            out.write(contenu.read())

Personnalisation avancee

Charte graphique d’entreprise

Guidez le modele vers votre identite visuelle :

CHARTE_GRAPHIQUE = """
Regles de visualisation :
- Couleur principale : #1E3A5F (bleu marine)
- Couleur secondaire : #E74C3C (rouge)
- Couleur accent : #F39C12 (orange)
- Fond : blanc (#FFFFFF)
- Police : sans-serif
- Pas de cadre autour des graphiques
- Grille legere en gris clair (#E0E0E0)
- Titre en gras, taille 14
- Labels des axes en taille 11
- Legende en bas a droite
- Toujours inclure la source des donnees en bas a gauche
- Resolution minimale : 1200x800 pixels
"""

response = client.responses.create(
    model="gpt-5.3",
    input=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Cree un graphique d'evolution du CA trimestriel"},
            {"type": "input_file", "file_id": fichier.id}
        ]
    }],
    tools=[{"type": "code_interpreter"}],
    instructions=CHARTE_GRAPHIQUE
)

Pattern : generateur de rapports visuels

def generer_rapport_visuel(
    fichier_path: str,
    titre_rapport: str,
    sections: list[str]
) -> list[str]:
    """Genere un rapport avec graphiques a partir de donnees."""
    with open(fichier_path, "rb") as f:
        fichier = client.files.create(file=f, purpose="assistants")

    fichiers_generes = []

    for i, section in enumerate(sections):
        response = client.responses.create(
            model="gpt-5.3",
            input=[{
                "role": "user",
                "content": [
                    {"type": "text", "text": f"Section {i+1} du rapport '{titre_rapport}' : {section}"},
                    {"type": "input_file", "file_id": fichier.id}
                ]
            }],
            tools=[{"type": "code_interpreter"}],
            instructions=(
                "Cree un graphique professionnel pour cette section. "
                "Inclus un titre descriptif et des annotations pertinentes. "
                "Exporte en PNG 1200x800 DPI 150."
            )
        )

        for item in response.output:
            if item.type == "code_interpreter_call":
                for result in item.results:
                    if hasattr(result, "files"):
                        for f in result.files:
                            nom = f"rapport_section_{i+1}.png"
                            contenu = client.files.content(f.file_id)
                            with open(nom, "wb") as out:
                                out.write(contenu.read())
                            fichiers_generes.append(nom)

    return fichiers_generes

# Utilisation
graphiques = generer_rapport_visuel(
    "ventes_annuelles.csv",
    "Bilan Commercial 2025",
    [
        "Evolution mensuelle du chiffre d'affaires avec tendance",
        "Repartition des ventes par region (carte ou treemap)",
        "Comparaison des performances par commercial (barres groupees)",
        "Previsions pour les 3 prochains mois (avec intervalle de confiance)"
    ]
)

Conseils pour des graphiques de qualite

instructions_qualite = """
Pour chaque graphique :
- Choisis le type de graphique le plus adapte aux donnees
- Utilise des couleurs accessibles (contraste suffisant)
- Evite les graphiques 3D sauf demande explicite
- Limite les pie charts a 6 categories maximum
- Ajoute des annotations pour les points importants
- Utilise des echelles adaptees (pas de zero tronque sauf justifie)
- Exporte toujours en haute resolution
"""

Points cles a retenir

  • matplotlib, seaborn et plotly sont disponibles dans le sandbox
  • Passez vos donnees via input_file pour des graphiques bases sur des fichiers reels
  • Definissez une charte graphique dans les instructions pour la coherence
  • Recuperez les images generees via client.files.content()
  • Plotly permet de generer des dashboards HTML interactifs