Cómo vota Perú en el TPP («tratado anti-internet»)?

Hace un par de semanas, el portal Wikileaks publicó el documento secreto correspondiente al borrador de las negociaciones del capítulo de propiedad intelectual del TPP (Trans-Pacific Partnership).

Ya han habido varias alertas acerca de las implicancias de estas negociaciones (una introducción al tema aquí). Además de ser negociaciones que se realizan de manera secreta, preocupa que esté en riesgo el libre acceso a Internet y el componente de propiedad intelectual que pueda dificultar el acceso a medicamentos.

Se supone que este tratado está apunto de ser firmado por el Perú antes de fin de año y gracias a Wikileaks recién podemos darnos cuenta de lo que realmente se ha estado negociando a puerta cerrada.

El documento filtrado al público tiene 96 páginas (si se bajan el PDF) y está disponible aquí. A primera vista se pueden ver los temas que se han discutido y la manera de cómo ha votado cada país. Algunas propuestas parecen provenir de ciertos países mientras que otros votan a favor o se oponen (ver figura 1).

Figura 1. Algunos países votan a favor, otros se oponen.

Figura 1. Algunos países votan a favor, otros se oponen.

Podemos dar una lectura a todo el PDF para enterarnos «cómo es la cosa». Pero, siendo este un blog nerd, podemos hacer un «data-mining» rudimentario para rápidamente poder averiguar algunos detalles:

  1. Cuántas veces Perú vota como país de manera opuesta a Estados Unidos?
  2. Cuántas veces Perú vota igual que Estados Unidos?
  3. Podemos averiguar como vota algún país vecino? digamos Chile, vota de manera diferente a Perú?
  4. Chile se opone o vota de manera similar que Estados Unidos?
  5. En qué puntos específicos hay discrepancias en las votaciones

Podría ponerme a contar la votaciones una por una pero me iba a demorar una enternidad. Entonces escribí un script in Python para hacer este data-mining (script completo en la sección geek al final de este post).

Lo bueno es que Wikileaks publicó el documento como PDF conteniendo texto (no como imágenes). Entonces, es bien fácil convertir el PDF a TXT y proceder con el minado de datos.

pdftotext Wikileaks-secret-TPP-treaty-IP-chapter.pdf texto.txt

Mi script funciona de la siguiente manera:

  1. Lee el documento TXT línea por línea
  2. Si encuentra una línea que contenga la palabra Article se pone alerta y se fija si hay alguna línea con las iniciales de los países PE, CL, US (osea Perú, Chile y Estados Unidos).
  3. La línea de texto que indica la votación tiene un patrón consistente: países oppose/propose más países.
  4. Entonces el script divide la lista de países en dos bandos, los que están a la derecha e izquierda de las palabras clave oppose/propose
  5. Una vez divididos los bandos, solo es cuestión de contar cuántas veces se repiten las iniciales y llevar la cuenta el bando.

Estos son los resultados:

Conteo de votos de PE versus US
propose_together 26
oppose_together 6
oppose_each_other 23

---------------------

Conteo de votos de PE versus CL
propose_together 36
oppose_together 22
oppose_each_other 8

---------------------

Conteo de votos de US versus CL
propose_together 16
oppose_together 2
oppose_each_other 32

Se supone que ambos países, Perú y Chile, tenían la intención hacer propuestas alternativas a las que figuran en el TPP (ver aquí y aquí).

Pero al parecer, esto puede haber quedado en intenciones, al menos viendo la manera cómo ha estado votando Perú.

Perú ha votado igualito que Estados Unidos 32 veces y se ha opuesto (votado diferente) sólo 23 veces. Mientras que Chile ha votado igual que EEUU solo 18 veces y se ha opuesto 32 veces.

Parece que Chile se opone mucho a las propuestas apoyadas por EEUU mientras que Perú vota en tándem. Mi script me dice que:

Chile se opone a US y PE 9 veces

y se opone en estos artículos del TPP:

* Article QQ.C.2: {Collective and Certification Marks}
    [US/PE/MX41/SG propose; AU/NZ/ VN/BN/MY/CL/CA oppose: 2. Pursuant to
* Article QQ.D.11: [CL/SG/BN/VN/MX propose82; AU/PE/US/NZ/CA/JP oppose:
* Article QQ.D.12: {Homonymous Geographical Indications}
    [NZ/CL/VN/MY/BN/SG/MX propose84; PE/US/AU oppose: 1. Each Party may
    [CL propose; AU/US/PE/NZ/VN/SG/MY/BN/MX/CA/JP oppose: 2. The Parties
    [CL/SG/BN/MX propose; AU/PE/US/NZ/CA/JP oppose: Annex […] Lists of
* Article QQ.E.9: [US/PE/AU propose; 101 CL/VN/MY/BN/NZ/CA/SG/MX oppose:
* Article QQ.H.7: {Criminal Procedures and Remedies / Criminal Enforcement}
    2. [US/AU/SG/PE propose; CL/VN/MY/NZ/CA/BN/MX oppose: Willful
* Article QQ.I.1:267 {Internet Service Provider Liability}
    280 [US/PE/SG/AU propose; CL/NZ/VN oppose: A Party may request consultations with the other Parties to

Ahora que tenemos una idea a ojo de buen cubero cómo van las votaciones de Perú, Chile y EEUU, además de los temas potencialmente picantes. Podemos leer mejor el documento filtrado por Wikileaks.

** Spoiler ** (Uno de esos temas tiene que ver con la denominación de origen del Pisco. Chile propone, Perú y EEUU se oponen).

PD. este post se inció a sugerencia de un tuitero amixer.

Sección geek

El script corre de la siguiente manera:

python leeme_votaciones.py texto.txt


import re
import sys
f = open(sys.argv[1].strip(), "r")
lines = f.readlines()
f.close()
def clean_line(line):
propose = ""
oppose = ""
if "propose" in line or "oppose" in line:
try:
propose = re.search("(([A-Z]{2}[0-9]*\/*\s*)+\spropose)", line).groups()[0]
propose = re.sub("[0-9]+", "", propose)
except:
pass
try:
oppose = re.search("(([A-Z]{2}[0-9]*\/*\s*)+\soppose)", line).groups()[0]
oppose = re.sub("[0-9]+", "", oppose)
except:
pass
return [propose, oppose]
def count_countries(pais1, pais2, lines):
propose_together = 0
oppose_together = 0
oppose_each_other = 0
for line in lines:
# propose together
if pais1 in line[0] and pais2 in line[0]:
propose_together += 1
elif pais1 in line[1] and pais2 in line[1]:
oppose_together += 1
elif pais1 in line[0] and pais2 in line[1]:
oppose_each_other += 1
elif pais2 in line[0] and pais1 in line[1]:
oppose_each_other += 1
print "Conteo de votos de %s versus %s" % (pais1, pais2,)
print "propose_together %i" % propose_together
print "oppose_together %i" % oppose_together
print "oppose_each_other %i" % oppose_each_other
new_lines = []
chile_se_opone = 0
for line in lines:
line = re.sub("\s+", " ", line)
line = line.strip()
if line.startswith("Article"):
article_line = line
if "PE" in line and "CL" in line and "US" in line:
tmp = clean_line(line)
if "PE" in tmp[0] and "US" in tmp[0] and "CL" in tmp[1]:
chile_se_opone = chile_se_opone + 1
print "* %s" % article_line
print line
elif "PE" in tmp[1] and "US" in tmp[1] and "CL" in tmp[0]:
chile_se_opone = chile_se_opone + 1
print "* %s" % article_line
print line
if line.startswith("["):
new_lines.append(clean_line(line))
print "Chile se opone a US y PE %i veces" % chile_se_opone
print "Hay %i lineas de informacion" % len(new_lines)
count_countries("PE", "US", new_lines)
print "\n———————\n"
count_countries("PE", "CL", new_lines)
print "\n———————\n"
count_countries("US", "CL", new_lines)

Patrones de voto de tus congresistas

Estuve pensando en alguna manera de visualizar el patrón de voto de nuestros congresistas en base a las más recientes (y polémicas) votaciones, en contra de los gays y a favor de escoger miembros del Tribunal Constitucional en base a una vil #repartija.

Me bajé la lista de congresistas de la web del congreso http://www.congreso.gob.pe/organizacion/pleno.asp?mode=Pleno y realicé una edición de la lista para considerar Apellido Paterno Apellido Materno y Primer Nombre para cada uno. Los espacios fueron reemplazados con subguión.

Algo así:

Abugattás_Majluf_Daniel
Acha_Romaní_Walter
Acuña_Núñez_Richard
Acuña_Peralta_Virgilio
Aguinaga_Recuenco_Alejandro
Alcorta_Suero_María
Andrade_Carmona_Fernando
Angulo_Álvarez_Roberto
Anicama_Ñañez_Elsa
Apaza_Condori_Emiliano
Apaza_Ordóñez_Justiniano

Podemos convertir la votaciones de cada congresista a modo binario. El voto a favor de una buena propuesta se puede codificar con 1 (a favor de incluir orientación sexual en la lista de crímines de odio; en contra de elegir a Cayo Galindo, Víctor Mayorga, Rolando Sousa, Francisco Eguiguren, José Luis Sardón y Ernesto Blume como magistrados del Tribunal Constitucional). Se puede codificar con 0 los que votan a favor de malas propuestas. Los ausentes por licencia, ausentes y abtenciones se pueden codificar con signo de interrogación «?»).

Además modifiqué el archivo para que esté en formato NEXUS y pueda ser leído por el programa filogenético llamado PAUP.

Algo así:

#NEXUS

BEGIN DATA;
DIMENSIONS NTAX=130 NCHAR=2;
FORMAT DATATYPE=STANDARD MISSING=? GAP=-;
MATRIX

Abugattás_Majluf_Daniel           ??
Acha_Romaní_Walter                ?0
Acuña_Núñez_Richard               10
Acuña_Peralta_Virgilio            1?
Aguinaga_Recuenco_Alejandro       00
Alcorta_Suero_María               00
Andrade_Carmona_Fernando          00
Angulo_Álvarez_Roberto            00
Anicama_Ñañez_Elsa                ?0
Apaza_Condori_Emiliano            00
Apaza_Ordóñez_Justiniano          00

El archivo completo está aquí.

Ingresé a PAUP, leí el archivo y pedí que ejecute el algoritmo conocido como Neighbor-joining que consiste en agrupar en un dendrograma los congresistas que se parezcan más según los votos que hayan emitido (favor, contra) o hayan estado ausentes.

# Entrar a PAUP y leer el archivo de datos
paup> execute congresistas.txt

# Ejecutar el algoritmo Neighbor-joining
paup> nj;

# Guardar el dendograma en directorio actual
paup> savetree file=congresistas.tre format=altnexus;

Guardé el dendograma en un archivo aparte para dibujar el dendrograma usando el paquete estadístico R y la librería APE. El dendrograma se guarda en un archivo PDF:

library(ape);
x <- read.nexus("congresistas.tre");
pdf(file="congresistas_cluster.pdf", paper="a4", width=11);
plot(x, cex=0.22);
dev.off();

Bájate el archivo resultante congresistas_cluster.pdf si deseas.

También se puede convertir el PDF a imagen y colorear los grupos de congresistas. Por ejemplo podemos colorear de verde el grupo de congresistas «buenos» (los que han votado a favor de gays y se abstuvieron de votar por los miembros del TC).

Es interesante comparar mi lista de congresistas «buenos» con aquellos de la «Lista de honor» compilada por el usuario de Scribd comunicadociudadano como resultado de un crossover de los congresistas que votaron en contra de los gays y favor de la #repartija.

Mi lista de congresistas «buenos» es más liberal ya que, por ejemplo, da el beneficio de la duda a la congresista fujimorista Leyla Chihuán que no votó por magistrados del TC porque se encontraba de licencia.

He coloreado de amarillo los congresistas «masomenos» que votaron «bien» en al menos una de las votaciones. Por ejemplo el congresista Sergio Tejada votó a favor de los gays pero votó a favor de elegir a los miembros del TC. Muchos están decepcionados de Tejada, pero por ahora no está tan mal (estaremos vigilando).

El resto de congesistas son «malos» porque votaron «mal» en las dos ocasiones o se abstuvieron de votar debido a ausencias, licencias y/o abstenciones voluntarias.

dendrograma de congresistas

Dendrograma de congresistas. Hacer click para agrandar.

Sería intersante agregar los resultados de votaciones adicionales para tener más columnas, más datos y ver si salen patrones más interesantes. Por ejemplo podríamos identificar al «congresista más bueno» (aquel que vota «bien» en todas las ocasiones) así como al «congresista más malo» (aquél que siempre vota «mal»).

El «big data» que nos hablaba el amigo útero.pe

Podríamos tener esta lista y dendrograma actualizados antes de las elecciones del 2016, para que eligas mejor a tus congresistas, sí tú, amigo lector.

Cuáles de tus congresistas vota en contra de los gays

English: Parliament/Congreso in Lima, Peru.

Congreso in Lima, Peru. (Photo credit: Wikipedia)

El 4 de Julio el congreso votó en contra de considerar agresiones a miembros de la comunidad LGTB como delito por discriminación.

Según la votación en el pleno, 56 de tus congresistas se oponen proteger los derechos de  LGTB.

Aqui el acta. Identifica a tu congresista y no votes por el en las próximas elecciones!

Aqui la lista de los que se opusieron a la medida:

  1. Aguinaga, Alejandro
  2. Alcorta, Lourdes
  3. Andrade, Fernando
  4. Angulo, Roberto
  5. Apaza, Emiliano
  6. Apaza, Justiniano
  7. Bedoya, Javier
  8. Beingolea, Alberto
  9. Belaunde, Martin
  10. Cardenas, Johnny
  11. Castagnino, Juan
  12. Chavez, Martha
  13. Chehade, Omar
  14. Coa, Ruben
  15. Condori, Natalie
  16. Cordero, Maria
  17. Crisologo, Victor
  18. De la Torre, Hernan
  19. Delgado, Jaime
  20. Elias, Jose
  21. Espinoza, Marisol
  22. Fujimori, Kenji
  23. Galarreta, Luis
  24. Gamarra, Teofilo
  25. Grandez, Victor
  26. Gutierrez, Josue
  27. Huayana, Leonidas
  28. Hurtado, Jesus
  29. Iberico, Luis
  30. Kobashigawa, Ramon
  31. Lay, Humberto
  32. Lewis, Norman
  33. Llatas, Cristobal
  34. Lopez, Maria
  35. Medina, Antonio
  36. Molina, Agustin
  37. Nayap, Eduardo
  38. Neyra, Rofilio
  39. Neyra, Angel
  40. Pari, Juan
  41. Pariona, Federico
  42. Perez del Solar, Gabriela
  43. Reynaga, Jhon
  44. Rimarachin, Jorge
  45. Rivas, Martin
  46. Romero, Eulogio
  47. Rosas, Julio
  48. Saavedra, Esther
  49. Salgado, Luz
  50. Sarmiento, Freddy
  51. Teves, Julia
  52. Urquizo, Jose
  53. Valle, Willyam
  54. Yrupailla, Cesar
  55. Zamudio, Tomas
  56. Zerillo, Manuel