Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

Base de Connaissance

Apprenez auprès des experts.
TIPS de la semaine

Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !

Voir l'index

ACE's Insights : Le calcul des jours fériés français

Ladarthure
14 - Magnetar
14 - Magnetar
Créé
Ladarthur_0-1615362567616.png

 

 

Voici un thème qui me trottait dans la tête depuis un certain temps, je cherchais depuis longtemps à pouvoir obtenir la liste des jours fériés français pour une année donnée. J’ai, dans un premier temps cherché une base de donnée, que je trouvais trop peu dynamique. J’ai ensuite regardé du côté des API en me disant que quelque chose devait bien exister quelque part et je n’ai pas trouvé d’API gratuite me permettant d’obtenir ces données.

 

Retour à la case départ, ou pas vraiment, je me suis renseigné sur les jours fériés français et j’ai commencé à essayer de traduire ceci en Alteryx !

 

Les fêtes civiles :

Ici rien de trop compliqué, ces fêtes sont à des dates « fixes » et ne bougent pas, nous avons donc :

  • 1er Janvier : Le jour de l’an
  • 1er Mai : La fête du travail
  • 8 Mai : Fête de la victoire (fin de la seconde guerre mondiale)
  • 14 Juillet : Fête nationale (prise de la Bastille en 1789)
  • 11 Novembre : Armistice de la première guerre mondiale

Pour les intégrer dans Alteryx c’est assez simple, une formule et le tour est joué ! Les journées civiles faites, il ne me reste plus qu’à faire les fêtes religieuses.

 

Les fêtes religieuses :

Pour celles-ci, j’ai commencé de manière très simple par le calcul de certaines d’entre elles :

  • 25 Décembre : Noël
  • 1er Novembre : Toussaint
  • 15 Août : Assomption

Et, c’est à ce moment là que les choses se corsent, il ne reste que 3 fêtes mais qui sont toutes basées sur le dimanche de Pâques.

Si on regarde comment est fait ce jour et après la lecture d’un article wikipedia, on apprend que Pâques se déroule bien le dimanche, mais pas n’importe lequel, c’est le premier dimanche après la première pleine lune du printemps (et là l’aspect data devient un peu moins simple), ceci étant la définition donnée par le concil de Nicée en 325.

 

Ne nous arrêtons pas sur cet aspect historique et tentons tout de même de calculer ces jours fériés.

Un astronome Belge du nom de Jan Meeus (né en 1928 et toujours en vie) a notamment développé des méthodes permettant de calculer beaucoup de choses en astronomie, les éphémérides notamment. Mais surtout dans notre cas, il a développé un algorithme appelé Butcher Meeus permettant de déterminer la date du dimanche de Pâques qui se présente sous la forme suivante :

 

Dividende

Diviseur

Quotient

Reste

Explication

Année

19

 

n

Cycle de Méton

Année

100

c

u

Centaine et rang de l'année

c

4

s

t

Siècle bissextile

c + 8

25

p

 

Cycle de proemptose

c - p + 1

3

q

 

Proemptose

19 n + c - s - q + 15

30

 

e

Épacte

u

4

b

d

Année bissextile

t + 2 b - e - d + 32

7

 

L

Lettre dominicale

n + 11 e + 22 L

451

h

 

Correction

e + L - 7 h +114

31

m

j

 

 

Avec ces éléments, on dispose donc de la règle permettant de calculer. A savoir qu’à chaque fois, il faut calculer l’ensemble des quotient et reste pour obtenir le mois et le jour qui sont les 2 derniers obtenus donc m et j.

 

Pour calculer un quotient dans Alteryx, on va utiliser un calcul simple :

Floor( [dividende] / [diviseur] ) qui renverra donc le quotient en arrondi inférieur grâce à la fonction floor.

Pour obtenir le Reste, on utilise la fonction mathématique Modulo qui se traduit sous alteryx de la façon suivante :

Mod( [dividende], [diviseur]) et qui renverra donc le reste.

 

Avec tous ces éléments on peut calculer la date du dimanche de Pâques et ainsi simplement les 3 derniers jours restants :

  • Lundi de Pâques : dimanche de Pâques + 1 Jour
  • Jeudi de l’Ascension : dimanche de Pâques + 39 jours
  • Lundi de Pentecôte : dimanche de Pâques + 50 jours

Pour voir le détail des calculs, vous pouvez télécharger le workflow ci-joint.

 

J’espère que cet article vous aura intéressé et que vous aurez appris autant de chose que moi quand j’ai réalisé ces calculs.

Pièces jointes
Commentaires
Toons
Quasar

Merci @Ladarthure pour ce post très intéressant.

J'avais déjà mis en place une fonction de calcul des jours fériés au travers d'une fonction pour un autre outil ETL mais sans m'attarder sur l'algorithme présent dans le code (j'avais récupéré le bout de code tel quel). Je viens d'aller vérifier et je te confirme que c'est le même 🙂

 

Sinon sur le site data.gouvfr, des datasets sont mis à disposition pour les jour fériés :

https://www.data.gouv.fr/fr/datasets/jours-feries-en-france/

 

Les exports sont disponibles au format CSV, JSON et ICS. Les URLs sont stables.

Les exports comportent les jours fériés :

jusqu'à 20 ans dans le passé et 5 ans dans le futur par rapport à l'année courante pour les formats CSV et JSON ;
jusqu'à 5 ans dans le passé et 5 ans dans le futur par rapport à l'année courante pour le format ICS (utile pour les calendriers).

 

Contrainte : il faut re-télécharger les fichiers régulièrement car la visibilité n'est que sur 5 ans.

Ladarthure
14 - Magnetar
14 - Magnetar

Merci @Toons pour l'info sur la mise à disposition sur data.gouv, cela permet effectivement de répondre à certains besoins, mais j'ai eu envie d'automatiser un peu plus, et je trouvais le challenge intéressant^^

StephV
Alteryx Alumni (Retired)

Merci @Toons pour ce complément d'information. Très utile effectivement. 

contributeurs
Étiquettes