Spaces:
Sleeping
Sleeping
| """ | |
| 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") | |