• Aucun résultat trouvé

Lignes 7 et 8. On calcule la distribution des différentes bases dans la séquence. On utilise pour cela la méthodecount() qui renvoie le nombre de fois qu’une chaîne de caractères (les différentes bases) se trouve dans une autre (la séquence).

Ligne 10. On définit la position en abscisse des barres. Dans cet exemple, la variablex vaut array([0, 1, 2, 3]). Ligne 11. La fonctionbar() construit le diagramme en bâtons. Elle prend en argument la position des barres (x) et leurs hauteurs (distribution).

Ligne 12. La fonctionxtics() redéfinit les étiquettes (c’est-à-dire le nom des bases) sur l’axe des abscisses.

Lignes 13 à 15. On définit les légendes des axes et le titre du graphique. On insère un retour à la ligne\n dans le titre pour qu’il soit réparti sur deux lignes.

Ligne 16. Enfin, on enregistre le graphique généré au format png.

On espère que ces courts exemples vous auront convaincu de l’utilité du module matplotlib. Sachez qu’il peut faire bien plus, par exemple générer des histogrammes ou toutes sortes de graphiques utiles en analyse de données. Le site de matplotlib fournit de nombreux exemples détaillés24, n’hésitez pas à le consulter.

17.4 Module pandas

Le module pandas25a été conçu pour l’analyse de données. Il est particulièrement puissant pour manipuler des données structurées sous forme de tableau.

Pour charger pandas dans la mémoire de Python, on utilise la commandeimport habituelle :

1 >>> import pandas

Pandas est souvent chargé avec un nom raccourci, comme pour NumPy et matplotlib :

1 >>> import pandas as pd

17.4.1 Series

Le premier type de données apporté par pandas est la series, qui correspond à un vecteur à une dimension.

1 >>> s = pd. Series ([10 , 20, 30, 40] , index = ['a', 'b', 'c', 'd ']) 2 >>> s 3 a 10 4 b 20 5 c 30 6 d 40 7 dtype : int64

Avec pandas, chaque élément de la série de données possède une étiquette qui permet d’appeler les éléments. Ainsi, pour appeler le premier élément de la série, on peut utiliser son index, comme pour une liste (0 pour le premier élément) ou son étiquette (ici,"a") :

1 >>> s [0] 2 10

3 >>> s["a"] 4 10

Bien sûr, on peut extraire plusieurs éléments, par leurs indices ou leurs étiquettes :

1 >>> s [[1 ,3]] 2 b 20 3 d 40 4 dtype : int64 5 >>> s [[" b","d "]] 6 b 20 7 d 40 8 dtype : int64

Les étiquettes permettent de modifier et d’ajouter des éléments :

1 >>> s["c"] = 300 2 >>> s["z"] = 50 3 >>> s 4 a 10 5 b 20 6 c 300 7 d 40 8 z 50 9 dtype : int64 24.https://matplotlib.org/gallery/index.html 25.https://pandas.pydata.org/

Chapitre 17. Quelques modules d’intérêt en bioinformatique 17.4. Module pandas

Enfin, on peut filtrer une partie de la series :

1 >>> s[s >30] 2 c 300 3 d 40 4 z 50 5 dtype : int64

et même combiner plusieurs critères de sélection :

1 >>> s[(s >20) & (s <100)] 2 d 40

3 z 50 4 dtype : int64

17.4.2 Dataframes

Un autre type d’objet particulièrement intéressant introduit par pandas sont les dataframes. Ceux-ci correspondent à des tableaux à deux dimensions avec des étiquettes pour nommer les lignes et les colonnes.

Remarque

Si vous êtes familier avec le langage de programmation et d’analyse statistique R, les dataframes de pandas se rapprochent de ceux trouvés dans R.

Voici comment créer un dataframe avec pandas à partir de données fournies comme liste de lignes :

1 >>> df = pd. DataFrame ( columns =[" a", "b", "c", "d"], 2 ... index =[" chat ", " singe ", " souris "], 3 ... data =[ np. arange (10 , 14) , 4 ... np. arange (20 , 24) , 5 ... np. arange (30 , 34)]) 6 >>> df 7 a b c d 8 chat 10 11 12 13 9 singe 20 21 22 23 10 souris 30 31 32 33

Ligne 1. Le dataframe est créé avec la fonction DataFrame() à laquelle on fournit plusieurs arguments. L’argument columns indique le nom des colonnes, sous forme d’une liste.

Ligne 2. L’argumentindex définit le nom des lignes, sous forme de liste.

Lignes 3-5. L’argumentdata fournit le contenu du dataframe, sous la forme d’une liste de valeurs correspondantes à des lignes. Ainsinp.arange(10, 14) qui est équivalent à [10, 11, 12, 13] correspond à la première ligne du dataframe.

Le même dataframe peut aussi être créé à partir des valeurs fournies en colonnes sous la forme d’un dictionnaire :

1 >>> data = {"a": np. arange (10 , 40, 10) , 2 ... "b": np. arange (11 , 40, 10) , 3 ... "c": np. arange (12 , 40, 10) , 4 ... "d": np. arange (13 , 40, 10)} 5 >>> df = pd. DataFrame . from_dict ( data ) 6 >>> df. index = [" chat ", " singe ", " souris "] 7 >>> df

8 a b c d

9 chat 10 11 12 13 10 singe 20 21 22 23 11 souris 30 31 32 33

Lignes 1-4. Le dictionnaire data contient les données en colonnes. La clé associée à chaque colonne est le nom de la colonne.

Ligne 5. Le dataframe est créé avec la fonctionpd.DataFrame.from_dict() à laquelle on passe data en argument. Ligne 6. On peut définir les étiquettes des lignes de n’importe quel dataframe avec l’attributdf.index.

17.4.3 Quelques propriétés

Les dimensions d’un dataframe sont données par l’attribut.shape :

1 >>> df. shape 2 (3, 4)

Ici, le dataframedf a 3 lignes et 4 colonnes.

17.4. Module pandas Chapitre 17. Quelques modules d’intérêt en bioinformatique

1 >>> df. columns

2 Index (['a', 'b', 'c', 'd '], dtype =' object ')

3 >>> df. columns = [" Paris ", " Lyon ", " Nantes ", " Pau "] 4 >>> df

5 Paris Lyon Nantes Pau 6 chat 10 11 12 13

7 singe 20 21 22 23

8 souris 30 31 32 33

La méthode.head(n) renvoie les n premières lignes du dataframe (par défaut, n vaut 5) :

1 >>> df. head (2)

2 Paris Lyon Nantes Pau 3 chat 10 11 12 13

4 singe 20 21 22 23

17.4.4 Sélection

Les mécanismes de sélection fournis avec pandas sont très puissants. En voici un rapide aperçu :

Sélection de colonnes

On peut sélectionner une colonne par son étiquette :

1 >>> df [" Lyon "] 2 chat 11 3 singe 21 4 souris 31

ou plusieurs colonnes en même temps :

1 >>> df [[" Lyon ", " Pau "]] 2 Lyon Pau 3 chat 11 13 4 singe 21 23 5 souris 31 33

Pour la sélection de plusieurs colonnes, les étiquettes d’intérêt sont rassemblées dans une liste.

Sélection de lignes

Pour sélectionner une ligne, il faut utiliser l’instruction.loc() et l’étiquette de la ligne :

1 >>> df. loc [" singe "] 2 Paris 20

3 Lyon 21 4 Nantes 22 5 Pau 23

6 Name : singe , dtype : int64

Ici aussi, on peut sélectionner plusieurs lignes :

1 >>> df. loc [[" singe ", " chat "]] 2 Paris Lyon Nantes Pau

3 singe 20 21 22 23

4 chat 10 11 12 13

Enfin, on peut aussi sélectionner des lignes avec l’instruction.iloc et l’indice de la ligne (la première ligne ayant l’indice 0) : 1 >>> df. iloc [1] 2 Paris 20 3 Lyon 21 4 Nantes 22 5 Pau 23

6 Name : singe , dtype : int64 1 >>> df. iloc [[1 ,0]]

2 Paris Lyon Nantes Pau

3 singe 20 21 22 23

4 chat 10 11 12 13

On peut également utiliser les tranches (comme pour les listes) :

1 >>> df. iloc [0:2]

2 Paris Lyon Nantes Pau 3 chat 10 11 12 13

4 singe 20 21 22 23

Chapitre 17. Quelques modules d’intérêt en bioinformatique 17.4. Module pandas

Sélection sur les lignes et les colonnes

On peut bien sûr combiner les deux types de sélection (en ligne et en colonne) :

1 >>> df. loc [" souris ", " Pau "] 2 33

3 >>> df. loc [[" singe ", " souris "], [' Nantes ', 'Lyon ']]

4 Nantes Lyon

5 singe 22 21

6 souris 32 31

Notez qu’à partir du moment où on souhaite effectuer une sélection sur des lignes, il faut utiliserloc (ou iloc si on utilise les indices).

Sélection par condition

Remémorons-nous d’abord le contenu du dataframedf :

1 >>> df

2 Paris Lyon Nantes Pau 3 chat 10 11 12 13

4 singe 20 21 22 23

5 souris 30 31 32 33

Sélectionnons maintenant toutes les lignes pour lesquelles les effectifs à Pau sont supérieurs à 15 :

1 >>> df[ df [" Pau "] >15 ]

2 Paris Lyon Nantes Pau

3 singe 20 21 22 23

4 souris 30 31 32 33

De cette sélection, on ne souhaite garder que les valeurs pour Lyon :

1 >>> df[ df [" Pau "] >15 ][" Lyon "] 2 singe 21

3 souris 31

4 Name : Lyon , dtype : int64

On peut aussi combiner plusieurs conditions avec& pour l’opérateur et :

1 >>> df[ (df [" Pau "] >15) & (df [" Lyon "] >25) ] 2 Paris Lyon Nantes Pau

3 souris 30 31 32 33

et| pour l’opérateur ou :

1 >>> df[ (df [" Pau "] >15) | (df [" Lyon "] >25) ] 2 Paris Lyon Nantes Pau

3 singe 20 21 22 23

4 souris 30 31 32 33

17.4.5 Combinaison de dataframes

En biologie, on a souvent besoin de combiner deux tableaux de chiffres à partir d’une colonne commune. Par exemple, si on considère les deux dataframes suivants :

1 >>> data1 = {" Lyon ": [10 , 23, 17] , " Paris ": [3, 15, 20]} 2 >>> df1 = pd. DataFrame . from_dict ( data1 )

3 >>> df1 . index = [" chat ", " singe ", " souris "] 4 >>> df1 5 Lyon Paris 6 chat 10 3 7 singe 23 15 8 souris 17 20 et

1 >>> data2 = {" Nantes ": [3, 9, 14] , " Strasbourg ": [5, 10, 8]} 2 >>> df2 = pd. DataFrame . from_dict ( data2 )

3 >>> df2 . index = [" chat ", " souris ", " lapin "] 4 >>> df2

5 Nantes Strasbourg

6 chat 3 5

7 souris 9 10