Skip to content

Instantly share code, notes, and snippets.

@arivero
Last active Jul 8, 2016
Embed
What would you like to do?
elecciones 2016
# coding: utf-8
# In[1]:
f=open("test.json")
# In[2]:
import json
from collections import OrderedDict
# In[3]:
j=json.load(f,object_pairs_hook=OrderedDict)
# In[8]:
from collections import Counter,defaultdict
r=defaultdict(Counter)
for prov in j.keys():
for dist in j[prov].keys():
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for year, datoslist in j[prov][dist]['detalle'].items():
for partido in datoslist:
r[year][partido['nombre']]+=1
print (r['2016'].most_common(50))
print (r['2015'].most_common(50))
# In[11]:
import numpy as np
import matplotlib.pyplot as plt
get_ipython().magic('matplotlib inline')
from math import sqrt
def v(p):
return int(p['votos'].replace('.',''))
totdata=[]
for prov in j.keys():
siu=0
data=[]
for dist in j[prov].keys():
pod,iu,conf=0,0,0
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for partido in j[prov][dist]['detalle']['2015']:
if partido['nombre'][:5] == 'PODEM':
pod+=v(partido)
if partido['nombre'][:2] == 'IU' or partido['nombre']== u'UP: IULV-CA, UPeC' or sum([x == 'IU' or x=='UP' or x=='UPB: IU' or x=='UPeC' or x==' UPeC' for x in partido['nombre'].split('-')]) :
siu+=v(partido)
iu+=v(partido)
for partido in j[prov][dist]['detalle']['2016']:
if partido['nombre'][:5] == 'PODEM':
conf+=v(partido)
peso=float(pod+iu)
if peso > 10000 and peso < 80000 and dist !='Bilbao':
#if 30000 > peso and peso >= 10000:
mezcla=float(iu)/peso
perdida=float(pod+iu-conf)/peso
#if perdida > 0.25 and peso > 10000: print prov,dist, pod,iu,conf
data.append([mezcla,perdida,peso/1000])
if siu==0 or prov in ['Navarra',u'Araba / Álava', 'Bizkaia','Gipuzkoa','Illes Balears','Las Palmas']:
pass
#print prov, "no procede"
else:
print (prov,)
for d in data: totdata.append(d)
print
t=np.array(totdata)
coef, residuals, rank, singular_values, rcond = np.polyfit(t[:,0],t[:,1],0,w=t[:,2],full=True)
print (residuals, coef)
#print prov,
#t=np.array(data)
coef, residuals, rank, singular_values, rcond = np.polyfit(t[:,0],t[:,1],1,w=t[:,2],full=True)
print (residuals, coef, coef[1],coef[0]+coef[1])
plt.figure(figsize=(12,10))
plt.scatter(t[:,0],t[:,1],s=t[:,2])
plt.plot([0,1],[coef[1],coef[1]+coef[0]])
plt.plot([0,1],"g--")
plt.xlim([.0,.8])
plt.ylim([-0.0,.5])
#plt.show()
from math import floor
from collections import Counter
d=Counter()
h=Counter()
for x,y,peso in totdata:
col=floor(x*60)
h[col]+=y*peso
d[col]+=peso
k=sorted(h.keys())
plt.plot([ x/60 for x in k] ,[h[y]/d[y] for y in k],"ro")
for x,y,peso in totdata:
col=floor(x*200)
h[col]+=y*peso
d[col]+=peso
k=sorted(h.keys())
#plt.scatter([ x/200 for x in k] ,[h[y]/d[y] for y in k])
plt.show()
# In[12]:
for prov in ['Navarra',u'Araba / Álava', 'Bizkaia',u'Gipuzkoa']:
siu=0
data=[]
for dist in j[prov].keys():
pod,iu,conf=0,0,0
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for partido in j[prov][dist]['detalle']['2015']:
if partido['nombre'][:5] == 'PODEM':
pod+=v(partido)
if partido['nombre'][:2] == 'IU' or partido['nombre']== u'UP: IULV-CA, UPeC' or sum([x == 'IU' or x=='UP' or x=='UPB: IU' or x=='UPeC' or x==' UPeC' for x in partido['nombre'].split('-')]) :
siu+=v(partido)
iu+=v(partido)
for partido in j[prov][dist]['detalle']['2016']:
if partido['nombre'][:5] == 'PODEM':
conf+=v(partido)
peso=float(pod+iu)
if peso > 50 and peso < 80000 and dist !='Bilbao':
mezcla=float(iu)/peso
perdida=float(pod+iu-conf)/peso
#if perdida > 0.25 and peso > 10000: print prov,dist, pod,iu,conf
data.append([mezcla*100,perdida*100,peso/1000])
if siu==0:
pass
#print prov, "no procede"
else:
print (prov,)
t=np.array(data)
plt.scatter(t[:,0],t[:,1],s=t[:,2])
#plt.xlim([0,100])
#plt.ylim([-50,50])
plt.show()
# In[15]:
import numpy as np
import matplotlib.pyplot as plt
get_ipython().magic('matplotlib inline')
from math import sqrt
def v(p):
return int(p['votos'].replace('.',''))
totdata=[]
for prov in j.keys():
siu=0
data=[]
for dist in j[prov].keys():
pod,iu,conf=0,0,0
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for partido in j[prov][dist]['detalle']['2015']:
if partido['nombre'][:5] == 'PODEM':
pod+=v(partido)
if partido['nombre'][:2] == 'IU' or partido['nombre']== u'UP: IULV-CA, UPeC' or sum([x == 'IU' or x=='UP' or x=='UPB: IU' or x=='UPeC' or x==' UPeC' for x in partido['nombre'].split('-')]) :
siu+=v(partido)
iu+=v(partido)
for partido in j[prov][dist]['detalle']['2016']:
if partido['nombre'][:5] == 'PODEM':
conf+=v(partido)
peso=float(pod+iu)
if peso > 100 and peso < 80000 and dist !='Bilbao':
mezcla=float(iu)/peso
perdida=float(pod+iu-conf)/peso
#if perdida > 0.25 and peso > 10000: print prov,dist, pod,iu,conf
data.append([mezcla,perdida,sqrt(peso/1000)])
if siu==0 or prov in ['Ceuta','Navarra',u'Araba / Álava', 'Bizkaia','Gipuzkoa','Illes Balears','Las Palmas']:
pass
#print prov, "no procede"
else:
t=np.array(data)
coef, residuals, rank, singular_values, rcond = np.polyfit(t[:,0],t[:,1],1,w=t[:,2],full=True)
print (prov, residuals, residuals[0]/len(data), coef[1],coef[0]+coef[1])
plt.scatter(t[:,0],t[:,1],s=t[:,2])
plt.plot([0,1],[coef[1],coef[1]+coef[0]])
plt.xlim([.05,.35])
plt.ylim([-.05,.45])
plt.show()
# In[17]:
def vpc(p):
return float(p['votos%'].replace(',','.').replace('%',''))
totdata=[]
for prov in j.keys():
siu=0
data=[]
for dist in j[prov].keys():
pod,iu,conf=0,0,0
iupc,podpc=0,0
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for partido in j[prov][dist]['detalle']['2015']:
if partido['nombre'][:5] == 'PODEM':
pod+=v(partido)
podpc=vpc(partido)
if partido['nombre'][:2] == 'IU' or partido['nombre']== u'UP: IULV-CA, UPeC' or sum([x == 'IU' or x=='UP' or x=='UPB: IU' or x=='UPeC' or x==' UPeC' for x in partido['nombre'].split('-')]) :
siu+=v(partido)
iu+=v(partido)
iupc=vpc(partido)
for partido in j[prov][dist]['detalle']['2016']:
if partido['nombre'][:5] == 'PODEM':
conf+=v(partido)
peso=float(pod+iu)
if peso > 20 and peso < 80000 and dist !='Bilbao':
#if 20000 < peso and peso > 2000:
mezcla=float(iu)/peso
perdida=float(pod+iu-conf)/peso
#if perdida > 0.25 and peso > 10000: print prov,dist, pod,iu,conf
data.append([iupc,podpc,perdida*perdida*200])
if siu==0 or prov in ['Navarra',u'Araba / Álava', 'Bizkaia','Gipuzkoa','Illes Balears','Las Palmas']:
pass
#print prov, "no procede"
else:
#print prov,
for d in data: totdata.append(d)
print
t=np.array(totdata)
#t=np.array(data)
coef, residuals, rank, singular_values, rcond = np.polyfit(t[:,0],t[:,1],1,w=t[:,2],full=True)
print (residuals, coef, coef[1],coef[0]+coef[1])
plt.figure(figsize=(12,10))
plt.scatter(t[:,0],t[:,1],s=t[:,2])
plt.plot([0,30],[coef[1],coef[1]+coef[0]*30])
plt.plot([0,30],[2.5,2.5+3.0*30])
#plt.plot([0,1],"g--")
plt.xlim([.0,40])
plt.ylim([-0.0,40])
#plt.show()
plt.show()
# In[105]:
def v(p):
if p['votos']!='':
return int(p['votos'].replace('.',''))
return 0
from collections import defaultdict
totdata=[]
for prov in j.keys():
siu=0
data=[]
for dist in j[prov].keys():
pod,iu,conf=0,0,0
iupc,podpc=0,0
v15=defaultdict(lambda:0)
v16=defaultdict(lambda:0)
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for partido in j[prov][dist]['detalle']['2015']:
v15[partido['nombre']]=v(partido)
if partido['nombre'][:5] == 'PODEM':
pod+=v(partido)
podpc=vpc(partido)
if partido['nombre'][:2] == 'IU' or partido['nombre']== u'UP: IULV-CA, UPeC' or sum([x == 'IU' or x=='UP' or x=='UPB: IU' or x=='UPeC' or x==' UPeC' for x in partido['nombre'].split('-')]) :
siu+=v(partido)
iu+=v(partido)
iupc=vpc(partido)
for partido in j[prov][dist]['detalle']['2016']:
v16[partido['nombre']]=v(partido)
if partido['nombre'][:5] == 'PODEM':
conf+=v(partido)
peso=float(pod+iu)
if peso > 200 and peso < 80000 and dist !='Bilbao':
#if 20000 < peso and peso > 2000:
#fuga=v16["C's"]+v16["C´s"]-v15["C's"]-v15["C´s"]
fuga=(v16['PSOE']-v15['PSOE'])
fuga-=(v15['UPyD']-v16['UPyD'])
fuga2=(v16['PACMA']-v15['PACMA'])+(v16['PCPE']-v15['PCPE'])
mezcla=float(iu)/(peso)
fuga-=(iu+pod-conf)*(1-mezcla) # -fuga2
perdida=float(conf-fuga)/peso
sorpaso=float(v16['PSOE'])/(1+conf)
#if perdida > 0.25 and peso > 10000: print prov,dist, pod,iu,conf
data.append([mezcla,fuga/peso,peso/1000])
if siu==0 or prov in ['Navarra',u'Araba / Álava', 'Bizkaia','Gipuzkoa','Illes Balears','Las Palmas']:
pass
#print prov, "no procede"
else:
#print prov,
for d in data: totdata.append(d)
print
t=np.array(totdata)
#t=np.array(data)
coef, residuals, rank, singular_values, rcond = np.polyfit(t[:,0],t[:,1],1,w=t[:,2],full=True)
print (residuals, coef, coef[1],coef[0]+coef[1])
plt.figure(figsize=(12,10))
plt.scatter(t[:,0],t[:,1],s=t[:,2])
#plt.plot([0,30],[coef[1],coef[1]+coef[0]*30])
#plt.plot([0,1],"g--")
plt.xlim([0,0.6])
#plt.ylim([-0.0,0.40])
#plt.show()
plt.show()
# In[33]:
def v(p):
if p['votos']!='':
return int(p['votos'].replace('.',''))
return 0
from collections import defaultdict
totdata=[]
for prov in j.keys():
siu=0
data=[]
for dist in j[prov].keys():
pod,iu,conf=0,0,0
iupc,podpc=0,0
v15=defaultdict(lambda:0)
v16=defaultdict(lambda:0)
#el otro tipo es 'resumen', que guarda dict con la suma correcta sin duplicar distritos
for partido in j[prov][dist]['detalle']['2015']:
v15[partido['nombre']]=v(partido)
if partido['nombre'][:5] == 'PODEM':
pod+=v(partido)
podpc=vpc(partido)
if partido['nombre'][:2] == 'IU' or partido['nombre']== u'UP: IULV-CA, UPeC' or sum([x == 'IU' or x=='UP' or x=='UPB: IU' or x=='UPeC' or x==' UPeC' for x in partido['nombre'].split('-')]) :
siu+=v(partido)
iu+=v(partido)
iupc=vpc(partido)
for partido in j[prov][dist]['detalle']['2016']:
v16[partido['nombre']]=v(partido)
if partido['nombre'][:5] == 'PODEM':
conf+=v(partido)
peso=float(pod+iu)
if peso > 20 and peso < 80000 and dist !='Bilbao':
#if 20000 < peso and peso > 2000:
fuga=v16['PSOE']-v15['PSOE']-(v15['UPyD']-v16['UPyD'])
mezcla=float(iu)/peso
perdida=float(pod+iu-conf)/peso
#if perdida > 0.25 and peso > 10000: print prov,dist, pod,iu,conf
data.append([mezcla,perdida,peso/1000])
if siu==0 or prov in ['Navarra',u'Araba / Álava', 'Bizkaia','Gipuzkoa','Illes Balears','Las Palmas']:
pass
#print prov, "no procede"
else:
#print prov,
for d in data: totdata.append(d)
print
t=np.array(totdata)
#t=np.array(data)
coef, residuals, rank, singular_values, rcond = np.polyfit(t[:,0],t[:,1],1,w=t[:,2],full=True)
print (residuals, coef, coef[1],coef[0]+coef[1])
plt.figure(figsize=(12,10))
plt.scatter(t[:,0],t[:,1],s=t[:,2])
#plt.plot([0,30],[coef[1],coef[1]+coef[0]*30])
plt.plot([0,1],"g--")
plt.xlim([.0,1])
plt.ylim([-0.0,.40])
#plt.show()
plt.show()
# In[ ]:
This file has been truncated, but you can view the full file.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment