Python Dictionnaire Tutorial (article)

Dictionnaires Python et la boîte à outils Data Science

En tant que scientifique de données de travail en Python, vous aurez besoin de stocker temporairement des données tout le temps dans une structure de données Python approprié pour traiter. Une structure de données spéciale qui fournit Python est nativement le dictionnaire. Son nom donne déjà suite comment les données sont stockées: un morceau de données ou des valeurs accessibles par une clé (mot) que vous avez à portée de main.







Si vous regardez le mot « python » dans un dictionnaire papier, disons que le Oxford Dictionary of English, vous habituellement commencer par essayer de parcourir la partie du dictionnaire qui contient les mots commençant par « p », puis « y » , « t » et ainsi de suite jusqu'à ce que vous frappez le mot complet. L'entrée de dictionnaire vous dira que « python » est un grand serpent non venimeux qui resserre sa proie, ou un langage de programmation de haut niveau (!).

Un dictionnaire papier a seulement été une aide bien respectée parce que ses mots sont classés par ordre alphabétique et avec un peu de pratique, vous pouvez trouver un mot là-dedans une minute. Un dictionnaire Python fonctionne d'une manière similaire: les entrées de dictionnaire stockées peuvent être récupérées très rapidement par leur clé. Contrairement aux listes Python, par exemple, Python gardera la trace de l'endroit où trouver une information spécifique.

Dans le tutoriel d'aujourd'hui, vous en apprendrez plus sur les sujets suivants:

  • comment créer un dictionnaire en utilisant des supports et bouclés côlons,
  • comment charger des données dans votre dictionnaire avec l'aide des qu'urllib et des bibliothèques au hasard,
  • comment filtrer le dictionnaire à l'aide d'une boucle for et itérateurs spéciales en boucle sur les touches et les valeurs de votre dictionnaire,
  • comment effectuer des opérations sur votre dictionnaire pour obtenir ou supprimer les valeurs de votre dictionnaire et comment vous pouvez utiliser la compréhension dictionnaire sous-ensemble des valeurs de votre dictionnaire,
  • comment trier un dictionnaire avec la bibliothèque re et comment les fonctions OrderedDict et lambda peut être pratique quand vous faites cela, et
  • comment dictionnaires Python comparent à des listes, des tableaux et numpy DataFrames Pandas.

Supposons que vous faites un inventaire des fruits que vous avez laissé dans votre panier de fruits en stockant le nombre de chaque type de fruit dans un dictionnaire. Il y a plusieurs façons de construire un dictionnaire, mais pour ce tutoriel, nous allons garder les choses simples. Pour un aperçu complet, chekc la documentation Python sur les dictionnaires.

La plupart des fonctions importantes par lesquelles vous pouvez reconnaître un dictionnaire sont les accolades < > et pour chaque élément dans le dictionnaire, la séparation de la clé et la valeur de deux points.

Comme vous pouvez essayer pour vous-même, le fruit de variable ci-dessous est un dictionnaire valide, et vous pouvez accéder à un élément du dictionnaire en mettant la clé entre crochets []. Vous pouvez également utiliser la méthode .get () pour faire la même chose.

Maintenant, vous allez mettre des données réelles dans un dictionnaire, plus précisément, un dictionnaire imbriqué (ce qui signifie un dictionnaire qui a un dictionnaire comme sa valeur plutôt que par exemple une chaîne ou entier).

De cette façon, des tableaux ou des matrices peut facilement être stocké dans un dictionnaire.

Les données utilisées sont les commentaires des chardonneret Donna Tartt dans la revue du livre Amazon mis de la machine Irivine référentiel d'apprentissage. Ces examens ont été stockés dans un simple onglet séparé fichier, ce qui est rien de plus qu'un simple fichier texte avec des colonnes. Le tableau contient quatre colonnes: score du commentaire, url, Titre et texte de révision.

Il y a plusieurs façons imaginables pour mettre cela dans un dictionnaire, mais dans ce cas, vous prenez l'url comme les clés de dictionnaire et de mettre les autres colonnes dans les valeurs imbriquées dictionnaire.

Dans ce cas, vous avez eu la chance d'obtenir un ensemble de données qui n'a pas de valeurs manquantes. Ceci est bien sûr pas toujours le cas; de véritables ensembles de données « dans la nature » sont souvent un grand désordre (mauvaise mise en forme, les erreurs de codage, les données manquantes, etc.) lorsque vous commencez à les utiliser. Pour simplifier, le tutoriel n'a pas fourni de quoi que ce soit dans le script ci-dessus pour faire face aux valeurs manquantes, mais il est quelque chose que vous aurez généralement à prendre en compte.

Vous pouvez cependant vérifier facilement si toutes les clés sont présents dans le dictionnaire en comparant le nombre de lignes du fichier au nombre de clés du dictionnaire. Dans ce cas, cela vous dit qu'il est sûr de procéder au traitement des données.

Maintenant que les commentaires Amazon sont stockés dans un dictionnaire, il est temps d'essayer certaines opérations sur elle. Disons que vous êtes intéressé par les mauvaises critiques et que vous voulez voir ce que les gens ont écrit en fait en sélectionnant uniquement les commentaires qui obtiennent une note 1.0

Les résultats de l'examen sont stockés dans les valeurs du dictionnaire, ce qui signifie que vous devrez faire une boucle sur le dictionnaire. Malheureusement (pas vraiment bien), vous ne pouvez pas simplement utiliser une boucle for pour aller sur l'objet de dictionnaire. articles de dictionnaire Python non seulement à la fois une clé et une valeur, mais ils ont aussi une iterator spéciale en boucle sur eux. Au lieu de pour l'article dans le dictionnaire. vous devez utiliser pour la clé, la valeur en dictionary.items (). en utilisant cette iterator spécifique et en utilisant les deux variables, clé et la valeur, au lieu de la seule variable. De même, il y a itérateurs séparé pour les clés (.keys ()) et les valeurs (.values ​​()).

Vous pouvez stocker les clés des critiques avec un faible score dans une liste, du nom lowscores si plus tard vous pouvez simplement réutiliser la liste pour les récupérer dans le dictionnaire.

Si le dictionnaire contenant l'ensemble des données est grande, il pourrait être plus sage d'utiliser la liste des lowscores que vous venez de manière à générer un dictionnaire entièrement nouveau. L'avantage est que pour une analyse ultérieure, vous n'avez pas besoin de garder le grand dictionnaire dans la mémoire et peut tout simplement procéder au sous-ensemble pertinent des données d'origine.

Tout d'abord, vous utilisez les clés stockées dans lowscores pour créer le nouveau dictionnaire. Il y a deux options pour cela: un peu les éléments récupère pertinents du dictionnaire d'origine avec la méthode laissant les autres utilisations (.pop intacte, original .get ()), qui ne supprime définitivement du dictionnaire d'origine.







Le code pour subsetting pourrait se présenter comme suit: sous-ensemble = dict ([(k, reviews.get (k)) pour k lowscores]). Cette notation peut sembler peu familière, parce que la boucle est écrit en une seule ligne de code. Ce style est appelé un « dictionnaire compréhensions », mais il est en fait une boucle for déguisé, en boucle sur les articles de lowscores. récupérer les valeurs de commentaires et de les utiliser pour remplir un nouveau dictionnaire. Il est très similaire à une compréhension de la liste, mais, évidemment, émet un dictionnaire au lieu d'une liste.

Il est déconseillé cependant d'utiliser compréhensions si vous n'êtes pas familier mais avec ce style de programmation; la sortie écrite en boucle est beaucoup plus facile à lire et à comprendre. Cependant, comme vous aurez souvent à lire le code des autres, vous devriez être en mesure d'au moins reconnaître.

Vous pouvez comparer le style traditionnel en boucle avec la compréhension dictionnaire et vérifiez qu'ils produisent en effet exactement le même résultat:

Supposons que vous voulez maintenant réorganiser notre dictionnaire afin d'avoir les résultats de l'examen que les clés du dictionnaire, au lieu des ids. Vous pouvez utiliser une boucle for pour cela, spécifiant les clés et les valeurs et construire un nouveau dictionnaire imbriqué. Vous devrez récupérer le « score » du dictionnaire à l'origine imbriqué à l'utiliser comme la nouvelle clé.

Pour simplifier un peu le code, vous créez le nouveau dictionnaire imbriqué comme les NewValues ​​d'objet sur une ligne séparée avant de remplir le scoredict avec les Ids clés et le dictionnaire de NewValues ​​comme ses valeurs:

Vous devez traiter le texte d'examen un peu en supprimant les balises HTML et convertir les mots en majuscules en minuscules. Pour la première, nous utilisons une expression régulière qui supprime tous les tags: re.sub ( »<.*?>», « »). Les expressions régulières sont un outil très utile pour traiter les données de texte. Ils sont assez complexes pour compiler et méritent certainement un tutoriel de leur propre pour (aspirant) scientifiques de données.

vous avez juste besoin Dans cet exemple, cependant, de saisir ce qui commence par < followed by an unknown number (including 0) of any character and closed by >. est substitué par rien: « » (guillemets vides).

Python a une fonction intégrée pour éliminer les capitales de mots en enchaînant simplement la fonction .lowercase () à une chaîne. De cette façon, vous évitez que les mots qui sont capitalisées parce qu'ils se produisent au début d'une phrase sont considérés comme des mots séparés. Il y a, bien sûr, les cas où la lettre majuscule représente un autre mot, mais la détection de ces nécessite un certain traitement de texte avancé (appelé entité nommée reconnaissance), mais cela est bien au-delà de la portée des dictionnaires Python.

, Vous construisez ensuite le dictionnaire de fréquence en utilisant un defaultdict au lieu d'un dictionnaire normal. Cela garantit que chaque « clé » est déjà intialized et vous pouvez simplement augmenter le nombre de fréquences avec 1.

Si vous n'utilisez pas defaultdict. Python soulèverait une erreur lorsque vous essayez d'augmenter le nombre pour la première fois (donc de 0 à 1) parce que la clé n'existe pas encore. Cela pourrait être surmonté d'abord vérifier si une clé existe dans le dictionnaire, avant d'augmenter sa valeur, mais cette solution est loin d'être élégant par rapport à defaultdict.

Une fois que le dictionnaire de fréquence est prêt, vous devez toujours trier les clés de la valeur dans l'ordre décroissant pour voir rapidement quels mots sont très fréquents. Comme les dictionnaires normaux (y compris defaultdict ne peuvent pas être commandés par la conception), vous avez besoin d'une autre classe, à savoir OrderedDict. Il stocke un dictionnaire dans l'ordre les éléments ont été ajoutés. Dans ce cas, vous avez besoin de trier les éléments d'abord, avant de les stocker à nouveau dans la nouvelle, OrderedDict.

La fonction triés prend 3 arguments. Le premier est l'objet que vous souhaitez trier, votre dictionnaire de fréquence. Rappelez-vous cependant que l'accès aux paires clé-valeur dans un dictionnaire est possible grâce à la fonction .items (). Si vous oubliez cela, Python ne se plaindra pas même, mais seulement retourner la première clé rencontre. En d'autres termes: si vous bouclez un dictionnaire et votre code se comporte d'une façon bizarre, vérifiez si vous avez ajouté la fonction .items () avant de commencer à crier.

Le deuxième argument spécifie quelle partie du premier argument doit être utilisé pour trier: key = lambda item: item [1]. Encore une fois, vous devrez creuser un peu plus profondément dans le langage Python pour saisir ce qu'il en est. La première partie est assez explicite: vous voulez que les clés à trier.

Mais quel est le lambda fait là?

Eh bien, une fonction lambda est une fonction anonyme, ce qui signifie qu'il est une fonction sans nom et ne peut pas être appelé de l'extérieur. Ce n'est pas le lieu ni le temps d'en discuter dans son intégralité, mais il est une autre façon de boucler sur toute une gamme d'objets avec une seule fonction. Dans ce cas, il utilise simplement la valeur de dictionnaire (article [1]. Au point [0] étant la clé) comme argument pour le tri.

Le troisième et dernier argument, inverse. indique si le tri doit être croissant (par défaut) ou descendant. Dans ce cas, vous voulez voir les mots les plus fréquents au sommet et la nécessité de préciser explicitement que inverse = True.

Si vous deviez regarder immédiatement au-dessus des articles triés maintenant, vous seriez déçu par les mots qui dominent cette liste de fréquences. Ceux-ci seraient simplement « mots de fonction » tels que « le », « et », « a », etc. anglais (et bien d'autres langues bien sûr) est plein de ces mots, mais ils sont principalement utilisés pour la langue de la colle ensemble et ils sont tout à fait dénuée de sens dans l'isolement.

Dans l'analyse de texte, des listes d'arrêt soi-disant sont utilisés pour enlever ces mots très fréquents de l'analyse. Nous appliquons (encore une fois) une approche plus rudimentaire en ignorant les mots top 10% et ne considère que les mots qui sont parmi les 90% les plus fréquents. Vous verrez que le haut de cette liste fournit, des mots négativement chargés plus intéressants comme « mal à l'aise » et « frustrant », mais aussi positives comme « captivant » et « merveilleusement ».

Vous pouvez expérimenter avec vous-même de trancher pour voir dans quelles parties des données vous pouvez trouver les mots intéressants.

Les dictionnaires sont une structure de données essentielle innée à Python, vous permettant besoin de mettre les données dans les objets Python pour traiter davantage. Ils sont, à côté des listes et tuples, l'une des structures de données de base, mais les plus puissantes et flexibles que Python offre. Ces derniers temps cependant, une grande partie de la fonctionnalité de dictionnaire peut être et est en effet remplacé par Pandas. une bibliothèque d'analyse des données Python qui permet de conserver plus de traitement et d'analyse des données au sein de Python, plutôt que de vous forcer, en tant que scientifique de données, d'utiliser des langages de programmation statistiques spécialisées (notamment R) sur le côté.

S'il y a impromptu bibliothèques facilement disponibles, pourquoi la peine encore à comprendre ce que les dictionnaires peuvent faire?

Eh bien, il est toujours bon d'apprendre à marcher avant de courir.

Il est sans aucun doute afin que les bibliothèques comme Pandas permettent aux données scientifiques de travailler plus rapidement et plus efficaces parce qu'ils ne doivent plus se soucier des détails de niveau inférieur de la façon dont les données sont stockées. Pandas, cependant, utilise aussi des dictionnaires (à côté d'autres structures de données avancées telles que le tableau NumPy) pour stocker ses données. En conséquence, il est une bonne idée de savoir comment fonctionne un dictionnaire avant de quitter le travail, à savoir le stockage des données dans les structures de données appropriées, Pandas.

Même lors de l'utilisation Pandas, il est parfois recommandé d'utiliser encore des dictionnaires Python lorsque la situation l'exige, par exemple lorsque les valeurs doivent simplement être mis en correspondance et vous n'avez pas besoin des fonctionnalités Pandas pour quoi que ce soit d'autre. L'utilisation d'un objet Pandas est dans ce cas tout simplement inefficace et surpuissant.

Enfin, Pandas contient des fonctions pour convertir un dictionnaire à un dataframe Pandas et vice versa, et dataframes peut contenir des dictionnaires. Les deux sont en effet des éléments très utiles de la boîte à outils du chercheur de données modernes.

Et après?

Toutes nos félicitations! Vous avez atteint la fin de notre tutoriel dictionnaire Python!

Complétez votre apprentissage en prenant la de DataCamp libre Introduction à Python pour le cours des sciences de données pour en savoir plus sur les bases de Python que vous devez savoir faire pour en apprendre davantage sur le flux de contrôle scientifique des données et le Python intermédiaire pour le cours Data Science. Si vous êtes prêt à passer à Pandas, ne manquez pas notre Pandas cours de fondations, réalisé en collaboration avec Dhavide Aruliah (Continuum Analytics).

Qu'est-ce que tu penses?







Articles Liés