Licence CC BY-NC-ND, Thierry Parmentelat
dans ce petit exercice on va utiliser
le dict pour gérer des enregistrements (en C on dirait des structs)
le dict pour indexer un grand nombre de données pour accélérer les recherches
et l’ensemble pour détecter les collisions et calculer le nombre d’entrées uniques dans une collection
disclaimer: gardez à l’esprit le caractère pédagogique de l’exercice,
car pour ce genre de choses, dans la vraie vie, on pourrait aussi utiliser une dataframe pandas...
parsing¶
on veut pouvoir lire des fichiers texte qui ressemblent à celui-ci (data/sample-small.txt)
Marie Durand 25 Décembre 2002
Jean Dupont 12 Novembre 2001
Camille Saint-Nazaire 15 Avril 2000
on suppose dans tout ce TP qu’il y a unicité du (nom x prénom)
i.e. on n’est pas confronté au cas où deux personnes ont le même nom et le même prénom
écrivez une fonction qui lit ce genre de fichiers et qui retourne les données sous la forme d’une liste de dictionnaires;
quelles seraient les clés à utiliser pour ces dictionnaires ?
testez votre fonction sur ce fichier
génération de données de test¶
à partir des deux fichiers joints:
data/last-names.txt
(dérivé de Liste des noms de famille les plus courants en France)data/first-names.txt
(dérivé de https://fr.wikipedia.org/wiki/Liste_des_prénoms_les_plus_donnés_en_France)
ce qu’il faut faire:
fabriquez un jeu de données aléatoires contenant 10000 personnes
avec la contrainte qu’il y ait en sortie unicité du nom x prénompour les dates de naissance tirez au sort une date entre le 01/01/2000 et le 31/12/2004
rangez cela dans le fichier
data/sample-big.txtvous devez produire ce fichier dans un temps de l’ordre de 50-100ms
accélération des recherches¶
utilisez
%%timeitpour mesurer le temps moyen qu’il faut pour chercher une personne dans la liste à partir de son nom et prénomon prévoit ue notre code aura besoin de faire cette recherche plusieurs millions de fois; comment pourrait-on faire pour accélérer cette recherche ?
écrivez le code qui va bien et mesurez le gain de performance pour la recherche
calcul du nombre de prénoms distincts¶
calculez le nombre de prénoms distincts présents dans les données