Números aleatorios en Python con Numpy

Como generar DataFrames al azar para probar algoritmos y visualizaciones

Rafael González Gouveia
Ciencia y Datos
5 min readApr 1, 2019

--

¡Hola Mundo! En esta entrada se describe el uso de 3 funciones de Numpy para generar variables pseudo-aleatorias y construir un dataframe con estos datos en Pandas. Esto puede ayudar a resolver el problema de no poder probar un modelo o visualización por falta de datos, construyendo una tabla aleatoria.

Un número aleatorio es una cantidad generada por un proceso que simula el azar, como cambiar canciones en modo “random” o “shuffle”. Estos procesos se calculan con algoritmos complejos como el Mersenne Twister o el Fisher-Yates. Los números aleatorios pueden echarnos una mano en muchas situaciones en las que queremos probar métodos nuevos.

Los números aleatorios se pueden generar en R, matlab o incluso excel. Sin embargo, en esta entrada vamos a utilizar las funciones son numpy.randint(), numpy.uniform() y numpy.choice() de Numpy en Python. Estas se usan para generar variables discretas, continuas y categóricas respectivamente.

El workflow será el siguiente:

1. Simulación > 2. Preparación > 3. Resultado

He dejado un notebook en este repo de GitHub por si quieres descargar el código y hacer tus propias pruebas.

Estoy atento a sugerencias, preguntas o comentarios y también si quieres aprender más sobre Data Science en Python, te recomiendo mirar esté video de mi canal de YouTube:

Ahora sí, empecemos.

1. Simulación

Para la simulación de los datos vamos a utilizar las funciones

  • numpy.randint() -> Docs
  • numpy.uniform() -> Docs
  • numpy.choice() -> Docs

El modulo de Numpy es el paquete fundamental para computo científico en Python. Estas funciones nos van a ayudar a simular variables discretas, continuas y categóricas de manera aleatoria.

Para generar la tabla como la de arriba necesitamos nombres de personas. Para eso, vamos al repositorio de Marc Boquet que tiene tablas en formato csv con nombres en español. Muy útil para nuestro ejercicio. Desde el repositorio podemos descargar los ficheros: Clone or download > Download ZIP.

Clone or download > Download ZIP

Una vez tenemos las tablas en la carpeta de nuestro proyecto podemos cargar las librerías necesarias y subir los datos a nuestro entorno Python corriendo el siguiente código desde nuestro jupyter notebook:

2. Preparación

Luego de tener los datos en el ambiente de trabajo, escogemos los límites para crear nuestra tabla. Podemos necesitar que la edad esté entre determinados valores o cambiar la cantidad de decimales para la altura. Esto se lo decimos a Python con el siguiente código:

Para generar la tabla, vamos a crear dos funciones. La función principal que se va a encargar de regresarnos un dataframe de pandas, que llamaremos “create_table”. La segunda función va a servir para buscar el nombre dependiendo si el género es hombre o mujer. A esta segunda función la llamamos “select_name”. El código es el siguiente:

De estas funciones quisiera resaltar dos puntos:

  • El uso de docstrings (las ``` ) para documentar la función. Es una buena práctica descrita en el PEP257, que junto con el PEP8 forman guías de estilo para Python. Sirven para escribir “bien” el código.
  • En la línea 16, se usan compresiones de listas para asignar valores a la variable “name”. Esta es una forma sencilla y “pythonista” de aplicar una función a muchos valores. También es otra forma de escribir bucles “for”.

Con estas funciones en nuestro entorno podemos crear los dataframes aleatorios.

3. Resultado

Un ejemplo de la función para 100 filas sería el siguiente:

¡Todos los datos fueron generados al azar!

Unas pruebas sencillas de visualización son los siguientes histogramas:

Histogramas de las distribuciones de los datos generados al azar

Conclusión

  • En esta entrada se mostró el potencial de Numpy y Python para simular datos al azar. Esto viene muy bien para probar algoritmos o visualizaciones.
  • Es importante estar consciente de que estos son datos prefabricados por lo que no son suplementos de datos reales para análisis. Estos datos deber ser utilizados solo con fines académicos para probar algún algoritmo o visualización.
  • En todos los casos se trabajó con una distribución “uniforme” de los datos. Esto quiere decir que la frecuencia de las observaciones es más o menos igual para cada caso. Otra opción es tomar una distribución normal o exponencial. Estas opciones se pueden explorar en la documentación de Numpy.

Espero que hayas encontrado útil este artículo. Si tienes alguna duda o sugerencia, puedes dejar un comentario.

Por si te interesa la programación en Python para ciencia de datos, he escrito otro articulo sobre modelos de series de tiempo.

Recuerda para más información de programación para ciencia de datos puedes suscribirte en YouTube:

--

--