Accueil
Mes tutoriels sur la programmation

Tutoriel Python - sommaire


Vous pouvez me contacter via Facebook (questions, critiques constructives) : page Facebook relative à mon site

Trois modules : statistics, time & datetime

Quelques fonctions "statistiques" présentes dans le module standard

Sans aucune "importation" vous pouvez appliquer les fonctions sum(), max(),min() et sorted() à des listes de nombres.
Il s'agit en effet de fonctions natives : disponibles dans le noyau de base de Python.
Commandes à saisir dans l'interpréteur :

>>> notes = [7,10,13,11,9]
>>> sum(notes)
50
>>> len(notes)
5
>>> sum(notes)/len(notes)
10.0
>>> max(notes)
13
>>> min(notes)
7
>>> sorted(notes)
>>> notes
[7, 9, 10, 11, 13]

J'ai pu calculer la moyenne simple de la série : 50/5 = 10
Je peux dire grâce à la liste triée, que la médiane est 10 (élément du milieu dans la série ordonnée).

Module statistics

Créer une commande qui calcule la moyenne simple d'une série de notes, c'est facile. Par contre la programmation de la variance, de l'écart type c'est beaucoup plus compliqué. Donc ce module tombe à pic car il propose des fonctions ad hoc.

Commandes à saisir dans l'interpréteur

>>> import statistics as stat
>>> notes1 = [15, 12,12, 8,14]
>>> stat.mean(notes1)
12.2
>>> stat.median(notes1)
12
>>> stat.mode(notes1)
12
>>> stat.stdev(notes1)
2.6832815729997477
>>> notes2 = [12,13,11,14,10]
>>> stat.mean(notes2)
12
>>> stat.stdev(notes2)
1.5811388300841898

Pour importer le module statistics j'utilise la syntaxe : import nomModule as alias
Ainsi pour produire les commandes je pourrais employer la syntaxe : alias.fonction()
Cette astuce n'a d'intérêt pour les modules dont le nom est long et compliqué ...

Syntaxes

mean(série) : fonction qui calcule la moyenne simple d'une série de notes.

La médiane est une valeur qui permet de partager une série numérique ordonnée en deux parties de même nombre ; syntaxe : median(série)

le mode désigne la valeur la plus représentée dans une série ; syntaxe : mode(série)

L’écart type  est un indicateur de dispersion dans une série ; syntaxe : stdev(série)

Vous constatez ici, que pour les deux séries la moyenne est pratiquement la même (12,2 et 12,0).
Mais le premier élève est beaucoup plus irrégulier dans ses résultats que le second. Donc l'écart type est plus grand pour le premier que pour le second.

Le module time

Le module "time" fournit entre autres la date et l'heure de votre système.

>>> import time
>>> time.time()
1610096656.5586228
>>> time.localtime()
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=8, tm_hour=10, tm_min=5, tm_sec=4, 
tm_wday=4, tm_yday=8, tm_isdst=0)
>>> time.strftime("%A %d %B %Y")
'Friday 08 January 2021'
>>> time.strftime("%H : %M : %S")
'11 : 58 : 16'
>>> dir(time)
... 
'process_time_ns', 'sleep', 'strftime', 'strptime', 
'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']

>>> time.sleep(20)
>>>

J'active le module time avec la syntaxe "import nomModule". Donc je suis obligé de préfixer les fonctions du nom du module.
La commande time.time() retourne un nombre qui est le "timestamp" : le nombre de secondes entre le 1er janvier 1970 et l'instant présent. Le timestamp est une notion que l'on retrouve dans pratiquement tous les langages.

La commande time.localtime() affiche la date et l'heure système d'une façon plus claire.

Vous voyez donc que j'ai utilisé l'interpréteur le 8 janvier 2021.

time.strftime("%A %d %B %Y") : affichage de la date système avec le format habituel pour un Français : nomJour, rangJour, nomMois, anneé
time.strftime("%H : %M : %S") : affiche de l'heure du système avec un formatage : heures:minutes:secondes

Les symboles de formatage à utiliser avec cette fonction :

SymboleSens
%ANom du jour de la semaine
%dJour du mois
%BNom du mois
%YAnnée
%HHeureq
%MMinutes
%SSecondes

dir(time): affiche toutes les fonctions du module "time". Donc si vous avez activé le module "math" vous pouvez écrire "dir(math)" pour avoir la liste des fonctions de ce module.

time.sleep(20) : mise en pause durant 20 secondes. Vous constatez qu'après avoir appuyé sur ENTER les triples chevrons sont invisibles et le curseur clignote. Au bout de 30 secondes, les chevrons réapparaissent.
Cette fonction ne présente pas beaucoup d'intérêt en mode commande par contre en mode programmé une temporisation peut être parfois souhaitable.

Le module datetime

Le module datetime sert à représenter des dates et des heures spécifiées par l'utilisateur.
Ce module proprose différentes fonctions :

Commandes à saisir pour vous familiarise avec la syntaxe

>>> import datetime as dh >>> naissance =dh.date(1954,2,19) >>> naissance datetime.date(1954, 2, 19) >>> naissance.year 1954 >>> naissance.month 2 >>> naissance.day 19 >>> heure =dh.time(14,45,0) >>> heure.hour 14 >>> heure. minute 45 >>> >>> cejour =dh.date.today() >>> cejour datetime.date(2021, 1, 25) >>> datecourante = cejour.strftime("%d - %m -%Y") >>> datecourante '25 - 01 -2021' >>> print(type(datecourante)) <class 'str'> >>> >>> monage =cejour.year - naissance.year >>> monage 67 >>> >>> dh.datetime.today() datetime.datetime(2021, 1, 25, 11, 25, 36, 257178) >>>

J'ai importe le module datetime avec un alias : dh (pour date & heure) car "datetime" c'est long à saisir.
Nous avons dans ce module trois fonctions importantes : date(), time() & datetime(). Tiens tiens ... , la fonction "time()" ça vous dit rien ?

Analyse de cette batterie de commandes

La fonction date(Y,M,D) crée un objet avec la date précisée par les trois arguments. On peut appliquer à cet objet les méthodes : year,month, day.
La fonction time(H,M,S) crée un objet avec l'heure précisée par les trois arguments. On peut appliquer à cet objet les méthodes : hour, minute, seconde.
La fonction date() suivie de today() retourne la date du jour.
La méthode strftime appliquée à un objet 'datetime' permet d'afficher sous un format lisible la date et heure. Cette méthode retourne un "string" !
monage =cejour.year - naissance.year : calcul de mon âge (en années).
dh.datetime.today() : pour obtenir l'instant présent : date et heure courantes : année,mois, jour, heures, minutes, secondes, fraction de seconde). Charge à vous d'extraire ce qui vous intéresse avec les méthodes "year, month ... minute, seconde" OU de formater avec strftime.

Ci-dessous les symboles de formatage à utiliser avec la méthodestrftime()

SymboleSens
%ANom du jour de la semaine
%dJour du mois
%BNom du mois
%YAnnée
%HHeureq
%MMinutes
%SSecondes

Dans le module "time" il y a la fonction "time()" et dans le module "datetime" il existe aussi une fonction "time()". Donc vous voyez que le risque d'ambiguïte entre deux fonctions appartenant à deux modules importés est bien réel. D'où l'intérêt de l'activation d'un module avec la syntaxe : "import nomModule as alias".
Maintenant, on se sert davantage du module "datetime" que du module "time" ...