Manipuler des données et en extraire de l'information est une compétence primordiale dans les domaines tels que l'Apprentissage, la Fouille de Données (ce que l'on qualifie en anglais de Machine Learning, Data Mining ou de Big Data).
Python offre certaines facilités de traitement des données. Nous allons en étudier quelques unes.
La fonction zip
prend en entrée plusieurs itérables (listes , dictionnaires) ayant généralement la même longueur et les regroupe en
tuples. On peut alors itérer (parcourir) sur ces tuples.
Si les itérables ont des tailles différentes, zip
s'arrête à la fin du plus petit itérable.
Voici un exemple avec deux listes pour lequel on veut associer chaque élément de la liste_1
avec un élément
de la liste_2
en suivant l'ordre de parcours des listes :
On obtient le résultat suivant :
[(4, 'rouge'), (7, 'vert'), (9, 'bleu'), (1, 'jaune')]
4 -> rouge
7 -> vert
9 -> bleu
1 -> jaune
Exercice 11.1
Créez le fichier
Itérer en utilisant zip
et calculer la somme des salaires tout en affichant pour chaque personne
son nom, son identifiant et combien elle gagne.
Par exemple :
Bob d'identifiant 7 gagne 4000 €
Alice d'identifiant 4 gagne 6000 €
...
La fonction sorted
en Python est utilisée pour trier un itérable (comme une liste, un tuple ou un objet itérateur)
et retourne une nouvelle liste triée, sans modifier l'itérable original. Elle offre une grande flexibilité grâce à ses options pour
personnaliser l'ordre de tri.
Cette fonction accepte trois paramètres :
iterable
: l'objet à trierkey
(optionnel) qui indique sur quoi trier, par défault on utilise les valeurs brutes (champ 1, puis champ 2, ...)reverse
(optionnel) un booléen qui si il est à True
trie en ordre inverseVoici un exemple avec trois listes sur lesquelles on applique la fonction
On obtient le résultat suivant :
[(2, 'richer', 'jean-michel'), (2, 'vazquez', 'emily'), (4, 'richer', 'sarah'), (4, 'vazquez', 'karla')]
[('richer', 'jean-michel', 2), ('richer', 'sarah', 4), ('vazquez', 'emily', 2), ('vazquez', 'karla', 4)]
[('emily', 'vazquez', 2), ('jean-michel', 'richer', 2), ('karla', 'vazquez', 4), ('sarah', 'richer', 4)]
[('richer', 2, 'jean-michel'), ('richer', 4, 'sarah'), ('vazquez', 2, 'emily'), ('vazquez', 4, 'karla')]
On peut également utiliser la clé (key) afin de redéfinir l'ordre de tri en utilisant une fonction lambda :
[('martin', 'emily'), ('dupond', 'jean-michel'), ('vazquez', 'karla'), ('richer', 'sarah')]
('martin', 'dupond', 'vazquez', 'richer')
('emily', 'jean-michel', 'karla', 'sarah')
Dans le code précédent, la fonction zip(*...)
permet de récupérer des listes correspondant aux éléments triés.
Voici le même code sans fonction lambda
, on doit alors créer une fonction
La fonction map
consiste à appliquer une fonction à tous les éléments d'une liste.
Le résultat est le suivant :
[4, 8, 'toto', 14, 6.28]
[6, 12, 'tototo', 21, 9.42]
La fonction filter
permet de sélectionner des éléments d'un itérable.
Le code précédent permet de sélectionner les couleurs dont le nom commence par "bl". Le résultat est le suivant :
{3: 'bleu', 15: 'blanc'}
Exercice 11.2
Ecrire un programme
Vous devez utiliser map
et filter
pour accomplir cette tâche.
Exercice 11.3
On désire chercher des mots comme dans le jeu "le mot le plus long" des Chiffre et des Lettres.
Utilisez le dictionnaire du français (french.txt)
Ne garder que les mots de 3 à 9 lettres (utilisez filter
).
Affichez combien il existe de mots de 3, 4, ..., 9 lettres, utilisez un dictionnaire pour stocker le nombre d'occurrences .
Attention, le dictionnaire contient des accents et des séparateurs comme dans "abat-vent" ou "ac.". Il est nécessaire de supprimer les accents et éliminer les séparateurs.
Pour supprimer les accents et les séparateurs, on peut utiliser le code suivant :
On obtient alors
['economie', 'eleve', 'chaine']
Vous devriez obtenir les occurrences suivantes en fonction de la longueur des mots :
3 => 553
4 => 2221
5 => 7104
6 => 16343
7 => 28999
8 => 42257
9 => 51046
Exercice 11.4
Reprendre l'exercice précédent et permettre à l'utilisateur de saisir un mot (entre 3 et 9 lettres) et de rechercher tous les mots de qui contiennent le même nombre de lettres.
Créez pour cela le dictionnaire
3: ['abu', 'ace' ... ]
4: ['abat', 'abbe', ... ]
5: ['abaca', 'abats', ... ]
6: ['abaque', 'abasie', ... ]
...
9: ['abaissais', 'abaissait', ... ]
Pour le mot donné par l'utilisateur on génèrera toutes les permutations possibles et on cherchera celles qui sont présentent dans le dictionnaire.
Pour obtenir l'ensemble des permutations des lettres à partir d'un mot, on peut utiliser le code suivant :
Par exemple à partir du mot suivant "aient" vous devriez obtenir :
saisir un mot entre 3 et 9 lettres :aient
permutations = ['aient', 'aietn', 'ainet', 'ainte', 'aiten', 'aitne', 'aeint', 'aeitn', 'aenit', 'aenti', 'aetin', 'aetni', 'aniet', 'anite', 'aneit', 'aneti', 'antie', 'antei', 'atien', 'atine', 'atein', 'ateni', 'atnie', 'atnei', 'iaent', 'iaetn', 'ianet', 'iante', 'iaten', 'iatne', 'ieant', 'ieatn', 'ienat', 'ienta', 'ietan', 'ietna', 'inaet', 'inate', 'ineat', 'ineta', 'intae', 'intea', 'itaen', 'itane', 'itean', 'itena', 'itnae', 'itnea', 'eaint', 'eaitn', 'eanit', 'eanti', 'eatin', 'eatni', 'eiant', 'eiatn', 'einat', 'einta', 'eitan', 'eitna', 'enait', 'enati', 'eniat', 'enita', 'entai', 'entia', 'etain', 'etani', 'etian', 'etina', 'etnai', 'etnia', 'naiet', 'naite', 'naeit', 'naeti', 'natie', 'natei', 'niaet', 'niate', 'nieat', 'nieta', 'nitae', 'nitea', 'neait', 'neati', 'neiat', 'neita', 'netai', 'netia', 'ntaie', 'ntaei', 'ntiae', 'ntiea', 'nteai', 'nteia', 'taien', 'taine', 'taein', 'taeni', 'tanie', 'tanei', 'tiaen', 'tiane', 'tiean', 'tiena', 'tinae', 'tinea', 'teain', 'teani', 'teian', 'teina', 'tenai', 'tenia', 'tnaie', 'tnaei', 'tniae', 'tniea', 'tneai', 'tneia']
=========================
mots dans le dictionnaire
=========================
aient
entai
etain
tenia
Avec "aeinst", on obtient :
=========================
mots dans le dictionnaire
=========================
entais
etains
nastie
niates
tanise
tisane
tenais
tenias
sainte
satine