Simuler des données en python
1- Utiliser le module numpy pour simuler des jeux de données selon différentes loi (uniforme, normale...)
On peut simuler des valeurs avec le module numpy
import numpy as np # Chargement du module
np.random.seed(6) # fixer la position du générateur aléatoire pour pouvoir répéter une simulation d'un jeu de données
x = np.random.normal(size=10) # Simuler 10 valeurs centrées autour de 0 selon la loi normale
loi normale
On peut aussi directement charger uniquement les fonctions random de numpy
from numpy.random import *
print(dir(rd)) # Afficher le nom des fonctions disponibles dans rd
x = normal(loc=10, scale=2.0, size=20) # 20 valeurs selon la loi normale, moyenne : 10, écart-type : 2
y = binomial(n=100, p=0.2, size=20) # 20 valeurs correspondant aux pourcentages qu'on aurait sur 20 échantillons de 100 individus prélevès dans une population où le pourcentage est de 20%
loi binomiale
Autre exemple de génération de valeurs aléatoires avec numpy :
from numpy.random import *
from numpy import * # permet de charger arange qui génère des rangs de valeurs et abs
data = {'a': arange(50), # 50 valeurs de 0 à 50
'c': randint(0, 50, 50), # 50 valeurs dans le désordre de 0 à 49
'd': randn(50)} # 50 valeurs autour de 0 (selon la loi normale)
data['b'] = data['a'] + 10 * randn(50)
data['d'] = abs(data['d']) * 100 # mise en absolue
print(data)
# pour mieux visualiser, convertir le tout en dataframe pandas
from pandas import *
data = DataFrame(data) ; print(data.head())
Remarque importante : les valeurs simulées sont au format array. Il faut envisager de les convertir avec la fonction list() ou inversement en array() :
import numpy.random as * # pour la fonction normale
poids = list(normal(loc=65, scale=6, size=8)) ; print(poids) # 8 poids autour de 65 kh, écart-type de 6
# ou l'inverse :
import numpy as np # pour la fonction array
poids = np.array(poids) ; print(poids)
Pourquoi faire cela : car on peut faire des calculs directement sur les arrays (alors qu'il faudra faire valeur par valeur pour une liste) et facilement concaténer les listes.
Exemple : sur ce jeu de données simulées :
from numpy import random as rd
age = [18,19,20,18,19,20,17,23]
sx = ["M","F"]*4
poids = list(rd.normal(loc=65, scale=6, size=8))
Si je veux arrondir les valeurs d'une liste, je dois faire une boucle :
for i in range(len(poids)) :
poids[i] = round(poids[i],0)
poids[i] = int(poids[i])
Et si je voulais arrondir les valeurs d'une array, ce serait plus simple :
import numpy as np
poids = np.array(poids)
poids.round(0)
2- Faire des suites de nombres
Faire une suite répétée de valeurs
Ecriture simple mais limitée :
# Une séquence de "M" et "F" cinq fois de suite
c = ["M","F"]*5 ; print(c)
Ecriture plus complexe mais où je répète ce que je veux (il faut le module numpy)
sx = ["M","F"] # Je veux répéter 5 fois "M", puis 5 fois "F"
import numpy as np
sx = [np.repeat(sx, [5, 5]),"M"] # dernier "M" pour un ajouter un à la fin.
Le plus simple dans cet exemple est encore de faire cela :
sx = ["M"]*5 + ["F"] * 5 + ["M"] # Et j'ajoute un "M" pour le plaisir.
Faire une série de nombre avec range()
x = range(1,10,2) ; list(x) ; print(x) # Un range de valeurs de 1 à 10 par pas de 2 (de 1 à 9 donc)
Organiser des séries complexes plus simplement qu'avec la fonction range() limitée.
import numpy as np # il faut importer le module numpy
# Série allant de 0 à 5 par pas de 0.2
t = np.arange(0., 5., 0.2) # mieux que range !
3- Charger des jeux de données déjà disponibles
import seaborn as sns # nécessite dte le module seaborn
#
tips = sns.load_dataset("tips")
df = sns.load_dataset('iris') # Charger le jeu de données iris