Las más toneras de Radio Inspiración

El último reportaje de la saga #intervenganAPDAYC se está transmitiendo desde el Congreso del República (30-Oct-2013). Además el útero de marita acaba de publicar una base de datos interactiva con toda la repartición de las regalías que cobró APDAYC durante el 2012. También hay una hoja de ruta para intervenir APDAYC.

Es ya conocido que Radio Inspiración maneja muchas radios vía la Fundación Autor que está ligada a APDAYC. Esta cadena de radios pasa muchas canciones y queríamos averiguar si hay algún patrón interesante en aquellas canciones que son más difundidas y repetidas en su programación. Por ejemplo, qué canciones tienen como autores a los directivos de APDAYC?, cuáles pertenecen al catálogo de las empresas que están íntimamente relacionadas con APDAYC? (E.T. Music?, IEPMSA?)

Para eso hice una acumulación y tabulación de los datos de las canciones más toneras de Radio Inspiración (aquí están los rankings). La resolución de las imágenes era mínima y no se pudo hacer OCR. Entonces tuve que tipear las canciones una por una. Felizmente no eran muchas.

Luego era cuestión de juntar toda la información en un sólo archivo y hacer el plot usando funciones estadísticas del lenguaje de programación Python.

Canciones de Radio Inspiración del top10 que son más frecuentes.

Canciones de Radio Inspiración del top10 que son más frecuentes.

Canciones de Radio Inspiración que son más frecuentes en el top20

Canciones de Radio Inspiración que son más frecuentes en el top20

Sería interesante averiguar quiénes son los autores de esas canciones top-10. En teoría se podría ver cuáles son las canciones que pertenecen a cada autor y compositor registrado en APDAYC. Pero creo que eso es pedir demasiada transparencia.

Sección geek

Aquí el código para dibujar el gráfico:

Previa limpieza de datos:

cat all_data.csv | awk -F ',' '{print $2}' | sort | uniq -c | sort -hr | sed 's/^\s\+//g' | grep -v '1 ' | sed -r 's/^([0-9]+)\s+/\1,/g' > tmp

Aquí los datos:

Se debe eliminar Qali Warma?

Hay muchos niños que han caído enfermos por comer productos del programa Qali Warma. Entonces la situación es tan grave que se debe eliminar el programa del todo? Qué dicen los datos duros?

Para comenzar hay que recopilar los datos. Por ejemplo usando la etiqueta Qali Warma, se pueden listar todas las noticias aparecidas en El Comercio desde Mayo del 2012 donde se anunció la creación del programa:

http://elcomercio.pe/tag/370678/qali-warma

Y se puede extraer el número de niños intoxicados por fechas. Para complementar los datos se puede buscar en Google noticias adicionales de intoxicados que no hayan aparecido en El Comercio. En un editorial de El Comercio se menciona 400 niños intoxicados pero no hay ningún enlace hacia los datos. He hecho una recopilación rápida con las notas de prensa de intoxicaciones a lo largo del año y solo pude contar 321 niños intoxicados. Aquí verán la información por lugar, fecha, número de niños afectados y enlace a la nota de prensa.

El número total de niños que atiende Qali Warma es 3.5 millones según Rosa María Palacios.

Para hacer una infografía usando círculos, podemos dibujar el tamaño (área) del círculo de tal manera que esté en función del número de niños intoxicados y no intoxicados. Por ejemplo:

Número total de niños intoxicados: 321

Si el área del círculo es \pi*r^2 (pi por el radio elevado al cuadrado), osea 321, cuánto debe ser el valor del radio?

r = \sqrt{(321/\pi)} = 10.11\text{ unidades}

Número total de niños muertos: 0

r = \sqrt{(0/\pi)} = 0

Número total de niños no intoxicados: 3.5 millones menos 321

r = \sqrt{((3'500,000-321)/\pi)} = 1870.8\text{ unidades}

Ya tenemos los valores del radio y podemos dibujar las circunferencias en la misma escala:

 Intoxicados por comer Qali Warma en perspectiva

Intoxicados por comer Qali Warma en perspectiva

Debería anularse Qali Warma? Bueno, los datos en esta infografía hablan solos.

No hacer mal uso de las estadísticas para atacar Qali Warma

El programa de alimentación a niños en edad escolar ha sido atacado estas últimas semanas. Uno de los ataques principales viene de un estudio académico de un profesor de Economía de la Universidad de Pacífico. Se pueden bajar el reporte de aquí: http://srvnetappseg.up.edu.pe/siswebciup/Files/DD1307%20-%20Vasquez.pdf

Estuve mirando rápidamente el reporte en cuestión y vi que una de las críticas se basa en una mala interpretación de al menos uno de los análisis estadísticos.

En la página 93 dice:

El Gráfico 50 muestra los resultados obtenidos para el caso de los escolares. En este caso se comparó el gasto presupuestado por escolar contra el porcentaje de niños entre 6 y 11 años que viven en hogares con déficit calórico, información basada en los resultados del IPM. Este muestra resultados preocupantes, a diferencia del caso para preescolares: se observa una relación negativa entre ambas variables. Esto quiere decir que el presupuesto por escolar no está distribuido equitativamente, pues es mayor en los departamentos con menor déficit calórico.

Este es el gráfico 50:

grafico_50

Rehaciendo el análisis

Al ojo se ve que no hay relación entre las variables. Copié los datos que están en la tabla 31 (de la página 123) y ajusté una regresión lineal en el programa estadístico R.

Mira los puntos todos aglomerados al centro. No dejes que la línea de tendencia te engañe. El coeficiente de determinación R2 es casi cero (0.04) y el p-value no es significativo ( p > 0.05).

Tarán! los resultados dicen que NO hay correlación entre las variables y que las conclusiones del autor de líneas arriba están erradas. NO es cierto que los datos indiquen que se gaste menos dinero en áreas con mayor deficiencia calórica.

plot_50_reloaded

Si hubiera una correlación entre dos variables, osea una relación entre gasto y nivel de deficiencia calórica, deberíamos de tener un gráfico así. Mira los puntos distribuidos a lo largo de la línea de tendencia, no están aglomerados!:

Ejemplo de correlación significativa

Ejemplo de correlación significativa

Hay obvia correlación, a mayor valor de x, menor valor de y. Además los valores de R2 y p-value son: R2 = 0.82, p = 0.0002. El coeficiente R2 es cercano a 1, y el p-value es mucho menor que 0.05. Osea altamente significativo.

Pero los valores que salen de analizar los datos del estudio académico son los siguientes:

R2 = 0.04 (es casi cero, si fuera cercano a 1 sabes que hay correlación. Pero en este caso no tiene nada!)

p = 0.157 (es mayor que 0.05, osea datos no significativos).

Ya ves chocherita, no hay tendencia, no hay correlación, no hay causación. Señores, no tiene nada!

Pero hay más

El autor del estudio académico da como ejemplo (pag. 93) que en Puno (con alto déficit calórico) se gasta menos por niño que en Lima. Pero este es un dato anecdótico. Ya pe causa! Estudios académicos no se basan en datos anecdóticos. Además si tú criticas que la política de Qali Warma está mal, debes demostrar que en su conjunto se está gastando menos dinero donde más se necesita. Pero lamentablemente los datos y estadísticas duras refutan tus conclusiones. En este punto en particular la política será desordenada, o sin ningún patrón o tendencia, pero no es lo que afirmas pe varón.

Ya otras personas han criticado este dichoso trabajo, @rmapalacios, la ministra Mónica Rubio, y Diario16.

Actualización 22-Oct. Otro error

El señor Pepe Botella, en un comentario a este post, me avisa que él ha encontrado otro ejemplo de uso y abuso de las estadísticas en el mentado reporte académico que la prensa usa para atacar a Qali Warma.

Quiero pensar que este ha sido un error de mal uso de estadísticas, aunque el asunto se vuelve un poco rochoso.

En la página 36 empieza un floro donde el autor manifiesta que Qali Warma gasta menos dinero en los más pobres (“pobres multidimensionales”).

…la poca atención que reciben los pobres multidimensionales en términos de cobertura de servicios básicos genera una fuente de ineficacia en cuanto a la distribución del gasto público

La distribución departamental del gasto social está mal enfocada pues existen departamentos con un alto nivel de pobreza multidimensional que reciben un gasto social por debajo del promedio nacional

Osea la hipótesis es hay menor gasto en departamentos con mayor porcentaje de pobreza. Esto se debería demostrar con otra regresión lineal de ajuste significativo a la línea de tendencia. Y eso es lo que prentende hacer el autor al mostrar un gráfico muy colorido:

Regresión lineal con cuadrantes blancos y rosados. Qué hacen los cuadrantes allí?

Regresión lineal con cuadrantes blancos y rosados. Qué hacen los cuadrantes allí?

Los datos están en la Tabla 4 del informe (página 37). Bajé los datos, hice el plot y calculé el coeficiente de determinación y el valor del p-value para ver si hay o no hay correlación entre las variables gasto y nivel de pobreza.

Gráfico sin los cuadrantes que estorban.

Gráfico sin los cuadrantes que estorban.

Y creo que ya te diste cuenta que NO hay relación entre las dos variables! Mira pé:

R2 = 0.02 (si hubiera correlación este debería ser cercano a 1)
p = 0.43 (si hubiera correlación este debería ser menor que 0.05)

El mismo error!

Pero aquí viene lo penoso. Qué michi hacen esos cuadrantes en tu gráfico? Primera vez en mi vida que los veo en un análisis de regresión. Los cuadrantes se usan en análisis canónico! ca-no-nico!

Si quieres demostrar algo categóricamente debes aplicar las estadísticas relevantes y que sean las más simples. Si quieres comparar 2 variables, haces regresión lineal (o ajustas una distribución exponencial, logarítmica, etc). Si quieres explicar el comportamiento de tus datos según múltiples variables haces un análisis de correspondencia canónico o similar.

No quiero pensar que estas tratanto de estirar los datos. Los desconfiados van a pensar que quieres estirar las estadísticas, forzándolas para que falsamente den soporte al resultado que quieres obtener. Debes tener cuidado chochera.

Sobre todo, causa desconfianza cuando, de todos los puntos de tu gráfico, escoges algunos, los que te conviene usar para criticar Qali Warma. Esos son datos anecdóticos. Otro broder podría escoger solo los puntos que dan una conclusión contraria y discutir ampliamente que Qali Warma hace un excelente gasto del dinero.

Para evitar esas subjetividades se hacen regresiones lineales, cálculos de coeficientes y tests de significancia (p-value). Cosa que tu informe aparenta hacer, pero no lo hace. Presentas tablas y gráficos pero haces cherry picking para la discusión! Además, ta que no he visto ninguna mención al R2 o al p-value en tu informe.

Sección geek

Aquí está los dos análisis estadísticos, el de ejemplo y el que rehice con los datos del informe del señor de la Universidad del Pacífico.

Aquí los datos originales usados en el reporte académico, tomado de su tabla 31.

Aquí los datos originales de la tabla 4

Tuitbot para enfrentar trolls

Parece que hay un troll en tuiter que me escribe cada vez que menciono los #narcoindultos. Este troll es aprista y le gusta alabar a los principales líderes del APRA (ya sea por tuiter, o comentando en artículos de la revista Caretas).

Como contestar a los trolls da un poco de flojera, decidí fabricar un bot que lo haga por mí. Este bot es un programa muy simple, escrito en Python, que responde a aquellos que deciden trolear mi cuenta de tuiter @AniversarioPeru.

Para esto modifiqué un muy simple chat-bot que encontré aquí: http://pythonism.wordpress.com/2010/04/18/a-simple-chatbot-in-python/.

Este bot necesita ser entrenado, osea hay que hacerlo “leer” unos cuantos libros para que sepa qué responder a los trolls.

Decidí hacer mi bot picaresco pero inteligente. Entonces le hice leer las Tradiciones Peruanas de don Ricardo Palma (se bajan el libro de aquí).

Podría hacer otro bot que tenga lenguaje un poco achorado. Para eso, su entrenamiento consistiría en hacerlo leer las columnas antiguas del malapalabrero.

En resumen, este bot busca si algún troll ha empezado a fastidiar por tuiter. Si esto es cierto, responderá al troll con frases sacadas de las Tradiciones Peruanas. Este bot es muy simple y las respuestas no tienen relación con lo que haya escrito el troll. Incluso, las respuestas no tienen mucho sentido. Supongo que será suficiente para que el troll se canse de fastidiar.

Lo bueno de tener un tuitbot es que interactuaría con los trolls mientras yo estoy durmiendo, en la discoteca o de vacaciones. El bot se activa cada media hora, pero si la cantidad de trolls aumenta, podría activarse cada 10 minutos.

Tengo planes de ir mejorando poco a poco este bot. Por ahora usa una aproximación a la cadena Márkov para construir su respuesta. Por ejemplo podría emplear estadísticas Bayesianas para entrenar el bot. Lo podría entrenar para que emita saludos, preguntas, afirmaciones, despedidas, insultos etc. El bot podría usar una aproximación bayesiana para darse cuenta si el troll ha emitido una pregunta, o un insulto y responder como amerite.

La ventaja de la inferencia Bayesiana es que al analizar las palabras de un tuit, puede ir aumentando o disminuyendo la probabilidad que el tuit sea —por ejemplo— saludo o insulto. Asumamos que un tuit tenga las palabras “caviar + rojo” hay probabilidad que el troll esté insultando. Si además el tuit contiene signos de interrogación repetidos, existe alta probabilidad que este tuit sea un insulto. Los estadísticos bayesianos llaman a esto último “probabilidad posterior”.

Idealmente el bot analizaría cada tuit y decidiría qué responder si la probabilidad posterior indica que he sido insultado. Tendría que hacer que mi bot se entrene leyendo los tuits que le endilgan los trolls a @rmapalacios.

Aquí hay un ejemplo de cómo sería una interacción entre un troll y mi tuitbot actual (en rojo las respuestas del bot).

>ola k ase
de Lima títere que el refrán: más allá esas calles. de su límite, de cucarachas. de la tía carnal; estas palabras:
>Que triste tu vida                               
esposa. de una vaca, de asiento, de la guitarra. de oro, de que le da colores--palabras que le sucede un tanto como hacemos
>mermelada que defiendes!!!                                                  
el reinado de la mazamorra, de grave en una mujer del rey. de nuestras abuelas eran una formidable invasión de plano.
>arriba alianza!
de la jerga franciscana. de la Monclova y el guardián del mando, de recibido varios de los jesuítas.
>matemáticamente podemos clasificar al mundial
de 1796 se plantaron en el Callao constituyó en su lado, de 1746, de aquel oportuno encarcelar, de una soberana paliza

Sección geek

Aqui les dejo el código completo del tuitbot. Requiere haber instalado un cliente de tuiter que se pueda usar desde una consola de comandos. En un post anterior detallé como usar el cliente llamado “t”.

También requiere tener instalado Python. Y configurar el programa cron para que este tuitbot se active cada 30 minutos en búsqueda de tuits emitido por trolls (en este post explico como configurar cron).

Una vez que un troll es identificado, es necesario incluir el nombre de usuario en la lista de trolls para que el tuitbot sepa a quién dirigir su verbo florido.

Este es el programa que sirve para entrenar al bot. Se puede usar cualquier texto (de preferencia uno o más libros).

Este es el programa que se encarga de recibir un mensaje y responder.

Este es el tuitbot que se encarga de leer lo que emiten los trolls y responderles via tuiter.

Guía práctica para hackear las páginas del Congreso

Según Wikipedia, un hacker es:

“A person who enjoys exploring the details of programmable systems and stretching their capabilities, as opposed to most users, who prefer to learn only the minimum necessary.”

Algunos creen equivocadamente que hacker = malechor, delincuente. Pero lo cierto es que hay varios tipos de hackers.

  • Aquel que infringe medidas de seguridad con fines maléficos, también se le conoce como “cracker”.
  • Un miembro de la comunidad Unix de programas de computación libre y “open source”, o alguien que usa este principio para desarrollo de software o hardware.

Además individuos considerados como hackers de la subcultura de programadores pueden hacer tareas repititivas de 100 a 1,000 veces más rapido que usuarios que no son hackers (gracias a que usan de técnicas de computación avanzadas).

El congreso peruano ha aprobado una ley de delitos informáticos recontra ridícula que ha sido criticada por muchos, por ejemplo en el blog http://iriartelaw.com y http://www.hiperderecho.org, además de ser considerada una ley Frankenstein. Esto evidencia que el congreso legisla sobre temas que desconoce.

Para demostrar qué tan mal redactada está la ley ex-beingolea. He decidido hackear las páginas web del Congreso de la República. Y aquí detallo el procedimiento.

Quiero hacer uso de programas informáticos para averiguar cúantos proyectos de ley ha propuesto cada congresista durante este año 2013.

Hay que buscar la página web del congreso que tiene la lista de los proyectos de ley emitidos este año:

Buscar la página con los proyectos de ley.

Buscar la página con los proyectos de ley.

Listado de proyectos de ley por fecha.

Listado de proyectos de ley por fecha.

Si vemos el código original HTML de esa página (hacer CTRL-U, si están en Mozilla Firefox) veremos que está compuesta de 4 “frames”. Cada “frame” corresponde a una parte de la página. Me interesa el último “frame”, el que contiene la lista de links a los proyectos de ley.

Código HTML de la página del congreso

Código HTML de la página del congreso

Si hacemos click al último “frame” nos encontramos con esta página:

"Frame" conteniendo la lista de proyectos de ley.

“Frame” conteniendo la lista de proyectos de ley.

Esta página lista 100 proyectos de ley, y al ver la dirección URL de esta página, nos damos cuenta que basta con cambiar el último parámetro Start=1 por Start=100 para obtener los siguientes 100 proyectos de ley.

Osea cambiar:

http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2011.nsf/PAporNumeroInverso?OpenView&Start=1

por:

http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2011.nsf/PAporNumeroInverso?OpenView&Start=100

Puedo escribir un hack (osea script) que me colecte rápidamente todas las páginas que contienen los links. En lugar de bajarme documento por documento (lo cual me tomaría muuuuucho tiempo), lo puedo hacer al toque si hago uso de las tecnologías de información y comunicación que tanto miedo causa a los congresistas:

Hay 812 proyectos de ley para examinar. Necesitamos descargar cada proyecto de ley y copiar la lista de autores para contar cuántos proyectos ha sido emitido por cada congresista. Obviamente hacer esto manualmente me demoraría una eternidad. Para eso he creado un segundo hack. Es un script in Python que examina cada link, y extrae los nombres de los congresistas que son autores de cada proyecto de ley. Junta todos los nombres y hace un gráfico para poder visualizar los datos (el código de programación está al final de este post).

Bueno, el script estaba demorando mucho, me cansé de esperar y cancelé el programa por lo que no pude colectar toda la info. Pero la idea se entiende no?

Número de proyectos de ley presentado por cada congresista durante el 2013

Número de proyectos de ley presentado por cada congresista durante el 2013

Aquí se pueden descargar la dichosa ley http://www.hiperderecho.org/wp-content/uploads/2013/09/nuevaleybeingolea.pdf.

Hagamos recuento de las veces que he faltado a la ley:

Artículo 3. Atentado a la integridad de datos informáticos

El que, a través de las tecnologias de la información o de la comunicación, introduce,
borra, deteriora, altera, suprime o hace inaccesibles datos informáticos
, será reprimido
con pena privativa de libertad

-> Al escribir este post he introducido datos informáticos al servidor de WordPress usando tecnologías de la comunicación.

Articulo 6. Tráfico ilegal de datos

El que, crea, ingresa, o utiliza indebidamente una base de datos sobre una persona natural o jurídica, identificada o identificable, para comercializar; traficar, vender, promover, favorecer o facilitar información relativa a cualquier ámbito de la esfera personal, familiar, patrimonial, laboral, financiera u otro de naturaleza análoga, creando o no perjuicio, será reprimido con pena privativa de libertad no menor de tres ni mayor de cincó años.

-> Al bajarme la lista de proyectos de Ley del Congreso he ingresado a su base de datos para facilitar la información relativa al ámbito laboral de cada congresista sin crear perjuicio (ojo que no es necesario causar perjuicio para ir en contra de la ley).

Artículo 1O. Abuso de mecanismos y dispositivos informáticos

El que fabrica, diseña, desarrolla, vende, facilita, distribuye, importa u obtiene para su utilización, uno o más mecanismos, programas informáticos, dispositivos, contraseñas, códigos de acceso o cualquier otro dato informático, específicamente diseñados para la comisión de los delitos previstos en la presente Ley, o el que ofrece o presta servicio que contribuya a ese propósito, será reprimido con pena privativa de libertad no menor de uno
ni mayor de cuatro años y con treinta a noventa días-multa.

-> En este post publico el programa informático que he fabricado, diseñado y desarrollado con el fin de específicamente incumplir los artículos 3 y 6 de la presente Ley.

Conclusión

He violado la ley de delitos informáticos (ley ex-beingolea) 3 veces

Señores congresistas métanme preso. Quiero cárcel dorada como Antauro y Fujimori. Gracias.

Sección para geeks

Aqui está el código para bajarse los nombres de los congresistas que fueron autores de proyectos de ley durante el 2013:

Y aquí el código para plotear los datos:

Los que cobraron más: APDAYC 2012

El útero de marita está emitiendo informes diarios acerca de los manejos del dinero que realiza APDAYC en nombre de los compositores y escritores de música del Perú.

Marco Sifuentes escribió en Facebook que requiere ayuda para poder asimilar mejor todos los destapes que está posteando en su blog utero.pe (junto con Jonathan Castro).

Con ánimos de ayudar a la causa (#intervenganAPDAYC) me puse a ver la cantidad de dinero que cobraron algunos directivos del APDAYC durante el 2012, por concepto de derechos de autor. En el post uterino “se la llevan facil” aparecen algunos números, pero no se aprecia si esta ganancia es mucho (o poco) en comparación con lo ganado por los asociados de APDAYC que no son miembros del Consejo Directivo.

Intenté hacer un gráfico de lo ganado por los compositores más prolíficos en comparación con el dinero que cobraron los directivos de APDAYC.

Obtuve la lista de directivos de aqui. Y las ganancias de los 250 asociados que tuvieron más regalías durante el 2012 de aqui.

Tuve que bajarme el PDF, convertirlo a texto, y dibujar el gráfico. Como soy bien nerd, para convertir el texto usé comandos de Linux y para dibujar el gráfico usé el lenguaje de programación Python (con su librería gráfica matplotlib).

Aqui está el gráfico, y más abajo el código que tuve que tipear para hacer este “análisis” tan diligente 😉 (hacer click para agrandar la imagen).

Los que más cobraron, APDAYC 2012

Los que más cobraron, APDAYC 2012

Manya, son haaaaaartos los compositores que cobran regalías. Pero son unos pocos quien se llevan harta plata, y son muchos los que cobran poquito (se lleva 3 mil soles al año el que está en puesto 250).

Debemos alegrarnos por los miembros del Consejo Directivo de APDAYC que son afortunados en estar entre los que más regalías se llevaron durante el 2012 (por ejemplo José Escajadillo, Armando Massé y Julio Andrade, entre otros).

[Actualización 6 de Octubre 2013]

Un tuitero/bloguero influyente me sugirió averiguar si hay un patrón de las ganancias recibidas por los socios que tienen mayor poder de decisión en APDAYC. Osea ver si los que cortan en jamón en APDAYC ganan más o ganan menos en comparación con los socios que tienen menor voto en los manejos de la Sociedad Colectiva APDAYC.

El útero de marita nos cuenta que no todos los socios de APDAYC tienen el mismo derecho a voto. Por ejemplo cada voto de los socios principales vale por 5, cada voto de los socios vitalicios vale como 4 votos, cada voto de socios activos vale por 3.

Se supone que en una democracia cada persona es igual a un voto, pero en APDAYC eso no es así. Entonces los que tienen mayor poder de decisión del rumbo de APDAYC, los que parten y reparten son principalmente ese grupo de socios principales, vitalicios y activos.

Cuanto reciben de regalías los que cortan el jamón en APDAYC?

Estuve mirando otra vez los datos y me di cuenta que estos socios privilegiados son casi la mitad (138 socios, o el 55%) pero se llevan la mayoría de plata recaudada en APDAYC. El 84% del dinero cobrado por regalías durante el 2012 (7 millones de soles) se lo llevaron este grupo de socios con voto privilegiado. Mientras que la otra mitad de socios le corresponde poco más de 1 millon (16% del total).

Resulta interesante que los que cortan el jamón en APDAYC se lleven el 84% del dinero (a pesar de ser la mitad de socios con derecho a voto).

Bueno dicen que el que parte y reparte se lleva la mayor parte?

Aqui les dejo el gráfico para digerir mejor los datos (al final de este post está todo el código usado para los análisis).

Ganancias de socios principales, vitalicios y activos

La mitad de socios tiene voto privilegiado, cada voto vale de 3 a 5 veces que los votos de la otra mitad. Es curioso que además se lleven la mayor tajada de las regalías recaudadas por APDAYC.

[Actualización 7 Oct 2013]

Pero qué porcentaje de TODAS las regalías recibe este grupo de socios?

En la Memoria de APDAYC del 2012, señalan en la página 12 (o página 22 en
realidad), que se repartieron 29 millones de soles entre todos sus asociados.

Según el útero de marita “APDAYC tiene más de 8 mil afiliados, pero sólo 248 tienen derecho a voto en la Asamblea General”.

Supongamos que APDAYC tiene 8 mil socios, entonces entre ellos repartieron 29 millones de soles durante el 2012.

Quiero saber:

  • Qué porcentaje de estos 8mil son los socios con votos privilegiados (principales, vitalicios y activos).
  • Qué porcentaje del dinero total se llevan estos socios con voto privilegiado?

Estos son los datos:

  • Dinero total: 29,197,272 Soles
  • Número total de socios: 8000
  • Total socios con voto privilegiado: 138
  • Dinero recibido por socios principales: 1240,041.19
  • Dinero recibido por socios vitalicios: 59,347.69
  • Dinero recibido por socios activos: 5731,717.18
  • Porcentaje de socios con voto privilegiado: 1.7%
  • Porcentaje del dinero que se recibe este grupo: 24.08%

Y este es el gráfico resultante:

Porcentaje de ganancias de socios con voto privilegiado

Porcentaje de ganancias de socios con voto privilegiado, APDAYC 2012

Pues es de esperarse que el 1.7% de socios se lleve la cuarta parte de las regalías. Si vemos otra vez el gráfico de los socios más rendidores, los que más plata reciben, veremos que son los socios principales y activos (con voto multiplicado por 5 y por 3) quienes reciben más regalías.

Los socios principales y activos son los que más regalías cobraron durante el 2012.

Los socios principales y activos son los que más regalías cobraron durante el 2012.

Sección para geeks

Aqui el código en la consola de Linux:

# Bajarse la memoria en PDF y extraer las páginas 34, 35 y 36
pdftk Memoria_APDAYC_2012.pdf cat 34-36 output mas_productivos_2012.pdf

# convertir PDF a texto
pdftotext -layout mas_productivos_2012.pdf

# hacer limpieza manual para eliminar texto que no se necesita (joyas y premios)
# extraer nombres y ganancias
cat mas_productivos_2012.txt | sed 's/S\/\.//g' | sed 's/\$//g' | sed 's/\s\+/ /g' | sed -r 's/([A-Z]),/\1/g' | sed 's/,//g' | sed -r 's/(([A-Z]+\s)+)/\1,/g' | sed 's/ ,/,/g' | sed -r 's/^[0-9]+\s[0-9]+\s//g' | sed -r 's/\s*$//g' > tmp_mas_productivos.txt

# dibujar el gráfico usando Python y matplotlib
python mas_productivos.py

Y aqui el código actualizado en el lenguage Python:

# -*- coding: utf-8 -*-
import codecs
import locale
import prettyplotlib as ppl
import numpy as np
from prettyplotlib import plt

locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

f = codecs.open("output/tmp_socios_principales.txt", encoding="utf-8")
data = f.read()
f.close()

# Esta es la lista de "Socios principales"
data = data.split("\n")
principales = []
vitalicios = []
activos = []
for line in data:
    line = line.strip()
    if len(line) > 0:
        line = line.split(",")
        if line[1] == "PRINCIPAL":
            principales.append(line[0])
        if line[1] == "VITALICIO":
            vitalicios.append(line[0])
        if line[1] == "ACTIVO":
            activos.append(line[0])

# cantidad de regalias por "socios principales"
f = codecs.open("output/tmp_mas_productivos.txt", encoding="utf-8")
data = f.read()
f.close()

data = data.split("\n")
princi_money = float()
vitali_money = float()
activo_money = float()
otros_money = float()

for i in data:
    if len(i) > 0:
        i = i.split(",")
        author = i[0]
        money = i[1].split(" ")
        money = money[len(money)-1]
        if author in principales:
            princi_money += float(money)
        elif author in vitalicios:
            vitali_money += float(money)
        elif author in activos:
            activo_money += float(money)
        else:
            otros_money += float(money)

## DO principales + vitalicios
## numero de socios por categoria
numero_socios = [str(len(principales) + len(vitalicios)),
                 str(250-len(principales)-len(vitalicios))]

print "Socios privilegiados con el voto " + str(len(principales) +
        len(vitalicios) + len(activos))

y = [princi_money + vitali_money, activo_money + otros_money]
annotate = [locale.format("%d", y[0], grouping=True) + " S/.",
            locale.format("%d", y[1], grouping=True) + " S/."]

width = 0.35
bar_color = ["r", "#66c2a5"]
plt.rc('font', **{'family': 'DejaVu Sans'})
fig, ax = plt.subplots(1, figsize=(8,6))
ind = np.arange(2)
xdata = ind + 0.05 + width
ax.bar(ind, y)
ax.set_xticks(ind + 0.4)
ax.set_xticklabels(["principales y vitalicios\n(" + numero_socios[0] + " socios)",
                    "otros socios\n(" + numero_socios[1] + " socios)",
                    ],
                    rotation="horizontal", multialignment="center")
ax.autoscale()
ax.set_title(u'Ganancias de socios principales y vitalicios\n comparados con el resto de socios',
        fontdict = {'fontsize':22}
        )

y_labels = ["0", "1,000,000", "2,000,000", "3,000,000", "4,000,000",
                "5,000,000", "6,000,000", "7,000,000", "8,000,000"]
ax.set_yticklabels(y_labels)

plt.ylabel(u'Regalías en S/.', fontdict={'fontsize':18})
plt.xlabel(u'Beneficiarios', fontdict={'fontsize':22})

ppl.bar(ax, np.arange(len(y)), y, grid="y", annotate=annotate, color=bar_color)
fig.tight_layout()
fig.savefig("output/socios_principales.png")
output = "Plot de socios Principales + Vitalicios guardados en archivo "
output += "``output/socios_principales.png``\n"
print output

## DO principales + vitalicios + activos
## numero de socios por categoria
numero_socios = [str(len(principales) + len(vitalicios) + len(activos)),
                 str(250-len(principales) - len(vitalicios) - len(activos))]

# Porcentaje de socios principales+vitalicios+activos versus otros
percent_pva = float((len(principales)+len(vitalicios)+len(activos))*100/250)
percent_socios_otros = 100.0 - percent_pva

# Porcentaje de DINERO de socios principales+vitalicios+activos versus otros
y = [princi_money + vitali_money + activo_money, otros_money]
percent_money_pva = int(float(princi_money + vitali_money + activo_money)*100/(y[0] + y[1]))
percent_money_otros = 100 - percent_money_pva

annotate = [locale.format("%d", y[0], grouping=True) +
                " S/.",
            locale.format("%d", y[1], grouping=True) +
                " S/."]

width = 0.35
bar_color = ["r", "#0099FF"]
plt.rc('font', **{'family': 'DejaVu Sans'})
fig, ax = plt.subplots(1, figsize=(9,6))
ind = np.arange(2)
xdata = ind + 0.05 + width

# write percentaje of money to plot
ax.annotate(str(percent_money_pva) +"%\ndel dinero", ha="center", color="w",
        size=38, xy=(0.2,1.2), xytext=(0.4, 2500000))
ax.annotate(str(percent_money_otros) +"%\ndel dinero", ha="center", color="w",
        size=18, xy=(0.2,1.2), xytext=(1.4, 150000))

ax.bar(ind, y)
ax.set_xticks(ind + 0.4)
ax.set_xticklabels(["principales, vitalicios y activos\n(" +
                            str(int(percent_pva)) + "% del total)",
                    "otros socios\n(" +
                            str(int(percent_socios_otros)) + "% del total)"
                    ],
                    rotation="horizontal", multialignment="center")
ax.autoscale()
ax.set_title(u'Ganancias de socios principales, vitalicios y activos'
        + '\ncomparados con el resto de socios',
        fontdict = {'fontsize':22}
        )

y_labels = ["0", "1,000,000", "2,000,000", "3,000,000", "4,000,000",
                "5,000,000", "6,000,000", "7,000,000", "8,000,000"]
ax.set_yticklabels(y_labels)

plt.ylabel(u'Regalías en S/.', fontdict={'fontsize':18})
plt.xlabel(u'Beneficiarios', fontdict={'fontsize':22})

ppl.bar(ax, np.arange(len(y)), y, annotate=annotate, color=bar_color)
fig.tight_layout()
fig.savefig("output/socios_principales_vitalicios_activos.png")
output = "Plot de socios Principales + Vitalicios + Activos guardados en archivo "
output += "``output/socios_principales_vitalicios_activos.png``\n"
print output

Código de cuáles miembros del consejo directivo se llevan más regalías

Aquí el código y datos para generar el pie-chart

Y aquí el código necesario para hacer el plot usando el paquete estadístico R.

library(ggplot2)
datos <- read.csv("output/socios_pva_versus_total.csv", sep=",",
              header=FALSE)
money <- datos[3:4,]
names(money) <- c("Socios","Regalías")

png(filename="output/socios_pva_versus_total.png",
      width=950, height=630, units="px")
ggplot(money, aes(x="", y=Regalías, fill=Socios)) +
  theme(text = element_text(size=22)) +
  geom_bar(width=1, stat="identity") +
  coord_polar("y", start=pi/3) +
  labs(title="Repartición de regalías, APDAYC 2012")
dev.off()