Les objets python
L'essentiel de cette page !
Il existe de nombreux types d'objets python : les listes, les tuples, les dictionnaires, les arrays...
Voici une page qui résume comment créer et manipuler rapidement ces objets.
D'autres pages expliquent comment comment réaliser des tableaux se prêtant à l'analyse de données : les data.frames (avec le module pandas).
On peut aussi s'intéresser plus particulièrement aux listes : comment simuler des valeurs, réaliser des opérations de base dessus (arrondir des nombres, faire une racine carrée...) mais surtout comment comparer plusieurs jeux de données pour les filtrer ou les extraire sous conditions.
1. Les listes python
1.1. Manipulations de base d'une liste : créer, ajouter une ou plusieurs valeurs
Créer une liste de valeurs
x = [2,3,4,2,9,12] ; print(x)
Récupérer les valeurs uniques d'une liste (nécessite le module numpy)
x = [1,2,3,4,3,2,1]
import numpy as np
print(np.unique(x))
valeurs uniques
numpy.unique()
Créer un rang de valeurs, une série de valeurs avec la fonction range()
x = range(10,20,2) # Création d'une liste de valeurs de 10 à 20 par pas de 2.
x = list(x) ; print(x) # list() permet de voir effectivement les valeurs créées par range()
séries
range()
list(range())
Saisir à l'écran des valeurs
x = input("Sélectionne une valeur : ") # Une seule valeur
print(x)
x = [input("Valeur "+str(i+1)+" : ") for i in range(3)] # Une liste complète
print(x)
saisies manuelles
input()
Convertir un format de valeur
x = 2
x = str(x) ; print(x) # x converti en texte
x = float(x) ; print(x) # x converti en réel
x= int(x) ; print(x) # x converti en entier
Si x est une liste
[float(item) for item in x ]
conversions
str()
float()
int()
Récupérer la taille d'une liste
x = [2,3,4,5] ; len(x)
taille d'une liste
len()
Ajouter une valeur en fin de liste ou par insertion - AJOUT - INSERTION
x = [2,"A",3,"B",4,"C"]
x.append(12) ; print(x) # Ajouter une valeur en fin de liste (applicable uniquement aux listes)
# remplacer x par le nom de la
x = x + [12] ; print(x) # marche aussi bien que append
x[2:2] = [78] ; print(x) # Insérer une valeur en 3 (indice 2)
# attention, le 78 doit être entre [] pour être au format liste
x[3:3] = [13,10,12] ; print(x) # Insérer plusieurs valeurs en position 3
# (soit 4ème place car les indices commencent à 0)
ajout
&
suppression
Supprimer une valeur
x[2:4] = [] ; print(x) # Suppression des valeurs 3 et 4 (indices 2 et 3). L'indice 4 n'est pas supprimé.
del(x[2:3]) ; print(x) # Suppression de la valeur 4 (indice 2) : il faut toujours indiquer un indice de plus.
x.pop() # Supprimer la dernière valeur et la renvoie
suppression
del()
_.pop()
Agrandir une liste en concaténant des listes
x = ["A","B","C"] ; y= [1,2,3,4]
x.extend(y) ; print(x) # x se voit ainsi agrandi du contenu de y
concaténation
extend()
Intersection et union entre des listes
L'intersection entre des listes est complexe de prime abord (exemple)
a = ['jambon','fromage','saucisson', 'ketchup']
b = ['jambon', 'mayonnaise', 'poulet', 'tomate']
# Récupérer les valeurs de a qui ne figurent pas dans b : il faut donc des boucles...
dif = [item for item in a if item not in b]
# Récupérer les valeurs de a qui ne sont pas dans dif
dif2 = [item for item in a if item not in dif]
L'intersection/union entre des listes est simple si on les convertit en objets set
a = set(a) ; b = set(b) # On convertit les listes en objets set
c = a&b ; print(c) # Intersection : Partie commune à a et b (jambon donc)
c = a|b ; print(c) # Union : regroupant de a et b où jambon ne figure qu'une seule fois au lieu de deux
c = a-b ; print(c) # Partie de a qui ne figure pas dans b, équivalent de dif plus haut
c = b-a ; print(c) # Partie de b qui ne figure pas dans a
c = list(c) # Conversion en fin de comparaison que c redevienne un objet list
intersection
&
union
&
différences
objets set ou boucles entre []
Copier une liste sous un autre nom.
y = x.copy()
Cette démarche est importante car, en python, si on fait x = y, toute modification faite à x modifiera y de la même, toute modification de y modifiera de la même façon y, comme des particules intriquées.
self.copy() permet donc de générer deux listes indépendantes.
faire une copie
list.copy()
Les affectations
x[4] = x[4] +10 ; print(x)
a, b = 4, 8.33 # Affectations multiples a reçoit au même moment 4 et b 8,33
Appeler des valeurs par leur position
x = [0,1,2,3,4,5,6]
print(x[:5]) # Valeur pour les indices 0 à 5 non inclus
print(x[2:]) # Valeur pour les indices 2 à n, 2 non inclus
print(x[-4:]) # Afficher les 4 dernières valeurs (4e en partant de la fin)
Les listes de textes, concaténation et répétitions
list1 + list2 # Concaténer
list * 3 # Répéter les valeurs d'une liste
Les listes multidimensionnelles
jour = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', ['samedi matin', 'samedi après-midi', 'samedi soir'], 'dimanche']
jour[5][0] = "samedi midi" # Remplace samedi matin par samedi midi
2. Les chaînes de caractères
3. Les listes de constantes (tuples)
Listes de variables. Il suffit de remplacer les [] par des ().
4. Les dictionnaires python
dico.keys()
dico.values()
dico.has_keys("b")
dico.items()
# Les clés ne sont pas nécessairement des chaînes de caractères
dico.get("b", "Pas de clef b identifiée")
# Voir ci-dessous si un affichage directte de D.keys() n 'est pas plus simple
D = {'a':1, 'b':3, 'c':'azerty'}
for cle in D.keys() :
print(cle)
for val in D.values():
print(val)
for cle, val in D.items():
print(val) ; print(cle)
list(D.values())[0]
5. Les arrays (matrice 2D, ou à dimensions plus complexes, n dim)
Les arrays sont des objets qui représente des matrices à n dimensions. Le mieux est de faire appel à numpy pour réaliser des arrays optimales avec un usage aisée.
Créer une matrice de 12 sur 12 (exemple)
# Simulons des valeurs
from numpy.random import *
data = normal(size=12**2,loc=10,scale=3) # générer 12² valeurs selon la loi normale
# Pour apprendre à simuler des valeurs : suivre ce lien.
# Convertir ces valeurs en une matrice de 12 sur 12
# x : premier 12, nombre de lignes
# y : deuxième 12, nombre de colonnes
mymatrix = data.reshape(12,12) # On convertit le tout pour faire une matrice de 12 sur 12
from numpy import *
data = floor(data)
data = data.astype(int)
print(data)
mymatrix = data.reshape(12,12)
print(mymatrix)
array.reshape()
Arrondir les valeurs avec numpy et convertir au format (entiers (int), réels (float)... avant de faire une matrice
# Simulons des valeurs
from numpy.random import *
data = normal(size=3**2,loc=10,scale=3)
# Transformer ces valeurs - pour en savoir plus sur les opérations de bases sur les valeurs : suivre ce lien.
from numpy import *
data = floor(data)
data = data.astype(int)
# Convertir en une matrice de 3 sur 3
mymatrix = data.reshape(3,3)
floor()
array.astype()
Obtenir des informations sur les dimensions d'une matrice
# Simulons des valeurs
from numpy.random import *
data = normal(size=12**2,loc=10,scale=3) # générer 12² valeurs selon la loi normale
# Une matrice de 12 sur 12
mymatrix = data.reshape(12,12)
print(mymatrix.shape) # afficher les dimensions
# Une colonne de valeurs
mymatrix = data.reshape(-1,1)
print(mymatrix.shape) # afficher les dimensions
# Une lignes de valeurs
mymatrix = data.reshape(1,-1)
print(mymatrix.shape) # afficher les dimensions
# Une matrice 3D de 3 sur 4 sur 12
mymatrix = data.reshape(3,4,12)
print(mymatrix.shape) # afficher les dimensions
array.shape
Obtenir des valeurs ou une plage de valeurs d'une array
# Simulons des valeurs
from numpy.random import *
data = normal(size=12**2,loc=10,scale=3) # générer 12² valeurs selon la loi normale
from numpy import *
data = floor(data)
data = data.astype(int)
# Une matrice de 12 sur 12
mymatrix = data.reshape(12,12)
# Afficher les valeurs de la colonne 3 (4ème colonne donc car les indices commencent à 0)
print( mymatrix[:,3] )
# Afficher les valeurs de la ligne 1 (2ème ligne donc car les indices commencent à 0)
print( mymatrix[1,:] )
# Afficher la valeur de la ligne 6, colonne 7 (on parle ici d'indices, row 7, col 8 donc)
print( mymatrix[6,7] )
Ce mode d'écriture marche pour les arrays à n dimensions.
Calculs simples sur arrays (moyennes par ligne, moyennes par colonne)
from numpy import *
mean(mymatrix,axis=1) # Moyenne de chaque ligne
mean(mymatrix,axis=0) # Moyenne de chaque colonne
cumsum(mymatrix,axis = 1) # Somme en cumul de chaque colonne
numpy.mean()
numpy.cumsum()
numpy.std()
Trace et déterminant d'une array
trace(mymatrix) # somme de la diagonale
from numpy.linalg import *
det(mymatrix) # déterminant
inv(mymatrix) # inverse d'une matrice
Pour aller plus loin avec les arrays : lien externe.
A ajouter np.append()
7. Lister les objets existants, les décrire, les effacer
Lister les objets existants
dir() # Joue le rôle de ls() dans R - affiche les objets existants
dir(x) # A développer - affiche les fonctions dispo dans l'objet.
Décrire un objet existant
type(x) # renvoie <class 'list'> si x est une liste
Supprimer un objet
del x # Première écriture - Supprimer x
del(y) # Deuxième écriture - Supprimer y
Demander de l'aide sur une fonction
help(del) # Demander de l'aide sur la fonction del.