Accueil

Tutoriel Python - sommaire

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 la méthode sort() à des listes de nombres.
À 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
>>> notes.sort()
>>> 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 fonction qui calcule la moyenne simple d'une série, c'est facile. Par contre la programmation de la variance, de l'écart type c'est beaucoup plus compliqué. Donc ce module tombe à point.

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 nouvelle : 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é ...

Rappels

Moyenne simple = somme des notes / nombre de notes ; fonction : mean(série)

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

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

L’écart type  est un indicateur de dispersion dans une série ; fonction : 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'

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 flottant ;'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 , mais en anglais ...
time.strftime("%H : %M : %S") : affiche de l'heure du système avec un formatage

Les symboles de formatage à utiliser

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

(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(30) : mise en pause durant 30 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.

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
>>> ce_jour =dh.date.today()
>>> ce_jour
datetime.date(2021, 1, 8)
>>> ce_jour.year
2021
>>> ce_jour.day
8
>>> ce_jour.month
1
ce_jour.year - naissance.year
67
>>> heure =dh.time(14,45,0)
>>> heure.hour
14
>>> heure. minute
45
>>> dh.datetime.today()
datetime.datetime(2021, 1, 8, 18, 27, 28, 462348)
>>> dh.datetime.now()
datetime.datetime(2021, 1, 8, 18, 27, 39, 959707)

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 ?

La fonction date(Y,M,D) ou date.today() retourne un objet datetime avec la date précisée. On peut appliquer à cet objet les méthodes year, month & day.
naissance : variable contenant ma date de naissance.
ce_jour : variable contenant la date courante.
ce_jour.year - naissance.year : calcul de mon âge < p>La fonction time(H,M,S) retourne un objet datetime avec l'heure précisée. On peut appliquer à cet objet les méthodes hour, minute, second.

La fonction datetime(Y,M,D,H,M,S) crée un objet datetime avec la date et l'heure précisées

La commande datetime.datetime.today() / now() : retourne l'instant présent (date et heure courantes).

L'interpréteur ne retourne jamais l'alias du module mais le nom du module.

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 avec la syntaxe : "import nomModule as alias".

Fin de ce chapitre !

Dans le chapitre suivant des programmes professionnels car structurés et avec contrôles de saisies.