Tracy André commited on
Commit
b5ed585
·
1 Parent(s): 788567c
Files changed (4) hide show
  1. app.py +23 -12
  2. fix_env.sh +23 -0
  3. test_hf_connection.py +64 -0
  4. test_hf_simple.py +54 -0
app.py CHANGED
@@ -32,38 +32,49 @@ class AgricultureAnalyzer:
32
  # D'abord, essayer de charger depuis Hugging Face
33
  try:
34
  print(f"🤗 Tentative de chargement depuis Hugging Face: {dataset_id}")
35
- dataset = load_dataset(dataset_id, token=hf_token)
36
 
37
- # Ligne 35 - Changer use_auth_token en token
38
- # Lignes 37-50 - Améliorer la gestion du dataset multi-fichiers
 
 
 
 
 
 
 
 
39
  if 'train' in dataset:
40
  # Convertir en DataFrame pandas
41
  df_raw = dataset['train'].to_pandas()
42
- print(f"✅ Dataset chargé: {len(df_raw)} lignes trouvées")
 
43
 
44
- # Le dataset HF concatène tous les CSV (2014-2025)
45
- # Filtrer par année si possible
46
  if 'millesime' in df_raw.columns:
47
- # Prendre les données les plus récentes (2023-2025)
48
- recent_data = df_raw[df_raw['millesime'] >= 2023]
 
49
  if len(recent_data) > 0:
50
  self.df = recent_data
51
- print(f"✅ Données filtrées: {len(self.df)} lignes des années récentes")
52
  else:
53
  self.df = df_raw
54
  print(f"✅ Toutes les données utilisées: {len(self.df)} lignes")
55
  else:
56
  self.df = df_raw
57
- print(f"✅ Données chargées: {len(self.df)} lignes")
58
 
59
  return self.analyze_data()
60
  else:
61
  # Si pas de split 'train', prendre le premier disponible
62
  available_splits = list(dataset.keys())
63
  if available_splits:
64
- self.df = dataset[available_splits[0]].to_pandas()
65
- print(f"✅ Données chargées depuis Hugging Face (split: {available_splits[0]})")
 
66
  return self.analyze_data()
 
 
67
 
68
  except Exception as e:
69
  print(f"⚠️ Erreur lors du chargement depuis Hugging Face: {e}")
 
32
  # D'abord, essayer de charger depuis Hugging Face
33
  try:
34
  print(f"🤗 Tentative de chargement depuis Hugging Face: {dataset_id}")
 
35
 
36
+ # Chargement du dataset avec gestion d'erreur améliorée
37
+ if hf_token:
38
+ dataset = load_dataset(dataset_id, token=hf_token)
39
+ print(f"🔑 Authentification avec token réussie")
40
+ else:
41
+ print(f"⚠️ Aucun token HF_TOKEN trouvé, tentative sans authentification")
42
+ dataset = load_dataset(dataset_id)
43
+
44
+ print(f"📊 Splits disponibles: {list(dataset.keys())}")
45
+
46
  if 'train' in dataset:
47
  # Convertir en DataFrame pandas
48
  df_raw = dataset['train'].to_pandas()
49
+ print(f"✅ Dataset chargé: {len(df_raw)} lignes, {len(df_raw.columns)} colonnes")
50
+ print(f"🏷️ Colonnes disponibles: {list(df_raw.columns)[:10]}...") # Afficher les 10 premières colonnes
51
 
52
+ # Filtrer par année si la colonne millesime existe
 
53
  if 'millesime' in df_raw.columns:
54
+ print(f"📅 Années disponibles: {sorted(df_raw['millesime'].unique())}")
55
+ # Prendre les données récentes (2022-2025)
56
+ recent_data = df_raw[df_raw['millesime'] >= 2022]
57
  if len(recent_data) > 0:
58
  self.df = recent_data
59
+ print(f"✅ Données filtrées: {len(self.df)} lignes pour les années récentes")
60
  else:
61
  self.df = df_raw
62
  print(f"✅ Toutes les données utilisées: {len(self.df)} lignes")
63
  else:
64
  self.df = df_raw
65
+ print(f"✅ Données chargées (pas de filtrage par année): {len(self.df)} lignes")
66
 
67
  return self.analyze_data()
68
  else:
69
  # Si pas de split 'train', prendre le premier disponible
70
  available_splits = list(dataset.keys())
71
  if available_splits:
72
+ first_split = available_splits[0]
73
+ self.df = dataset[first_split].to_pandas()
74
+ print(f"✅ Données chargées depuis le split '{first_split}': {len(self.df)} lignes")
75
  return self.analyze_data()
76
+ else:
77
+ raise Exception("Aucun split trouvé dans le dataset")
78
 
79
  except Exception as e:
80
  print(f"⚠️ Erreur lors du chargement depuis Hugging Face: {e}")
fix_env.sh ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Script pour corriger l'environnement local
3
+
4
+ echo "🔧 Correction de l'environnement pour Mac ARM64"
5
+
6
+ # Créer un nouvel environnement conda propre
7
+ echo "📦 Création d'un environnement conda propre..."
8
+ conda create -n hackathon-clean python=3.10 -y
9
+ source $(conda info --base)/etc/profile.d/conda.sh
10
+ conda activate hackathon-clean
11
+
12
+ # Installation des packages dans le bon ordre
13
+ echo "📥 Installation des dépendances..."
14
+ pip install --no-cache-dir numpy==1.24.3
15
+ pip install --no-cache-dir pandas
16
+ pip install --no-cache-dir matplotlib seaborn plotly
17
+ pip install --no-cache-dir datasets huggingface_hub
18
+ pip install --no-cache-dir gradio==4.31.0
19
+
20
+ echo "✅ Environnement configuré !"
21
+ echo "🚀 Pour utiliser cet environnement:"
22
+ echo " conda activate hackathon-clean"
23
+ echo " python app.py"
test_hf_connection.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Script de test pour vérifier la connexion au dataset HuggingFace
4
+ """
5
+
6
+ import os
7
+ from datasets import load_dataset
8
+
9
+ # Configuration
10
+ dataset_id = "HackathonCRA/2024"
11
+ hf_token = os.environ.get("HF_TOKEN")
12
+
13
+ print("🧪 Test de connexion au dataset HuggingFace")
14
+ print(f"📦 Dataset: {dataset_id}")
15
+ print(f"🔑 Token configuré: {'✅ Oui' if hf_token else '❌ Non'}")
16
+ print()
17
+
18
+ try:
19
+ # Test 1: Chargement du dataset
20
+ print("🔄 Chargement du dataset...")
21
+ if hf_token:
22
+ dataset = load_dataset(dataset_id, token=hf_token)
23
+ print("✅ Chargement avec token réussi")
24
+ else:
25
+ print("⚠️ Tentative sans token...")
26
+ dataset = load_dataset(dataset_id)
27
+ print("✅ Chargement sans token réussi")
28
+
29
+ # Test 2: Exploration de la structure
30
+ print(f"📊 Splits disponibles: {list(dataset.keys())}")
31
+
32
+ if 'train' in dataset:
33
+ train_data = dataset['train']
34
+ print(f"📈 Nombre d'enregistrements dans 'train': {len(train_data)}")
35
+
36
+ # Conversion en DataFrame pour inspection
37
+ df = train_data.to_pandas()
38
+ print(f"📝 Colonnes disponibles ({len(df.columns)}): {list(df.columns)}")
39
+ print(f"📏 Forme des données: {df.shape}")
40
+
41
+ # Vérifier les colonnes importantes
42
+ important_cols = ['millesime', 'familleprod', 'produit', 'quantitetot', 'numparcell']
43
+ available_important = [col for col in important_cols if col in df.columns]
44
+ print(f"🎯 Colonnes importantes trouvées: {available_important}")
45
+
46
+ # Statistiques rapides
47
+ if 'millesime' in df.columns:
48
+ print(f"📅 Années disponibles: {sorted(df['millesime'].unique())}")
49
+
50
+ if 'familleprod' in df.columns:
51
+ print(f"🧪 Types de produits: {df['familleprod'].value_counts().head()}")
52
+
53
+ print("✅ Test de connexion réussi !")
54
+
55
+ else:
56
+ print("⚠️ Pas de split 'train' trouvé")
57
+
58
+ except Exception as e:
59
+ print(f"❌ Erreur lors du test: {e}")
60
+ print()
61
+ print("💡 Solutions possibles:")
62
+ print("1. Vérifiez que le dataset existe: https://huggingface.co/datasets/HackathonCRA/2024")
63
+ print("2. Configurez votre token HF: export HF_TOKEN='votre_token'")
64
+ print("3. Vérifiez vos permissions d'accès au dataset")
test_hf_simple.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test simplifié de connexion HuggingFace sans numpy
4
+ """
5
+
6
+ import os
7
+
8
+ def test_hf_connection():
9
+ print("🧪 Test de connexion simple au dataset HuggingFace")
10
+
11
+ dataset_id = "HackathonCRA/2024"
12
+ hf_token = os.environ.get("HF_TOKEN")
13
+
14
+ print(f"📦 Dataset: {dataset_id}")
15
+ print(f"🔑 Token configuré: {'✅ Oui' if hf_token else '❌ Non'}")
16
+
17
+ try:
18
+ # Import ici pour éviter les conflits
19
+ from huggingface_hub import HfApi
20
+
21
+ api = HfApi(token=hf_token)
22
+
23
+ # Test d'accès au dataset
24
+ print("🔄 Test d'accès au dataset...")
25
+ dataset_info = api.dataset_info(dataset_id)
26
+
27
+ print(f"✅ Dataset accessible !")
28
+ print(f"📝 Description: {dataset_info.description or 'Pas de description'}")
29
+ print(f"🏷️ Tags: {dataset_info.tags}")
30
+ print(f"📊 Dernière modification: {dataset_info.last_modified}")
31
+
32
+ # Lister les fichiers
33
+ files = api.list_repo_files(dataset_id, repo_type="dataset")
34
+ csv_files = [f for f in files if f.endswith('.csv')]
35
+
36
+ print(f"📄 Fichiers CSV trouvés ({len(csv_files)}):")
37
+ for f in csv_files[:5]: # Afficher les 5 premiers
38
+ print(f" - {f}")
39
+ if len(csv_files) > 5:
40
+ print(f" ... et {len(csv_files) - 5} autres")
41
+
42
+ return True
43
+
44
+ except Exception as e:
45
+ print(f"❌ Erreur: {e}")
46
+ print()
47
+ print("💡 Solutions possibles:")
48
+ print("1. Vérifiez que le dataset existe: https://huggingface.co/datasets/HackathonCRA/2024")
49
+ print("2. Configurez votre token: export HF_TOKEN='votre_token'")
50
+ print("3. Vérifiez vos permissions d'accès")
51
+ return False
52
+
53
+ if __name__ == "__main__":
54
+ test_hf_connection()