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

When generating yearly reports, warn and abort if there are less than 100 valid data days #292

Closed
wants to merge 21 commits into from

Conversation

why-not-try-calmer
Copy link
Contributor

No description provided.

@why-not-try-calmer why-not-try-calmer changed the title warns and aborts when Count objects are below 100 when generating report When generating yearl reports, warn and abort if Count objects are less than 100 Nov 14, 2023
@why-not-try-calmer why-not-try-calmer changed the title When generating yearl reports, warn and abort if Count objects are less than 100 When generating yearly reports, warn and abort if Count objects are less than 100 Nov 14, 2023
@why-not-try-calmer why-not-try-calmer marked this pull request as draft November 15, 2023 10:16
@why-not-try-calmer
Copy link
Contributor Author

@spch-GL Navré mais le commentaire très utile que tu as fait sur cette même Pull Request semble ne plus être visible (si c'est parce que j'ai basculé la Pull Request en mode "ébauche", je m'en excuse).

Oserais-je te demander de bien vouloir me dire, toujours sur cette même PR plutôt qu'en réponse à ce courriel, quelle logique tu souhaiterais idéalement? Une erreur? Un avertissement avec une tentative de quand même générer le rapport? Un effort du système pour générer le rapport quoi qu'il en soit sauf problème majeur?

Bien cordialement

@spch-GL
Copy link
Contributor

spch-GL commented Nov 15, 2023

@why-not-try-calmer Je ne crois pas avoir fait de commentaire sur un PR mais seulement sur des issues...

Dans l'idéal, il faudrait avertir l'utilisateur qu'il n'y a pas assez de données en indiquant le nombre de jours pris en compte, et lui demander si il veut tout de même générer le rapport annuel oui ou non ("non" par défaut), le tout dans une seule boite de dialogue.

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Nov 15, 2023

@why-not-try-calmer Je ne crois pas avoir fait de commentaire sur un PR mais seulement sur des issues...

Dans l'idéal, il faudrait avertir l'utilisateur qu'il n'y a pas assez de données en indiquant le nombre de jours pris en compte, et lui demander si il veut tout de même générer le rapport annuel oui ou non ("non" par défaut), le tout dans une seule boite de dialogue.

Très bien, et "pas assez de données" serait défini comme "moins que le maximum possible" (incomplet) ou autrement?

@spch-GL
Copy link
Contributor

spch-GL commented Nov 15, 2023

extrait de #273 : ... pas de rapport annuel avec moins de 100 jours de données

C'est la définition de "pas assez de données"

Mais il reste à déterminer comment vérifier si les données fournies sont assez complètes ...

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Nov 15, 2023

extrait de #273 : ... pas de rapport annuel avec moins de 100 jours de données

C'est la définition de "pas assez de données"

Mais il reste à déterminer comment vérifier si les données fournies sont assez complètes ...

A très bien, c'est précisément cette définition dont je craignais qu'elle ait été perdue avec un commentaire. Tout est clair, je ferai une proposition pour le seuil "assez complètes"

@why-not-try-calmer why-not-try-calmer marked this pull request as ready for review November 20, 2023 11:15
@why-not-try-calmer why-not-try-calmer changed the title When generating yearly reports, warn and abort if Count objects are less than 100 When generating yearly reports, warn and abort if there are less than 100 valid data days Nov 20, 2023
@why-not-try-calmer why-not-try-calmer force-pushed the 285-prepare-yearly-report branch 2 times, most recently from eb9ee79 to 44f9ee5 Compare November 23, 2023 10:59
@spch-GL
Copy link
Contributor

spch-GL commented Nov 23, 2023 via email

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Nov 23, 2023

Pas de problème, commentaire effacé, cette question-là est réglée

@why-not-try-calmer why-not-try-calmer force-pushed the 285-prepare-yearly-report branch 2 times, most recently from 6ee6dfa to c2bf1d8 Compare November 23, 2023 16:53
@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

Désolé, je ne suis de retour que maintenant et ne trouve pas ce 25...
Mais si cela devrait représenter le nombre de jours complet de l'année 2021, c'est trop peu

@why-not-try-calmer

This comment was marked as resolved.

@why-not-try-calmer
Copy link
Contributor Author

Okay on est bon, c'est déjà disponible dans la release à laquelle je t'ai référé dans mon email de tout à l'heure.

@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

Avec la version 2.1.3b, le rapport annuel n'est pas généré, il y a une erreur de date

2023-12-05T11:22:10     WARNING    Traceback (most recent call last):
              File "C:\apps\OSGeo4W\apps\Python39\lib\site-packages\pandas\core\indexes\base.py", line 3800, in get_loc
              return self._engine.get_loc(casted_key)
              File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
              File "pandas\_libs\index.pyx", line 165, in pandas._libs.index.IndexEngine.get_loc
              File "pandas\_libs\hashtable_class_helper.pxi", line 5745, in pandas._libs.hashtable.PyObjectHashTable.get_item
              File "pandas\_libs\hashtable_class_helper.pxi", line 5753, in pandas._libs.hashtable.PyObjectHashTable.get_item
             KeyError: 'date'
             
             The above exception was the direct cause of the following exception:
             
             Traceback (most recent call last):
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report_task.py", line 44, in run
              raise e
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report_task.py", line 32, in run
              report.prepare_reports(
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report.py", line 39, in prepare_reports
              _prepare_yearly_report(
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report.py", line 103, in _prepare_yearly_report
              _data_day_yearly(count, section, year, workbook)
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report.py", line 400, in _data_day_yearly
              df = statistics.get_time_data_yearly(year, section, direction=2)
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\statistics.py", line 95, in get_time_data_yearly
              df = df.groupby([df["date"].dt.dayofweek, "hour"]).thm.sum()
              File "C:\apps\OSGeo4W\apps\Python39\lib\site-packages\pandas\core\frame.py", line 3805, in __getitem__
              indexer = self.columns.get_loc(key)
              File "C:\apps\OSGeo4W\apps\Python39\lib\site-packages\pandas\core\indexes\base.py", line 3802, in get_loc
              raise KeyError(key) from err
             KeyError: 'date'

Le code passe donc toujours par le groupBy or tu as ajouté de nouvelles fonctions et il me semble qu'elles ne sont pas utilisées

@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

J'ai oublié de préciser que le cas ci-dessus, c'est pour le cas spécial EGAS et qu'il n'a pas proposé le choix des rapports à produire
En testant un cas standard (00107695) il n'y a pas d'erreur mais pas de rapport non plus:

2023-12-05T11:51:44     INFO    2023-12-05 11:51:44.741799 - Generate yearly report action started
2023-12-05T11:51:50     INFO    2023-12-05 11:51:50.156943 - Generate yearly report action can really begin now for count 1 with file_path: L:/Devel/Inf_Technique/Comptage/OpenComptage/_tst_V211/RPT_heb
2023-12-05T11:52:08     INFO    2023-12-05 11:52:08.449955 - Report generation RPT_heb ended
2023-12-05T11:52:08     INFO    2023-12-05 11:52:08.449955 - All tasks ended

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Dec 5, 2023

Avec la version 2.1.3b, le rapport annuel n'est pas généré, il y a une erreur de date

2023-12-05T11:22:10     WARNING    Traceback (most recent call last):
              File "C:\apps\OSGeo4W\apps\Python39\lib\site-packages\pandas\core\indexes\base.py", line 3800, in get_loc
              return self._engine.get_loc(casted_key)
              File "pandas\_libs\index.pyx", line 138, in pandas._libs.index.IndexEngine.get_loc
              File "pandas\_libs\index.pyx", line 165, in pandas._libs.index.IndexEngine.get_loc
              File "pandas\_libs\hashtable_class_helper.pxi", line 5745, in pandas._libs.hashtable.PyObjectHashTable.get_item
              File "pandas\_libs\hashtable_class_helper.pxi", line 5753, in pandas._libs.hashtable.PyObjectHashTable.get_item
             KeyError: 'date'
             
             The above exception was the direct cause of the following exception:
             
             Traceback (most recent call last):
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report_task.py", line 44, in run
              raise e
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report_task.py", line 32, in run
              report.prepare_reports(
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report.py", line 39, in prepare_reports
              _prepare_yearly_report(
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report.py", line 103, in _prepare_yearly_report
              _data_day_yearly(count, section, year, workbook)
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\report.py", line 400, in _data_day_yearly
              df = statistics.get_time_data_yearly(year, section, direction=2)
              File "C:\Users/GrelletP/AppData/Roaming/QGIS/QGIS3\profiles\cptg_dev/python/plugins\comptages\core\statistics.py", line 95, in get_time_data_yearly
              df = df.groupby([df["date"].dt.dayofweek, "hour"]).thm.sum()
              File "C:\apps\OSGeo4W\apps\Python39\lib\site-packages\pandas\core\frame.py", line 3805, in __getitem__
              indexer = self.columns.get_loc(key)
              File "C:\apps\OSGeo4W\apps\Python39\lib\site-packages\pandas\core\indexes\base.py", line 3802, in get_loc
              raise KeyError(key) from err
             KeyError: 'date'

Le code passe donc toujours par le groupBy or tu as ajouté de nouvelles fonctions et il me semble qu'elles ne sont pas utilisées

Il y a bien du code inutilisé mais pas de groupby de ma part. L'erreur ci-contre ne fait pas partie du code que j'ai modifié.

@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

Justement, je pensais que tu avais créé les fonctions (get_valid_days, count_valid_blocks) pour ne plus utiliser get_time_data_yearly (qui effectue le groupby pour un autre but) danms la recherche du nombre de jours valides

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Dec 5, 2023

Non j'ai écrit get_valid_days pour implémenter la requête de #285. Nulle fusion ni remplacement nécessaire. Concernant l'erreur que tu as rencontrée, si elle se confirme elle mérite probablement une nouvelle Issue, car je ne vois pas le rapport avec mes modifications.

@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

Après avoir ajouté un print()
print('{} - do_yearly_report_action: valid_days({},{})={}'.format(datetime.now(),year, section, valid_days))
au retour de l'appel à la fonction get_valid_days(), j'ai refait des tests sur le cas spécial EGAS, en sélectionnant à chaque fois une autre des 6 sections concernées résultats du print():

2023-12-05 13:59:24.192957 - do_yearly_report_action: valid_days(2021,Section object (53316875))=357
2023-12-05 14:01:03.222133 - do_yearly_report_action: valid_days(2021,Section object (53326880))=357
2023-12-05 14:01:37.161569 - do_yearly_report_action: valid_days(2021,Section object (53336885))=0
2023-12-05 14:02:34.086857 - do_yearly_report_action: valid_days(2021,Section object (00056202))=357
2023-12-05 14:05:35.343081 - do_yearly_report_action: valid_days(2021,Section object (00056200))=357
2023-12-05 14:07:18.047476 - do_yearly_report_action: valid_days(2021,Section object (53346890))=353

Seuls les rapports des 2 sections 00056202 et 00056200 ont été générés normalement.
Par contre pour les 3 autres ayant suffisamment de jours valides, c'est l'erreur 'date' qui est sortie

Remarque :
Comme pour les rapports hebdomadaires, la procédure de création d'un rapport annuel devrait vérifier si c'est un cas spécial et demander quels rapports sont à produire, mais en indiquant lesquels ont suffisamment de jours valides

@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

Encore une précision: j'ai encore testé sur la section 00107695, et le print() donne:
2023-12-05 14:57:53.614999 - do_yearly_report_action: valid_days(2021,Section object (00107695))=365
Aucune erreur mais aucun rapport produit non plus

Ce que je remarque, c'est que lorsque qu'il n'y a pas de rapport produit, le nombre de voies de la section est impaire !
Est-ce que cela t'aide ?

@why-not-try-calmer
Copy link
Contributor Author

Merci pour tes tests, c'est intriguant en effet. Je vais regarder.

@why-not-try-calmer
Copy link
Contributor Author

2023-12-05 14:01:37.161569 - do_yearly_report_action: valid_days(2021,Section object (53336885))=0
0 est un résultat erroné, alors que les valid_days de toutes les autres sections sont corrects?

@spch-GL
Copy link
Contributor

spch-GL commented Dec 5, 2023

Oui et non !
Nous avions un souci avec les capteurs dans cette section, du coup 0 est correct pour cette année 2021
Pour les autres, j'imagine qu'ils sont corrects aussi, mais je n'ai pas vérifié

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Dec 7, 2023

Est-ce que les rapports EGAS sont générés correctement sur la dernière version officielle (sans mes changements)?

@spch-GL
Copy link
Contributor

spch-GL commented Dec 7, 2023

Non, c'est pourquoi il y a des issue

@why-not-try-calmer
Copy link
Contributor Author

why-not-try-calmer commented Dec 7, 2023

Non, c'est pourquoi il y a des issue

Okay, alors si ce problème n'est pas lié spécifiquement à cette PR, est-ce qu'on peut valider cette PR? Cela impliquerait que je mets le label "reviewed" et que je passe à la suite, pour ensuite refaire une release p1, puis enfin réitérer le processur avec p2.

@spch-GL
Copy link
Contributor

spch-GL commented Dec 7, 2023

Presque...

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

Successfully merging this pull request may close these issues.

2 participants