Créez des données factices à l'aide des packages NumPy et Faker de Python

Pourquoi s'en tenir aux données factices

Les données que vous gérez lorsque vous utilisez des bibliothèques et des outils tels que l'apprentissage automatique sont très importantes. Sans les données, vous ne pouvez même pas faire de démonstration. Il est préférable d'utiliser des données réelles, mais je pense que dans de nombreux cas, vous ne disposez pas du type de données réelles que vous recherchez. Récemment, certaines entreprises ont publié des données réelles qui sont faciles à utiliser pour l'analyse, mais qui sont limitées à des fins de recherche. Dans certains cas, les conditions d'utilisation peuvent ne pas être remplies.

Si vous ne disposez pas des données, vous pouvez les créer vous-même, il est donc pratique de créer librement des données factices. Lors de la création de données factices, il est nécessaire de concevoir un moyen de les créer en fonction de l'objectif. Je pense qu'il peut être grossièrement divisé en deux.

Dans la mesure du rendement, s'il s'agit d'une chose simple comme la mesure de la vitesse de lecture de toutes les données, je pense qu'il existe de nombreux cas où les exigences sont satisfaites tant que la quantité de données est combinée. Cependant, lorsque vous effectuez des mesures de performances complexes telles que la jonction et le filtrage de données avec un taux de compression et SQL, il est nécessaire de faire attention à la cardinalité des données. Si toutes les valeurs sont identiques et que seule la quantité de données est combinée, le taux de compression peut être anormalement bon par rapport aux données réelles, entraînant des valeurs mesurées inutilisables.

L'analyse des données nécessite des données factices avec un scénario légèrement plus détaillé que celui requis pour les mesures de performance. De plus, en le montrant dans une démo, je pense que je vais montrer de quel type de résultat d'analyse il s'agit, donc cela n'a pas l'air bien avec une liste de nombres et de chaînes de caractères sans signification.

Cette fois, je voudrais présenter la procédure de création de données factices utilisées dans l'analyse des données avec un peu d'attention, plutôt que de la remplir avec des nombres aléatoires uniformes.

Déterminer un scénario de données factices pour les données client

Décidez des attributs que vous souhaitez avoir lors de la création des données client. Je souhaite créer des données factices pour les éléments suivants.

attribut Caractéristiques des données Exemple
N ° de client Valeur unique 12345
Nom du client Tout nom japonais Taro Tanaka
âge Distribution uniforme 30 ans
la taille distribution normale 176cm
revenu annuel Enregistrer la distribution normale 4,56 millions de yens
Drapeau de propriété de voiture 0 possession,1 Aucun(4:6) 1
Statut matrimonial 0 célibataire,1 marié,2 Séparation(3:6:1) 2

Cette fois, c'est un peu pour l'explication, mais je pense que 20 à 30 attributs sont parfaits comme données factices.

Créons des données factices client avec Python

Cette fois, je vais créer des données factices en utilisant Python. J'ai choisi Python parce que je peux utiliser NumPy pour générer des valeurs pour diverses distributions et Faker C'est parce que le package appelé est assez pratique. (La principale raison est ma langue préférée personnelle)

Créez un identifiant client unique

Puisqu'il s'agit d'une valeur unique, vous pouvez la compléter en créant des nombres dans l'ordre par séquence.

lang:python3.4.3


for i in range(1000)
    i

Créez n'importe quel nom de client

En utilisant le package Faker, vous pouvez facilement créer des données factices telles que des noms. Bien que les types de données aient diminué, il est possible de générer des données pour chaque pays.

lang:python3.4.3


from faker import Faker
fake = Faker('ja_JP')
fake.name()

Il existe une grande variété, et vous pouvez générer uniquement le nom de famille ou l'adresse e-mail. Il y a peu de modèles en japonais, mais il y en a pas mal en anglais.

lang:python3.4.3


from faker import Faker
fake = Faker('ja_JP')
fake.last_name()
fake.email()

Créer des données d'âge uniformément réparties

Comme c'est l'âge de l'utilisateur, les valeurs de 15 à 85 sont générées aléatoirement avec une distribution uniforme.

lang:python3.4.3


import numpy as np
from numpy.random import *
randint(15,85)

Créer des données de hauteur de distribution normale

Je ne sais pas quel type de cas la hauteur est incluse dans les données client, mais je ne peux pas penser à d'autres valeurs d'attribut qui sont généralement appelées distribution normale.

lang:python3.4.3


import numpy as np
from numpy.random import *
normal(170,6)

Comme la moyenne et la dispersion sont différentes pour les hommes et les femmes, je pense que ce serait bien de la générer deux fois. De plus, étant donné que la moyenne et la variance par sexe et âge sont publiées dans les résultats de l'enquête du ministère de la Santé, du Travail et du Bien-être social, je pense que si une distribution normale est générée plusieurs fois en fonction de cela, ce sera des données factices très réalistes.

Créez des données de revenu annuel avec une distribution normale logarithmique

Bien que le revenu annuel moyen soit de 4 millions de yens, la médiane est de 2 millions de yens et il existe une grande différence entre le revenu annuel moyen et médian. Cela est dû au fait qu'il existe un certain nombre de valeurs aberrantes. Dans le secteur financier, ça s'appelle grosse queue. Lors de la création de telles données, générons des nombres aléatoires avec une distribution normale logarithmique.

lang:python3.4.3


import numpy as np
from numpy.random import *
lognormal(0,1)

Créer un drapeau de propriété de voiture

Certaines des données sont appelées un indicateur géré oui ou non, comme ce que vous avez fait ou ce que vous avez. Comme il est essentiellement géré par 0 ou 1, diverses méthodes de génération peuvent être envisagées. Générez un nombre, divisez par 2 et utilisez le reste. Cette fois, nous créerons des données avec un taux de propriété de 60%, 1 étant la personne qui possède la voiture et 0 la personne qui ne possède pas la voiture.

lang:python3.4.3


import numpy as np
from numpy.random import *
CarFlagList = [0,1]
Weight = [0.4,0.6]
np.random.choice(CarFlagList,p=Weight)

Créer un statut de mariage

Contrairement aux drapeaux, certains sont dans plusieurs états au lieu de deux. Il est possible de l'exprimer avec une combinaison d'indicateurs, mais il n'est pas gérable d'augmenter les attributs inutilement, il est donc courant d'avoir plusieurs valeurs docilement. Cette fois, nous allons créer des nombres aléatoires à partir de 3 types de données: 0 célibataire, 1 marié, 2 divorcé comme état matrimonial. Le rapport de chacun est de 3: 6: 1.

lang:python3.4.3


import numpy as np
from numpy.random import *
MariageList = ["0 célibataire","1 marié","2 Séparation"]
Weight = [0.3,0.6,0.1]
np.random.choice(MariageList ,p=Weight)

Vous pouvez créer un nombre aléatoire par presque la même procédure que le drapeau de possession de voiture. Cette fois, la valeur n'est pas un nombre mais une chaîne de caractères, mais il est pratique de pouvoir y répondre de manière flexible également.

Résumé

Depuis que j'ai écrit un ensemble de modèles de génération de nombres aléatoires, je peux créer des données factices pour chaque scénario en tournant une boucle avec cette combinaison et l'instruction For. Dans un certain projet, j'ai créé des données factices pour 70 colonnes, mais c'était le plus difficile de définir les pondérations pour chacune des 70 colonnes. ..

Recommended Posts

Créez des données factices à l'aide des packages NumPy et Faker de Python
Créer un fichier de données factice
Comment créer un fichier factice CSV contenant du japonais à l'aide de Faker
Créez un Mario en utilisant Numpy et OpenCV
Créez de la documentation et testez du code en utilisant doctest.testfile ()
[Python] Divers traitements de données utilisant le tableau Numpy
Créez rapidement des données de classification de documents à l'aide de NLTK
Collectez des données à l'aide de scrapy et remplissez mongoDB
Générer et publier des données d'image factice avec Django
[Python] Permutation des lignes et des colonnes de données Numpy
Créer des données d'imprimante 3D (fichier STL) à l'aide de CadQuery
Créer un analyseur de données binaires à l'aide de Kaitai Struct
Créer une carte Web en utilisant Python et GDAL