Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ecoulement des cours d'eau #10

Merged
merged 7 commits into from
Oct 17, 2024
Merged

Conversation

B-Alica
Copy link
Collaborator

@B-Alica B-Alica commented Sep 16, 2024

Je n'ai fait que les fonctions de bas niveau car je ne sais pas quelle fonction de haut niveau faire.

@B-Alica
Copy link
Collaborator Author

B-Alica commented Sep 18, 2024

La fonction de haut niveau get_all_observations fonctionne, mais le test avec pytest renvoie une erreur, je ne sais pas pourquoi.
Déjà il affiche un warning qui se répète en boucle : WARNING root:session.py:310 api_version not found among API response
Ensuite il affiche FAILED pour l'assertion assert len(data) == 1, avec assert 1020 == 1
Pourtant j'ai juste recopié le même test que pour get_all_stations.

image

Je n'ai pas fait de fonction de haut niveau pour get_campagnes, car il n'y a que 8816 résultats, donc on est loin des 20 000.

@B-Alica B-Alica changed the base branch from main to dev October 2, 2024 09:09
Copy link
Owner

@tgrandje tgrandje left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@B-Alica je t'ai mis quelques commentaires par ci par là. Pour les tests, j'attends ton retour, je ferai une merge et je finaliserai ça en local.

Je serais aussi d'avis de mettre une fonction de haut niveau avec get_campagnes pour faire abstraction de l'objet session : même si on ne met rien de particulier dans le code, ça permettrait d'avoir une homogénéité d'API pour l'utilisateur final.

cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
cl_hubeau/watercourses_flow/watercourses_flow_scraper.py Outdated Show resolved Hide resolved
Comment on lines 81 to 117
ranges = pd.date_range(
start=datetime.strptime(kwargs.pop("date_observation_min"), "%Y-%m-%d").date(),
end=datetime.strptime(kwargs.pop("date_observation_max"), "%Y-%m-%d").date(),
)
dates = pd.Series(ranges).to_frame("date")
dates["year"] = dates["date"].dt.year
dates = dates.groupby("year")["date"].agg(["min", "max"])
for d in "min", "max":
dates[d] = dates[d].dt.strftime("%Y-%m-%d")
if start_auto_determination:
dates = pd.concat(
[
dates,
pd.DataFrame([{"min": "1900-01-01", "max": "2015-12-31"}]),
],
ignore_index=False,
).sort_index()

args = list(product(deps, dates.values.tolist()))

with WatercoursesFlowSession() as session:

results = [
session.get_observations(
format="geojson",
date_observation_min=date_min,
date_observation_max=date_max,
**{"code_departement": chunk},
**kwargs,
)
for chunk, (date_min, date_max) in tqdm(
args,
desc="querying station/station and year/year",
leave=_config["TQDM_LEAVE"],
position=tqdm._get_free_pos(),
)
]
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO : refacto avec nouvelle fonction prepare_kwargs_loops ici - exemple de mise en oeuvre

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je n'obtiens pas le même nombre de résultats avec les trois méthodes :

  • En utilisant directement l'API observation sur le site, j'obtiens 320597 résultats
  • Avec mon ancienne méthode, j'obtenais 316714 résultats
  • Avec ta fonction, j'obtiens 308268 résultats

@B-Alica
Copy link
Collaborator Author

B-Alica commented Oct 8, 2024

J'ai ajouté une fonction de haut niveau get_all_campagnes, comme demandé.

@tgrandje tgrandje merged commit b88aca0 into tgrandje:dev Oct 17, 2024
1 check passed
@tgrandje
Copy link
Owner

Note interne au 17/10/24 :

  • manuellement, l'API indique 320815 résultats
  • avec boucle "manuelle" (dep & années) on obtient 401154 lignes, réduites à 316907 après retrait des doublons
  • avec boucle "prepare_kwargs_loops" (années uniquement) on obtient 308268 lignes, réduites à 300025 après retrait des doublons

@tgrandje
Copy link
Owner

@B-Alica je pense que j'ai trouvé l'explication sur les lignes qui disparaissent, il semble y avoir une erreur sur l'API :
BRGM/hubeau#192

# dates = pd.concat(
# [
# dates,
# pd.DataFrame([{"min": "1900-01-01", "max": "2015-12-31"}]),
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@B-Alica sur ta boucle interne, > 99% des doublons créés sont liés à cette ligne : tu as laissé un 2015-12-31 ici, alors que l'initialisation en ligne 77 était au 01/01/1960.

Copy link
Owner

@tgrandje tgrandje Oct 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mais ça n'explique pas les 50 doublons que j'ai toujours sur l'année 2023...

EDIT : pour être précis, il me reste 50 doublons sur 2023 et 18 sur 2012... 🙁

@tgrandje
Copy link
Owner

@B-Alica j'ai ouvert une seconde issue sur l'API : BRGM/hubeau#193

J'ai l'impression qu'elle produit nativement des doublons... Du coup je vais ajouter un drop_duplicates pour l'instant, on va attendre de voir le retour sur les issues.

@tgrandje
Copy link
Owner

@B-Alica
Quant à test tests automatisés : test_get_all_stations_mocked utilise une boucle, donc (à moins de supprimer les doublons) même si tu fait un mockup avec un seul résultat par requête, tu auras forcément un dataframe de longueur > 1. On s'en reparle en direct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants