Petite liste d’astuces en Python (avec pandas et Jupyter entre autres) appliquées à de la Data Analyse et ainsi gagner en productivité.
Parser fichier HTML en DataFrame
Avec pandas il est possible de parser un fichier HTML en DataFrame avec read_html() et dans le sens inverse avec to_html() de créer un HTML à partir d’un DataFrame :

Parser en Markdown
Dans le même ordre idée, pandas dispose d’une méthode pour transformer un DataFrame en Markdown. Utile pour les README notamment !

Recap d’un dataset
describe() permet de se familiariser avec le dataset (voir le max, min, moyenne, nb, etc). Mais ça ne fonctionne PAS pour avec un timestamp ou les colonnes avec un symbole. Pour prendre en compte toutes les colonnes il faut ajouter l’argument (include=’all’)

Simplifier l’accès à une colonne d’un dataset
Le renommage de colonne dans pandas permet de retirer les espaces pour ensuite accéder à la colonne via un point. Pour ce faire, on peut renommer via rename() ou via un dict pour renommer toutes les colonnes d’un coup. Moi je supprime l’espace avec la méthode replace() :
Réduire espace utilisé d’un DataFrame
Un autre tips, pour réduire l’espace mémoire utilisé par un DataFrame : réduire le type de la colonne. Par exemple, si on a du int64, en général on peut descendre d’un cran sans risques :
df['col'] = df['col'].astype(np.int16)
Précision nombres à virgule
Avec pandas, on peut préciser le nombre de chiffres après la virgule qu’on souhaite afficher dans pandas via :
pd.set_options(‘display.precision’,3)
Extraire une partie d’un Dataset
Lorsqu’on souhaite extraire un sous ensemble d’un dataset trop gros, il existe en la fonction sample() pour ça :

Pour extraire une partie d’un dataset avec .sample(), le param frac prend une valeur entre 0 et 1 pour préciser la proportion du sample qu’on souhaite extraire du dataset.
Par exemple : frac=0.2 retourne un sample de 0.2*taille du dataset
Et .reset_index(drop=True) pour reset les index :

Cacher les warnings
Pour chacher les Warnings en Python :
import warnings warnings.filterwarnings(action=‘ignore’)
Mais attention à son utilisation.
Ajouter une colonne à un DataFrame
Avec pandas il y a 2 méthodes pour ajouter une colonne à un DataFrame :
- en déclarant une nouvelle liste
- en utilisant insert()
Conversion .ipynb vers .py
Avec Jupytext on peut convertir un fichier format Jupiter notebook (.ipynb) en format python (.py) avec : jupytext —to py <file-name>.ipynb
Source : https://github.com/mwouts/jupytext
Tout afficher sur Jupyter
Comment afficher toutes les sorties dans Jupyter et pas seulement la dernière ? avec :
from IPython.core.interactiveshell
import InteractiveShell InteractiveShell.ast_node_interactivity = « all »
Pep8
Éviter les : import *
Préférer un import par ligne.

DataFrame pour tester
Créer un DataFrame pour tester avec makeDataFrame() ou makeMissingDataframe() ou makeTimeDataFrame() ou makeMixedDataFrame()
Les gros nombres en Python
En Python utilisez les underscores pour gagner en visibilité avec les gros nombres :

CSV trop lourd ?
Un CSV est trop lourd en mémoire ? Skiprows permet de spécifier le nombre de lignes à sauter lors de la lecture.

La fonction apply()
apply() est l’une des fonctions les plus utilisées parce qu’elle applique la fonction sur chaque ligne ou colonne. axis=0 pour appliquer sur chaque colonne et axis=1 pour chaque ligne.

Nombre de colonnes à afficher
Pour montrer plus de colonnes/lignes dans pandas :
import pandas as pd
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
Copier cellule Jupyter
On peut copier une cellule d’un autre fichier en pressant cmd+v deux fois. Avec juste cmd+v il y a un warning.

Sets vs Lists en Python
Pour des opérations basiques (comme : « element in list »), préférez les Sets aux Lists. Vous gagnerez en performance.
Pour les Sets on est sur du constant O(n) tandis que pour une liste, on est sur du linéaire O(n)
Info()
Sur Jupyter, utiliser info() pour voir l’utilisation de la mémoire par le DataFrame. Et memory_usage() pour chaque colonne.
Initialiser un dict en Python
Pour des questions de perf, utilisez
defaultdict(int)
pour init un dict plutôt que juste :
mdict = {}
Debugger de Jupyter
Dans Jupiter, utilisez la commande %debug dans une nouvelle cellule pour ouvrir un debugger interactif. Il montre la position où l’exception a été levée , ce qui permet d’examiner le cide à ce moment (le contenu d’une variable par exemple).
Les commandes magiques de Jupyter
Dans Jupyter, il existe des commandes dites magiques pour gagner du temps. Elles sont accessibles via : %lsmagic Les plus utilisées en général sont : %pwd, %cd, %ls et %who pour lister l’ensemble des variables.
print() vs display()
print() vs display() : display() permet de soigner l’affichage :

Affichage d’un graphe sous Jupyter
Lors de la création d’un graphe avec pandas, mettre un point virgule pour ne plus afficher <matplotlib.axes._subplots.AxesSubplot at 0x11bb8ec90>

Tab vs Space en Python ?
Tab vs Space ? #Python Préférez les Spaces ! Utiliser des Tab seulement s’il y en a déjà dans le programme. Ne surtout pas mélanger les deux.
La commande whos sur Jupyter
La commande %whos est géniale sur un notebook jupyter. Elle permet d’afficher l’état (type, valeur) de l’ensemble des variables.

Obtenir la documentation d’une fonction
En appelant une méthode avec un point d’interrogation devant, on peut obtenir la doc

Changer le langage dans Jupyter
Dans jupyter on peut changer le langage avec : %%bash ou %%HTML ou %%perl, etc.
