File size: 5,544 Bytes
27281c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
"""
Version alternative de main.py qui fonctionne sans Gradio
Pour les cas où les dépendances Gradio posent problème
"""
import warnings
import matplotlib.pyplot as plt
import seaborn as sns
from data_loader import DataLoader
from analyzer import AgricultureAnalyzer
from visualizations import AgricultureVisualizer

# Suppression des warnings
warnings.filterwarnings('ignore')

# Configuration des graphiques
plt.style.use('default')
sns.set_palette("husl")


def run_analysis_without_ui():
    """Exécute l'analyse sans interface utilisateur"""
    print("🌾 Analyse des Adventices Agricoles - Mode Console")
    print("=" * 60)
    
    try:
        # Initialisation des composants
        print("🔄 Initialisation des composants...")
        data_loader = DataLoader()
        analyzer = AgricultureAnalyzer()
        visualizer = AgricultureVisualizer()
        
        # Chargement des données
        print("\n📊 Chargement des données...")
        result = data_loader.load_data()
        if isinstance(result, str) and "❌" in result:
            print(f"Erreur: {result}")
            return False
        
        if not data_loader.has_data():
            print("❌ Aucune donnée disponible")
            return False
        
        data = data_loader.get_data()
        print(f"✅ {len(data)} enregistrements chargés")
        
        # Analyse des données
        print("\n🔬 Analyse des données...")
        analyzer.set_data(data)
        general_stats, herbicide_stats = analyzer.analyze_data()
        
        if general_stats:
            print("✅ Analyse générale terminée")
            print(f"   - Parcelles: {general_stats['total_parcelles']}")
            print(f"   - Interventions: {general_stats['total_interventions']}")
            print(f"   - Surface totale: {general_stats['surface_totale']:.2f} ha")
        
        if herbicide_stats:
            print("✅ Analyse herbicides terminée")
            print(f"   - Interventions herbicides: {herbicide_stats['nb_interventions_herbicides']}")
            print(f"   - Pourcentage: {herbicide_stats['pourcentage_herbicides']:.1f}%")
        
        # Génération des statistiques
        print("\n📋 Génération des statistiques...")
        stats = analyzer.get_summary_stats()
        print("✅ Statistiques générées")
        
        # Génération des recommandations
        print("\n🎯 Génération des recommandations...")
        recommendations = analyzer.get_low_risk_recommendations()
        print("✅ Recommandations générées")
        
        # Sauvegarde des résultats
        print("\n💾 Sauvegarde des résultats...")
        try:
            # Sauvegarde des statistiques
            with open('results/stats_console.md', 'w', encoding='utf-8') as f:
                f.write("# Analyse des Adventices Agricoles\n\n")
                f.write(stats)
                f.write("\n\n")
                f.write(recommendations)
            
            # Sauvegarde de l'analyse des risques si disponible
            risk_analysis = analyzer.get_risk_analysis()
            if risk_analysis is not None and len(risk_analysis) > 0:
                risk_analysis.to_csv('results/risk_analysis_console.csv')
                print("✅ Analyse des risques sauvegardée (CSV)")
            
            print("✅ Résultats sauvegardés dans results/")
            
        except Exception as e:
            print(f"⚠️ Erreur lors de la sauvegarde: {e}")
        
        # Tentative de génération des graphiques
        print("\n📈 Tentative de génération des graphiques...")
        try:
            visualizer.set_data(data, analyzer.get_risk_analysis())
            
            # Les graphiques seront créés mais ne pourront pas être affichés en mode console
            print("⚠️ Les graphiques sont générés mais ne peuvent pas être affichés en mode console")
            print("💡 Utilisez main.py avec Gradio pour voir les visualisations interactives")
            
        except Exception as e:
            print(f"⚠️ Impossible de générer les graphiques: {e}")
        
        print("\n🎉 Analyse terminée avec succès!")
        print("\n📁 Fichiers générés:")
        print("   - results/stats_console.md : Statistiques et recommandations")
        print("   - results/risk_analysis_console.csv : Analyse détaillée des risques")
        
        return True
        
    except Exception as e:
        print(f"❌ Erreur critique: {e}")
        import traceback
        traceback.print_exc()
        return False


def main():
    """Fonction principale en mode fallback"""
    print("🔧 Mode Fallback - Analyse sans interface Gradio")
    
    try:
        # Tentative d'import de Gradio pour vérifier la disponibilité
        try:
            import gradio as gr
            print("✅ Gradio disponible - vous pouvez utiliser main.py")
            print("⚠️ Utilisation du mode fallback forcé")
        except ImportError as e:
            print(f"⚠️ Gradio non disponible: {e}")
            print("🔄 Utilisation du mode console")
    except Exception as e:
        print(f"⚠️ Problème avec Gradio: {e}")
        print("🔄 Utilisation du mode console")
    
    # Exécution de l'analyse
    success = run_analysis_without_ui()
    
    if success:
        print("\n✅ Mode fallback exécuté avec succès")
    else:
        print("\n❌ Échec du mode fallback")
        exit(1)


if __name__ == "__main__":
    main()