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.