Skip to content

Latest commit

 

History

History
1468 lines (924 loc) · 34.2 KB

index.md

File metadata and controls

1468 lines (924 loc) · 34.2 KB

Python pour les SVT

Exploiter une base de données avec Pandas

Importer une base de données au format SQL

Importer une base de données au format CSV

Importer une base de données au format xlsx

Importer des données à partir d'un fichier au format json

Créer une base de données au format SQL

Créer une base de données au format CSV

Créer une base de données au format xlsx

Modifier une base de données au format SQL

Modifier une base de données au format CSV

Modifier une base de données au format xlsx

Utiliser un DataFrame (tableau 2D) avec Pandas

Créer un DataFrame à partir d'un dictionnaire

Créer un DataFrame à partir d'une liste

Afficher un aperçu des premières lignes d'un DataFrame

Sélectionner une colonne par son nom

Sélectionner un élément à partir de l'index de sa ligne et du nom de sa colonne

Sélectionner des lignes et des colonnes

Filtrer des lignes par leur contenu

Ajouter des titres / labels aux colonnes et aux lignes

Ajouter des colonnes

Ajouter des lignes

Supprimer des colonnes

Supprimer des lignes

Régressions

Régressions et courbes de tendance avec Koala

Croissance et décroissance

Etudier des séquences biologiques avec Genopy

Installation

Créer des séquences

Créer des fichiers fasta

Convertir des fichiers .edi (anagene) en fichiers fasta

Rechercher et afficher des séquences

Transcrire

Traduire

Rétro-Transcrire

Afficher les tables du code génétique

Comparer des séquences: alignement par paires

Comparer des séquences: alignement multiple (clustal)

Afficher et sauvegarder une matrice de distances

Tracer un arbre phylogénétique à partir d'une matrice de distances

Tracer un arbre phylogénétique à partir d'une liste de séquences

Faire un graphique

Avec matplotlib.pyplot

Faire un graphique "simple" avec une seule courbe

Faire un graphique avec plusieurs courbes

Légender un graphique

Sauvegarder un graphique

Mise en page de plusieurs graphiques: réaliser un subplot

Utiliser matplotlib.plyplot avec Jupyter Notebook

Avec Pandas

...

Biostatistiques

Chi2 d'indépendance

Chi2 d'homogénéité

Hardy et Weimberg

Datation absolue avec chrono.py

Readme

jupyter notebook

SIG

Calculer et représenter le déplacement des plaques lithosphériques avec Pandas et Basemap

Introduction à GeoPandas

Corrélation UV mélanome - Approche épidémiologique avec Pandas GeoPandas et Koala

Tutoriel Python3

Les variables

Les entrées et les sorties

Les booléens

Les structures conditionnelles if elif else

La boucle while

Les listes

Les dictionnaires

Manipuler les chaines de caractères str

Les fonctions

Python compléments

Utiliser le module time de python

Les modules os, glob, shutil et subprocess

Les listes en compréhension

Introduction à Numpy

Utiliser le module json de python

Lire et ecrire un fichier avec python

Python SQLite 3





Introduction à Pandas.

Les Series.

On commence par importer les modules suivants:
>>> import pandas as pd 
>>> import numpy as np 	
On peut ensuite créer une série qui peut contenir des int float ou str :
>>> s = pd.Series([2,4,6,8])

>>> s
0    2
1    4
2    6
3    8
dtype: int64
On peut éventuellement préciser certains arguments:
>>> s = pd.Series([2,4,6,8], name="gogo", dtype="float", index=list("abcd"))

>>> s
a    2.0
b    4.0
c    6.0
d    8.0
Name: gogo, dtype: float64
Ou modifier / ajouter chacun de ces arguments plus tard..
>>> s.name = "toto"

>>> s.index = list("ABCD")

>>> s
A    2.0
B    4.0
C    6.0
D    8.0
Name: toto, dtype: float64
Pour changer le dtype on utilise la méthode astype:
>>> s2 = s.astype(‘int64’) # ou s.astype(int) ou s.astype(float)...

>>> s2
0    2
1    4
2    6
3    8
Name: toto, dtype: int64
Il existe aussi d’autres manières de créer des séries:

A partir d’un dictionnaire {label : valeur} :

>>> a = pd.Series({"a":2,"b":4,"c":6,"d":8})

>>> a
0    2
1    4
2    6
3    8
dtype: int64

A partir d’un Ndarray:

>>> b = pd.Series(np.arange(2,10,2))

>>> b
0    2
1    4
2    6
3    8
dtype: int32
Sélectionner un élément par son index:
>>> s
A    2.0
B    4.0
C    6.0
D    8.0
Name: toto, dtype: float64

>>> s[0]
2.0

>>> s.iloc[0]
2.0
Sélectionner un élément par son label (à condition qu’il en ait un):
>>> s.A
2.0

>>> s.loc["A"]
2.0	
Modifier un élément par son index ou par son label:
>>> s
A    2
B    4
C    6
D    8
Name: toto, dtype: int64

>>> s.A = 45
>>> s.B = 'gogo'
>>> s.C = 6.9
>>> s.iloc[3] = "bobo"

>>> s
A      45
B    gogo
C     6.9
D    bobo
Name: toto, dtype: object
Faire des opérations sur une série:
>>> s
A    2.0
B    4.0
C    6.0
D    8.0
Name: toto, dtype: float64

>>> f = s*2

>>> f
A     4.0
B     8.0
C    12.0
D    16.0
Name: toto, dtype: float64
Assembler des séries:
>> z = pd.Series(list("wxyz"))

>>> z
0    w
1    x
2    y
3    z
dtype: object

>>> s
A    2.0
B    4.0
C    6.0
D    8.0
Name: toto, dtype: float64

>>> x = s.append(z, ignore_index=True)

>>> x
0    2
1    4
2    6
3    8
4    w
5    x
6    y
7    z
dtype: object

Les DataFrame

Créer un DataFrame:

Il existe de très nombreuses façons de créer un DataFrame... en voici 4

A partir d’un dictionnaire de tuples:
>>> d = {"nom":("Diatta", "Sane", "Diouf"), "prenom":("Robert", "Jean", "Albert")}

>>> df = pd.DataFrame(d)

>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert
A partir d’un array:
>>> n = np.array((("Diatta", "Robert"),("Sane", "Jean"),("Diouf", "Albert")))                                   

>>> n
array([['Diatta', 'Robert'],
       ['Sane', 'Jean'],
       ['Diouf', 'Albert']], dtype='<U6')

>>> df = pd.DataFrame(n, columns=("nom","prenom"))

>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

A partir d’une liste de tuples (ou d’une liste de listes):
>>> t = [('Diatta', 'Robert'), ('Sane', 'Jean'), ('Diouf', 'Albert')]

>>> t
[('Diatta', 'Robert'), ('Sane', 'Jean'), ('Diouf', 'Albert')]

>>> df = pd.DataFrame(t, columns=("nom","prenom"))

>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert
A partir d’une liste de pd.Series:
>>> a = pd.Series(("Diatta","Robert"))
>>> b = pd.Series(("Sane","Jean"))
>>> c = pd.Series(("Diouf","Albert"))

>>> a
0    Diatta
1    Robert
dtype: object

>>> df = pd.DataFrame([a,b,c])

>>> df
        0       1
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> df.columns = ("nom", "prenom")

>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

Ou

>>> n = pd.Series(["Diatta","Sane","Diouf"])
>>> p = pd.Series(["Robert","Jean","Albert"])

>>> n
0    Diatta
1      Sane
2     Diouf
dtype: object

>>> p
0    Robert
1      Jean
2    Albert
dtype: object

>>> df = pd.DataFrame([n,p])

>>> df
        0     1       2
0  Diatta  Sane   Diouf
1  Robert  Jean  Albert

>>> df = df.T

>>> df
        0       1
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> df.columns = ("Nom","Prenom")

>>> df
      Nom  Prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

A partir d'un fichier json

Il faut alors préciser son path ou son url. Dans l'exemple ci dessous on utilise un fichier json hébérgé à l'URL suivante: https://ipfs.io/ipfs/QmfD7A6kpeWYuJMVoNey2GTeNphGg4F8cdXEhWq61Q9shn.

>>> df = pd.read_json("https://ipfs.io/ipfs/QmfD7A6kpeWYuJMVoNey2GTeNphGg4F8cdXEhWq61Q9shn")
 
>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

Sélectionner, trier, filtrer un DataFrame

>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com

Afficher les premières lignes d’un DataFrame.
>>> df.head()
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com	

On ne voit pas la différence car mon DataFrame ne fait que trois lignes... mais c’est bien pratique quand on a un DataFrame de 3000 lignes. De plus il est possible de passer le nombre de lignes désiré en argument de head().

Filtrer des lignes par leur contenu:

On crée un DataFrame:

>>>  d = {'nom': ('Diop', 'Diallo', 'Diouf', 'Sane'), 'prenom': ('Alpha', 'Alpha', 'Alpha', 'Jean'), 'age': (30, 37, 28, 42)}

>>> df = pd.DataFrame(d)

>>> df

	nom 	prenom  age
0   Diop  	Alpha   30
1  	Diallo  Alpha   37
2  	Diouf  	Alpha   28
3	Sane	Jean   	42

Filtrer des lignes ayant pour nom Diallo:

>>> diallo = df[(df.nom == "Diallo")]

>>> diallo

	nom 	prenom  age
1  	Diallo  Alpha   37

Équivalent à:

>>> df.query('nom == "Diallo"')

Filtrer des lignes ayant pour prénom Alpha et un âge supérieur à 29:

>>> alpha_29 = df[(df.prenom == "Alpha") & (df.age > 29)]

>>> alpha_29

	nom 	prenom  age
0	Diop  	Alpha   30
1  	Diallo  Alpha   37

Équivalent à:

>>> df.query('prenom == "Alpha" and age > 29')

Filtrer des lignes ayant pour nom Sane ou un âge inférieur à 30:

>>> sane_30 = df[(df.nom == "Sane") | (df.age < 30)]

>>> sane_30

     nom prenom  age
2  Diouf  Alpha   28
3   Sane   Jean   42

Équivalent à:

>>> df.query('nom == "Sane" or age < 30')

Seléctionner une colonne par son label... on récupère un pd.Series:
>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com


>>> n = df.nom

>>> type(n)
<class 'pandas.core.series.Series'>

>>> n
0    Diatta
1      Sane
2     Diouf
Name: nom, dtype: object


>>> df["nom"]
0    Diatta
1      Sane
2     Diouf
Name: nom, dtype: object

Sélectionner l’élément d’index 1 de la colonne "nom":
>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com


>>> df.nom[1]
'Sane'

Séléctionner des colonnes et des lignes avec loc et iloc: (on récupère un DataFrame)
La méthode iloc permet de sélectionner par les index:

Sélection de toutes les lignes de la colonne d’index 0 incluse jusqu’à la colonne d’index 1 exclue:

>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com


>>> w = df.iloc[:, :1]

>>> w
      nom
0  Diatta
1    Sane
2   Diouf

>>> type(w)
<class 'pandas.core.frame.DataFrame'>

Vous remarquerez que iloc retourne un DataFrame

Sélection de toutes les colonnes de la ligne d’index 1 incluse jusqu’à la ligne d’index 2 exclue:

>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com


>>> df.iloc[1:2]
    nom prenom              mail
1  Sane   Jean  jean@hotmail.com
La méthode loc permet de sélectionner par les labels

Sélectionner des colonnes entières:

>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com


>>> df.loc[:,["nom","mail"]]
      nom              mail
0  Diatta    rob@hotmail.fr
1    Sane  jean@hotmail.com
2   Diouf  bebert@gmail.com


>>> df.loc[["nom","mail"]]
      nom              mail
0  Diatta    rob@hotmail.fr
1    Sane  jean@hotmail.com
2   Diouf  bebert@gmail.com

Sélectionner des lignes (n’ayant pas de labels): les index des lignes sont alors considérés comme des labels. Les index initiaux et finaux sont alors inclus dans le retour.

>>> df
      nom  prenom              mail
0  Diatta  Robert    rob@hotmail.fr
1    Sane    Jean  jean@hotmail.com
2   Diouf  Albert  bebert@gmail.com


>>> df.loc[1:2]
     nom  prenom              mail
1   Sane    Jean  jean@hotmail.com
2  Diouf  Albert  bebert@gmail.com

Ajoutons des labels de lignes:

>>> df.index = list("abc")

>>> df
      nom  prenom              mail
a  Diatta  Robert    rob@hotmail.fr
b    Sane    Jean  jean@hotmail.com
c   Diouf  Albert  bebert@gmail.com

Sélection de la ligne b incluse à c incluse:

>>> df.loc["b":"c"]
     nom  prenom              mail
b   Sane    Jean  jean@hotmail.com
c  Diouf  Albert  bebert@gmail.com

Sélection des colonnes nom et mail pour les lignes b incluse à c incluse:

>>> df.loc["b":"c",["nom","mail"]]
     nom              mail
b   Sane  jean@hotmail.com
c  Diouf  bebert@gmail.com

Sélectionner les lignes a et c des colonnes nom et mail

>>> df.loc[[0,2],["nom","mail"]]
      nom                mail
a  Diatta   robert@hotmail.fr
c   Diouf  bebert@hotmail.com

On peut toujours sélectionner par les index avec iloc si on le souhaite:

>>> df.iloc[1:2]
    nom prenom              mail
b  Sane   Jean  jean@hotmail.com

>>> df.iloc[1:3]
     nom  prenom              mail
b   Sane    Jean  jean@hotmail.com
c  Diouf  Albert  bebert@gmail.com

Modifier un DataFrame

Transposer
>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> df.T
             0     1       2
nom     Diatta  Sane   Diouf
prenom  Robert  Jean  Albert

Changer (ou ajouter) des noms de colonnes et de labels:
>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> df.columns
Index(['nom', 'prenom'], dtype='object')

>>> df.columns = ("colA","colB")

>>> df
     colA    colB
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> df.index
RangeIndex(start=0, stop=3, step=1)

>>> df.index = list("abc")

>>> df
     colA    colB
a  Diatta  Robert
b    Sane    Jean
c   Diouf  Albert

Ajouter une colonne à un DataFrame:
>>> df
     colA    colB
a  Diatta  Robert
b    Sane    Jean
c   Diouf  Albert

>>> df["colC"] = (34,21,45)

>>> df
     colA    colB  colC
a  Diatta  Robert    34
b    Sane    Jean    21
c   Diouf  Albert    45
Concatener des DataFrame ... pour ajouter une (ou plusieurs) colonne.
>>> df
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> m
                 mail
0   robert@hotmail.fr
1      jean@gmail.com
2  bebert@hotmail.com

>>> pd.concat([df,m],axis=1)
      nom  prenom                mail
0  Diatta  Robert   robert@hotmail.fr
1    Sane    Jean      jean@gmail.com
2   Diouf  Albert  bebert@hotmail.com

Concatener des DataFrame ... pour ajouter une (ou plusieurs) ligne.
>>> raw = pd.DataFrame([("Dupond","Serge")], columns=("colA","colB"))

>>> raw
     colA   colB
0  Dupond  Serge

>>> df
     colA    colB
a  Diatta  Robert
b    Sane    Jean
c   Diouf  Albert

>>> df2 = df.append(raw)

>>> df2
     colA    colB
a  Diatta  Robert
b    Sane    Jean
c   Diouf  Albert
0  Dupond   Serge

>>> df3 = df.append(raw, ignore_index=True)

>>> df3
     colA    colB
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert
3  Dupond   Serge

Il existe de très nombreuses autres méthodes pour concatener des DataFrame... Doc officielle

Supprimer une ou plusieurs colonnes:
>>> df
     colA    colB  colC
a  Diatta  Robert    34
b    Sane    Jean    21
c   Diouf  Albert    45

>>> df2 = df.drop(["colC"], axis=1)
>>> df2
     colA    colB
a  Diatta  Robert
b    Sane    Jean
c   Diouf  Albert



>>> df
     colA    colB  colC
a  Diatta  Robert    34
b    Sane    Jean    21
c   Diouf  Albert    45

>>> df3 = df.drop(columns=["colC"])
>>> df3
     colA    colB
a  Diatta  Robert
b    Sane    Jean
c   Diouf  Albert

Supprimer une ou plusieurs lignes:
>>> df
     colA    colB  colC
a  Diatta  Robert    34
b    Sane    Jean    21
c   Diouf  Albert    45

>>> df2 = df.drop(["a"])

>>> df2
    colA    colB  colC
b   Sane    Jean    21
c  Diouf  Albert    45

Utiliser une base de données SQLite avec Pandas

Importer les modules pandas et sqlite3:
>>> import pandas as pd
>>> from sqlite3 import *

Importer une base SQL existante:
>>> import pandas as pd
>>> from sqlite3 import *

>>> conn = connect("base.db")

On peut aussi se connecter de la même façon à une base SQL en plaçant son URL en argument de connect.

>>> conn = connect("https://domaine/base.db")

On peut éventuellement commencer par récupérer les noms des tables:

>>> liste_tables = pd.read_sql_query("select name from sqlite_master where type = 'table'", conn)

>>> liste_tables
    name
0  users

Ma base de données contient ici une seule table nommée users.

Puis envoyer une requête SQL pour récupérer le contenu d’une table

>>> users = pd.read_sql_query("select * from users", conn)

>>> users
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

Créer une base SQL

Commencez par importer les modules et créer un objet conn:

>>> import pandas as pd
>>> from sqlite3 import *

>>> conn = connect("base.db")

Vous pouvez créer un DataFrame vide ou contenant déjà des lignes

>>> df = pd.DataFrame({"nom":("Admi", "Diatta", "Sane"), "mail":("admi@gmail.com", "robert@hotmail.com", "jean@hotmail.fr"), "level":(2,1,1)})

>>> df
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

Convertir le DataFrame en table sql:

>>> df.to_sql("users", conn, index=False)

Modifier la base sql:

En utilisant une commande sql:

>>> cur = conn.cursor()

>>> cur.execute("insert into users(nom, mail, level) values('Diouf', 'dio@yahoo.com', 1)") 
<sqlite3.Cursor object at 0x73590d60>

>>> users = pd.read_sql_query("select * from users", conn)

>>> users
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1
3   Diouf       dio@yahoo.com      1

En modifiant le DataFrame et en remplaçant l’ancienne table par le nouveau DataFrame:

>>> users = pd.read_sql_query("select * from users", conn)

>>> users
          nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

>>> raw = pd.DataFrame({"nom":("Samb",), "mail":("samba@gmail.com",), "level":(3,)})

>>> users = users.append(raw, ignore_index=True)

>>> users
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1
3    Samb     samba@gmail.com      3

>>> users.to_sql("users", conn, index=False, if_exists="replace")

Utiliser des bases de données au format CSV avec Pandas.

Créer un DataFrame:
>>> df = pd.DataFrame({"nom":("Admi", "Diatta", "Sane"), "mail":("admi@gmail.com", "robert@hotmail.com", "jean@hotmail.fr"), "level":(2,1,1)})

>>> df
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1 
Le convertir en CSV:
>>> df.to_csv("mycsv", index=False)

Convertir un CSV en DataFrame:
>>> users = pd.read_csv("mycsv")

>>> users
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

On peut aussi passer l'URL du CSV en argument à la place de son path

Modifier le CSV:
>>> users = pd.read_csv("mycsv")

>>> raw = pd.DataFrame({"nom":("Samb",), "mail":("samba@gmail.com",), "level":(3,)})

>>> users = users.append(raw, ignore_index=True)

>>> users
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1
3    Samb     samba@gmail.com      3

>>> users.to_csv("mycsv", index=False)

>>> users2 = pd.read_csv("mycsv")

>>> users2
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1
3    Samb     samba@gmail.com      3

Utiliser des fichiers xlsx:

Convertir un DataFrame en un fichier xlsx, puis l’inverse:
>>> df
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

>>> df.to_excel("mybase.xlsx", sheet_name = "Modou")

>>> users = pd.read_excel("mybase.xlsx")

>>> users
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1
Créer un xlsx avec plusieurs feuilles:
>>> df1 = pd.DataFrame({"nom":("Admi", "Diatta", "Sane"), "mail":("admi@gmail.com", "robert@hotmail.com", "jean@hotmail.fr"), "level":(2,1,1)})

>>> df2 = pd.DataFrame({"nom":("Diatta", "Sane", "Diouf"), "prenom":("Robert", "Jean", "Albert")})
   
>>> writer = pd.ExcelWriter('gogo.xlsx')

>>> df1.to_excel(writer,'feuille 1')

>>> df2.to_excel(writer,'feuille 2')

>>> writer.save()

Récupérer une ou plusieurs feuilles d’un xlsx:

Récupérer la feuille 1: feuille d’index 0 retournée par défaut:

>>> table1 = pd.read_excel("gogo.xlsx")

>>> table1
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

Récupérer la feuille 2 (feuille d’index 1):

>>> table2 = pd.read_excel("gogo.xlsx", sheet_name = 1)

>>> table2
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

>>> table2 = pd.read_excel("gogo.xlsx", sheet_name = "feuille 2")

>>> table2
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

Récupérer les feuilles 0 et 1 (on obtient un dictionnaire de feuilles):

>>> tables = pd.read_excel("gogo.xlsx", sheet_name = [0,1])

>>> tables
OrderedDict([(0,       nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1), (1,       nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert)])

Récupérer toutes les feuilles (on obtient un dicitionnaire de feuilles):

>>> tables = pd.read_excel("gogo.xlsx", sheet_name = None)

>>> tables
OrderedDict([('feuille 1',       nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1), ('feuille 2',       nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert)])

>>> tables.keys()
odict_keys(['feuille 1', 'feuille 2'])

>>> tables["feuille 1"]
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

>>> tables["feuille 2"]
      nom  prenom
0  Diatta  Robert
1    Sane    Jean
2   Diouf  Albert

Convertir un DataFrame en Json :

>>> df 
      nom                mail  level
0    Admi      admi@gmail.com      2
1  Diatta  robert@hotmail.com      1
2    Sane     jean@hotmail.fr      1

>>> df.to_json()
'{"nom":{"0":"Admi","1":"Diatta","2":"Sane"},"mail":{"0":"admi@gmail.com","1":"robert@hotmail.com","2":"jean@hotmail.fr"},"level":{"0":2,"1":1,"2":1}}'

>>> df.to_json("myjson.js") # le json est enregistré dans le fichier myjson.js

Convertir un Dataframe en html :

>>> pd.set_option('display.max_colwidth', -1) # c'est pour ne pas couper les phrases trops longues 

>>> html = df.to_html()

Faire un graphique avec matplotlib.pyplot

Un graphique "simple" avec une seule courbe.

Importer les modules numpy et matplotlib.pyplot.

Par conventions, on les importe toujours de la manière suivante:

import numpy as np
import matplotlib.pyplot as plt

Créer des listes de données.

On peut utiliser des listes "classiques":

x = [0,1,2,3,4]
y = [23,31,45,78]

Les deux listes doivent évidemment être de même longueur !

On peut aussi utiliser des array à une dimension avec numpy:

x = np.arange(10) 
	
y = 2*x + 5 

Fermer les objets plt éventuellement existants.

plt.close() 

Réaliser le plot.

plt.plot(x, y, "-*b", markersize=8, label="nom de la courbe")

Vous disposez alors d’un objet "plt" qui vous permet d’agir sur votre plot (y compris dans le shell après l’affichage du plot)

De nombreuses options sont possibles pour les "marker":

Options de ligne: "-" continue, "--" tirets

Options de marker: *, +, o, ^

Options de couleur : b: bleu, k: noir, r: rouge, g: vert...

Pour faire un nuage de points (donc sans ligne), n’utilisez pas d’option de ligne, exemple: "+r"

Utiliser l’objet plt .

Ajouter un titre aux axes:

plt.xlabel("titre des abscisses", fontsize=8)
plt.ylabel("titre des ordonnées", fontsize=8)

Afficher la legende (label de la courbe):

plt.legend(loc='best', fontsize=8)

L’argument loc="best" permet de placer automatiquement la légende au meilleur endroit (c’est à dire là où elle ne va pas chevaucher une courbe)

Afficher le titre du graphique:

plt.title("titre du graphique", fontsize=8)

Ajouter du texte sur le graphique:

plt.text(2,8,"j'ecris ici si je veux !", fontsize=8) 

Le texte serra ajouté aux coordonnées x=2 , y=8

Modifier les limites des axes:

plt.xlim(0,10)
plt.ylim(0,25)

Ou équivalent :

plt.axis([0,10,0,25])

Afficher le graphique:

plt.show()

Même après avoir affiché le graphique, l’objet plt est toujours actif, il est encore possible de modifier le graphique (y compris dans le shell), pour voir les modifications apportées, il faut ré afficher le graphique plt.show()

Sauvegarder le graphique:

plt.savefig("mon_graphique.png")

Le format par défaut est .png, mais il est possible de choisir un autre format de sauvegarde:

plt.savefig("mon_graphique.pdf", format = "pdf")

Le code complet (sans la modification des axes), et le graphique correspondant:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10) 

y = 2*x + 5 

plt.close()

plt.plot(x, y, "-*b", markersize=8, label="nom de la courbe")

plt.xlabel("titre des abscisses", fontsize=8)
plt.ylabel("titre des ordonnées", fontsize=8)

plt.legend(loc='best', fontsize=8)

plt.title("titre du graphique", fontsize=8)

plt.text(2,8,"j'ecris ici si je veux !", fontsize=8) 

plt.show()

Un graphique avec plusieurs courbes.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)

plt.close() 

plt.plot(x, 2*x, "-*b", markersize=8, label="nom de la courbe 1")

plt.plot(x, 2*x + 5, "-ok", markersize=8, label="nom de la courbe 2")

plt.plot(x, x**2, "-+r", markersize=8, label="nom de la courbe 3")

plt.xlabel("titre des abscisses", fontsize=8)
plt.ylabel("titre des ordonnées", fontsize=8)
plt.legend(loc='best', fontsize=8)
plt.title("titre du graphique", fontsize=8)
plt.show()

Un subplot (plusieurs graphiques sur la même figure)

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
	
y1 = 2*x
	
y2 = x**2
	
y3 = x**3

y4 = 3*x + 6

y5 = x**0.5


plt.close()

plt.figure(1)

g1 = plt.subplot(221)
plt.plot(x, y1, '-^k', label='courbe1', markersize=5)
plt.title('titre 1', fontsize=10)
plt.xlabel("X",fontsize=10)
plt.ylabel("Y1",fontsize=10)
plt.legend(fontsize=10)

g2 = plt.subplot(222)
plt.plot(x, y2, '-*b', label='courbe2', markersize=5)
plt.title('titre 2', fontsize=10)
plt.xlabel("X",fontsize=10)
plt.ylabel("Y2",fontsize=10)
plt.legend(fontsize=10)

g3 = plt.subplot(223)
plt.plot(x, y3, '--or', label='courbe3', markersize=5)
plt.title('titre 3', fontsize=10)
plt.xlabel("X",fontsize=10)
plt.ylabel("Y3",fontsize=10)
plt.legend(fontsize=10)

g4 = plt.subplot(224)
plt.plot(x, y4, '-+g', label='courbe4', markersize=5)
plt.plot(x, y5, '--^y', label='courbe5', markersize=5)
plt.title('titre 4', fontsize=10)
plt.xlabel("X",fontsize=10)
plt.ylabel("Y4",fontsize=10)
plt.legend(fontsize=10)

plt.tight_layout() 
plt.show()

Chaque subplot possède une position exemple 223, ce qui correspond au 3° graphique dans une figure de 2 lignes et 2 colonnes.

Pour faire 2 graphiques superposés, utilisez les positions 211 (2 lignes, 1 colonne, graphique 1) et 212 (2 lignes, 1 colonne, graphique 2)

Pour faire 2 graphiques alignés, utilisez les positions 121 et 122

Après l’affichage, on conserve un accès sur chaque plt.subplot que l’on peut modifier, exemple:

g1.xlim(0,20)

Il faut ensuite re afficher le graphique plt.show() pour voir les modifications.

Utiliser matplotlib.plt sans interface graphique !

Si vous êtes un Ayatollah de la console GNU Linux et que vous n’avez pas d’interface graphique (sans dekstop), vous allez générer une belle erreur en tentant de créer un objet plt !

Pour éviter cela, il faut importer matplotlib de la manière suivante:

import matplotlib
matplotlib.use('Agg') 

import matplotlib.pyplot as plt

Évidement vous ne pourrez pas faire de plt.show(), mais vous pourrez tout de même sauvegarder votre graphique avec plt.savefig("mon_graphique.png")