Python en entreprise avec la génération de données fictives
Feb 12, 2024Python, 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.