Analyse de données avec Python
Wes McKinney
First Interactive, O'Reilly ®
Préface
xi
Nouveautés pour la deuxième éditionix
Conventions utilisées dans ce livrex
Utilisation des exemples de codexi
Terminologie françaisexii
In [] et Out[]xii
1. Préliminaires1
1.1 De quoi parle ce livre ?1
Quels types de données ?1
1.2 Pourquoi Python pour l'analyse des données ?2
Python, roi du collage2
Résoudre le problème des « deux langages »3
Pourquoi pas Python ?3
1.3 Librairies Python essentielles4
NumPy4
pandas5
matplotlib6
IPython et Jupyter6
SciPy7
scikit-learn8
statsmodels9
1.4 Installation et configuration9
Windows10
Apple (OS X, macOS)10
GNU/Linux10
Installation ou mise à jour de packages Python11
Python 2 et Python 312
Environnements de développement intégrés (IDE) et éditeurs de texte12
1.5 Communauté et conférences13
1.6 Naviguer dans ce livre14
Exemples de code14
Données pour les exemples15
Conventions d'importation15
Jargon15
2. Les bases du langage Python, de IPython et des calepins Jupyter17
2.1 L'interpréteur Python18
2.2 Les bases de IPython19
Exécuter le shell de IPython19
Exécuter Jupyter Notebook20
Complétion automatique de saisie23
Introspection25
La commande %run26
Exécuter du code depuis le presse-papiers28
Raccourcis clavier du terminal28
Commandes magiques29
Intégration de matplotlib32
2.3 Bases du langage Python32
Sémantique33
Types scalaires41
Contrôle du flux d'exécution49
3. Structures de données natives, fonctions et fichiers55
3.1 Structures de données et séquences55
Tuples55
Listes59
Fonctions sur séquences natives63
Dictionnaires dict66
Ensembles set69
Listes, ensembles et dictionnaires par compréhension72
3.2 Fonctions74
Espaces de noms, portée et fonctions locales75
Renvoyer des valeurs multiples76
Les fonctions sont des objets77
Fonctions lambda (anonymes)78
Argumentation partielle par curryfication79
Générateurs80
Erreurs et traitement des exceptions82
3.3 Les fichiers et le système d'exploitation85
Octets et Unicode avec les fichiers88
3.4 Conclusion90
4. Principes de NumPy : tableaux et calculs vectoriels91
4.1 NumPy et ndarray : un objet multidimensionnel93
Créer des ndarray94
Types de données pour les ndarray96
Arithmétique avec des tableaux NumPy99
Indexation et tranchage élémentaires100
Indexation booléenne106
Indexation fancy108
Transposer des tableaux et permuter les axes110
4.2 Fonctions universelles : fonctions de tableau rapides élément par élément111
4.3 Programmation orientée tableaux avec les tableaux NumPy114
Exprimer une logique conditionnelle sous forme d'opérations de tableau116
Méthodes mathématiques et statistiques118
Méthodes pour les tableaux booléens120
Tris120
unique et autres logiques d'ensembles121
4.4 Entrées et sorties fichiers avec NumPy122
4.5 Algèbre linéaire123
4.6 Génération de nombres pseudo-aléatoires125
4.7 Exemple : marches aléatoires127
Simuler plusieurs marches aléatoires à la fois128
4.8 Conclusion130
5. Débuter avec pandas131
5.1 Introduction aux structures de données pandas132
Sériés132
DataFrame136
Objets Index142
5.2 Fonctionnalités essentielles144
Réindexation145
Supprimer des entrées d'un axe147
Indexation, sélection et filtrage149
Index numériques entiers153
Arithmétique et alignement des données155
Application de fonctions et mappage161
Tri et classement163
Index d'axes avec des étiquettes dupliquées166
5.3 Synthèse et statistiques descriptives167
Corrélation et covariance170
Valeurs uniques, dénombrement de valeurs et appartenance172
5.4 Conclusion175
6. Chargement et stockage de données177
6.1 Lecture et écriture de données au format texte177
Lecture de fichiers texte par morceaux183
Écrire des données au format texte185
Travailler avec des formats à délimiteurs187
Données JSON189
XML et HTML : le web scraping190
6.2 Formats de fichiers binaires194
Utiliser le format HDF5195
Lire des fichiers Microsoft Excel197
6.3 Interagir avec des API Web198
6.4 Interagir avec des bases de données199
6.5 Conclusion201
7. Nettoyage et préparation des données203
7.1 Traitement des données manquantes203
Filtrer les données manquantes205
Compléter les données manquantes207
7.2 Transformer les données209
Supprimer les doublons209
Transformer des données à l'aide d'une fonction ou d'un mappage211
Remplacer des valeurs213
Renommer les index d'un axe214
Discrétisation et binning215
Détecter et filtrer les valeurs aberrantes218
Permutation et échantillonnage aléatoire219
Calculer des variables indicatrices/factices220
7.3 Manipuler des chaînes224
Méthodes pour les objets chaînes224
Expressions régulières225
Fonctions de chaîne vectorisées dans pandas229
7.4 Conclusion232
8. Joindre, combiner et remanier les données233
8.1 Indexation hiérarchique233
Réorganiser et trier les niveaux236
Statistiques sommaires par niveau237
Indexer avec les colonnes d'un DataFrame237
8.2 Combiner et fusionner des jeux de données239
Jointures de DataFrame en style bases de données239
Fusion sur l'index244
Concaténer le long d'un axe248
Combiner des données avec chevauchement253
8.3 Remodeler et pivoter255
Remodelage avec indexation hiérarchique255
Faire pivoter du format « long » au format « large »258
Faire pivoter du format « large » au format « long »261
8.4 Conclusion263
9. Tracés et visualisation265
9.1 Un bref aperçu de l'API de matplotlib266
Figures et sous-tracés267
Couleurs, marqueurs et styles de lignes271
Marques, étiquettes et légendes274
Annotations et dessin sur un sous-tracé277
Enregistrement de tracés dans un fichier280
Configuration de matplotlib281
9.2 Tracer avec pandas et seaborn282
Tracés linéaires282
Graphiques en barres285
Histogrammes et tracés de densité291
Graphiques de dispersion et nuages de points294
Grilles à facettes et données catégorielles297
9.3 Autres outils de visualisation Python299
9.4 Conclusion300
10. Agrégation de données et opérations de groupe301
10.1 Mécanisme de GroupBy302
Itérer sur des groupes305
Sélectionner une colonne ou un sous-ensemble de colonnes307
Grouper avec des dicts et des séries308
Grouper avec des fonctions309
Grouper par niveaux d'index309
10.2 Agrégation de données310
Application par colonnes et fonctions multiples312
Renvoyer des données agrégées sans index de lignes316
10.3 Séparer-appliquer-combiner avec apply316
Supprimer les clés de groupe319
Analyse par quantiles et baquets319
Exemple : remplir les valeurs manquantes avec des valeurs spécifiques au groupe320
Exemple : échantillonnage aléatoire et permutation322
Exemple : moyennes de groupe pondérées et corrélations324
Exemple : régression linéaire par groupe326
10.4 Tableaux croisés dynamiques et tableaux pivots327
Tableaux croisés simples329
10.5 Conclusion331
11. Séries chronologiques333
11.1 Types de données et outils de date et d'heure334
Conversions entre chaînes de caractères et datetime335
11.2 Les bases des séries chronologiques338
Indexation, sélection, substitution339
Séries temporelles avec indices dupliqués342
11.3 Plages de dates, fréquences et décalages343
Générer des plages de dates344
Fréquences et décalages de dates347
Décalage de données (avance et retard)348
11.4 Gérer les fuseaux horaires351
Localisation et conversion des fuseaux horaires352
Opérations avec des objets d'horodatage tenant compte du fuseau horaire354
Opérations entre fuseaux horaires355
11.5 Travailler avec les périodes de temps356
Conversion de fréquence des périodes357
Fréquences trimestrielles359
Conversion des horodatages en périodes (et inversement)361
Création d'un Periodlndex à partir de tableaux362
11.6 Rééchantillonnage et conversion de fréquences365
Sous-échantillonnage366
Suréchantillonnage et interpolation369
Rééchantillonnage avec des périodes370
11.7 Fonctions de fenêtre mobile372
Fonctions à pondération exponentielle375
Fonctions de fenêtre mobile binaires377
Fonctions de fenêtre mobile définies par l'utilisateur378
11.8 Conclusion379
12. Fonctionnalités avancées de pandas381
12.1 Données catégorielles381
Contexte et motivation381
Le type Categorical de pandas383
Calculs avec Categorical385
Méthodes catégorielles388
12.2 Utilisation avancée de GroupBy391
Transformations de groupes et « déballages »391
Rééchantillonnage temporel groupé395
12.3 Techniques de chaînage de méthodes396
La méthode de canalisation pipe398
12.4 Conclusion399
13. Introduction aux librairies de modélisation pour Python401
13.1 Interfaçage entre pandas et le code de modélisation401
13.2 Créer des descriptions de modèles avec Patsy404
Transformations de données dans les formules de Patsy407
Données catégorielles et Patsy409
13.3 Introduction à statsmodels412
Estimation des modèles linéaires412
Estimer des processus de séries temporelles415
13.4 Introduction à scikit-learn416
13.5 Pour poursuivre votre formation420
14. Exemples d'analyse de données421
14.1 Données USA.gov de Bitly421
Dénombrer des zones Time Zone en Python pur422
Dénombrer des zones Time Zone avec pandas425
14.2 Jeu de données MovieLens 1M432
Mesurer les divergences de notation436
14.3 Prénoms des bébés américains 1880-2010438
Analyse des tendances de choix de prénom443
Mesure de l'augmentation de diversité des prénoms445
La révolution de la « dernière lettre »448
Prénoms de garçons devenus prénoms de filles (et vice versa)451
14.4 Base de données sur l'alimentation de l'USDA453
14.5 Base de données de la Commission électorale fédérale 2012459
Statistiques sur les dons par profession et par employeur462
Distribution des montants des dons en baquets465
Statistiques sur les dons par État467
14.6 Conclusion468
Annexe A Techniques avancées pour NumPy469
A.1 Détails internes de l'objet ndarray469
Hiérarchie des types de NumPy470
A.2 Manipulation sophistiquée des tableaux471
Reformation d'un tableau472
Ordre de parcours C ou Fortran474
Concaténation et division de tableaux475
Répétition d'éléments avec tile et repeat478
Équivalents à l'indexation fancy : take et put480
A.3 Diffusion {broadcasting)481
Diffusion selon d'autres axes484
Création de valeurs de tableau par diffusion486
A.4 Utilisation avancée de ufunc487
Méthodes d'instance ufunc487
Création de nouvelles ufunc en Python489
A.5 Tableaux structurés et enregistrements490
Imbrication de dtype et champs multidimensionnels491
Pourquoi recourir aux tableaux structurés ?492
A.6 Retour sur les tris492
Tri indirect avec argsort et lexsort494
Autres algorithmes de tri495
Tri partiel d'un tableau496
numpy.searchsorted : recherche d'éléments dans un tableau trié497
A.7 Fonctions NumPy rapides avec Numba498
Création d'un objet numpy.ufunc spécifique avec Numba500
A.8 Entrées et sorties tableaux sophistiquées500
Fichiers relayés en mémoire (memory mapped)500
Format HDF5 et autres options de stockage de tableaux502
A. 9 Considérations de performances502
De l'importance de la continuité d'implantation mémoire502
Annexe B Plus loin avec IPython505
B.1 Historique de ligne de commande505
Recherche dans l'historique et réutilisation de commande505
Variables d'entrée et de sortie506
B.2 Interactions avec le système d'exploitation507
Commandes shell et alias508
Signets de répertoires509
B.3 Outils de développement logiciel510
Débogueur interactif510
Chronométrage d'exécution avec %time et %timeit515
Profilage élémentaire avec %prun et %run -p516
Profilage d'une fonction ligne par ligne518
B.4 Astuces de développement IPython520
Rechargement des dépendances de modules521
Astuces de conception du code522
B.5 Fonctions IPython sophistiquées523
Rendre vos propres classes IPythonesques523
Profils et configuration524
B.6 Conclusion525
Index
527