Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
I. Variables et types
Les objets manipulés par Python, au moment où ils sont créés, sont stockés dans la
mémoire de l’ordinateur. Un nom de variable est une suite de caractères qui renvoie à
une adresse mémoire où a été créé un objet. Les noms de variables autorisés sont des
séquences de lettres (majuscules ou minuscules) et de chiffres qui débute toujours
par une lettre. La casse est significative. Il existe quelques mots réservés ne pouvant
faire office de nom de variable (def, if, while, True, False...).
Le type d’une variable correspond à la nature de celle-ci. Les trois principaux types
dont nous aurons besoin dans un premier temps sont les entiers (integer ou int), les
nombres décimaux (float) et les chaînes de caractères (string ou str). Bien sûr, il
existe de nombreux autres types (par exemple, les booléens bool, les nombres
complexes, etc.). Sous Python, il n’est pas nécessaire de définir le type d’une variable
avant de l’utiliser : on dit que le langage est à typage dynamique (le type d’une
variable est déduit selon la valeur qui lui est affectée)
Le résultat de ces opérations dépend de leurs opérandes, si vous utilisez des entiers
comme opérandes pour l’addition, la soustraction, la multiplication ou l’opérateur de
puissance, le résultat sera de type entier, toutefois si vous mélangez les types entiers
et floats, le résultat est renvoyé comme un float. L’opérateur / renvoie
systématiquement un float.
Pour obtenir le quotient et le reste d’une division entière, on utilise respectivement
les symboles (//) et modulo (%).
il existe des opérateurs « combinés » qui effectue une opération et une affectation en
une seule étape (+=, -=, *=, /=).
>>> i = 0
>>> i = i + 1
>>> i
1
>>> i += 1
>>> i
2
>>> i *= 2
>>> i
4
4. Conversion de type
En programmation, on est souvent amené à convertir les types, c’est-à-dire passer
d’un type numérique à une chaîne de caractères ou vice-versa. En Python, rien de
plus simple avec les fonctions int(), float() et str().
>>> i = 3
>>> str (i)
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
'3'
>>> i = '456'
>>> int (i)
La commande type permet d’obtenir le type d’un objet.
>>> X=input(’Quel âge avez-vous ? ’)
Quel âge avez-vous ? 17
>>> X,type(X)
(’17’, <class ’str’>)
V. Les boucles
1. Boucle for
Sa syntaxe est comme suit :
for itérateur in range(n): # Ne pas oublier les deux points
Traitement # Attention ne pas oublier une tab. en debut de ligne sinon erreur
Exemple
for i in range(10):
x=2
print(x*i)
2. Boucle while
La syntaxe de cette structure est la suivante :
While condition: # Ne pas oublier les deux points
Traitement # Ne pas oublier la tabulation en debut de ligne
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
Exemple
a=0
while (a<12):
a=a+1
print(a, a**2,a**3)
liste : [" girafe ", " tigre ", " singe ", " souris "]
indice positif : 0 1 2 3
indice négatif : -4 -3 -2 -1
Exemple
>>> animaux = [" girafe ", " tigre ", " singe ", " souris "]
>>> animaux [ -1]
'souris '
>>> animaux [ -2]
'singe '
L’opérateur + est très pratique pour concaténer deux listes. Vous pouvez aussi utiliser
la méthode .append() lorsque vous souhaitez ajouter un seul élément à la fin d’une
liste.
>>> a = []
>>> a = a + [15, 8 ,-10]
>>> a
[15,8,-10]
>>> a. append (13)
>>> a
[15 , 8,- 10,13]
Un autre avantage des listes est la possibilité de sélectionner une partie d’une liste en
utilisant un indexage construit sur le modèle [m:n+1] pour récupérer tous les
éléments, du émième au énième (de l’élément m inclus à l’élément n+1 exclu). On dit
alors qu’on récupère une tranche de la liste, par exemple :
>>> animaux = [" girafe ", " tigre ", " singe ", " souris "]
>>> animaux [0:2]
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
2. Les tuples
Les tuples (« n-uplets » en français) en Python dont des listes non modifiables,
Pratiquement, ils utilisent les parenthèses au lieu des crochets
>>> x = (1, 2, 3)
>>> x
(1, 2, 3)
>>> x [2]
3
>>> x [0:2]
(1, 2)
>>> x [2] = 15
Traceback ( innermost last ):
File "<stdin >", line 1, in ?
TypeError : object doesn 't support item assignment
Pour utiliser un tuple d’un seul élément, vous devez utiliser une syntaxe avec une
virgule (element,), ceci pour éviter une ambiguïté avec une simple expression. Autre
particularité des tuples, il est possible d’en créer de nouveaux sans les parenthèses,
dès lors que ceci ne pose pas d’ambiguïté avec une autre expression :
>>> x = (1, 2, 3)
>>> x
(1, 2, 3)
>>> x = 1, 2, 3
>>> x
(1, 2, 3)
On peut utiliser la fonction tuple(sequence) qui prend en argument un objet
séquentiel et renvoie le tuple correspondant (opération de casting) :
>>> tuple ([1 ,2 ,3])
(1, 2, 3)
>>> tuple (" ATGCCGCGAT ")
('A', 'T', 'G', 'C', 'C', 'G', 'C', 'G', 'A', 'T ')
3. Les dictionnaires
Les dictionnaires sont des collections non ordonnées d’objets, c’est-à-dire qu’il n’y a
pas de notion d’ordre (i.e. pas d’indice). On accède aux valeurs d’un dictionnaire par
des clés.
>>> ani1 = {}
>>> ani1 [" nom "] = " girafe "
>>> ani1 [" taille "] = 5.0
>>> ani1 [" poids "] = 1100
>>> ani1
{'nom ': 'girafe ', 'taille ': 5.0 , 'poids ': 1100}
On peut aussi initialiser toutes les clés et les valeurs d’un dictionnaire en une seule
opération :
>>> ani2 = {" nom ": " singe ", " poids ": 70, " taille ": 1.75}
Mais rien ne nous empêche d’ajouter une clé et une valeur supplémentaire :
>>> ani2 [" age "] = 15
Pour récupérer la valeur associée à une clé donnée, il suffit d’utiliser la syntaxe
suivante dictionnaire ["cle"]. Par exemple :
>>> ani1 [" taille "]
5.0
Il est possible d’obtenir toutes les valeurs d’un dictionnaire à partir de ses clés :
>>> for key in ani2 :
print (key , ani2 [ key ])
nom singe
poids 70
taille 1.75
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
age 15
Les méthodes .keys() et .values() renvoient, comme vous pouvez vous en doutez, les
clés et les valeurs d’un dictionnaire:
>>> print(ani2.keys())
dict_keys([' nom ', ' poids ', ' taille ', ' age '])
>>> print(ani2.values ())
dict_values([' singe ', 70, 1.75, 15])
Les mentions dict_keys et dict_values indiquent que nous avons à faire à des objets
un peu particuliers. Ils ne sont pas indexables (on ne peut pas retrouver un élément
par indice, par exemple dico.keys()[0] renverra une erreur). Si besoin, nous pouvons
les transformer en liste avec la fonction list() :
>>> ani2 . values ()
dict_values ([' singe ', 70, 1.75])
>>> list ( ani2 . values ())
['singe ', 70, 1.75]
4. Les sets
Les containers de type set représentent un autre type d’objet séquentiel qui peut se
révéler très pratique. Ils ont la particularité d’être non modifiables, non ordonnés et
de ne contenir qu’une seule copie maximum de chaque élément. Pour créer un
nouveau set on peut utiliser les accolades :
>>> s = {1, 2, 3, 3}
>>> s
{1, 2, 3}
>>> type (s)
<class 'set '>
En général, on utilisera la fonction interne à Python set() pour générer un nouveau
set. Celle-ci prend en argument n’importe quel objet itérable et le convertit en set
(opération de casting) :
>>> set ([1 , 2, 4, 1])
{1, 2, 4}
>>> set ((2 , 2, 2, 1))
{1, 2}
>>> set ( range (5))
{0, 1, 2, 3, 4}
>>> set ({" clé 1": 1, "clé 2": 2})
{'clé1', 'clé2'}
>>> set ([" ti", "to", "to "])
{'ti ', 'to '}
>>> set (" Maître corbeau sur un arbre perch é")
{'h', 't', 'M', 'e', 'b', 'u', 'n', 'r', 'c', 'o', 's', ' ', 'p', 'é', 'î', 'a'}
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
Nous avons dit plus haut que les sets ne sont pas ordonnés, il est donc impossible de
récupérer un élément par sa position. Il est également impossible de modifier un de
ses éléments. Par contre, les sets sont itérables :
>>> s = set ([1 , 2, 4, 1])
>>> s [1]
Traceback ( most recent call last ):
File "<stdin >", line 1, in <module >
TypeError : 'set ' object is not subscriptable
>>> for elt in s:
print (elt)
1
2
4
Les containers de type set sont très utiles pour rechercher les éléments uniques d’une
suite d’éléments. Cela revient à éliminer tous les doublons.
On peut bien sûr transformer dans l’autre sens un set en liste. Cela permet par
exemple d’éliminer les doublons de la liste initiale tout en récupérant une liste à la
fin:
>>> list ( set ([7 , 9, 6, 6, 7, 3, 8, 5, 6, 7]))
[3, 5, 6, 7, 8, 9]
On peut faire des choses très puissantes. Par exemple, un compteur de lettres en
combinaison avec une liste de compréhension, le tout en une ligne !
>>> seq = " atctcgatcgatcgcgctagctagctcgccatacgtacgactacgt "
>>> set ( seq )
{'c', 'g', 't', 'a '}
>>> [( base , seq . count ( base )) for base in set ( seq )]
[('c', 15) , ('g', 10) , ('t', 11) , ('a', 10)]
Les sets permettent aussi l’évaluation d’union ou d’intersection mathématiques en
conjonction avec les opérateurs respectivement | et & :
>>> l = [3, 3, 5, 1, 3, 4, 1, 1, 4, 4]
>>> l2 = [3, 0, 5, 3, 3, 1, 1, 1, 2, 2]
>>> set (l) & set(l2)
{1, 3, 5}
>>> set (l) | set(l2)
{0, 1, 2, 3, 4, 5}
Remarque :
Les listes, les dictionnaires et les tuples sont des objets qui peuvent contenir des
collections d’autres objets. On peut donc construire des listes qui contiennent des
dictionnaires, des tuples ou d’autres listes, mais aussi des dictionnaires contenant des
tuples, des listes, etc.
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
Python possède de nombreux autres modules internes, voici une liste non
exhaustive :
- asyncio : thread, socket, protocol.
- calendar : gérer les calendriers, les dates.
- cmath : fonctions mathématiques complexes.
- collections : structures de données supplémentaires pour les séquences et les
dictionnaires
- copy : copies d’instances de classes.
- datetime : calculs sur les dates et heures
- math : fonctions mathématiques standard telles que cos, exp, log…
- os : fonctions élémentaires pour interagir avec le système d’exploitation
- pathlib : manipulation de chemins.
- random : génération de nombres aléatoires
- string : manipulations des chaînes de caractères
- time : accès à l’heure, l’heure système, l’heure d’un fichier
- tkinter : interface graphique
- unittest : Tests unitaires
Il existe un autre moyen d’importer une ou plusieurs fonctions d’un module, À l’aide
du mot-clé from, on peut importer une fonction spécifique d’un module donné
Pour vider de la mémoire un module déjà chargé, on peut utiliser l’instruction del
>>> import random
>>> random . randint (0 ,10)
2
>>> del random
>>> random . randint (0 ,10)
Traceback ( most recent call last ):
File "<stdin >", line 1, in ?
NameError : name 'random ' is not defined
Il est aussi possible de donner un alias à une fonction selon la syntaxe suivante :
>>>from nomModule import nomfonct as aliasFont
Une fonction ne prend pas forcément un argument et ne renvoie pas forcément une
valeur. Le nombre d’arguments que l’on peut passer à une fonction est variable et il
n’est pas obligatoire de préciser le type des arguments que vous lui passez.
En Python, les fonctions sont capables de renvoyer plusieurs objets à la fois
Ou bien
>>> fct ()
1
>>> fct (10)
10
Un argument défini avec une syntaxe def fct(arg=val) : est appelé argument par
mot-clé. Le passage d’un tel argument lors de l’appel de la fonction est facultatif. Ce
type d’argument ne doit pas être confondu avec les arguments positionnels présentés
ci-dessus, dont la syntaxe est def fct(arg):.
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
>>> fct ()
(0, 0, 0)
>>> fct (10)
(10 , 0, 0)
>>> fct (10 , 8)
(10 , 8, 0)
>>> fct (10 , 8, 3)
(10 , 8, 3)
Python permet même de rentrer les arguments par mot-clé dans un ordre arbitraire :
>>> fct (z=10 , x=3, y =80)
(3, 80, 10)
>>> fct (z=10 , y =80)
(0, 80, 10)
vraiment modifier une variable globale dans une fonction, il faut utiliser le mot-clé
global :
>>> def ma_fonction ():
global x
x=x+1
>>> x = 1
>>> ma_fonction ()
>>> x
2
Attention : si vous passez une liste en argument, elle est modifiable au
sein de la fonction
>>> def ma_fonction (x):
x[1] = -15
>>> y = [1 ,2 ,3]
>>> ma_fonction (y)
>>> y
[1, -15, 3]
Pour créer un tableau 1D, il suffit de passer une liste de nombres en argument à la
fonction numpy.array(). Une liste est constituée de nombres séparés par des virgules
et entourés de crochets
>>>a = np.array([4,7,9])
>>>a
array([4, 7, 9])
Pour créer un tableau 2D, il faut transmettre à numpy.array() une liste de listes
grâce à des crochets imbriqués.
>>>a = np.array([[1, 2, 3], [4, 5, 6]])
>>>a
array([[1, 2, 3],
[4, 5, 6]])
Pour extraire une tranche d’un tableau, on peut utiliser l’opérateur « : » avec la
syntaxe suivante : nomTableau[indDeb:indFin:pas]
>>>a = np.array([12, 25, 34, 56, 87])
>>>a[1:3]
array([25, 34])
Il est aussi possible de ne pas mettre de début ou de fin.
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
>>>a[1:]
array([25, 34, 56, 87])
>>>a[:3]
array([12, 25, 34])
>>>a[:]
array([12, 25, 34, 56, 87])
L’extraction de partie est valable aussi pour les tableaux 2D
>>>a = np.array([[1, 2, 3],
[4, 5, 6]])
>>>a[0,1]
2
>>>a[:,1:3]
array([[2, 3],
[5, 6]])
>>>a[:,1]
array([2, 5])
>>>a[0,:]
array([1, 2, 3])
NumPy fournit de nombreuses méthodes pour calculer des statistiques sur l’ensemble
des valeurs des tableaux, ou sur un des axes des tableaux (par exemple sur
l’équivalent de lignes ou des colonnes dans les tableaux à deux dimensions).
Fonction Description
sum(), nansum() Retourne la somme des éléments (nansum(x) ne tient pas
compte des valeurs NaN)
prod() Retourne le produit des éléments
cumsum() Retourne la somme cumulée des éléments
cumprod() Retourne le produit cumulé des éléments
mean(),nanmean() Retourne la moyenne
var(),nanvar() Retourne la variance
std(),nanstd() Retourne l’écart-type
min(), nanmin() Retourne la valeur minimale
max(),nanmax() Retourne la valeur maximale
argmin() Retourne l’indice du premier élément à la plus petite valeur
argmax() Retourne l’indice du premier élément à la plus grande valeur
Autres fonctions :
- numpy.zeros() : zeros(n) renvoie un tableau 1D de n zéros et zeros((m,n)) renvoie
tableau 2D de taille m x n de 0.
- numpy.ones() : ones(n) renvoie un tableau 1D rempli par des 1 et ones((m,n))
renvoie tableau 2D de taille m x n rempli de 1.
- numpy.eye() : eye(n) renvoie tableau 2D carré de taille n x n, avec des uns sur la
diagonale et des zéros partout ailleurs
- numyp.diag() : prend en paramètre une liste et crée une matrice avec sur la
diagonale la liste donnée.
- numyp. Identity() : crée la matrice identité
- nomTab. copy() : permet de copier le tableau dans un autre
- numpy.sort() : permet de trier un tableau passé en paramètre
- numpy.transpose() : permet de transposé une matrice
1. Courbes/lignes
Pour tracer des lignes sur un repère cartésien, on utilise la fonction plot(), à qui on
fournit les coordonnées en abscisses et en ordonnées en premiers paramètres. On
définit avec le troisième paramètre la géométrie
Pour contrôler de manière plus précise les marqueurs, on peut utiliser les paramètres
suivants :
- marker : renseigne le type de marqueur (. o v < > * | h p D x +…)
- markerfacecolor : la couleur désirée pour les marqueurs ;
- markersize : taille des marqueurs.
-
>>>plt.plot(x, y, marker="o", markerfacecolor = "red", markersize = 10)
2. Nuage de points
Pour en réaliser un graphique de type nuage de points, on peut faire appel à la
fonction scatter(), à qui l’on indique les cordonnées (x,y) des points ainsi que
quelques paramètres optionnels de forme ou d’esthétisme. Pour changer la forme des
marqueurs, on l’indique via le paramètre marker, la taille des points est ajustable
via le paramètre s, tandis que la couleur se modifie via le
paramètre color (on peut associer une couleur et une taille spécifiques à chaque
point)
>>>x = np.random.rand(30)
>>>y = np.random.rand(30)
>>>z = np.random.rand(30)
>>>couleurs = np.random.choice(["blue", "black", "red"], 30)
>>>plt.scatter(x, y, marker="o", color = couleurs, s = z*100)
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
3. Histogramme
Pour réaliser un histogramme avec pyplot, on utilise la fonction hist() :
>>>x = np.random.randn(1000)
>>>plt.hist(x)
On peut préciser avec le paramètre bins soit le nombre de classes, soit leurs bornes :
>>>plt.hist(x, bins=30)
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
1. Structures
Nous allons nous pencher sur deux types de structures, les séries (serie) et les
dataframes (DataFrame).
a. Les séries
Les séries sont des tableaux à une dimension de données indexées. Pour en créer, on
peut définir une liste, puis appliquer la fonction Series de pandas :
>>>s = pd.Series([1, 4, -1, np.nan, .5, 1])
>>>print(s)
0 1.0
1 4.0
2 -1.0
3 NaN
4 0.5
5 1.0
dtype: float64
L’attribut values permet d’afficher les valeurs qui sont stockées dans un tableau
numpy et Les indices sont stockés dans une structure spécifique de pandas
>>>s.name = "ma_serie"
>>>s.index.name = "nom_index"
>>>print("nom de la série : {} , nom de l'index : {}".format(s.name, s.index.name))
nom de la série : ma_serie , nom de l'index : nom_index
L’index peut être défini par l’utilisateur, au moment de la création de la série :
>>>s = pd.Series([1, 4, -1, np.nan],
>>>index = ["o", "d", "i", "l"])
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
>>>print(s)
o 1.0
d 4.0
i -1.0
l NaN
dtype: float64
On peut définir l’indice avec des valeurs numériques également, sans être forcé de
respecter un ordre précis :
>>>s = pd.Series([1, 4, -1, np.nan],
>>>index = [4, 40, 2, 3])
>>>print(s)
4 1.0
40 4.0
2 -1.0
3 NaN
dtype : float64
L’index peut être modifié par la suite, en venant écraser l’attribut index :
>>>s.index = ["o", "d", "i", "l"]
>>>print("Série s : \n", s)
Série s :
o 1.0
d 4.0
i -1.0
l NaN
dtype : float64
Pour créer des séries avec une valeur répétée, il suffit de fournir un scalaire à la
fonction Series de NumPy et un index dont la longueur correspondra au nombre de
fois où le scalaire sera répété :
>>>s = pd.Series(5, index = [np.arange(4)])
>>>print(s)
05
15
25
35
dtype : int64
On peut créer une série à partir d’un dictionnaire :
>>>dictionnaire = {"Roi": "Arthur",
"Chevalier_pays_galles": "Perceval",
"Druide": "Merlin"}
>>>s = pd.Series(dictionnaire)
>>>print(s)
Roi Arthur
Chevalier_pays_galles Perceval
Druide Merlin
dtype : object
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
Les clés du dictionnaire ont été utilisées pour l’index. Lors de la création de la série,
on peut préciser au paramètre clé des valeurs spécifiques : cela aura pour
conséquence de ne récupérer que les observations correspondant à ces clés :
>>>s = pd.Series(dictionnaire, index = ["Roi", "Druide"])
>>>print(s)
Roi Arthur
Druide Merlin
dtype: object
b. Les dataframes
Les Dataframes correspondent au format de données que l’on rencontre
classiquement en économie, des tableaux à deux dimensions, avec des variables en
colonnes et des observations en ligne. Les colonnes et lignes des dataframes sont
indexées. Pour créer un dataframe, on peut fournir à la fonction DataFrame() de
pandas un dictionnaire pouvant être transformé en serie. C’est le cas d’un
dictionnaire dont les valeurs associées aux clés ont toutes la même longueur :
>>>dico = {"height" :[58, 59, 60, 61, 62,63, 64, 65, 66, 67,68, 69, 70, 71, 72],
"weight":[115, 117, 120, 123, 126,129, 132, 135, 139, 142,146, 150, 154, 159, 164]}
>>>df = pd.DataFrame(dico)
>>>print(df)
height weight
0 58 115
1 59 117
2 60 120
3 61 123
4 62 126
5 63 129
6 64 132
7 65 135
8 66 139
9 67 142
10 68 146
11 69 150
12 70 154
13 71 159
14 72 164
La position des éléments dans le dataframe sert d’index. Comme pour les séries, les
valeur sont accessibles dans l’attribut values et l’index dans l’attribut index. Les
colonnes sont également indexées :
>>>print(df.columns)
Index ([' height ', 'weight '], dtype =' object ')
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
La méthode head() permet d’afficher les premières lignes (les 5 premières, par
défaut). On peut modifier son paramètre n pour indiquer le nombre de lignes à
retourner :
>>>df.head(2)
Lors de la création d’un dataframe à partir d’un dictionnaire, si on précise le nom des
colonnes à importer par une liste de chaînes de caractères fournie au paramètree
columns de la fonction DataFrame, on peut non seulement définir les colonnes à
remplir mais également leur ordre d’apparition. Par exemple, pour n’importer que la
colonne weight :
>>>df = pd.DataFrame(dico, columns = ["weight"])
>>>print(df.head(2))
weight
0 115
1 117
Et pour définir l’ordre dans lequel les colonnes apparaîtront :
>>>df = pd.DataFrame(dico, columns = ["weight", "height"])
>>>print(df.head(2))
weight height
0 115 58
1 117 59
Si on indique un nom de colonne absent parmi les clés du dictionnaire, le dataframe
résultant contiendra une colonne portant ce nom mais remplie de valeurs NaN :
>>>df = pd.DataFrame(dico, columns = ["weight", "height", "age"])
>>>print(df.head(2))
weight height age
0 115 58 NaN
1 117 59 NaN
>>>print(df)
0
o 1.0
d 4.0
i -1.0
l NaN
Un dataframe peut être créé à partir d’une liste de dictionnaires :
>>>dico_1 = {
"Nom": "Pendragon",
"Prenom": "Arthur",
"Role": "Roi de Bretagne"
}
>>>dico_2 = {
"Nom": "de Galles",
"Prenom": "Perceval",
"Role": "Chevalier du Pays de Galles"
}
>>>df = pd.DataFrame([dico_1, dico_2])
>>>print(df)
Nom Prenom Role
0 Pendragon Arthur Roi de Bretagne
1 de Galles Perceval Chevalier du Pays de Galles
On peut aussi créer un dataframe à partir d’un tableau Numpy. Lors de la création,
avec la fonction DataFrame() de NumPy, il est possible de préciser le nom des
colonnes (à défaut, l’indiçage des colonnes sera numérique)
>>>tableau = [[1, 2, 3],[11, 22, 33],[111, 222, 333],[1111, 2222, 3333]]
>>>tableau_np = np.array(tableau)
>>>df=pd.DataFrame(tableau_np,columns = ["a", "b", "c"])
>>>print(df)
a b c
0 1 2 3
1 11 22 33
2 111 222 333
3 1111 2222 3333
Par contre, dans le cas où l’indice est défini avec des valeurs numériques, pour
extraire les valeurs à l’aide des crochets, ce sera par la valeur de l’indice et pas en
s’appuyant sur la position :
>>>s = pd.Series([1, 4, -1, np.nan], index = [4, 40, 2, 3])
>>>print(s[40])
4.0
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
Pour la deuxième manière de sélection dans les série, pandas propose deux types
d’indexage multi-axes : loc, iloc. Le premier est principalement basé sur l’utilisation
des labels des axes, tandis que le second s’appuie principalement sur les positions à
l’aide d’entiers.
Créons tout d’abord deux séries ; une première avec un index textuel, une deuxième
avec un index numérique :
>>>s_num = pd.Series([1, 4, -1, np.nan], index = [5, 0, 4, 1])
>>>s_texte = pd.Series([1, 4, -1, np.nan], index = ["c", "a", "b", "d"])
Pour extraire plusieurs éléments avec loc, on utilise les noms (labels) des indices, que
l’on fournit dans une liste :
>>>print("éléments aux labels 5 et 4 :\n", s_num.loc[[5,4]])
éléments aux labels 5 et 4 :
5 1.0
4 -1.0
dtype: float64
0 4.0
dtype: float64
>>>print("éléments aux positions de 0 à 2 : \n", s_texte.iloc[0:2])
éléments aux positions de 0 à 2 :
c 1.0
a 4.0
dtype: float64
2. Fichier Excel
Pour importer des fichiers Excel, pandas propose la fonction read_excel() :
pandas.read_excel(chemin, paramètres).
Parmi les paramètres fréquemment utilisés :
- header : numéro de ligne à utiliser comme en-tête ;
- sheet_name: nom ou numéro de feuille ;
- skiprows : nombre de lignes à sauter au début ;
- thousands : séparateur de milliers.
4. Appliquez cette ligne de code afin de supprimer toutes les lignes où il peut y
avoir des valeurs vides ou nulles.
dataset.dropna(how = 'any', axis = 0, inplace = True)
Vérifiez qu’aucune colonne n’a de valeurs nulles en utilisant
dataset.isull().sum(), vous devriez avoir 0 valeur nulle pour toutes les lignes.
5. Nous commençons par analyser la densité de la population d’Aruba au cours
des années en utilisant un graphique linéaire. Nous prenons les années sur
l’axe des x et la densité de population sur l’axe des y.
Sélectionnez les valeurs x avec dataset.columns[1 :], ce qui sélectionne toutes
les colonnes sauf la première car nous n’avons besoin que des années et non
de la colonne Country Name.
Sélectionnez les valeurs y avec dataset.iloc[0][1 :], ce qui sélectionne la
première colonne, c’est-à-dire le pays Aruba et toutes les colonnes sauf la
première. Le nom du pays peut être obtenu à l’aide de dataset.iloc[0][0].
Pour tracer le graphique, il suffit d’utiliser la fonction plot et de définir les
paramètres comme x et y pour l’axe des x et l’axe des y respectivement.
6. Appliquez ces lignes de code:
plt.rcParams['figure.figsize'] = (30, 30)
plt.rcParams['font.size'] = '20'
plt.title('Densité de population ' + country + ' au cours des années')
plt.xlabel('Années')
plt.xticks(rotation = '90')
plt.ylabel('Densité de population (habitants par km2)')
plt.plot(x, y, linewidth = 4)
Que remarquez vous?
7. Reprenez l’affichage de la question précédente sur les 5 premiers pays.
Interprétez
8. Le diagramme en barres peut être facilement créé en utilisant la méthode
bar(),triez les densités de population de tous les pays pour l’année 2015 et
afficher le diagramme en bar des 10 premiers pays avec la densité maximale.
Interprétez.
9. Un diagramme de dispersion est un graphique qui affiche les données sous
forme de points dans l’espace libre. Nous analysons maintenant les pays où la
densité moyenne de population est inférieure à 10 personnes par kilomètre
carré (de surface terrestre) pour toutes les années.
total_columns = dataset.shape[1]
selected_data = dataset[dataset.sum(axis = 1).apply(lambda x:
x/total_columns) <= 10]
consolidated_data = selected_data.sum(axis = 1).apply(lambda x:
x/total_columns)
Université de Carthage Département Informatique Faculté des Sciences de Bizerte
Ces lignes de code permettent de faire la somme de toutes les données sur chaque
ligne en utilisant dataset.sum(axis = 1) et ensuite la méthode lambda est utilisée
pour dire que pour chaque valeur finale, il faut la diviser par le nombre de
colonnes pour obtenir la moyenne. Cette valeur est comparée par la suite à une
valeur inférieure ou égale à 10 et elle est utilisée comme indice pour l’ensemble
de données. Il en résulte l’ensemble des pays dont la densité moyenne de
population est inférieure ou égale à 10. Cette valeur est calculée à nouveau et elle
est stockée dans la variable consolidated_data.
Affichez à l’aide de la méthode scatter() le diagramme de dispersion
correspondant à ces données.