""" Script de test pour diagnostiquer les problèmes d'analyse des tendances """ import pandas as pd import numpy as np from data_loader import AgriculturalDataLoader def test_data_loading(): """Test du chargement des données""" print("🔍 Test du chargement des données...") try: loader = AgriculturalDataLoader() df = loader.load_all_files() print(f"✅ Données chargées: {len(df)} lignes") print(f"📋 Colonnes disponibles: {list(df.columns)}") print(f"📊 Types de données:") print(df.dtypes) return df except Exception as e: print(f"❌ Erreur lors du chargement: {e}") return None def test_herbicide_analysis(df): """Test de l'analyse des herbicides""" print("\n🧪 Test de l'analyse des herbicides...") if df is None: return # Vérifier les colonnes nécessaires required_cols = ['is_herbicide', 'plot_name', 'year', 'crop_type', 'produit', 'plot_surface'] missing_cols = [col for col in required_cols if col not in df.columns] if missing_cols: print(f"❌ Colonnes manquantes: {missing_cols}") return # Filtrer les herbicides herbicide_df = df[df['is_herbicide'] == True].copy() print(f"📊 Nombre d'applications herbicides: {len(herbicide_df)}") if len(herbicide_df) == 0: print("❌ Aucune donnée d'herbicides trouvée") print("🔍 Vérification des valeurs 'is_herbicide':") print(df['is_herbicide'].value_counts()) print("🔍 Vérification des familles de produits:") if 'familleprod' in df.columns: print(df['familleprod'].value_counts()) return print(f"✅ Données herbicides trouvées: {len(herbicide_df)} applications") # Test du calcul IFT print("\n📈 Test du calcul IFT...") try: ift_summary = herbicide_df.groupby(['plot_name', 'year', 'crop_type']).agg({ 'produit': 'count', 'plot_surface': 'first', 'quantitetot': 'sum' }).reset_index() ift_summary['ift_herbicide'] = ift_summary['produit'] / ift_summary['plot_surface'] print(f"✅ IFT calculé pour {len(ift_summary)} combinaisons parcelle/année/culture") print(f"📊 IFT moyen: {ift_summary['ift_herbicide'].mean():.2f}") print(f"📊 IFT max: {ift_summary['ift_herbicide'].max():.2f}") print("\n📋 Échantillon des données IFT:") print(ift_summary.head()) return ift_summary except Exception as e: print(f"❌ Erreur dans le calcul IFT: {e}") return None def test_years_and_plots(df): """Test des années et parcelles disponibles""" print("\n📅 Test des années et parcelles...") if df is None: return years = sorted(df['year'].dropna().unique()) plots = sorted(df['plot_name'].dropna().unique()) print(f"📅 Années disponibles: {years}") print(f"🏞️ Parcelles disponibles: {plots}") # Test par année print("\n📊 Données par année:") year_counts = df.groupby('year').size() print(year_counts) if __name__ == "__main__": print("🚜 Test de l'analyse des tendances herbicides\n") df = test_data_loading() test_herbicide_analysis(df) test_years_and_plots(df) print("\n✅ Tests terminés")