¿Necesitas rellenar un formulario con datos falsos?

A continuación generaremos una serie de datos falsos. que a primera a primera vista, podrian pasar por reales, la verdad que solo necesitaba un correo aleatorio, pero como siempre, ¿porque no lo podemos complicar un poquito mas?

La verdad es que el siguiente script, es simple, consiste en un par de lineas, por un lado no conocia tal librería, por lo que me parecio acertado y divertido, el primer acercammiento fue generar cadenas aleatorias luego concatenar dichas cadenas con un ’‘.join, mas sin embargo, no me gusto para nada el resultado, por lo que decido que es momento de hacer un brake, y luego de investigar un poco me topo con esta maravilla de biblioteca.

Es hora de empezar, y para la siguiente aventura, nos apollaremos en google coolab, no necesitaremos una super laptop con la ultima RTX, (somos pobres 😭), creo que al dia de hoy todos poseemos un correo Gmail, con solo eso es sufiente para tener acceso a los diverso productos de Google, hoy nos compete sheets, Colab, y Drive.

Google Colab

Dentro de Colab, primeramente procedeos a montar el disco (drive)


from google.colab import drive
drive.mount('/content/drive')

Importamos faker

De momento van solo dos lineas, donde no vemos nada de python, lo que si vemos, es que Google Colab en muy resumidas cuentas, es una maquina virtual basada en Linux y creanme, tiene cantidad de librerias preinstaladas, y faker no es una de ellas por eso recurriremos a !pip install


!pip install faker

Un pasito mas

Procedemos a importar un par de librerias necesarias, pandas, random, y la protagonista de este post, faker.


import pandas as pd
import random

from faker import Faker

# Initialize Faker
fake = Faker('es_CO')

# Get the number of entries from the user
n = int(input("Enter the number of entries: "))

El ‘es_CO’ al inicializar faker, hace referencia a la regionalización de los resultados, puede ser chile, españa, ingles britanico, entre otros. Por otro lado “n” seran la cantidad de seudo usuarios o seudodata que vamos a generar.

Ahora el Resto

¿cansado de las pausas?, no pasa nada aqui va el resto del codigo


# Generate random data
data = {
    'name': [fake.first_name() for _ in range(n)],
    'last name': [fake.last_name() for _ in range(n)],
    'company': [fake.company() for _ in range(n)],
    'address': [fake.address() for _ in range(n)],
    'city': [fake.city() for _ in range(n)],
    'age': [random.randint(18, 60) for _ in range(n)],
    'email': [fake.company_email() for _ in range(n)],
    'phone': [fake.phone_number() for _ in range(n)]
}

# Create a DataFrame
df = pd.DataFrame(data)

# Save the DataFrame to a .xlsx file in Google Drive
df.to_excel('/content/drive/My Drive/random_data2.xlsx', index=False,  engine='openpyxl')

Si no entiendes nada, no importa echale un segundo vistazo, toma un cafey tranquilo, no pasa nada, no hay prisa.

¿Que paso??

Jajajajajaja, ¿que fue todo eso?, de seguiro lo estas preguntando, y si no lo estais preguntando, bueno aca te respondo igual. Lo que mas me gusta de python, y de la programación funcional en general, es esa brujería, magia negra, esa mania de meter codigo dentro de diccionarios, listas, funciones dentro de funciones, por lo que en teoria este post no es de nivel basico, mas no se asusten, a continuacion, desmenuzaremos un poco el codigo anterior.

Tenemos un diccionario, en otros lengujes, como Java, quizas te suene HashMap, los diccionarios son colleciones de datos de pares clave-valor, estan desordenados, tienen barbaridad de metodos, mas empecemos por el principio:

  • La clave pude ser cualquier cosa que sea inmutable (que no cambia)
  • El valor puede se ser cualquier cosa. (alguien dijo funciones?).
  • Podemos usar un par de llaves (curly brakes) para crear un diccionario.
  • utlilizamos un par de puntos para separar una clave de su valor, y una coma para separarar las parejas clave-valor dentro de la collección

ejemplo:


my_dict = {'clave_1': [], 'clave_2': 'juan', 'clave_3': 543}

Como vemos tenemos una lista vacia, un string (juan), un numero (543), asociados a sus respectivas claves.

Volviendo al codigo observamos una coprehension list, que me recuerda mucho a matematicas, veamos un ejemplo:


pares = [x for x in range(10) if x%2 = 0]

la verdad, es algo asi como: * **pares es una lista (en matematicas se habla de conjuntos pero no nos compliquemos tanto), formado por f(x) = x para todo x del conjunto {0, 1, 2, 3. 4, 5, 6, 7, 8, 9} si x modulo 2 es 0. *** esta delicia matemática es tomada del haskell, un lenguaje de programación funcional puro muy extendido en el mundo academico.

luego:

# usar siempre nombres significatiovos
contactos = { 
  'name': [fake.first_name() for _ in range(n)],    
  'phone': [fake.phone_number() for _ in range(n)]
}

print(contactos)

'''
{'name': ['Nora', 'Sandra', 'Luis', 'Elver', 'Paola', 'Jesús', 'Samuel', 'Nelly', 'Álvaro', 'Marcos'], 
'phone': ['(+57)3261082100', '9273944', '(+57) 310 680 79 14', '316 089 39 06', '602 264 90 31', '+57 602 915 86 60', '6035335027', '+57 604 322 40 79', '1586324', '+573142446015']}
'''

obtenemos como resultado un diccionario con parerjas claves-listas, la clave name tiene asociado una lista de nombres, y la clave phone lleva asociada una lista de numeros telefonicos, recordemos que son datos generados al azar, pero con estilo 😎.

Ahora solo quedan dos lineas:

df = pd.DataFrame(data)

# Save the DataFrame to a .xlsx file in Google Drive
df.to_excel('/content/drive/My Drive/random_data2.xlsx', index=False,  engine='openpyxl')

la variable df es solo por convension, hace referencia a data frame, y en verdad, la variable df bien se puede llamar pepe, lo importante aca, es que dataframe es una estructura de datos muy versatil, que con muchas licencias, nos lo podemos imaginar como una tabla de una hoja de calculo cualquiera.

Luego, en la siguiente linea df.toexcel, tranformamos dicho dataframe a una hoja de excel que guardaremos en Drive y eso es todo.

Resumen

Google Coolab y Sheets son dos herramientas muy poderosas y versatiles

Pendiente

Mas de pandas y esa cosa de los data frames

Bibliográfia

  • [Faker project] (https://pypi.org/project/Faker/)

  • [faker docs] (https://faker.readthedocs.io/en/master/)