¿Cómo puede hacer un ciudadano para participar de los debates del Congreso?, ¿Cuántas horas trabaja un legislador?, ¿Cuántos votos se necesitan para aprobar una ley? Estos temas deberían ser conocidos por todos, pero no lo son. Seguir leyendo
Simulando cuántos sobres hacen falta para llenar el álbum del mundial
Por Ernesto Mislej (Socio Fundador de 7Puentes)
Se acerca el mundial de fútbol Rusia 2018 y acompañando a este vital evento para todos los fanáticos del deporte, nos sucede otro de importancia semejante al primero: llenar el álbum de figuritas con las imágenes de nuestros ídolos. Esta edición, el álbum será de 669 figuritas y los sobres serán de 5 figuritas cada uno. Si tuviésemos toda la suerte del mundo, con 134 sobres (lo que equivale a 669 dividido 5) lo llenaríamos, pero sabemos que para eso tenemos que tener mucha suerte.
Volviendo a nuestro álbum, ¿cuántos sobres son necesarios para llenarlo? Para averiguarlo tenemos 2 maneras, acudir a la teoría estadística -cosa que no nos asusta, pero implica tener bastante conocimiento previo- o hacer una simulación con un programa de computadoras. Vamos por la segunda.
Tomamos el caso de llenar el álbum para ejemplificar cómo encarar una situación problemática desde una perspectiva formal y poder medir eficazmente los insumos y demás recursos necesarios para tomar mejores decisiones. Compartimos esta nota con ejemplos y explicaciones sobre el proceso de diseño de una solución.
Esperamos la disfruten.
Comencemos la simulación
Una simulación -según Wikipedia- es un artificio contextual que referencia la investigación de una hipótesis o un conjunto de hipótesis de trabajo utilizando modelos para la enseñanza y el aprendizaje. En nuestro caso, la simulación tendrá como objetivo medir cuántos sobres (de 5 figuritas cada uno) se necesitan para llenar un álbum de 669. Y para ello necesitaremos construir un modelo computacional que contemplen los sobres, las figuritas y el álbum.
Python
Haremos un pequeño programa en Python, un lenguaje de programación muy popular que tiene una sintaxis muy simple de entender (para quienes necesiten una ayuda extra, pueden leer estos recursos introductorios preparados por la PyAr – Comunidad Python Argentina ).
print "Cuántos sobres se necesitan para llenar el album usando Python"
Cuántos sobres se necesitan para llenar el album usando Python
El azar y la computadora
La simulación consiste en realizar numerosas corridas de un sistema estocástico, es decir, una situación que está regulada por la aleatoriedad o la suerte, como nuestro caso de ir abriendo sobres de figuritas sin saber de ante mano cuales son las que te van a tocar. Necesitaremos entonces alguna forma que simular el contenido de los sobres de manera azarosa utilizando nuestro modelo computacional. Y eso es todo un tema, porque las computadoras no saben de azar: justamente, son aparatos guiados por el determinismo de los ceros y unos.
Pero no desesperemos, este tema ha sido tratado desde hace mucho tiempo y Python implementa un módulo de generación de números pseudo-aleatorios, que a los efectos de nuestra simulación nos alcanza de sobra.
import random #la funcion randint(a, b) devuelve un numero entero pseudo-aleatorio N talque #a <= N <= b. dado = random.randint(1, 6) print dado
2
Para modelar el sobre de figuritas utilizaremos la funcion sample(seq, k)
, que toma k
elementos de la secuencia seq
; en nuestro caso 5 números del intervalo [0, 660). La forma de extraer los números es sin reposición, es decir, los sobres estarán compuestos por figuritas no repetidas.
#para modelar el sobre utilizaremos la funcion sample. sobre = random.sample(xrange(669), 5) print sobre
[586, 414, 255, 474, 12]
Otras librerías
Para esta simulación vamos a incluir otras 2 librerías muy utilizadas en análisis de datos:
- NumPy para el manejo de estructuras de datos eficiente (listas o vectores).
- Matplotlib para realizar las gráficas.
import numpy as np import matplotlib.pyplot as plt
Seteamos las constantes de la simulación, en nuestro caso las FIGURITAS_POR_PAQUETE
, las FIGURITAS_POR_ALBUM
y la CANTIDAD_DE_CORRIDAS
que tendrá nuestra simulación.
Cuántas más corridas hagamos, más preciso será nuestro resultado, pero también más costoso computacionalmente será. Unas 10000 corridas está OK, y la simulación tardará unos 5-10 minutos.
#las constantes de la simulacion FIGURITAS_POR_PAQUETE = 5 FIGURITAS_POR_ALBUM = 669 CANTIDAD_DE_CORRIDAS = 1000
Iremos registrando cuántos sobres serán necesarios en cada corrida.
#inicializo el vector simulacion #alli voy a ir registrando cuantos sobres necesito en cada corrida simulacion = np.empty(CANTIDAD_DE_CORRIDAS)
Ciclo principal de la simulación
El siguiente bloque es el ciclo principal de la simulación. Cuántas más corridas hacemos, más preciso será nuestra estimación.
#voy a realizar tantas corridas como dice la constante CANTIDAD_DE_CORRIDAS for i in xrange(CANTIDAD_DE_CORRIDAS): #modelo el album vacio como un vector lleno de ceros album = np.zeros(FIGURITAS_POR_ALBUM, dtype=int) #en esta variable contabilizare cuantos sobres se necesitan cantidad_de_sobres = 0 #voy abriendo sobres nuevos hasta llenar el album #si el vector contiene algun 0 en alguna posicion significa #que aun no esta completo esa condicion la podemos expresar de muchas #formas la que elegi es min(album) == 0, #tambien podria ser len( album [ album == 0 ] ) > 0 while min(album) == 0: #un nuevo sobre formado por figuritas tomadas de manera aleatoria sobre = random.sample(xrange(FIGURITAS_POR_ALBUM), FIGURITAS_POR_PAQUETE) #voy llenando el album #sumo 1 en cada posicion correspondiente a cada una de las figuritas #del sobre # #Nota: para quienes conocen otros lenguajes de programacion, esta #operacion puede llegar a causar confusion. La libreria NumPy permite #realizar operaciones sobre multiples indices a la vez. #Aprovechenla, es muy util. album[sobre] += 1 #incremento la cantidad de sobres en 1 cantidad_de_sobres += 1 #para llenar este album he necesitado tantos sobres como #lo dice cantidad_de_sobres simulacion[i] = cantidad_de_sobres
Presentación visual de los resultados
Luego de finalizar las corridas, tenemos muchos resultados. Presentaremos la información de una manera visual utilizando un histograma.
#cuantos sobres necesitamos en promedio para llenar el album sobres_promedio = simulacion.mean() #visualizamos la simulacion con un histograma de las corridas plt.hist(simulacion, bins=50) plt.axvline(sobres_promedio, color='r') plt.legend(["%.2f sobres" % sobres_promedio]) plt.title("Cantidad de sobres en promedio para llenar 1 album") plt.show()
Llenar el álbum costará…
Por su condición de experimentos aleatorios, las simulaciones darán resultados levemente distintos, pero sí podemos ver que para llenar el álbum se necesitarán aproximadamente 941 sobres. A $15 por sobre, llenar el álbum de esta manera costará… ¡un ojo de la cara!
print "Llenar el album costará... %2.f pesos. Y qué hago con las %d repetidas!" % (sobres_promedio * 15, sobres_promedio * FIGURITAS_POR_PAQUETE - FIGURITAS_POR_ALBUM)
Llenar el album costará... 14085 pesos. Y qué hago con las 4026 repetidas!
…más el costo de álbum en sí, que ya a esta altura parecen monedas.
Con amigos todo es mejor
Como vimos, para llenar un álbum de 669 figuritas necesitaremos aproximadamente 341 sobres y nos sobrarán 4000 figuritas repetidas. Con tantas repetidas estamos muy cerca de llenar un 2º y 3º álbum; y las que nos sobran las podemos cambiar con algún otro amigo que las necesite. Sin duda si nos juntamos con otros amigos, llenar todos los álbumes es mucho más rápido, barato y divertido.
Cuánto costará llenar n álbumes
Démosle una vuelta al problema y pensemos cuántos sobres son necesarios para llenar n álbumes.
Agreguemos la constante CANTIDAD_DE_ALBUMES
#pensemos un grupo de 20 amigos que se juntan para llenar cada uno su album CANTIDAD_DE_ALBUMES = 20
El vector simulación ahora registrará cuántos sobres se necesitan para llenar 1, 2, 3, … , 20 álbums. Ésto lo haremos con un vector de 2 dimensiones (cuando el vector tiene 2 dimensiones suele llamarse matriz, aunque cuando tiene 3 dimensiones o más, vuelve a llamarse vector, cosas que pasan…).
#inicializo el vector simulacion_grupo con 2 dimensiones simulacion_grupo = np.zeros([CANTIDAD_DE_ALBUMES+1, CANTIDAD_DE_CORRIDAS], dtype=int)
Ciclo principal de la simulación de grupo
Con algunas pocos agregados podemos calcular cuántos sobres se necesitan para llenar n álbums
#voy a realizar muchas corridas, tantas como dice la constante CANTIDAD_DE_CORRIDAS for i in xrange(CANTIDAD_DE_CORRIDAS): #modelo el album vacio como un vector lleno de ceros album = np.zeros(FIGURITAS_POR_ALBUM, dtype=int) #en esta variable contabilizare cuantos sobres se necesitan para llenar 1..n albumes cantidad_de_sobres = 0 #aqui voy a contabilizar cuando albumes estan llenos albumes_llenos = 0 #a diferencia de la simulacion anterior, la condicion de corte sera cuando se #llenen los n albumes. Eso lo podemos expresar asi: #albumes_llenos < CANTIDAD_DE_ALBUMES while albumes_llenos < CANTIDAD_DE_ALBUMES: #un nuevo sobre formado por figuritas tomadas de manera aleatoria sobre = random.sample(xrange(FIGURITAS_POR_ALBUM), FIGURITAS_POR_PAQUETE) #voy llenando los albumes album[sobre] += 1 #incremento la cantidad de sobres en 1 cantidad_de_sobres += 1 #si el min(album) se incremento, significa que se ha llenado un nuevo album. if albumes_llenos < min(album): #hemos llenado un album nuevo albumes_llenos = min(album) #registramos la cantidad de sobres simulacion_grupo[albumes_llenos, i] = cantidad_de_sobres
Presentación visual de la simulación de grupos de amigos
Ya recopilamos los resultados de muchas corridas, veamos qué tal nos fue para llenar n álbums.
#cuantos sobres necesitamos en promedio para llenar n-albumes #usamos una matriz de histogramas amigos = [2, 5, 10, 20] fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True, sharex=True) for ax, q in zip(axes.flat, amigos): simulacion = simulacion_grupo[q]/q sobres_promedio = simulacion.mean() ax.set_title('$albumes=%d $' % (q)) ax.hist(simulacion, bins=50) ax.axvline(sobres_promedio, color='r') ax.legend(["%.2f sobres" % sobres_promedio]) fig.suptitle("Cantidad de sobres en promedio para llenar $n$ albumes") plt.show()
Algo que suponíamos: cuántos más amigos tenemos, la cantidad de sobres por integrante del grupo para llenar su álbum disminuye. Y se acerca a la cantidad óptima de (FIGURITAS_POR_ALBUM
/ FIGURITAS_POR_PAQUETE
). No hace falta tener mucha suerte, sino muchos amigos. (Aunque tener muchos amigos es ser muy afortunado).
#Otra forma de visualizar la cantidad promedio de sobres para llenar n-albumes plt.boxplot([simulacion_grupo[i]/i for i in xrange(1,CANTIDAD_DE_ALBUMES+1)]) plt.title("Cantidad de sobres para llenar $n$ albumes") plt.show()
Conclusiones
Como pudimos ver, para llenar un álbum necesitaremos aproximadamente 941 sobres; pero para llenar 20 álbumes, se necesitan un poco más de 4940 sobres, lo que nos da 247 sobres por integrante. Muchísimo menos.
print "Llenar %d albumes costara... %2.f pesos por integrante. Que bueno es tener amigos!" % (CANTIDAD_DE_ALBUMES, (simulacion_grupo[CANTIDAD_DE_ALBUMES]/CANTIDAD_DE_ALBUMES).mean() * 15)
Llenar 20 albumes costara... 3704 pesos por integrante. Que bueno es tener amigos!
Gracias por la atención y ¡vamos Argentina!
Observatorio Argentinos por la Educación
Se lanzó oficialmente el Observatorio Argentinos por la Educación cuya misión es contribuir a que la educación sea determinante en el debate público a través de datos que permitan enfocarla en los desafíos del siglo XXI.
El Observatorio es una plataforma interactiva de datos que permite combinar indicadores para visibilizar el estado y la evolución del sistema educativo argentino. En su lanzamiento cuenta con más de 60 millones de registros (datos oficiales) entre los años 2011 y 2016.
.
Recursos Humanos: Cargos docentes, Cantidad de horas cátedra, Alumnos por cargo docente
Recursos Físicos y Financieros: Unidades de servicio, Secciones (grados), Alumnos por sección, Gasto según objeto, Gasto según nivel educativo, Gasto según fuente de financiamiento nacional, Gasto por alumno
Resultados: ONE-Aprender
Demostración en video
A continuación sumamos dos videos donde Ignacio Ibarzabal – Director Ejecutivo- y Víctor Volman – Director Técnico- navegan en vivo y muestran en forma didáctica las posibilidades de la plataforma que incluye datos abiertos, visualizaciones interactivas y columnas de opinión de más de 30 expertos locales en educación.
Nota Relacionada:
“Argentinos por la Educación, la ONG lanzó un “Indec” de la enseñanza” por María Elena Polak
WiDS – Presentaciones 3
I. Panel “Ciencia y Datos”
Luciana Ferrer, Cecilia Galarza, Constanza Viere, María José Compte (moderadora)
II. Panel “Mujeres, Tecnología y Capacitación”
Ana Inés Basco – Ana Bruchmann – Andrea Coco – Florencia Sabatini (moderadora)
III. Tech Talk: Análisis de datos y modelado numérico en la Industria Petrolera
Por Gabriela Savioli
Acceder a la presentación
IV. Tech Talk: Inteligencia Artificial para Data Science
Por Paula Horita
Acceder a la presentación
WiDS – Presentaciones 2
I. Tech Talk: Inteligencia Computacional
Acceder a la la presentación
.
II. Tech Talk: Previniendo con Big Data: La Genómica al servicio de la Salud
Por Lucía Subatín
III. Tech Talk: La tendencia de la demanda global de Data Science para el mercado financiero: Una oportunidad para Argentina.
Por Victoria Yasinetskaya
Acceder a la presentación
IV. Tech Talk: Data Science aplicado a la segmentación de perfiles de clientes
Por Manuela Basílico
Acceder a la presentación
WiDS – Presentaciones
I. Presentación: ¿Qué es Machine Learning?
Por Marcela Riccillo
II. Presentación: Datos: una transformación en el modo de hacer política pública.
Acceder a la presentación
III. Presentación: Periodismo de Datos para el Cambio
Por Gabriela Bouret / Momi Peralta Ramos
Acceder a la presentación
IV. Presentación: Cambiar formatos, abrir el juego: del papel a los datos
Por Ana María Bernal / Yanina Díaz
Los seguros de vida de los tripulantes del ARA San Juan
Luego de la desaparición del ARA San Juan, en LA NACION Data comenzamos a investigar las compras realizadas por Armada Argentina para el mantenimiento del submarino. Luego, y sin una hipótesis específica como punto de partida, nos preocupamos por entender el contexto general y más amplio vinculado a la desaparición del submarino. A medida que nos adentramos en el tema indagamos sobre el funcionamiento del Operativo de Búsqueda y Rescate (SAR) y la ayuda brindada por otros países. Sin embargo nos preguntamos qué parte de todo el sistema no estábamos viendo, qué elementos se nos estaban perdiendo de vista. Así fue como decidimos hacer una solicitud de acceso a la información para conocer por los seguros de vida de los tripulantes. El pedido se realizó el 6 de diciembre de 2017 al Ministerio de Defensa. La solicitud incluyó un gran número de consultas. El organismo empezó a entregar las respuestas espaciadamente a medida que las instituciones internas entregaban los documentos. Finalmente, el 31 de enero de 2018 recibimos la información de los seguros de vida de los tripulantes. De las 44 personas a bordo del ARA San Juan, las familias de 32 marineros recibieron menos de 50.000 argentinos (2.500 dólares aproximadamente). Seguir leyendo
Cómo abrimos las pensiones de los ex funcionarios
El equipo de LA NACION Data explora diariamente bases de datos gubernamentales y gran volumen de documentos públicos aparentemente “perdidos” en la legislación argentina. Esta tarea permite detectar no solo nuevas fuentes de información, sino también datos que se convierten en importantes insumos de historias nunca antes contadas.
¿Pueden los datos ayudarnos a combatir la violencia de género?
Por Silvana Fumega
El martes 13 de marzo, invitados por la Embajada de Canadá en la Argentina, presentamos los avances de nuestro programa de Género, Datos y Seguridad, que cuenta con el apoyo del Centro Internacional de Investigación para el Desarrollo (IDRC) y Fundación Avina.
Ben Petrazzini (IDRC)
Fuente: Embajada de Canadá en la Argentina
La violencia contra el género femenino es un grave problema en América Latina. Según datos recogidos inicialmente por la CEPAL, en 2014, al menos 12 mujeres mueren diariamente en la región en un incidente relacionado con su género. De todos modos, si bien este ha sido un muy buen ejercicio, los datos se encuentran desactualizados y en muchos casos, incompletos.
Como menciona el mismo informe de la CEPAL necesitamos mejores herramientas para la recolección de datos. Aunque es de suma importancia contar con esos datos, su recolección y publicación no es una tarea sencilla. Más allá de la falta de datos completos, oportunos y abiertos, la opinión pública a nivel regional es clara: se demandan nuevas soluciones.
Silvana Fumega (ILDA)
Fuente: Embajada de Canadá en la Argentina
Proyecto
Desde comienzos de 2017 en ILDA (Iniciativa Latinoamericana de Datos Abiertos) estamos trabajando en el mencionado programa de Género, Datos y Seguridad.
En particular nos orientamos a dos ejes de trabajo:
• Explorar el uso de herramientas de tecnología cívica que, potencialmente, puedan ayudar a prevenir fenómenos de violencia de género
• Estandarización de datos sobre femicidios en América Latina
En la mañana del 13 de marzo no solo presentamos el programa sino que, en particular, anunciamos el primer piloto de implementación del estándar de datos de femicidios que se realizará en Argentina, en colaboración con el Ministerio de Justicia y Derechos Humanos de la Nación, en los próximos meses.
Sandra Elena (Ministerio de Justicia y Derechos Humanos)
Fuente: Embajada de Canadá en la Argentina
El camino
Luego de una reunión preparatoria en el mes de abril de 2017 en México con unos pocos expertos en el tema de género como así también de tecnología cívica, reafirmamos la importancia de la agenda y decidimos que necesitábamos más actores que cubrieran los diferentes aspectos que un tema tan complejo conlleva. Seguir leyendo
Open Data Day en Buenos Aires: el resumen de la jornada
El Open Data Day es una fecha especial para la comunidad de usuarios, generadores y analistas de datos abiertos de alcance global. Este año se celebró el sábado 3 de marzo con más de 350 encuentros locales alrededor del mundo para intercambiar ideas, buenas prácticas y promover el desarrollo de tecnología cívica. Además de alentar a los ciudadanos a que se involucren y participen para que los gobiernos mejoren sus políticas de transparencia. Y por todo eso, ¡no quisimos quedarnos afuera! Seguir leyendo