# Introduction à Pandas ## Concepts de base - Types de base : `Series` - Types de base : `DataFrame` - Types de base : `Index` - Types alternatifs : `MultiIndex` - Types alternatifs : `DatetimeIndex` ## Jupyter - Types de cellules, Kernel - Raccourcis clavier par défaut - Qu'est-ce que Jupyter ? - Avantages de Jupyter pour l'analyse de données - Installer Jupyter et lancer un serveur Jupyter - Types de cellules, Kernel - Raccourcis clavier par défaut ## Création de données avec Python, Numpy et Pandas - Tableaux Numpy - Création et manipulation de tableaux (1D et 2D) - Fonctions pour générer des séquences - numpy.arange() et numpy.linspace() - pandas.date_range() - numpy.random.default_rng() - numpy.empty, ones, zeros, etc. - Numpy : "Array creation routines" ## Manipuler une série - Quelles sont les propriétés d'une série ? - Quand obtient-on une série ? - Types de données (`dtype`) - Créer une série - Avec index par défaut - Avec un index - Préciser le dtype - Extraire des informations d'une série (valeurs, index) - Opérations sur séries (arithmétiques, comparaisons) - Modifier une valeur d'une série - Valeurs vides et filtrage (isna, notna, dropna, fillna, count) - Méthodes des séries booléennes (any, all) - Récupérer les valeurs distinctes (unique) et retirer des doublons - Appliquer une fonction aux valeurs d'une série - Filtrer une série (slice, indexes, conditions, filtres str, filtres dt) - Concaténation de séries ## Manipuler un dataframe - Quelles sont les propriétés d'un DataFrame ? - Notions et nomenclature des DataFrame (index, colonnes) - Quand obtient-on un DataFrame ? - Types de données (`dtypes`) - Créer un DataFrame - Avec des index par défaut (colonnes et lignes) - Avec des index (colonnes et lignes) - Extraire des informations d'un DataFrame - Taille d'un DataFrame - Index des lignes et colonnes - Cellule à une position (`at`) - Une ligne de données (`loc`, `iloc`) - Une colonne de données (`df[]`) - Plusieurs lignes de données (`loc`, `iloc`) - Plusieurs colonnes de données (`df[]`) - Lignes **et** colonnes (`loc[,]`, `iloc[,]`) - Filtrage conditionnel (`loc[]`) - Déduplication des lignes (`drop_duplicates`) - Tri des lignes - Récapitulatif - Valeurs vides et filtrage (isna, notna, dropna, fillna) - Détecter les valeurs vides (isna, notna) - Méthodes des séries booléennes (any, all, sum) - Supprimer les lignes avec des valeurs vides (dropna) - Remplacer les valeurs vides (fillna) - Modifier des informations dans un DataFrame - Changer toute une colonne ou ligne - Créer une ligne ou une colonne (+ insertion) - Changer une cellule - Retirer une ou plusieurs lignes et colonnes - Appliquer une fonction - Comme du SQL, pour des DataFrame - Ajouter un DataFrame sous ou à côté d'un autre - Effectuer des jointures (left, right, inner, outer) - Groupements (group_by) - Fenêtres - Configurer l'affichage d'un DataFrame (config ou to_string) ## Utiliser des index - Quelles sont les propriétés d'un index ? - Extraire des valeurs d'un index (position, slicing) - Connaître la position d'une valeur dans l'index (`get_loc`) - Définir un index à un DataFrame ou une série - Réinitialiser l'index d'un DataFrame ou une série - Trier par un index (MultiIndex) - Comprendre les MultiIndex - Les DatetimeIndex et la fonction date_range ## Calculer avec des séries et des dataframe - Appliquer des fonctions d'agrégation (statistiques etc.) - Sur une série - Sur un DataFrame (`describe()`) - Multiples résultats simultanés (`df.agg()`) - Fonctions d'agrégation personnalisées - Conversion des types (to_datetime, `.astype()`, etc.) - Opérations et comparaisons sur les séries et dataframes ## Chargement de DataFrame depuis fichiers - Protocoles pris en charge (https, file) - Chargement de fichiers CSV (inférence, dates, en-têtes, encodage) - Chargement de fichiers Excel (moteurs de chargement : xlrd, openpyxl etc.) - Chargement depuis document JSON (liste de dictionnaires etc.) - Prise en charge des archives (zip, gz, bz2, xz) - Chargement depuis SQLite3 (ou SQLAlchemy) ## Enregistrement de DataFrame vers des fichiers - Formats de sauvegarde classiques (Excel, CSV) - Formats SQL (connexion SQLAlchemy ou SQLite3) - Format Pickle ## Export de DataFrame vers des formats divers - Vers un dictionnaire - Vers une chaîne de caractères - Vers un document HTML ## Rendu de graphiques avec Pandas et Matplotlib - Matplotlib, qu'est-ce que c'est ? - Comment ça marche ? ### Diagrammes avec Pandas - Exemples simples (création de diagrammes matplotlib) - Générer un diagramme en barres - Générer un diagramme en lignes - Générer un diagramme en secteurs - Générer un nuage de points - Autres diagrammes - Personnaliser les diagrammes - Arguments de la méthode `.plot()` (tracé) ### Matplotlib plus complet - Créer un simple tracé et dessiner dedans - Avec un DataFrame - Avec des données brutes (Numpy ou Python) - Dessiner par-dessus un tracé (hold state) - Objets de type `Figure` et sous-tracés (`Axes`) - Layout multi-tracés (`subplots`) - Manipuler un objet de tracé `Axes` - Afficher les diagrammes (fenêtres) - Personnaliser les couleurs - Nommage des couleurs - Cartes de couleur (`Colormap`) - Objets colormap fournis par Matplotlib - Objets colormap personnalisés (classes Colormap) - Personnaliser les tracés - Largeurs de traits, contours de zones - Couleurs de fond - Couleurs de tracés - Espacements et mise en page - Polices de texte - Génération de légendes - Libellés (X, Y, titre, Axes, valeurs de barres/secteurs) - Dessiner par-dessus un tracé (lignes, texte, cercles) # Rendu de diagrammes statistiques avec Seaborn - Seaborn, c'est quoi ? - Créer un simple tracé pour une matrice de corrélation (heatmap) # Rendu de diagrammes web avec Plotly et Dash - Plotly, c'est quoi ? - Plotly Express, c'est quoi ? - Exemples simples - Générer un diagramme en barres - Générer un diagramme en lignes - Générer un diagramme en secteurs - Générer un nuage de points - Générer un diagramme de Sankey - Dash, c'est quoi ? - Générer un tableau de bord simple avec Dash - Construction avec des composants HTML - Composant `dash_table.DashTable` - Composants DCC (Dash Core Components) - Créer un dashboard via un document HTML (dash-htmlayout) - Interactivité dans un tableau de bord Dash - Callbacks - Entrées - Sorties - Propriétés des composants - Styles CSS et scripts JS dans un document Dash - Répertoire de recherche des fichiers et configuration - dash-htmlayout pour créer son layout de tableau de bord sans Python # Concurrence et parallélisme dans le traitement de données - Optimisation des performances via la parallélisation/threading - Outils Python d'exécution concurrente/parallèle - Celery (Linux seulement) - Configuration - Installation d'un broker (Redis) - Envoi d'une tâche Celery - Démarrage d'une tâche et service Worker - Tâches périodiques et service Beat - Spark + pySpark (Linux seulement) # Outils et bibliothèques de performance Python - Numba - Nuitka - PyPy - Mesurer le temps d'exécution de votre code - Concept : Profiling