Rappels sur Python

Installer et importer les modules nécessaires

Dans ce cours, nous allons travailler avec les quatre modules suivants :

  • numpy : pour faire des maths
  • matplotlib : pour tracer des figures
  • pandas : pour le traitement des données et pour faire des statistiques
  • scikit-learn : pour faire l'ACP

Si ces modules ne sont pas disponibles sur votre machine personnelle, installer-les.

Au début de chaque session, il est obligatoire d'importer les modules, qu'on utlisera par la suite.

Pour ce notebook, nous aurons besoin seulement des deux modules suivants :

In [1]:
import pandas as pd
import numpy as np

Aide en Python

La fonction help donne des explications sur une fonction prédéfinie. Exemple :

In [2]:
help(np.random.rand)
Help on built-in function rand:

rand(...)
    rand(d0, d1, ..., dn)
    
    Random values in a given shape.
    
    Create an array of the given shape and propagate it with
    random samples from a uniform distribution
    over ``[0, 1)``.
    
    Parameters
    ----------
    d0, d1, ..., dn : int, optional
        The dimensions of the returned array, should all be positive.
        If no argument is given a single Python float is returned.
    
    Returns
    -------
    out : ndarray, shape ``(d0, d1, ..., dn)``
        Random values.
    
    See Also
    --------
    random
    
    Notes
    -----
    This is a convenience function. If you want an interface that
    takes a shape-tuple as the first argument, refer to
    np.random.random_sample .
    
    Examples
    --------
    >>> np.random.rand(3,2)
    array([[ 0.14022471,  0.96360618],  #random
           [ 0.37601032,  0.25528411],  #random
           [ 0.49313049,  0.94909878]]) #random

Ou encore :

In [3]:
a = np.arange(5)
help(a.sum)
Help on built-in function sum:

sum(...)
    a.sum(axis=None, dtype=None, out=None, keepdims=False)
    
    Return the sum of the array elements over the given axis.
    
    Refer to `numpy.sum` for full documentation.
    
    See Also
    --------
    numpy.sum : equivalent function

Pour connaître toutes les fonctions d'un module, écrivez le nom du module suivi d'un point, ensuite appuyer longtemps sur la touche TAB. Cela fait apparaître une liste avec toutes les fonctions de ce module.

Essayer pour np, ensuite pour np.random :

In [ ]:
 

L'objet Series avec Pandas

Les données d'une étude statistique ont typiquement la forme d'une séquence de valeurs observées ou d'un tableau de données (à plusieurs colonnes et plusieurs lignes). Dans le module Pandas, on utilise les objets Series et Dataframe pour les données observées.

Une série (Series) est une liste de valeurs. Voici quelques exemples.

In [4]:
S1 = pd.Series([1,4,0,7,4,7])
S2 = pd.Series([1.,4,0,7,4,7])
S3 = pd.Series([1.,.5,0,7,4,7],index=list('abcdef'))
S4 = pd.Series(['hello','friends','byebye'])
S5 = pd.Series([True, False,False,True])
S6 = pd.Series([1.,'hello',False,5])

Affichez toutes les séries ainsi définies et observez les différents types des éléments de la série.

Notez que, par défaut, les éléments d'une série sont indexés par des entiers commençant par 0.

In [5]:
S1
Out[5]:
0    1
1    4
2    0
3    7
4    4
5    7
dtype: int64
In [6]:
S2
Out[6]:
0    1
1    4
2    0
3    7
4    4
5    7
dtype: float64
In [7]:
S3
Out[7]:
a    1.0
b    0.5
c    0.0
d    7.0
e    4.0
f    7.0
dtype: float64
In [8]:
S4
Out[8]:
0      hello
1    friends
2     byebye
dtype: object
In [9]:
S5
Out[9]:
0     True
1    False
2    False
3     True
dtype: bool
In [10]:
S6
Out[10]:
0        1
1    hello
2    False
3        5
dtype: object

Accès aux éléments d'une série

In [11]:
S3.values
Out[11]:
array([ 1. ,  0.5,  0. ,  7. ,  4. ,  7. ])
In [12]:
S3.index
Out[12]:
Index([u'a', u'b', u'c', u'd', u'e', u'f'], dtype='object')
In [13]:
S1[0]
Out[13]:
1
In [14]:
S1[:]
Out[14]:
0    1
1    4
2    0
3    7
4    4
5    7
dtype: int64
In [15]:
S1[2:4]
Out[15]:
2    0
3    7
dtype: int64
In [16]:
S1[[4,1,0]]
Out[16]:
4    4
1    4
0    1
dtype: int64
In [17]:
S1>3
Out[17]:
0    False
1     True
2    False
3     True
4     True
5     True
dtype: bool
In [18]:
S1[S1>3]
Out[18]:
1    4
3    7
4    4
5    7
dtype: int64
In [19]:
S3['b']
Out[19]:
0.5

Fonctions de base pour les séries

Voici quelques fonctions de base pour les séries. Essayez de les comprendre (toutes!) :

In [20]:
S1.size
Out[20]:
6
In [21]:
S1.prod()
Out[21]:
0
In [22]:
S1.sum()
Out[22]:
23
In [23]:
S1.cumsum()
Out[23]:
0     1
1     5
2     5
3    12
4    16
5    23
dtype: int64
In [24]:
S1.max()
Out[24]:
7
In [25]:
S1.argmax()
Out[25]:
3
In [26]:
S3.round()
Out[26]:
a    1
b    0
c    0
d    7
e    4
f    7
dtype: float64
In [27]:
np.ceil(S3)
Out[27]:
a    1
b    1
c    0
d    7
e    4
f    7
dtype: float64
In [28]:
np.floor(S3)
Out[28]:
a    1
b    0
c    0
d    7
e    4
f    7
dtype: float64
In [29]:
S1.unique()
Out[29]:
array([1, 4, 0, 7], dtype=int64)
In [30]:
S1.sort_values()
Out[30]:
2    0
0    1
1    4
4    4
3    7
5    7
dtype: int64
In [31]:
S1.sort_index(ascending=False)
Out[31]:
5    7
4    4
3    7
2    0
1    4
0    1
dtype: int64
In [32]:
S1.isin([1,3,5,7,9])
Out[32]:
0     True
1    False
2    False
3     True
4    False
5     True
dtype: bool

Not a number

La valeur NaN (Not a number) est utilisé pour indiquer le résultat d'un calcul inadmissible ou pour indiquer des valeurs manquantes (lors d'une importation des données à partir d'un fichier).

Essayez de comprendre :

In [33]:
S2.count()
Out[33]:
6
In [34]:
S2[3] = np.inf-np.inf
S2
Out[34]:
0     1
1     4
2     0
3   NaN
4     4
5     7
dtype: float64
In [35]:
S2.count()
Out[35]:
5
In [36]:
S2.isnull()
Out[36]:
0    False
1    False
2    False
3     True
4    False
5    False
dtype: bool
In [37]:
S2 = S2.dropna()
S2
Out[37]:
0    1
1    4
2    0
4    4
5    7
dtype: float64

Quelques fonctions de statistique

Que font les fonctions suivantes ?

In [38]:
S1.mean()
Out[38]:
3.8333333333333335
In [39]:
S1.median()
Out[39]:
4.0
In [40]:
S1.quantile(q=[.25,.5,.75])
Out[40]:
0.25    1.75
0.50    4.00
0.75    6.25
dtype: float64
In [41]:
S1.var()
Out[41]:
8.5666666666666664
In [42]:
S1.std()
Out[42]:
2.9268868558020253
In [43]:
S1.std()==np.sqrt(S1.var())
Out[43]:
True
In [44]:
S1.describe()
Out[44]:
count    6.000000
mean     3.833333
std      2.926887
min      0.000000
25%      1.750000
50%      4.000000
75%      6.250000
max      7.000000
dtype: float64

Importer des données à partir d'un fichier .csv

En statistique, le plus souvent, il faut importer les données à partir d'un fichier, qui est souvent un fichier en format csv (= comma-separated values).

Le fichier peut se trouver sur votre ordinateur ou il est disponible sur internet.

Dans les deux cas, on utilise la fonction pd.read_csv pour importer les données.

Le premier argument de pd.read_csv est le chemin vers le fichier ou l'URL (= Uniform Resource Locator = adresse web).

Afin d'obtenir un objet de type Series, il faut que

  • le fichier .csv ne contient qu'une colonne de valeurs et

  • il faut utiliser l'option squeeze=True dans l'appel de pd.read_csv

Exercice. Neurones

Nous allons travailler sur des données en neuroscience. Nous observons le temps d'attente entre deux activités de neurones dans le cerveau. Plus précisément, les données contiennent les intervals de temps entre deux potentiels post-synaptiques miniatures enregistrés à la jonction neuro-musculaire.

  1. Les données sont disponible à l'adresse http://www.proba.jussieu.fr/pageperso/rebafka/nerve.csv. Importer les données sous forme d'une Series.

  2. Vérifier si le fichier contient des valeurs NaN. Si oui, supprimer-les.

  3. Combien d'observations contient ce jeu de données ?

  4. Calculer les caractéristiques statistiques de ces données (comme la moyenne, la médiane, les valeurs maximiale et minimale, la variance et l'écart-type).

  5. Calculer la moyenne des valeurs maximale et minimale. Ensuite, comparer cette valeur à la moyenne et la médiane. Comment interpréter le fait que ces trois caractéristiques sont assez différentes ?

  6. Combien d'observations sont inférieures à 0.1 ? Combien d'observations sont dans l'intervalle [0.1,0.2] ? Et combien sont supérieures à 1 ?