Analyse de données
Traitement et analyse de données avec ChatGPT
10-15 min
Analyse de données avec ChatGPT
Introduction
L’API ChatGPT peut être utilisée pour analyser et interpréter des données de différentes manières. Dans ce tutoriel, nous allons explorer comment utiliser ChatGPT pour l’analyse de données, la visualisation et l’interprétation des résultats.
Types d’analyses possibles
-
Analyse descriptive
- Statistiques de base
- Tendances et patterns
- Résumés de données
-
Analyse prédictive
- Prévisions
- Détection d’anomalies
- Classification
-
Analyse de texte
- Analyse de sentiment
- Extraction d’entités
- Classification de texte
Intégration avec Python
1. Configuration de base
import openai
import pandas as pd
import numpy as np
from typing import List, Dict, Any
class ChatGPTAnalyzer:
def __init__(self, api_key: str):
openai.api_key = api_key
def analyze_dataframe(self, df: pd.DataFrame, analysis_type: str) -> str:
"""
Analyse un DataFrame pandas en utilisant ChatGPT
"""
# Convertir le DataFrame en format texte
data_description = df.describe().to_string()
data_sample = df.head().to_string()
prompt = f"""
Analysez les données suivantes de type {analysis_type}:
Description statistique:
{data_description}
Échantillon de données:
{data_sample}
Veuillez fournir:
1. Un résumé des observations clés
2. Les tendances principales
3. Des recommandations basées sur les données
"""
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Vous êtes un expert en analyse de données."},
{"role": "user", "content": prompt}
],
temperature=0.3
)
return response.choices[0].message.content
except Exception as e:
print(f"Erreur lors de l'analyse: {str(e)}")
return None
2. Analyse de séries temporelles
class TimeSeriesAnalyzer:
def __init__(self, api_key: str):
self.analyzer = ChatGPTAnalyzer(api_key)
def analyze_trends(self, df: pd.DataFrame, date_column: str, value_column: str) -> str:
"""
Analyse les tendances dans une série temporelle
"""
# Préparer les données
df[date_column] = pd.to_datetime(df[date_column])
df = df.sort_values(date_column)
# Calculer les statistiques de base
stats = {
'mean': df[value_column].mean(),
'std': df[value_column].std(),
'min': df[value_column].min(),
'max': df[value_column].max(),
'trend': np.polyfit(range(len(df)), df[value_column], 1)[0]
}
prompt = f"""
Analysez cette série temporelle:
Statistiques:
- Moyenne: {stats['mean']:.2f}
- Écart-type: {stats['std']:.2f}
- Minimum: {stats['min']:.2f}
- Maximum: {stats['max']:.2f}
- Tendance (pente): {stats['trend']:.2f}
Données récentes:
{df.tail().to_string()}
Veuillez fournir:
1. Une analyse de la tendance générale
2. Identification des patterns saisonniers
3. Prévisions à court terme
4. Recommandations basées sur l'analyse
"""
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Vous êtes un expert en analyse de séries temporelles."},
{"role": "user", "content": prompt}
],
temperature=0.3
)
return response.choices[0].message.content
except Exception as e:
print(f"Erreur lors de l'analyse: {str(e)}")
return None
3. Analyse de texte
class TextAnalyzer:
def __init__(self, api_key: str):
self.analyzer = ChatGPTAnalyzer(api_key)
def analyze_sentiment(self, texts: List[str]) -> List[Dict[str, Any]]:
"""
Analyse le sentiment d'une liste de textes
"""
results = []
for text in texts:
prompt = f"""
Analysez le sentiment du texte suivant:
"{text}"
Fournissez:
1. Le sentiment général (positif/négatif/neutre)
2. Le score de sentiment (-1 à 1)
3. Les mots-clés émotionnels
4. Une brève explication
"""
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Vous êtes un expert en analyse de sentiment."},
{"role": "user", "content": prompt}
],
temperature=0.3
)
results.append({
'text': text,
'analysis': response.choices[0].message.content
})
except Exception as e:
print(f"Erreur lors de l'analyse: {str(e)}")
results.append({
'text': text,
'analysis': None
})
return results
Exemples d’utilisation
1. Analyse de données de ventes
# Exemple d'utilisation
import pandas as pd
from datetime import datetime, timedelta
# Créer des données de test
dates = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
sales = np.random.normal(1000, 200, len(dates))
df = pd.DataFrame({
'date': dates,
'sales': sales
})
# Initialiser l'analyseur
analyzer = TimeSeriesAnalyzer('votre_clé_api')
# Analyser les tendances
analysis = analyzer.analyze_trends(df, 'date', 'sales')
print(analysis)
2. Analyse de feedback clients
# Exemple d'analyse de sentiment
texts = [
"Le produit est excellent, je le recommande vivement !",
"Service client décevant, réponse très lente.",
"Bon rapport qualité-prix, mais livraison un peu lente."
]
analyzer = TextAnalyzer('votre_clé_api')
results = analyzer.analyze_sentiment(texts)
for result in results:
print(f"\nTexte: {result['text']}")
print(f"Analyse: {result['analysis']}")
Visualisation des résultats
1. Intégration avec Matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
class DataVisualizer:
@staticmethod
def plot_time_series(df: pd.DataFrame, date_column: str, value_column: str):
"""
Crée une visualisation de série temporelle
"""
plt.figure(figsize=(12, 6))
sns.set_style("whitegrid")
plt.plot(df[date_column], df[value_column], label='Données')
# Ajouter la tendance
z = np.polyfit(range(len(df)), df[value_column], 1)
p = np.poly1d(z)
plt.plot(df[date_column], p(range(len(df))), "r--", label='Tendance')
plt.title('Analyse de série temporelle')
plt.xlabel('Date')
plt.ylabel('Valeur')
plt.legend()
return plt.gcf()
@staticmethod
def plot_sentiment_distribution(results: List[Dict[str, Any]]):
"""
Crée une visualisation de la distribution des sentiments
"""
sentiments = []
for result in results:
if result['analysis']:
# Extraire le sentiment de l'analyse
sentiment = result['analysis'].split('\n')[0].lower()
sentiments.append(sentiment)
plt.figure(figsize=(8, 6))
sns.countplot(x=sentiments)
plt.title('Distribution des sentiments')
plt.xlabel('Sentiment')
plt.ylabel('Nombre')
return plt.gcf()
Bonnes pratiques
-
Prétraitement des données
- Nettoyage des données
- Gestion des valeurs manquantes
- Normalisation des données
-
Optimisation des prompts
- Instructions claires et spécifiques
- Contexte approprié
- Format de sortie structuré
-
Gestion des erreurs
- Validation des entrées
- Gestion des exceptions
- Logging approprié
-
Performance
- Traitement par lots
- Mise en cache des résultats
- Limitation des appels API
Commentaires
Les commentaires sont alimentés par GitHub Discussions
Connectez-vous avec GitHub pour participer à la discussion