edb-noumea 0.2.14__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
edb_noumea/details.py CHANGED
@@ -90,40 +90,40 @@ def get_detailed_results():
90
90
 
91
91
  print(f"✅ {len(tables)} tableau(x) trouvé(s). Affichage du premier.")
92
92
  df = tables[0]
93
-
94
- # Utiliser la première ligne comme en-têtes et supprimer cette ligne du DataFrame
95
- df.columns = df.iloc[0]
96
- df = df[1:].reset_index(drop=True)
97
-
98
- # Nettoyer les noms de colonnes (supprimer les retours à la ligne et les espaces superflus)
99
- df.columns = df.columns.str.replace('\n', ' ', regex=False).str.strip()
100
-
101
-
102
-
103
93
  print("\n--- Aperçu du tableau extrait (toutes colonnes) ---")
104
94
  with pd.option_context('display.max_columns', None):
105
95
  print(df)
106
96
  print("\nColonnes:", list(df.columns))
107
97
  print("Shape:", df.shape)
108
98
 
109
- # Sélection dynamique des colonnes par nom
110
- # Recherche des colonnes contenant les mots-clés
111
- site_col = df.columns[0]
112
- point_prelevement_col = df.columns[1]
113
- date_col = next((col for col in df.columns if "Date" in str(col) and "prélèvement" in str(col)), None)
114
- heure_col = next((col for col in df.columns if "Heure" in str(col) and "prélèvement" in str(col)), None)
115
- e_coli_col = next((col for col in df.columns if "coli" in str(col) and "NPP" in str(col)), None)
116
- entero_col = next((col for col in df.columns if ("Entérocoques" in str(col) or "intestinaux" in str(col)) and "NPP" in str(col)), None)
117
-
118
- # Les noms de colonnes pour 'site' et 'point de prélèvement' sont souvent
119
- # non reconnus par tabula, on se base donc sur leur position (2 premières colonnes).
120
- if not all([date_col, heure_col, e_coli_col, entero_col]):
121
- print(f"❌ Une ou plusieurs colonnes n'ont pas été trouvées dans le tableau. Colonnes disponibles : {list(df.columns)}")
99
+ # Nettoyer les noms de colonnes pour faciliter la recherche
100
+ def clean_col(col):
101
+ return str(col).replace("Unnamed:", "").replace("_", " ").replace("\xa0", " ").replace("\n", " ").replace("duprélèvement", "du prélèvement").strip().lower()
102
+
103
+ cleaned_columns = {clean_col(col): col for col in df.columns if not str(col).startswith("Unnamed")}
104
+
105
+ def find_col(possibles):
106
+ for key, col in cleaned_columns.items():
107
+ for possible in possibles:
108
+ if possible in key:
109
+ return col
122
110
  return None
123
111
 
124
- # Sélectionne les colonnes d'intérêt
125
- selected_cols = [site_col, point_prelevement_col, date_col, heure_col, e_coli_col, entero_col]
126
- cleaned_df = df[selected_cols].copy()
112
+ site_col = find_col(["nom du site"])
113
+ point_prelevement_col = find_col(["point de prélèvement"])
114
+ date_col = find_col(["date du prélèvement"])
115
+ heure_col = find_col(["heure du prélèvement", "heure"])
116
+ e_coli_col = find_col(["escherichia", "coli"])
117
+ entero_col = find_col(["entérocoques"])
118
+
119
+ # Vérification des colonnes requises
120
+ if not all([site_col, point_prelevement_col, date_col, heure_col, e_coli_col, entero_col]):
121
+ print(f"❌ Certaines colonnes requises n'ont pas été trouvées. Colonnes disponibles : {list(df.columns)}")
122
+ print(f"Colonnes nettoyées : {list(cleaned_columns.keys())}")
123
+ return None
124
+
125
+ # Sélection et renommage
126
+ cleaned_df = df.loc[:, [site_col, point_prelevement_col, date_col, heure_col, e_coli_col, entero_col]].copy()
127
127
  cleaned_df.columns = [
128
128
  "site",
129
129
  "point_de_prelevement",
@@ -171,8 +171,6 @@ if __name__ == "__main__":
171
171
  "e_coli_npp_100ml",
172
172
  "enterocoques_npp_100ml"
173
173
  ]])
174
-
175
- # Sauvegarder le DataFrame dans un fichier CSV
176
- output_csv_path = "details.csv"
177
- detailed_df.to_csv(output_csv_path, index=False)
178
- print(f"\n✅ Résultats détaillés sauvegardés dans : {output_csv_path}")
174
+ # Export CSV
175
+ detailed_df.to_csv("details_dernier_releve.csv", index=False)
176
+ print("\n✅ Export CSV : details_dernier_releve.csv")
@@ -0,0 +1,13 @@
1
+ Metadata-Version: 2.4
2
+ Name: edb-noumea
3
+ Version: 0.3.0
4
+ Summary: Scraper robuste pour la qualité des eaux de baignade à Nouméa. Ajout export CSV automatique et détection améliorée des colonnes PDF.
5
+ Project-URL: Homepage, https://github.com/adriens/edb-noumea
6
+ Project-URL: Repository, https://github.com/adriens/edb-noumea
7
+ Requires-Dist: requests
8
+ Requires-Dist: beautifulsoup4
9
+ Requires-Dist: pandas
10
+ Requires-Dist: lxml
11
+ Requires-Dist: tabula-py
12
+ Requires-Dist: jpype1
13
+ Requires-Dist: matplotlib
@@ -0,0 +1,7 @@
1
+ edb_noumea/__init__.py,sha256=G7WKTGLsr2wtW1E2jYpqq4miZLoSGhTifSE36CGNkLo,60
2
+ edb_noumea/details.py,sha256=8HYMPTcwcM66saOIFFiCMYrWpBB6iE4AN2PSstNK9uY,7731
3
+ edb_noumea/main.py,sha256=KWT0ZGrHlbhEsQxi_Rw0Mm1syDIxoY-Px1yab94IbJc,2115
4
+ edb_noumea-0.3.0.dist-info/METADATA,sha256=Uf87zUeSb-sVkS6NPz5ZwEAsvFZD1fWfIfPGMSVcfBQ,495
5
+ edb_noumea-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6
+ edb_noumea-0.3.0.dist-info/top_level.txt,sha256=Dj3JusM0b5H9_f9yZeO-IwucCZzI1OHSjLMKtvRjq6k,11
7
+ edb_noumea-0.3.0.dist-info/RECORD,,
@@ -1,203 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: edb-noumea
3
- Version: 0.2.14
4
- Summary: Un scraper pour la qualité des eaux de baignade à Nouméa.
5
- Author: Adrien SALES
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/adriens/edb-noumea
8
- Project-URL: Repository, https://github.com/adriens/edb-noumea
9
- Classifier: Development Status :: 4 - Beta
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: License :: OSI Approved :: MIT License
12
- Classifier: Operating System :: OS Independent
13
- Classifier: Topic :: Utilities
14
- Description-Content-Type: text/markdown
15
- Requires-Dist: requests
16
- Requires-Dist: beautifulsoup4
17
- Requires-Dist: pandas
18
- Requires-Dist: lxml
19
- Requires-Dist: tabula-py
20
- Requires-Dist: matplotlib
21
- Provides-Extra: dev
22
- Requires-Dist: pytest; extra == "dev"
23
- Requires-Dist: ruff; extra == "dev"
24
-
25
- ![Built with uv](https://img.shields.io/badge/Built%20with-uv-blueviolet?logo=python&logoColor=white)
26
- [![PyPI - Downloads](https://img.shields.io/pypi/dm/edb-noumea)](https://pypistats.org/packages/edb-noumea)
27
-
28
-
29
-
30
-
31
- # Qualité des Eaux de Baignade à Nouméa
32
-
33
- Ce projet Python fournit un outil simple pour scraper les données sur la qualité des eaux de baignade à Nouméa depuis le site officiel de la ville (`noumea.nc`). Il extrait les informations et les présente sous forme de tableau dans le terminal.
34
-
35
- Il se base sur les données de https://www.noumea.nc/noumea-pratique/salubrite-publique/qualite-eaux-baignade
36
-
37
- ## Prérequis
38
-
39
- Avant de commencer, assurez-vous d'avoir installé `uv`, le gestionnaire de paquets et d'environnements virtuels Python.
40
-
41
-
42
-
43
-
44
- ## Installation
45
-
46
- Suivez ces étapes pour configurer l'environnement et installer les dépendances.
47
-
48
- 1. **Accédez au répertoire du projet :**
49
- ```bash
50
- cd edb-noumea
51
- ```
52
-
53
- 2. **Créez un environnement virtuel avec `uv` :**
54
- ```bash
55
- uv venv
56
- ```
57
-
58
- 3. **Activez l'environnement virtuel :**
59
- ```bash
60
- source .venv/bin/activate
61
- ```
62
- *(Sur Windows, utilisez `.venv\Scripts\activate`)*
63
-
64
- 4. **Installez les dépendances du projet :**
65
- ```bash
66
- uv pip install -e .
67
- ```
68
- *(L'option `-e .` installe le projet en mode "éditable", ce qui vous permet de modifier le code sans avoir à le réinstaller.)*
69
-
70
- ## Utilisation
71
-
72
- Ce package peut être utilisé de deux manières : soit pour obtenir un résumé de l'état des plages, soit pour obtenir les résultats détaillés des derniers prélèvements.
73
-
74
- ### Obtenir le résumé de l'état sanitaire
75
-
76
- Pour obtenir le tableau de résumé simple depuis la page web principale, exécutez :
77
- ```bash
78
- python -m edb_noumea.main
79
- ```
80
-
81
- ### Obtenir les résultats détaillés (depuis PDF)
82
-
83
- Pour obtenir le tableau détaillé des derniers relevés (extrait automatiquement du dernier fichier PDF disponible), exécutez :
84
- ```bash
85
- python -m edb_noumea.details
86
- ```
87
-
88
-
89
- ## Générer des graphiques PNG des analyses détaillées
90
-
91
- Vous pouvez générer automatiquement deux graphiques au format PNG (niveaux d'E. coli et d'Entérocoques par point de prélèvement) à partir des derniers résultats d'analyses, grâce au script fourni.
92
-
93
- ### Étapes
94
-
95
- 1. Assurez-vous que l'environnement virtuel est activé et que les dépendances sont installées.
96
- 2. Exécutez le script suivant depuis le répertoire du projet :
97
-
98
- ```bash
99
- source .venv/bin/activate
100
- /home/adriens/Github/edb-noumea/noumea_water_quality/.venv/bin/python generer_graphique_analyses.py
101
- ```
102
-
103
- Deux fichiers PNG seront générés dans le dossier courant :
104
-
105
-
106
- Vous pouvez ouvrir ces fichiers pour visualiser les résultats détaillés des analyses.
107
-
108
- ## Utilisation en tant que Bibliothèque
109
-
110
- Vous pouvez également importer les fonctions dans vos propres scripts Python pour une intégration plus poussée.
111
-
112
- Installer
113
-
114
- ### Obtenir le résumé
115
-
116
- ```python
117
- # exemple_resume.py
118
- from edb_noumea.main import get_water_quality
119
-
120
- df_resume = get_water_quality()
121
-
122
- if df_resume is not None:
123
- print("Résumé de l'état des plages :")
124
- print(df_resume.to_string())
125
- ```
126
-
127
- ### Obtenir les résultats détaillés
128
-
129
- ```python
130
- # exemple_details.py
131
- from edb_noumea.details import get_detailed_results
132
-
133
- df_details = get_detailed_results()
134
-
135
- if df_details is not None:
136
- print("Détails des derniers relevés :")
137
- print(df_details.to_string())
138
- ```
139
-
140
- ### Exemple de Visualisation
141
-
142
- Voici un exemple montrant comment récupérer les données détaillées et créer un graphique simple avec `matplotlib` pour visualiser les niveaux d'E. coli par point de prélèvement.
143
-
144
- ```python
145
- # exemple_visualisation.py
146
- import pandas as pd
147
- import matplotlib.pyplot as plt
148
- from edb_noumea.details import get_detailed_results
149
-
150
- # Obtenir les données détaillées
151
- df = get_detailed_results()
152
-
153
- if df is not None and not df.empty:
154
- print("Création du graphique...")
155
-
156
- # S'assurer que les données sont triées pour une meilleure lisibilité
157
- df_sorted = df.sort_values(by='e_coli_npp_100ml', ascending=False)
158
-
159
- # Créer le graphique à barres horizontales
160
- plt.figure(figsize=(12, 8))
161
- plt.barh(df_sorted['point_de_prelevement'], df_sorted['e_coli_npp_100ml'], color='skyblue')
162
-
163
- # Ajouter les titres et les étiquettes
164
- plt.xlabel('E. coli (NPP/100ml)')
165
- plt.ylabel('Point de prélèvement')
166
- plt.title("Niveaux d'E. coli par Point de Prélèvement")
167
- plt.gca().invert_yaxis() # Afficher le plus élevé en haut
168
- plt.tight_layout() # Ajuster le layout pour que tout soit visible
169
-
170
- # Sauvegarder le graphique dans un fichier
171
- plt.savefig('ecoli_levels.png')
172
- print("Graphique sauvegardé sous 'ecoli_levels.png'")
173
-
174
- # Afficher le graphique
175
- plt.show()
176
- else:
177
- print("Aucune donnée à afficher.")
178
-
179
- ```
180
-
181
- *Assurez-vous que votre script est exécuté dans le même environnement virtuel où le package `edb-noumea` a été installé.*
182
-
183
- ## Sortie Attendue
184
-
185
- ### Résumé de l'état sanitaire (`main`)
186
- ```
187
- 📊 État sanitaire des eaux de baignade à Nouméa 📊
188
- Plage État sanitaire
189
- 0 Plage de la baie des Citrons Baignade autorisée
190
- 1 Plage de la promenade Pierre-Vernier Baignade autorisée
191
- ...
192
- ```
193
-
194
- ### Détails des relevés (`details`)
195
- ```
196
- 📋 Voici les détails des derniers relevés :
197
- Site Point de prélèvement Date Heure E. coli (NPP/100ml) Entérocoques (NPP/100ml)
198
- 0 PLAGE DE LA BAIE DES CITRONS P18049, Face The Beach House 04/09/2025 07:29 10 20
199
- 1 PLAGE DE LA BAIE DES CITRONS P18050, Face allée centrale Mirage plaza 04/09/2025 07:33 62 75
200
- ...
201
- ```
202
-
203
-
@@ -1,7 +0,0 @@
1
- edb_noumea/__init__.py,sha256=G7WKTGLsr2wtW1E2jYpqq4miZLoSGhTifSE36CGNkLo,60
2
- edb_noumea/details.py,sha256=bQ9iw9K8yHPyvZ2ngUzWi-wqXTtdjUW1xhofFUCqxaQ,7979
3
- edb_noumea/main.py,sha256=KWT0ZGrHlbhEsQxi_Rw0Mm1syDIxoY-Px1yab94IbJc,2115
4
- edb_noumea-0.2.14.dist-info/METADATA,sha256=_KaI_jGPrTYO16WKUZbtaPYODLH2bVD1dPC8Yp1wWnY,6593
5
- edb_noumea-0.2.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
6
- edb_noumea-0.2.14.dist-info/top_level.txt,sha256=Dj3JusM0b5H9_f9yZeO-IwucCZzI1OHSjLMKtvRjq6k,11
7
- edb_noumea-0.2.14.dist-info/RECORD,,