Python en entreprise avec la génération de données fictives

article data engineering etl python Feb 12, 2024

Python, avec l'analyse de données, a pris la première place dans le domaine des langages de programmation, mais comment est-il utilisé en entreprise? Dans cette série d'articles, nous présenterons des exemples d'utilisation de Python dans des projets réels, en accompagnant chaque exemple par des scripts.

 
L’essor de Python

Depuis 2018, Python domine les langages de programmation sur Internet, conservant sa position de leader jusqu'à présent, comme le montre l'index PYPL ci-dessous :

Cette réussite découle de plusieurs facteurs tels que la simplicité et la lisibilité de sa syntaxe, une communauté dynamique, et un écosystème de bibliothèques complémentaires telles que NumPy pour l’implémentation scientifique comme l’utilisation de matrice, pandas pour l’analyse de données, Matplotlib pour la data visualisation ou encore scikit-learn pour les algorithmes de machine learning.

Les deux bibliothèques abordés dans cet article sont Random, avec sa méthode randint, et Faker.

 

L’intérêt de la génération de données aléatoire

La génération de données aléatoires répond au besoin de création rapide de bases de données relativement volumineuses. Lorsque les données disponibles sont insuffisantes et qu'une création manuelle est inenvisageable, c'est la solution idéale.

 Quelques exemples de projets d'entreprise nécessitant cette génération:

- Tester la robustesse d'une application à chaque étape du processus de développement, depuis le test unitaire qui va s'appliquer individuellement pour une fonctionnalité jusqu'au test d’intégration qui va certifier un ensemble de fonctionnalité.

- Fournir une vue exhaustive de données factices pour répondre à un appel d'offres client ou réaliser un Proof of Concept (POC), le but étant de vérifier la faisabilité d'une solution sur des données factices.

- Créer ou anonymiser une base de données dans le cadre de la formation en analyse de données (Power BI, SQL, etc.).

 

Génération basique avec Random

La fonction randint de Random permet de générer des entiers pour créer des matrices avec NumPy, ainsi que des chaînes de caractères. Dans le script suivant une boucle for() est utilisée pour encapsuler à chaque itération des valeurs générés de 3 types différents (un entier, suite de caractères et mélange de chiffres et de caractères) dans un Dataframe, la structure de données spécifique de la librairie pandas:

import pandas as pd
import random
import string

df = pd.DataFrame(columns=['random_number','random_string','random_string_number'])
for i in range(1000):
    random_number = random.randint(1,99)
    random_string = ''.join(chr(random.randint(97, 122)) for _ in range(10))
    random_string_number = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(10))
    df = df._append(pd.Series([random_number, random_string, random_string_number], index=df.columns), ignore_index=True)

Cette approche est suffisante pour le premier exemple, dans la mesure où les tests concernent un type de données prédéfini plutôt que des libellés représentatifs d'un domaine métier spécifique.

 

Génération avancée avec Faker

Faker offre davantage de fonctionnalités que Random, permettant de préparer plus précisément des données et une génération plus réaliste. Dans le script suivant une boucle for() est de nouveau utilisée pour encapsuler à chaque itération des valeurs générés de types différents mais surtout avec le bon format (prénom, nom, numéro de téléphone, nom de pays, adresse mail, etc... ) dans une liste de dictionnaire, une structure de données native à Python:

from faker import Faker
fake = Faker()
data = []
num_records = 1000
for _ in range(num_records):
    record = {
        'name': fake.name(),
        'country': fake.country(),
        'address': fake.address(),
        'email': fake.email(),
        'phone_number': fake.phone_number(),
        'birthdate': fake.date_of_birth(minimum_age=18, maximum_age=65).strftime('%Y-%m-%d'),
        'job_title': fake.job(),
        'company': fake.company(),
    }
    data.append(record)

Cette bibliothèque est plus adaptée au deuxième exemple, où les données doivent être proches de la réalité pour que les utilisateurs se projettent sur la solution technique comme lors d'une proposition commerciale.

 

Sélection aléatoire d'un élément

Il est également possible de sélectionner aléatoirement un élément avec ces deux bibliothèques en utilisant les méthodes randint() ou choice() pour Random et random_choices() pour Faker:

#choix d’un entier dans un intervalle avec Random
random.randint(4,9)
#choix d’un élément parmi plusieurs (ici des dates) avec Random
dates = ['2024-01-01','2023-12-31']
random.choice(dates) 
#choix de plusieurs éléments d’une liste (ici des caractères) avec Faker
fake.random_choices(elements=('a', 'b', 'c', 'd'))

Cette technique est particulièrement utile lorsqu'on connaît déjà l'exhaustivité attendue dans le jeu de données et/ou lorsque des modifications des informations existantes sont nécessaires, comme dans le troisième exemple.

 

En conclusion

Python propose différentes bibliothèques pour la génération de données aléatoires. La bibliothèque Random permet de créer un ensemble de données de base pour les tests en développement, tandis que la bibliothèque Faker convient mieux à la création de données structurées. Il est également possible de paramétrer les choix aléatoires avec des valeurs prédéfinies ou des données existantes pour obtenir plus d'exhaustivité et de précision.

Ne ratez pas nos prochains contenus

Inscrivez vous à notre Newsletter pour recevoir tous nos prochains contenus gratuits : Articles, Webinaires, Podcasts, Astuces vidéos,...

Data AI Lab

Transformez votre quotidien avec des compétences clés en data. Des formations, conseils et défis pour une maîtrise pointue en Data Science et IA.

 

Liens

Accueil
Challenges Data
Consulting

 

Formations

Parcours Data Analyst
Parcours Data Engineer
Voir toutes les formations

 

Ressources

Articles
Webinaires
Tuto vidéos

 

All rights reserved 2024 - Mentions légales - Politique de confidentialité