Python pour la data science
Jake VanderPlas
First Interactive
Introductionxi
À qui s'adresse ce livrexii
Pourquoi Python ?xiii
Python 2 ou Python 3 ?xiii
Organisation de ce livrexiv
Contenu additionnelxiv
Prérequis d'installationxv
Mise en pratique des exemplesxvi
Conventions utilisées dans ce livrexvii
Terminologie françaisexvii
1. IPython, plus loin que Python1
Interpréteur shell ou calepin ?2
Démarrage du shell IPython2
Démarrage du calepin Jupyter2
Aide et documentation d'IPython3
Accès à la documentation avec ?4
Accès au code source avec ??6
Exploration des modules avec Tab6
Raccourcis clavier du shell IPython9
Raccourcis de navigation9
Raccourcis d'historique de commandes10
Raccourcis divers11
Commandes magiques d'IPython11
Collage d'un bloc de code avec %paste et %cpaste12
Exécution de code externe avec %run12
Chronométrage de l'exécution avec %timeit13
Aide des fonctions magiques ?, %magic et %lsmagic13
Historique d'entrées et de sorties14
Les objets In et Out d'IPython14
Raccourcis à préfixe souligné et sorties précédentes15
Suppression d'une donnée de sortie16
Autres commandes magiques16
IPython et les commandes shell17
Une brève introduction au shell17
Commandes shell dans IPython18
Transmettre une valeur de et vers le shell19
Commandes magiques liées au shell20
Erreurs et débogage21
Contrôle des exceptions avec %xmode21
Débogage : si la trace d'exécution ne suffit pas23
Profilage et chronométrage d'exécution25
Chronométrage d'un bloc de code : %time et %timeit26
Profilage d'un script entier avec %prun28
Profilage ligne par ligne avec %lprun28
Profilage de l'occupation mémoire avec %memit et %mprun29
Autres ressources IPython31
Ressources Web31
Livres imprimés31
2. Introduction à NumPy33
2.1 : Les types de données Python34
Un entier Python est plus qu'un entier35
Une liste Python n'est pas qu'une simple liste37
Tableaux Python à type fixe ou unique38
Création d'un tableau depuis une liste Python39
Création d'un tableau avec valeurs initiales39
Types de données NumPy standard40
2.2 : Fondamentaux des tableaux NumPy42
Accès aux attributs d'un tableau NumPy42
Index de tableaux et accès à un élément43
Tranchage d'un tableau pour accéder à un sous-tableau44
Reformage d'un tableau (reshape)47
Concaténation et partage de tableau48
2.3 : Les fonctions universelles ufuncs50
Les boucles ou l'éloge de la lenteur50
Grands principes des ufuncs51
Découverte des ufuncs de NumPy52
Caractéristiques avancées des ufuncs56
Pour en savoir plus sur les ufuncs58
2.4 : Agrégats min, max et intermédiaire58
Somme des valeurs d'un tableau59
Minimum et maximum59
Un exemple : taille moyenne des présidents des USA61
2.5 : Calculs sur les tableaux : diffusion (broadcast)63
Présentation de la diffusion broadcasting63
Règles de diffusion65
La diffusion en pratique68
2.6 : Comparaisons, masques et logique booléenne70
Un exemple : comptage des jours de pluie70
Les opérateurs de comparaison sous forme d'ufuncs71
Traitement d'un tableau booléen73
Tableaux booléens et masques75
2.7 : Indexation fancy78
Découverte de l'indexation fancy78
Indexation combinée80
Exemple : sélection de points aléatoires81
Modification de valeurs par indexation fancy83
Exemple : répartition de données (binning)84
2.8 : Tri de tableaux '86
Tri rapide dans NumPy avec np.sort et np.argsort87
Tri partiel et partitionnement88
Un exemple : les k plus proches voisins89
2.9 : Données structurées : les tableaux structurés de NumPy93
Création d'un type de tableau structuré95
Types composites sophistiqués96
RecordArrays : tableaux structurés évolués97
2.10 : En route vers Pandas98
3. Manipulation de données avec Pandas99
3.1 : Installer et utiliser Pandas100
3.2 : Présentation des objets de Pandas101
L'objet Sériés de Pandas101
L'objet DataFrame de Pandas105
L'objet Index de Pandas108
3.3 : Indexation et sélection de données110
Sélection de données dans Sériés111
Sélection de données et DataFrame114
3.4 : Opérations sur les données Pandas119
Préservation des index avec les ufuncs119
Fonctions ufuncs et alignement d'index120
Opérations ufuncs entre DataFrame et Series123
3.5 : Gestion des données manquantes124
Compromis conventionnels des données manquantes125
Données manquantes dans Pandas125
Opérations avec des valeurs milles129
3.6 : Indexation hiérarchique134
Un objet Series à index multiple134
Méthode de création de MultiIndex138
Indexation et tranchage d'un MultiIndex142
Réorganisation d'un multi-index145
Agrégation de données sur multi-index148
3.7 : Combinaison de jeux de données avec concat et append150
Un rappel sur la concaténation des tableaux NumPy151
Concaténation simple avec pd.concat()151
3.8 : Combinaison de jeux de données avec merge et join157
Algèbre relationnelle158
Catégorie de jointures158
Spécification de la clé de fusion161
Arithmétique des ensembles et fusions165
Suffixes et conflits de noms de colonnes167
Exemple : données démographiques des USA168
3.9 : Agrégations et groupements173
Données des exoplanètes174
Une agrégation simple dans Pandas174
GroupBy : Split-Apply-Combine176
3.10 : Tableaux croisés dynamiques ou tableaux pivots186
Données de test des tableaux pivots187
Tableaux croisés manuels187
Syntaxe des tableaux croisés188
Tableaux croisés multiniveaux189
Un exemple : naissances au cours du temps190
3.11 : Opérations vectorisées sur les chaînes196
Aperçu des opérations chaînes Pandas196
Liste des méthodes de chaînes Pandas198
3.12 : Traitement des données temporelles202
Les dates et les heures dans Python203
Séries temporelles de Pandas : chrono-indexation207
Structures de données temporelles de Pandas208
Codes de fréquence et décalages210
Rééchantillonage, décalage et fenêtrage212
Pour en savoir plus218
Exemple : comptage des bicyclettes à Seattle219
3.13 : Hautes performances Pandas avec eval() et query()225
query() et eval() pour les expressions composites226
Opérations efficaces avec pandas.eval()227
DataFrame.eval() pour les opérations par colonnes229
La méthode DataFrame.query()231
Domaine d'utilisation de ces fonctions231
3.14 : Autres ressources232
Documentation en ligne de Pandas232
Analyse de données avec Python par Wes McKinney233
Stack Overflow233
Pandas sur PyVideo233
4. Visualisation avec Matplotlib235
4.1 : Techniques Matplotlib fondamentales236
Importation de Matplotlib236
Choix des styles236
Afficher les graphiques : avec ou sans show() ?237
Enregistrer une figure dans un fichier239
4.2 : Deux interfaces pour le prix d'une240
Interface de style MATLAB241
Interface orientée objet242
4.3 : Tracé de lignes simples242
Couleurs et styles de tracé des lignes245
Ajustement des limites d'axes d'un tracé247
Titres et labels de tracé249
4.4 : Tracé en nuage de points251
Lignes pointillées avec plt.plot251
Ligne pointillée avec plt.scatter255
Performances de plot() et de scatter()257
4.5 : Visualisation des erreurs257
Barre d'erreurs simple258
Plage d'erreurs continues259
4.6 : Tracé de densités et de contours260
Affichage d'une fonction à trois dimensions260
4.7 : Histogrammes, bins et densité264
Histogrammes en deux dimensions avec bins266
4.8 : Personnalisation des légendes de tracé269
Choix des éléments à légender271
Légende des tailles de points272
Cartouches de légendes multiples274
4.9 : Personnalisation des barres de couleurs275
Style des barres de couleurs276
Sélection d'une plage de couleurs277
Limites et extensions de couleurs279
Barres de couleurs discontinues280
Exemple : chiffres manuscrits281
4.10 : Sous-tracés multiples283
Sous-tracé manuel avec plt.axes283
Une grille de sous-tracés avec plt.subplot()285
Tout un ensemble en une fois avec plt.subplots286
Arrangements sophistiqués avec plt.GridSpec287
4.11 : Texte et annotations289
Un exemple : naissances aux USA et congés290
Transformations et positions du texte292
Flèches et annotations294
4.12 : Personnalisation des graduations296
Graduations majeures et mineures296
Masquer les graduations ou les labels298
Contrôle de la densité des graduations299
Format de graduations personnalisé300
Liste de formateurs et de locateurs302
4.13 : Configuration et feuilles de styles de Matplotlib303
Personnalisation manuelle303
Changement des valeurs par défaut avec rcParams305
Feuilles de styles307
4.14 : Tracés Matplotlib en 3D312
Tracé de points et de lignes en trois dimensions313
Tracés de contours en trois dimensions314
Tracés de fils de fer et de surfaces316
Triangulation de surface318
4.15 : Données géographiques avec Basemap321
Projections géographiques323
Projections cylindriques324
Projections pseudo-cylindriques325
Projections en perspective325
Projections coniques326
Tracé d'un fond de carte327
Ajoût des données sur une carte329
Exemple : villes de Californie330
Exemple : températures de surface332
4.16 : Visualisation avec Seaborn334
Seaborn comparé à Matplotlib334
Découverte des tracés Seaborn336
Diagrammes en barres344
Exemple : résultat d'un marathon346
4.17 : Autres ressources354
Ressources Matplotlib354
Autres librairies graphiques Python354
5. Apprentissage machine355
5.1 : L'apprentissage machine, c'est quoi ?356
Catégories d'apprentissage machine356
Exemples qualitatifs d'apprentissage machine357
Synthèse366
5.2 : Présentation de Scikit-Learn367
Représentation des données dans Scikit-Learn367
API estimateur de Scikit-Learn370
Application pratique : reconnaissance de chiffres manuscrits379
Résumé384
5.3 : Hyperparamètres et validation du modèle385
Le concept de validation de modèle385
Validation de modèle erronée385
Sélection du meilleur modèle389
Courbes d'apprentissage396
La validation en pratique : recherche en grille401
Résumé402
5.4 : Ingénierie des caractéristiques403
Caractéristiques catégorielles403
Caractéristiques de type texte405
Caractéristiques graphiques d'image406
Caractéristiques dérivées406
Imputation des données manquantes409
Enchaînement de traitements avec un pipeline410
5.5 : Classification bayésienne naïve410
La classification bayésienne411
Bayésien naïf gaussien412
Bayésien naïf multinomial415
Domaine d'emploi du bayésien naïf418
5.6 : Régression linéaire419
Régression linéaire simple419
Régression par fonction de base422
Régularisation426
Exemple : prédiction d'un trafic de cyclistes430
5.7 : Machines à vecteurs de support (SVM)435
Avantages des machines à vecteurs de support436
Machines à vecteurs de support et recherche d'une marge maximale437
Exemple : reconnaissance de visages446
Synthèse des machines SVM450
5.8 : Arbres de décision et forêts aléatoires451
Des forêts aléatoires d'arbres de décision452
Forêts aléatoires et classification457
Forêts aléatoires et régression459
Exemple : forêt aléatoire pour classer des chiffres461
Conclusion sur les forêts aléatoires463
5.9 : Analyse par composantes principales (PCA)464
Introduction à l'algorithme PCA464
PCA et filtrage du bruit472
Exemple : visages propres (eigenfaces)474
Synthèse de PCA477
5.10 : Apprentissage par variété (manifold)478
Apprentissage par variété : « SALUT »479
Partitionnement multidimensionnel (MDS)480
MDS pour l'apprentissage par variété (manifold learning)482
Intégration linéaire : échec de MDS484
Variétés non linéaires : intégration à linéarité locale (LLE)486
Considération à propos des méthodes par variété488
Exemple : Isomap en reconnaissance de visages489
Exemple : affichage de la structure dans des chiffres manuscrits493
5.11 : Groupements en k-moyennes496
Présentation des k-moyennes497
Algorithme en k-moyennes et Espérance-Maximisation499
Exemples505
5.12 : Modèles de mélange gaussien (GMM)511
GMM contre les faiblesses des k-moyennes512
Généralisation E-M : modèles de mélange gaussien515
GMM et estimation de densité520
Exemple : GMM pour générer des données524
5.13 : Estimation par noyau528
Raison d'être de KDE : histogrammes528
L'estimation de densité de noyau en pratique533
Exemple 1 : KDE sur une sphère535
Exemple 2 : un bayésien pas si naïf539
5.14 : Histogrammes de gradients orientés (HOG)543
Principe des histogrammes de gradients orientés544
Un détecteur de visages simplifié avec HOG545
Mises en garde et pistes d'amélioration551
Autres ressources d'apprentissage machine552
L'apprentissage machine avec Python553
L'apprentissage machine en général553
Index555