Proyección de votos en las mesas no escrutadas durante el escrutinio provisorio

En el escrutinio provisorio realizado en la provincia de Santa Fe quedaron sin escrutar 347 mesas.

  • 304 telegramas fueron desestimados.
  • 33 mesas no fueron cargadas.

Desde Opendata Córdoba intentamos proyectar los resultados de las mesas ya escrutadas, sobre estas mesas sin escrutar para tratar de predecir que puede pasar en el recuento definitivo.

Obtención de datos

El gobierno de la provincia de Santa Fe provee los datos actualizados del escrutinio provisorio en csv.

Los descargamos desde http://elecciones.santafe.gov.ar/descargas

In [1]:
!wget http://elecciones.santafe.gov.ar/bundles/escrutinio/descargas/csv.zip
--2015-06-16 11:41:29--  http://elecciones.santafe.gov.ar/bundles/escrutinio/descargas/csv.zip
Resolviendo elecciones.santafe.gov.ar (elecciones.santafe.gov.ar)... 200.12.192.183
Conectando con elecciones.santafe.gov.ar (elecciones.santafe.gov.ar)[200.12.192.183]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 865821 (846K) [application/zip]
Grabando a: “csv.zip”

100%[======================================>] 865.821      725K/s   en 1,2s    

2015-06-16 11:41:30 (725 KB/s) - “csv.zip” guardado [865821/865821]

In [2]:
!unzip csv.zip
Archive:  csv.zip
  inflating: desestimados.csv        
  inflating: pendientes.csv          
  inflating: computados.csv          

Preparación del dataset

Usando pandas preparamos los datos.

In [3]:
import pandas as pd
In [4]:
computados = pd.read_csv('computados.csv')
/home/jtrad/play/stats/local/lib/python2.7/site-packages/pandas/io/parsers.py:1170: DtypeWarning: Columns (6) have mixed types. Specify dtype option on import or set low_memory=False.
  data = self._reader.read(nrows)

Votos promedio por seccion y partido

Calculamos los votos de una mesa "Promedio" por cada seccion, solo los partidos con mas de 5 votos.

In [9]:
pd.set_option('display.max_rows', 2000)
promedio_gob_seccion = pd.pivot_table(computados, index=['nroSeccion', 'nroPartido'], values=['votosGob']) 
votos_promedio_seccion = promedio_gob_seccion[promedio_gob_seccion.votosGob > 5]
votos_promedio_seccion
Out[9]:
votosGob
nroSeccion nroPartido
1 0004 60.518519
0005 101.009259
0006 71.370370
0008 6.388889
ANUL 5.240741
BLAN 11.814815
2 0004 50.153488
0005 91.911628
0006 72.748837
0008 9.093023
ANUL 6.967442
BLAN 12.627907
3 0004 90.985542
0005 70.127711
0006 57.987952
0008 6.669880
ANUL 6.067470
BLAN 7.115663
4 0004 67.569444
0005 74.245370
0006 73.532407
0008 8.648148
ANUL 5.773148
BLAN 11.504630
5 0004 73.037037
0005 79.870370
0006 52.777778
0008 6.240741
ANUL 5.259259
BLAN 15.055556
6 0004 55.075107
0005 82.152361
0006 83.175966
0008 7.437768
BLAN 10.976395
7 0004 73.019608
0005 65.223039
0006 83.588235
0008 7.387255
ANUL 5.105392
BLAN 11.526961
8 0004 59.910714
0005 89.434524
0006 72.172619
0008 7.369048
ANUL 6.732143
BLAN 11.172619
9 0001 5.849754
0004 80.976601
0005 72.028325
0006 69.038177
0008 11.842365
ANUL 9.296798
BLAN 5.490148
10 0004 84.262658
0005 81.088608
0006 57.829114
0008 9.231013
ANUL 8.468354
BLAN 6.797468
11 0004 64.423664
0005 84.377863
0006 68.610687
0008 8.274809
ANUL 5.267176
BLAN 10.034351
12 0004 69.859155
0005 84.183099
0006 51.014085
0008 7.591549
BLAN 18.281690
13 0001 9.826156
0004 51.103668
0005 66.385965
0006 101.730463
0008 10.357257
ANUL 6.835726
14 0001 9.798171
0004 70.072502
0005 63.915741
0006 77.970607
0008 11.160026
ANUL 11.238406
BLAN 6.130634
15 0001 6.252874
0004 79.022989
0005 76.100164
0006 71.533662
0008 8.522167
ANUL 9.591133
BLAN 8.558292
16 0004 69.158192
0005 64.683616
0006 75.553672
BLAN 13.045198
17 0004 79.886076
0005 65.759494
0006 69.873418
ANUL 6.177215
BLAN 16.746835
18 0004 72.791262
0005 79.509709
0006 62.140777
0008 6.577670
ANUL 6.165049
BLAN 11.941748
19 0004 57.773913
0005 80.600000
0006 61.939130
ANUL 5.234783
BLAN 8.991304
20 0001 5.508951
0004 84.250639
0005 76.074169
0006 72.913043
0008 7.312020
ANUL 7.797954
BLAN 7.959079
21 0004 53.357576
0005 100.236364
0006 61.927273
0008 6.072727
ANUL 6.278788
BLAN 12.684848
22 0004 69.725926
0005 71.014815
0006 51.992593
0008 6.392593
BLAN 13.888889

Mesas desestimadas y pendientes por seccion

Contamos cuantas mesas sin escrutar quedaron por sección

In [10]:
desestimados= pd.read_csv('desestimados.csv')
mesas_desestimadas_por_seccion = desestimados["nroSeccion"].value_counts()
In [12]:
pendientes = pd.read_csv('pendientes.csv')
mesas_pendientes_por_seccion = pendientes["nroseccion"].value_counts()

Performance Partidos en Secciones con mesas Desestimadas

Filtramos por los partidos políticos más importantes:

In [21]:
computados = computados[computados.nroPartido.isin(['0004','0005','0006','ANUL','BLAN'])]
secciones_con_mesas_desestimadas = desestimados["nroSeccion"].unique()
computados_en_secciones_con_mesas_desestimadas = computados[computados.nroSeccion.isin(secciones_con_mesas_desestimadas)]
computados_en_secciones_con_mesas_desestimadas.groupby('nombrePartido').votosGob.mean().order(ascending=False)
Out[21]:
nombrePartido
FRENTE PROGRESISTA CIVICO Y SOCIAL       74.262837
UNION PRO FEDERAL                        73.118141
FRENTE JUSTICIALISTA PARA LA VICTORIA    70.905297
Votos en Blanco                           8.267443
Votos Anulados                            7.793253
Name: votosGob, dtype: float64

En promedio, en las secciones con mesas desestimadas, el FRENTE PROGRESISTA CIVICO Y SOCIAL tiene 1.15 votos más que UNION PRO FEDERAL. Lo Cual, si se mantuviera la tendencia, el FRENTE PROGRESISTA CIVICO Y SOCIAL mantendría la ventaja.

Performance Partidos en Secciones con mesas Pendientes

In [23]:
computados = computados[computados.nroPartido.isin(['0004','0005','0006','ANUL','BLAN'])]
secciones_con_mesas_pendientes = pendientes["nroseccion"].unique()
computados_en_secciones_con_mesas_pendientes = computados[computados.nroSeccion.isin(secciones_con_mesas_pendientes)]
computados_en_secciones_con_mesas_pendientes.groupby('nombrePartido').votosGob.mean().order(ascending=False)
Out[23]:
nombrePartido
FRENTE PROGRESISTA CIVICO Y SOCIAL       74.540892
UNION PRO FEDERAL                        72.365472
FRENTE JUSTICIALISTA PARA LA VICTORIA    71.884418
Votos en Blanco                           8.015801
Votos Anulados                            7.926116
Name: votosGob, dtype: float64

En promedio, en las secciones con mesas pendientes, el FRENTE PROGRESISTA CIVICO Y SOCIAL tiene 2.18 votos más que UNION PRO FEDERAL. Lo Cual, si se mantuviera la tendencia, el FRENTE PROGRESISTA CIVICO Y SOCIAL mantendría la ventaja.

Proyección

Multiplicamos la cantidad de mesas no escrutadas por los votos promedios por mesa de cada partido en cada seccion

In [16]:
def por_seccion(prom, sec):
    mesas = 0
    if sec in mesas_pendientes_por_seccion:
        mesas += mesas_pendientes_por_seccion[sec]
    if sec in mesas_desestimadas_por_seccion:
        mesas += mesas_desestimadas_por_seccion[sec]
    return int(prom)*mesas
In [18]:
fpcys = 558352
pro = 556224
fpv = 532156

for row in votos_promedio_seccion.iterrows():
    if row[0][1] == "0004":
        fpv += por_seccion(row[1], row[0][0])
    elif  row[0][1] == "0005":
        pro += por_seccion(row[1], row[0][0])
    elif row[0][1] == "0006":
        fpcys += por_seccion(row[1], row[0][0])
        
print "FPV: %d Votos" % fpv
print "PRO: %d Votos" % pro
print "FPCYS: %d Votos" % fpcys

print "Diferencia a favor del Socialismo: %d" % (fpcys - pro)
FPV: 558740 Votos
PRO: 582576 Votos
FPCYS: 585198 Votos
Diferencia a favor del Socialismo: 2622

Segun esta proyección gana el socialismo por más de 2600 votos.

Colaboradores

@tin_nqn_ Martín Gaitan

@pdelboca Patricio del Boca

@jairotrad Jairo Trad

@frod_f Franco Rodriguez