Saltar al contenido principal
InicioTutorialesPython

Crear datos sintéticos con Python Tutorial de Faker

Generación de datos sintéticos mediante Python Faker para complementar los datos del mundo real en pruebas de aplicaciones y privacidad de datos.
Actualizado 11 sept 2024  · 13 min leer

Crear datos sintéticos con Python Faker Tutoria

¿Qué son los Datos Sintéticos?

Los datos sintéticos son datos generados por ordenador que son similares a los datos del mundo real. El objetivo principal de los datos sintéticos es aumentar la privacidad e integridad de los sistemas. Por ejemplo, para proteger la Información Personal Identificable (IPI) o la Información Personal Sanitaria (IPS) de los usuarios, las empresas tienen que aplicar estrategias de protección de datos. Utilizar datos sintéticos puede ayudar a las empresas a probar nuevas aplicaciones y proteger la privacidad de los usuarios. 

En el caso del aprendizaje automático, utilizamos datos sintéticos para mejorar el rendimiento del modelo. También es válido para situaciones en las que los datos son escasos y desequilibrados. El uso típico de los datos sintéticos en el aprendizaje automático es la conducción autónoma de vehículos, la seguridad, la robótica, la protección contra el fraude y la asistencia sanitaria. 

Gartner

Imagen de Nvidia

Según datos de Gartner, en 2024, el 60% de los datos utilizados para desarrollar aplicaciones analíticas y de aprendizaje automático se generarán sintéticamente. Pero, ¿por qué vemos una tendencia al alza de los datos sintéticos? 

Es costoso recopilar y limpiar datos del mundo real y, en algunos casos, son escasos. Por ejemplo, los datos sobre fraudes bancarios, cáncer de mama, coches autoconducidos y ataques de malware son raros de encontrar en el mundo real. Incluso si consigues los datos, te llevará tiempo y recursos limpiarlos y procesarlos para las tareas de aprendizaje automático. 

En la primera parte del tutorial, aprenderemos por qué necesitamos datos sintéticos, sus aplicaciones y cómo generarlos. En la parte final, exploraremos la biblioteca Faker de Python y la utilizaremos para crear datos sintéticos para probar y mantener la privacidad de los usuarios. 

¿Por qué necesitamos generar datos sintéticos?

por qué

Imagen del autor

Necesitamos datos sintéticos para la privacidad del usuario, probar aplicaciones, mejorar el rendimiento de los modelos, representar casos raros y reducir el coste de la operación.

  • Privacidad: para proteger los datos de los usuarios. Puedes sustituir nombres, correos electrónicos y direcciones por datos sintéticos. Nos ayudará a evitar ataques cibernéticos y de caja negra, en los que los modelos infieren los detalles de los datos de entrenamiento.
  • Pruebas: las pruebas de aplicaciones con datos del mundo real son caras. Probar la base de datos, la interfaz de usuario y las aplicaciones de IA sobre datos sintéticos es más rentable y seguro.
  • Rendimiento del modelo: los datos sintéticos generados pueden mejorar el rendimiento del modelo. Por ejemplo: en los clasificadores de imágenes, utilizamos el cizallamiento, el desplazamiento y la rotación de las imágenes para aumentar el tamaño del conjunto de datos y mejorar la precisión del modelo. 
  • Casos raros: no podemos esperar a que se produzca el acontecimiento raro y recopilar datos del mundo real. Ejemplos: detección del fraude crediticio, accidentes de tráfico y datos sobre el cáncer. 
  • Coste: la recogida de datos requiere tiempo y recursos. Es costoso adquirir datos del mundo real, limpiarlos, etiquetarlos y prepararlos para probar o entrenar modelos. 

¿Qué son las Aplicaciones de Datos Sintéticos?

En esta sección, aprenderemos cómo utilizan las empresas los datos sintéticos para crear aplicaciones rentables, respetuosas con la privacidad y de alto rendimiento. 

  1. Compartir datos: los datos sintéticos permiten a las empresas compartir datos sensibles internamente y con terceros. También ayuda a trasladar datos privados a la nube y conserva datos para análisis.
  2. Servicio financiero: se generan datos sintéticos para imitar sucesos poco frecuentes, como transacciones fraudulentas, detección de anomalías y recesión económica. También se utiliza para comprender los comportamientos de los clientes mediante herramientas analíticas. 
  3. Garantía de calidad: mantener y comprobar la calidad de los sistemas de aplicaciones o datos. Los datos sintéticos se renderizan para probar los sistemas en anomalías más raras y mejorar el rendimiento.
  4. Sanidad: nos permiten compartir historiales médicos interna y externamente manteniendo la confidencialidad del paciente. También puedes utilizarlo para ensayos clínicos y para detectar enfermedades raras. Aprende a procesar información sensible realizando un curso de privacidad y anonimización de datos con Python o R
  5. Automoción: es difícil y lento obtener datos del mundo real para robots, drones y coches autoconducidos. Las empresas prueban y entrenan sus sistemas con datos de simulación sintéticos y ahorran costes en la construcción de soluciones sin comprometer el rendimiento. 
  6. Aprendizaje automático: podemos utilizar datos sintéticos para aumentar el tamaño del conjunto de datos de entrenamiento, resolver problemas de desequilibrio de datos y probar modelos para garantizar el rendimiento y la precisión. También se utiliza para reducir los sesgos de los datos de imagen y texto existentes. Nos ayudará a probar los sistemas y a mantener la privacidad de los usuarios. Por ejemplo, DeepFake se utiliza para probar sistemas de reconocimiento facial. 

Cómo generar datos sintéticos

Podemos utilizar generadores de datos falsos, herramientas estadísticas, redes neuronales y redes generativas adversariales para generar datos sintéticos.  

Generar bases de datos falsas utilizando la biblioteca Faker para probar bases de datos y sistemas. Puede generar perfiles de usuario falsos con direcciones y toda la información esencial. También puedes utilizarlo para generar texto y párrafos aleatorios. Ayuda a las empresas a proteger la privacidad de los usuarios en la fase de prueba y a ahorrar dinero en la adquisición de conjuntos de datos del mundo real. 

Comprender la distribución de los datos para generar un conjunto de datos completamente nuevo utilizando herramientas estadísticas como la Gaussiana, la Exponencial, la Chi-cuadrado, la t, la lognormal y la Uniforme. Debes tener conocimientos de la materia para generar datos sintéticos basados en la distribución. 

El Autoencoder Variacional es un método de aprendizaje no supervisado que utiliza un codificador y un decodificador para comprimir el conjunto de datos original y generar una representación del mismo. Está diseñado para optimizar la correlación entre los conjuntos de datos de entrada y de salida. 

La Red Adversarial Generativa es la forma más popular de generar datos. Puedes utilizarlo para representar imágenes sintéticas, sonido, datos tabulares y datos de simulación. Utiliza una arquitectura de modelo de aprendizaje profundo generador y discriminador para generar datos sintéticos comparando muestras aleatorias con datos reales. Lee nuestro tutorial Desmitificando las Redes Adversariales Generativas para crear tus propios datos sintéticos utilizando Keras.  

¿Qué es Python Faker?

Python Faker es un paquete Python de código abierto que se utiliza para crear un conjunto de datos falso para probar aplicaciones, arrancar la base de datos y mantener el anonimato del usuario.

faker

Imagen del autor

Puedes instalar Faker utilizando:

pip install faker

Faker viene con soporte de línea de comandos, Pytest fixtures, Localización (soporta diferentes regiones), reproducibilidad y proveedor dinámico (personalizándolo según tus necesidades).

También puedes utilizar las funcionalidades básicas de Faker para crear un conjunto de datos rápido y personalizarlo según tus necesidades. En la tabla siguiente, puedes consultar varias funciones del Faker y su finalidad. 

Función Farsante

Propósito

nombre()

Genera un nombre completo falso

credit_card_full()

Genera un número de tarjeta de crédito con caducidad y CVV

correo electrónico()

Genera una dirección de correo electrónico falsa

url()

Generar URL falsa

phone_number()

Genera un número de teléfono falso con el prefijo del país

address()

Genera una dirección completa falsa

license_plate()

Genera matrículas falsas 

moneda()

Generar tupla de código de moneda y forma completa

color_name()

Generar nombre de color aleatorio

local_latlng()

Generar latitud, longitud, zona, país y estados

domain_name()

Generar el sitio web falso basado en el nombre falso de la persona

text()

Generar el texto pequeño falso

company()

Generar nombre de empresa falso

Para conocer funciones más avanzadas, consulta la documentación de Faker.

Es importante repasar estas funciones, ya que las utilizaremos para crear varios ejemplos y marcos de datos. 

Generación de Datos Sintéticos con Python Faker

En esta sección, utilizaremos Python Faker para generar datos sintéticos. Consta de 5 ejemplos de cómo puedes utilizar Faker para diversas tareas. El objetivo principal es desarrollar un enfoque centrado en la privacidad para probar sistemas. En la última parte, generaremos datos falsos para complementar los datos originales utilizando el proveedor localizado de Faker. 

Puedes encontrar todo el código de este tutorial en este libro de trabajo de DataLab; puedes crear fácilmente tu propia copia del libro de trabajo para ejecutar todo el código en el navegador, sin instalar nada en tu ordenador.

En primer lugar, iniciaremos un generador falso utilizando `Faker()`. Por defecto, utiliza la configuración regional "en_US". 

from faker import Faker
fake = Faker()

Ejemplo 1

El objeto "falso" puede generar datos utilizando nombres de propiedades. Por ejemplo, `fake.name()` se utiliza para generar el nombre completo de una persona al azar.

print(fake.name())
>>> Jessica Robinson

Del mismo modo, podemos generar una dirección de correo electrónico, un nombre de país, un texto, una geolocalización y una URL falsos, como se muestra a continuación.  

print(fake.email())
print(fake.country())
print(fake.name())
print(fake.text())
print(fake.latitude(), fake.longitude())
print(fake.url())

Salida

ybanks@example.com
Mayotte
Mr. Jose Browning DDS
Dog might bank dog total life financial. Dark view doctor time just.
Stay second treatment language theory. Space seek adult create matter imagine lay.
51.7514185 -148.802970
http://fischer.info/

Ejemplo 2

Puedes utilizar distintas localizaciones para generar datos en diversos idiomas y para distintas regiones. 

En el ejemplo siguiente, generaremos los datos en español y la región en España.

fake = Faker("es_ES")
print(fake.email())
print(fake.country())
print(fake.name())
print(fake.text())
print(fake.latitude(), fake.longitude())
print(fake.url())

Salida

Como podemos ver, el nombre del individuo ha cambiado, y el texto está en español.

casandrahierro@example.com
Tonga
Juan Solera-Mancebo
Cumque adipisci eligendi aperiam. Quas laboriosam amet at dignissimos. Excepturi pariatur ipsam esse.
89.180798 -2.274117
https://corbacho-galan.net/

Intentémoslo de nuevo con la lengua alemana y Alemania como país. Para generar un perfil de usuario completo, utilizaremos la función `perfil()`.

fake = Faker("de_DE")
fake.profile()

Salida

Está bastante claro cómo podemos utilizar Faker para generar datos en varios idiomas para varios países. Al cambiar la configuración regional, cambiarán el nombre, el trabajo, la dirección, la empresa y otros datos de identificación del usuario según el idioma y el país.  

{'job': 'Erzieher',
'company': 'Stadelmann Thanel GmbH',
'ssn': '631-64-0521',
'residence': 'Leo-Schinke-Allee 298\n26224 Altötting',
'current_location': (Decimal('51.5788595'), Decimal('29.780659')),
'blood_group': 'B+',
'website': ['https://www.schmidtke.de/',
  'https://roskoth.com/',
  'http://www.textor.de/',
  'https://www.zirme.com/'],
'username': 'vdoerr',
'name': 'Francesca Fröhlich',
'sex': 'F',
'address': 'Steinbergallee 13\n84765 Saarbrücken',
'mail': 'smuehle@gmail.com',
'birthdate': datetime.date(1998, 3, 19)}

Ejemplo 3

En este ejemplo, crearemos un marco de datos pandas utilizando Faker.

  1. Crear un marco de datos pandas vacío (datos)
  2. Pásalo por x número de bucles para crear varias filas
  3. Utiliza `randint()` para generar un identificador único
  4. Utiliza Faker para crear un nombre, una dirección y una geolocalización
  5. Ejecuta la función `datos_de_entrada()` con x=10
from random import randint 
import pandas as pd 
 
fake = Faker()
 
def input_data(x):
   
    # pandas dataframe
    data = pd.DataFrame()
    for i in range(0, x):
        data.loc[i,'id']= randint(1, 100)
        data.loc[i,'name']= fake.name()
        data.loc[i,'address']= fake.address()
        data.loc[i,'latitude']= str(fake.latitude())
        data.loc[i,'longitude']= str(fake.longitude())
    return data
   

input_data(10)

El resultado es increíble. Tenemos columnas id, nombre, dirección, latitud y longitud con datos únicos de usuario. 

Output1

Para reproducir el resultado, tenemos que fijar la semilla. Así, cada vez que volvamos a ejecutar la célula de código, obtendremos resultados similares. 

Faker.seed(2)
input_data(10)

Output2

Ejemplo 4

También podemos generar una frase que contenga las palabras clave que elijamos. Similar a `text(), texts(), paragraph(), word() y words()`. Puedes aumentar el número de palabras de una frase estableciendo el argumento nb_palabras.

En el ejemplo siguiente, generamos cinco frases utilizando una lista de palabras. No es perfecto, pero puede ayudarnos a probar aplicaciones que requieren toneladas de datos de texto. 

word_list = ["DataCamp", "says", "great", "loves", "tutorial", "workplace"]

for i in range(0, 5):
    print(fake.sentence(ext_word_list=word_list))

Salida

Loves great says.
Says workplace workplace tutorial great loves.
Loves workplace workplace loves workplace loves great DataCamp.
Loves says workplace great.
Workplace great DataCamp.

Mezclar los datos sintéticos y los reales

En esta parte, utilizaremos los Datos de Comercio Electrónico del repositorio de conjuntos de datos de DataCamp y añadiremos datos de usuario falsos utilizando las columnas CustomerID y Country. Nos ayudará a mantener la privacidad del usuario y a probar el sistema con parámetros adicionales. 

Para cargar el archivo CSV, utilizaremos la función `read_csv()` de pandas y mostraremos las cinco primeras filas con `head()`.

# Loading CSV file
Ecommerce = pd.read_csv("e-commerce.csv")
Ecommerce.head()

El conjunto de datos consta de las columnas Número de factura, Código de inventario (ID de producto), Descripción, Nombre del producto (artículo), Cantidad (por transacción), Fecha de factura, Precio unitario (en libras), ID de cliente y País. 

Output3

Para crear un objeto falsificador localizado, mostraremos nombres de países únicos y los utilizaremos para crear un diccionario. Como podemos observar, tenemos siete países, y en la siguiente parte crearemos siete generadores localizados falsos. 

Ecommerce.Country.dropna().unique()

>>> array(['United Kingdom', 'France', 'Australia', 'Netherlands', 'Germany',
      'Norway', 'EIRE'], dtype=object)

En la función `anónimo`, tenemos:

  1. Se ha extraído el identificador único del cliente y se han eliminado los valores que faltaban
  2. Creado el diccionario de nombres de países y la forma abreviada de localización
  3. Índice de fila y nombre de país extraídos para el identificador único de cliente
  4. Utiliza el diccionario y el nombre del contador para inicializar el generador de farsantes localizado
  5. Añadir nombre de cliente, dirección y geolocalización al marco de datos existente. 

La función siguiente utiliza el marco de datos y añade cuatro nuevas columnas con datos de usuario basados en las columnas CustomerID y Country. 

def anonymous(df):
   
    # Extracting unique CustomerID
    unique_id = df.CustomerID.dropna().unique()
   
    # Creating the dictionary for Faker localized providers
    local = {
        "United Kingdom": "en_GB",
        "France": "fr_FR",
        "Australia": "en_AU",
        "Netherlands": "nl_NL",
        "Germany": "de_DE",
        "Norway": "no_NO",
        "EIRE": "ga_IE",
    }

    for i in unique_id:
       
        # Extracting row index
        row_id = df[df["CustomerID"] == i].index
       
        # Extracting country name for faker locale
        CountryName = Ecommerce.loc[
            Ecommerce["CustomerID"] == i, "Country"
        ].to_numpy()[0]

        # Using locale dictionary to create faker locale generator
        code = local[CountryName]
        fake = Faker(code)

        # Generating fake data and adding it to dataframe
        CustomerName = fake.name()
        Address = fake.address()
        Latitude = str(fake.latitude())
        Longitude = str(fake.longitude())

        for x in row_id:
            df.loc[x, "CustomerName"] = CustomerName
            df.loc[x, "Address"] = Address
            df.loc[x, "Latitude"] = Latitude
            df.loc[x, "Longitude"] = Longitude

    return df

Utilizaremos semilla(5) para la reproducibilidad y ejecutaremos una función `anónima` en el marco de datos de Comercio Electrónico. 

# Using seed for reproducibility
Faker.seed(5)

secure_db = anonymous(Ecommerce)
secure_db

Los primeros resultados muestran los datos de 17850, Reino Unido, y Pamela Cox-James. 

Output4

Para visualizar los resultados localizados de la función, necesitamos ver los datos de una única columna País. 

display_db = []
for i in Ecommerce.Country.dropna().unique():
    display_db.append(secure_db[secure_db["Country"] == i].to_numpy()[0])
pd.DataFrame(display_db, columns=Ecommerce.columns)

El resultado es prometedor. Puedes ver diferentes nombres por región y lengua. Las direcciones se emparejan con el país. Con este método, puedes eliminar los datos de identificación personal y crear datos localizados utilizando Faker para proteger la privacidad del usuario y ahorrar dinero. 

Output5

El código fuente está disponible en este libro de trabajo de DataLab.

Conclusión 

Uno de los inconvenientes de utilizar Python Faker es que proporciona datos de baja calidad. Puede funcionar para probar aplicaciones, pero carece de precisión de datos. Por ejemplo, los nombres no coinciden con el correo electrónico, el nombre de dominio o el nombre de usuario. 

Puedes personalizar el proveedor o crear uno nuevo según tus preferencias, pero te llevará más tiempo perfeccionar el sistema. En ese momento, puedes crear tu paquete Python utilizando `random.choice()`.

En big tech, los científicos de datos utilizan diversas herramientas para procesar datos sensibles y mantener la privacidad de los datos. También están utilizando datos sintéticos para mejorar el rendimiento de los modelos, reducir la base, probar aplicaciones y ahorrar costes en el desarrollo de soluciones de IA de vanguardia. 

Si estás interesado en saber más, echa un vistazo a la trayectoria profesional de Científico de Datos con Python para comenzar tu viaje de convertirte en un científico de datos seguro de ti mismo.

En este tutorial, hemos aprendido la importancia de los datos sintéticos y sus aplicaciones. También hemos generado datos falsos desde cero utilizando Python Faker para probar los sistemas de datos y mantener la privacidad de los usuarios.

Temas

Cursos para Python

Course

Introduction to Natural Language Processing in Python

4 hr
121.2K
Learn fundamental natural language processing techniques using Python and how to apply them to extract insights from real-world text data.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Tutorial de Generación de nubes de palabras en Python

Aprende a realizar Análisis exploratorios de datos para el Procesamiento del lenguaje natural utilizando WordCloud en Python.
Duong Vu's photo

Duong Vu

21 min

tutorial

Aprendizaje automático de datos categóricos con el tutorial de Python

Aprenda los trucos más comunes para manejar datos categóricos y preprocesarlos para construir modelos de aprendizaje automático.
Moez Ali's photo

Moez Ali

28 min

tutorial

Guía completa para el aumento de datos

Aprende sobre técnicas, aplicaciones y herramientas de aumento de datos con un tutorial de TensorFlow y Keras.
Abid Ali Awan's photo

Abid Ali Awan

15 min

tutorial

Cómo utilizar Pytest para pruebas unitarias

Explore qué es Pytest y para qué se utiliza mientras lo compara con otros métodos de prueba de software.
Kurtis Pykes 's photo

Kurtis Pykes

17 min

tutorial

Tutorial de funciones de Python

Un tutorial sobre funciones en Python que cubre cómo escribir funciones, cómo invocarlas y mucho más.
Karlijn Willems's photo

Karlijn Willems

14 min

tutorial

Tutorial sobre cómo ejecutar consultas SQL en Python y R

Aprenda formas fáciles y eficaces de ejecutar consultas SQL en Python y R para el análisis de datos y la gestión de bases de datos.
Abid Ali Awan's photo

Abid Ali Awan

13 min

See MoreSee More