IUT ORSAY Page 1 Sujet Partiel Benford Mesures physiques
Nom ::: _________________________________ Date __________________________________
Prénom ::: _______________________________ Ordinateur ::: ___________ Groupe _______
Partiel d'Informatique Scientifique Loi de Benford
Tout document papier, clé USB autorisés.
Tout autre système électronique portable interdit.
Le contenu de votre clé USB doit être recopié sur l'ordinateur en début d'examen, puis la clé déconnectée définitivement !
Vous devez stocker les modules Python et fchiers annexes dans un répertoire de partiel S1A2-VotreNom que vous devez créer sur le « bureau » ou dans le répertoire de vos documents.
En fn de séance, votre répertoire de partiel S1A2-VotreNom doit être copié dans le ré
pertoire /media/tp/fchiers-etudiants.
Les modules devront contenir les en-têtes habituels, entre autre votre nom :::l le code devra être documenté/commenté et testé, les modules outils devront avoir leur partie de tests à la fn du module.
La notation tiendra compte du respect strict des consignes sur le travail demandé, de la qua
lité des chaînes de documentation et des commentaires, de la pertinence des tests.
Atention à la syntaxe, aux calculs d'indices… si vous avez des doutes, pensez à tester dans la zone de l'interpréteur interactif. Utilisez aussi l'aide en ligne de Python si besoin. Et regardez les indications données dans les messages d'erreur lorsque vous déboguez.
Construisez vos tests, dans le bloc if __name__ == '__main__' à la fn du module , au fur et à mesure que vous écrivez le code des fonctions à tester. Prenez des valeurs simples pour les tests — par exemple celles donnée dans l'introduction, pour lesquelles vous avez déjà les résultats atendus.
Si vous n'arrivez pas à terminer une fonction, faites-lui retourner une valeur bidon du même type que celui qu'elle doit retourner, et passez à la suite du partiel.
1. Introduction
Cete loi est liée à une observation empirique de la fréquence de distribution statistique de certains nombres issus du monde réel. Franck Bedford s'est aperçu que, pour des séries de nombres comme par exemple les valeurs issues d'une comptabilité, si on ne considère que le pre
mier chifre signifcatif de ces valeurs, alors la répartition se fait en suivant une formule de fré quence d'apparition ::: log10(1+ 1
chiffre)
Un écart de répartition des valeurs comptables donne un indice de comptabilité faussée.
Nous allons metre en place les outils pour essayer de vérifer cete loi sur diférentes séries statistiques. Les données de répartition seront stockées dans des listes de 10 éléments, où l'élé
ment à l'index zéro sera ignoré (à priori 0) et les éléments aux autres index contiendront les va
leurs calculées.
IUT ORSAY Page 2 Sujet Partiel Benford Mesures physiques
2. Outils de base
Créer un module Python benford.py qui contiendra les fonctions suivantes :::
● prenchif(p_n) qui retourne la valeur entière du premier chifre du nombre p_n. On pourra utiliser un traitement sur les chaînes ou bien la fonction log10() du module math.
● benford() qui ne prend aucun paramètre et retourne une liste de dix valeurs correspon
dant à la répartition des nombres suivant la loi de Benford (en arrondissant à 3 décimales, vos calculs doivent donner ::: [0, 0.301, 0.176, 0.125, 0.097, 0.079, 0.067, 0.058, 0.051, 0.046])
● repartlst(p_lst) qui prend en paramètre une liste de nombres, et qui retourne une liste de répartition des premiers chifres de ces nombres.
● repartfic(p_nomfic) qui prend en paramètre une chaîne correspondant à un nom de fchier, fchier contenant une série de valeurs numériques, sous forme de texte, avec une valeur par ligne. Comme la fonction est susceptible de traiter de gros fchiers, on préférera traiter les données au fur et à mesure plutôt que tout charger en mémoire. Elle retourne une liste répartition des premiers chifres de ces nombres.
● presente(p_rep, p_larg) qui prend comme paramètres une liste de répartition ain
si qu'une largeur maximale avec une valeur par défaut de 80, et qui afche une série de lignes avec des étoiles correspondant à la répartition. Par exemple, pour la répartition sui
vant la loi de Benford, la fonction afchera :::
1 : ************************
2 : **************
3 : *********
4 : *******
5 : ******
6 : *****
7 : ****
8 : ****
9 : ***
● sommeecarts(p_rep) qui prend comme paramètres une liste de répartition, et qui re
tourne un nombre fotant donnant la somme des écarts entre les valeurs de cete liste et les valeurs correspondantes par la répartition de la loi de Benford.
3. Essais sur des données
Écrire un programme principal, soit dans le même module, soit dans un autre module qui importe le module contenant les fonctions, et qui fasse afcher la présentation sous forme d'étoiles ainsi que la somme des écarts pour :::
• La loi de benford
• Une séquence range(1, 1000)
• Le fchier monts.txt fourni (qui contient les altitudes des 117 plus hautes montagnes)
• Le fchier rivieres.txt fourni (qui contient les longueurs des 177 plus longs feuves)
• Le fchier premiers.txt fourni (qui contient les 500000 premiers nombres premiers)