gauss314 commited on
Commit
2dce673
·
1 Parent(s): 5eb6012
Files changed (2) hide show
  1. .ipynb_checkpoints/app-checkpoint.py +54 -6
  2. app.py +54 -6
.ipynb_checkpoints/app-checkpoint.py CHANGED
@@ -27,6 +27,8 @@ renuevan = {'BUENOS AIRES': 35,
27
  'TIERRA DEL FUEGO': 3,
28
  'TUCUMAN': 5
29
  }
 
 
30
 
31
  paso = {'BUENOS AIRES': {'LLA': 1921758, 'JxC': 2537178 , 'UP':2741730, 'FIT':292039 },
32
  'CATAMARCA': {'LLA': 29047, 'JxC': 42087 , 'UP':88614 },
@@ -61,6 +63,11 @@ def dhont(results, bancas):
61
  r = df.melt(id_vars=["lista"]).sort_values('value', ascending=False).head(bancas)
62
  return r.groupby('lista').size().to_dict()
63
 
 
 
 
 
 
64
  def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje):
65
  migracion_porcentajes = {
66
  lista: {destino: voto/sum(votos.values()) for destino, voto in votos.items()}
@@ -70,6 +77,7 @@ def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje
70
  r = []
71
  flow = {}
72
  total = {}
 
73
  for pcia in list(paso.keys()):
74
  results, bancas = paso[pcia], renuevan[pcia]
75
  coef_ausentes = [x/sum(ausentes.values()) for x in ausentes.values()]
@@ -90,10 +98,15 @@ def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje
90
  results[partido] = results[partido] + flow[partido]
91
 
92
  total[pcia] = results
 
 
93
  r.append(dhont(results, bancas))
94
 
95
- return r, total
 
 
96
 
 
97
 
98
  ausentes_porcentaje = 0.12 # porcentaje de los que ya votaron en paso. Ej 0.1 es 70%=>77%
99
  boundary_lla_jxc, boundary_jxc_up = st.sidebar.slider("Votos de ausentes en Paso en genrales (LLA/JxC/UP)", 0, 100, (33, 67))
@@ -102,9 +115,9 @@ ausentes_lla = boundary_lla_jxc
102
  ausentes_jxc = boundary_jxc_up - boundary_lla_jxc
103
  ausentes_up = 100 - boundary_jxc_up
104
 
105
- st.sidebar.text(f"% por LLA: {ausentes_lla}%")
106
- st.sidebar.text(f"% por JxC: {ausentes_jxc}%")
107
- st.sidebar.text(f"% por UP: {ausentes_up}%")
108
  st.sidebar.markdown("\n\n", unsafe_allow_html=True)
109
 
110
  ausentes = {
@@ -113,6 +126,7 @@ ausentes = {
113
  'UP': ausentes_up
114
  }
115
 
 
116
 
117
  migracion = {
118
  'JxC': {
@@ -132,7 +146,7 @@ migracion = {
132
  for partido in ['JxC', 'LLA', 'UP']:
133
  migracion[partido][partido] = 100 - sum([migracion[partido][otro_partido] for otro_partido in ['JxC', 'LLA', 'UP'] if otro_partido != partido])
134
 
135
- r, total = calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje=0.1)
136
 
137
  st.subheader("Diputados por fuerza política")
138
  df_bancas = pd.DataFrame(data=r, index=paso.keys()).fillna(0).astype(int)
@@ -196,5 +210,39 @@ fig.update_traces(
196
  st.plotly_chart(fig)
197
 
198
 
199
- st.subheader("Resultados % en diputados total nacional")
200
  st.dataframe(df_bancas, height=900, use_container_width=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  'TIERRA DEL FUEGO': 3,
28
  'TUCUMAN': 5
29
  }
30
+ senado_2023 = ['BUENOS AIRES','FORMOSA','JUJUY','LA RIOJA','MISIONES','SAN JUAN','SAN LUIS','SANTA CRUZ']
31
+
32
 
33
  paso = {'BUENOS AIRES': {'LLA': 1921758, 'JxC': 2537178 , 'UP':2741730, 'FIT':292039 },
34
  'CATAMARCA': {'LLA': 29047, 'JxC': 42087 , 'UP':88614 },
 
63
  r = df.melt(id_vars=["lista"]).sort_values('value', ascending=False).head(bancas)
64
  return r.groupby('lista').size().to_dict()
65
 
66
+ def dhont_senado(results):
67
+ df = pd.DataFrame([results], index=['votos']).T
68
+ partidos = list(df.sort_values('votos', ascending=False).head(2).index)
69
+ return {partidos[0]:2, partidos[1]:1}
70
+
71
  def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje):
72
  migracion_porcentajes = {
73
  lista: {destino: voto/sum(votos.values()) for destino, voto in votos.items()}
 
77
  r = []
78
  flow = {}
79
  total = {}
80
+ r_senado = []
81
  for pcia in list(paso.keys()):
82
  results, bancas = paso[pcia], renuevan[pcia]
83
  coef_ausentes = [x/sum(ausentes.values()) for x in ausentes.values()]
 
98
  results[partido] = results[partido] + flow[partido]
99
 
100
  total[pcia] = results
101
+ if pcia in senado_2023:
102
+ r_senado.append(dhont_senado(results))
103
  r.append(dhont(results, bancas))
104
 
105
+ return r, total, r_senado
106
+
107
+
108
 
109
+ st.sidebar.title("Simulacion Ausentes")
110
 
111
  ausentes_porcentaje = 0.12 # porcentaje de los que ya votaron en paso. Ej 0.1 es 70%=>77%
112
  boundary_lla_jxc, boundary_jxc_up = st.sidebar.slider("Votos de ausentes en Paso en genrales (LLA/JxC/UP)", 0, 100, (33, 67))
 
115
  ausentes_jxc = boundary_jxc_up - boundary_lla_jxc
116
  ausentes_up = 100 - boundary_jxc_up
117
 
118
+ st.sidebar.text(f"% Ausentes por LLA: {ausentes_lla}%")
119
+ st.sidebar.text(f"% Ausentes por JxC: {ausentes_jxc}%")
120
+ st.sidebar.text(f"% Ausentes por UP: {ausentes_up}%")
121
  st.sidebar.markdown("\n\n", unsafe_allow_html=True)
122
 
123
  ausentes = {
 
126
  'UP': ausentes_up
127
  }
128
 
129
+ st.sidebar.title("Simulacion cambio de votos")
130
 
131
  migracion = {
132
  'JxC': {
 
146
  for partido in ['JxC', 'LLA', 'UP']:
147
  migracion[partido][partido] = 100 - sum([migracion[partido][otro_partido] for otro_partido in ['JxC', 'LLA', 'UP'] if otro_partido != partido])
148
 
149
+ r, total, r_senado = calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje=0.1)
150
 
151
  st.subheader("Diputados por fuerza política")
152
  df_bancas = pd.DataFrame(data=r, index=paso.keys()).fillna(0).astype(int)
 
210
  st.plotly_chart(fig)
211
 
212
 
213
+ st.subheader("Diputados nuevos por provincia")
214
  st.dataframe(df_bancas, height=900, use_container_width=True)
215
+
216
+
217
+ st.subheader("Senadores por Fuerza politica")
218
+ df_bancas_senado = pd.DataFrame(data=r_senado, index=senado_2023).fillna(0).astype(int)
219
+ df_sum_senado = df_bancas_senado.sum().to_frame(name='Nuevos')
220
+ df_sum_senado['Salientes'] = {'JxC':11, 'LLA':0, 'UP':10, 'Provincial':2}
221
+ df_sum_senado['Netos'] = df_sum_senado['Nuevos'] - df_sum_senado['Salientes']
222
+ df_sum_senado['Conserva'] = {'JxC':22, 'LLA':0, 'UP':23, 'Provincial':6}
223
+ df_sum_senado['Nueva comp'] = df_sum_senado['Conserva'] + df_sum_senado['Nuevos']
224
+ st.write(df_sum_senado)
225
+
226
+ st.subheader("Senadores Nuevos por Provincia")
227
+ df_bancas_senado = pd.DataFrame(data=r_senado, index=senado_2023).fillna(0).astype(int)
228
+ st.write(df_bancas_senado)
229
+
230
+ st.subheader("Votos por fuerza política por provincia (Diputados)")
231
+ df_votos = pd.DataFrame(data=total).T[['LLA','JxC','UP']].astype(int)
232
+ st.dataframe(df_votos, height=900, use_container_width=True)
233
+
234
+
235
+
236
+
237
+ import plotly.graph_objects as go
238
+ st.subheader("% Votos por fuerza política total Nacional (Diputados)")
239
+ st.text("Calculo de % sobre 3 fuerzas mayoritarias")
240
+ p_votos = df_votos.sum()
241
+ p_votos.columns = ['Porcentaje']
242
+ fig = go.Figure(data=[go.Pie(labels=p_votos.index,
243
+ values=p_votos,
244
+ hole=.3,
245
+ textinfo='percent+label',
246
+ marker=dict(colors=[colors[key] for key in p_votos.index]))])
247
+ fig.update_layout(title_text='')
248
+ st.plotly_chart(fig)
app.py CHANGED
@@ -27,6 +27,8 @@ renuevan = {'BUENOS AIRES': 35,
27
  'TIERRA DEL FUEGO': 3,
28
  'TUCUMAN': 5
29
  }
 
 
30
 
31
  paso = {'BUENOS AIRES': {'LLA': 1921758, 'JxC': 2537178 , 'UP':2741730, 'FIT':292039 },
32
  'CATAMARCA': {'LLA': 29047, 'JxC': 42087 , 'UP':88614 },
@@ -61,6 +63,11 @@ def dhont(results, bancas):
61
  r = df.melt(id_vars=["lista"]).sort_values('value', ascending=False).head(bancas)
62
  return r.groupby('lista').size().to_dict()
63
 
 
 
 
 
 
64
  def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje):
65
  migracion_porcentajes = {
66
  lista: {destino: voto/sum(votos.values()) for destino, voto in votos.items()}
@@ -70,6 +77,7 @@ def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje
70
  r = []
71
  flow = {}
72
  total = {}
 
73
  for pcia in list(paso.keys()):
74
  results, bancas = paso[pcia], renuevan[pcia]
75
  coef_ausentes = [x/sum(ausentes.values()) for x in ausentes.values()]
@@ -90,10 +98,15 @@ def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje
90
  results[partido] = results[partido] + flow[partido]
91
 
92
  total[pcia] = results
 
 
93
  r.append(dhont(results, bancas))
94
 
95
- return r, total
 
 
96
 
 
97
 
98
  ausentes_porcentaje = 0.12 # porcentaje de los que ya votaron en paso. Ej 0.1 es 70%=>77%
99
  boundary_lla_jxc, boundary_jxc_up = st.sidebar.slider("Votos de ausentes en Paso en genrales (LLA/JxC/UP)", 0, 100, (33, 67))
@@ -102,9 +115,9 @@ ausentes_lla = boundary_lla_jxc
102
  ausentes_jxc = boundary_jxc_up - boundary_lla_jxc
103
  ausentes_up = 100 - boundary_jxc_up
104
 
105
- st.sidebar.text(f"% por LLA: {ausentes_lla}%")
106
- st.sidebar.text(f"% por JxC: {ausentes_jxc}%")
107
- st.sidebar.text(f"% por UP: {ausentes_up}%")
108
  st.sidebar.markdown("\n\n", unsafe_allow_html=True)
109
 
110
  ausentes = {
@@ -113,6 +126,7 @@ ausentes = {
113
  'UP': ausentes_up
114
  }
115
 
 
116
 
117
  migracion = {
118
  'JxC': {
@@ -132,7 +146,7 @@ migracion = {
132
  for partido in ['JxC', 'LLA', 'UP']:
133
  migracion[partido][partido] = 100 - sum([migracion[partido][otro_partido] for otro_partido in ['JxC', 'LLA', 'UP'] if otro_partido != partido])
134
 
135
- r, total = calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje=0.1)
136
 
137
  st.subheader("Diputados por fuerza política")
138
  df_bancas = pd.DataFrame(data=r, index=paso.keys()).fillna(0).astype(int)
@@ -196,5 +210,39 @@ fig.update_traces(
196
  st.plotly_chart(fig)
197
 
198
 
199
- st.subheader("Resultados % en diputados total nacional")
200
  st.dataframe(df_bancas, height=900, use_container_width=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  'TIERRA DEL FUEGO': 3,
28
  'TUCUMAN': 5
29
  }
30
+ senado_2023 = ['BUENOS AIRES','FORMOSA','JUJUY','LA RIOJA','MISIONES','SAN JUAN','SAN LUIS','SANTA CRUZ']
31
+
32
 
33
  paso = {'BUENOS AIRES': {'LLA': 1921758, 'JxC': 2537178 , 'UP':2741730, 'FIT':292039 },
34
  'CATAMARCA': {'LLA': 29047, 'JxC': 42087 , 'UP':88614 },
 
63
  r = df.melt(id_vars=["lista"]).sort_values('value', ascending=False).head(bancas)
64
  return r.groupby('lista').size().to_dict()
65
 
66
+ def dhont_senado(results):
67
+ df = pd.DataFrame([results], index=['votos']).T
68
+ partidos = list(df.sort_values('votos', ascending=False).head(2).index)
69
+ return {partidos[0]:2, partidos[1]:1}
70
+
71
  def calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje):
72
  migracion_porcentajes = {
73
  lista: {destino: voto/sum(votos.values()) for destino, voto in votos.items()}
 
77
  r = []
78
  flow = {}
79
  total = {}
80
+ r_senado = []
81
  for pcia in list(paso.keys()):
82
  results, bancas = paso[pcia], renuevan[pcia]
83
  coef_ausentes = [x/sum(ausentes.values()) for x in ausentes.values()]
 
98
  results[partido] = results[partido] + flow[partido]
99
 
100
  total[pcia] = results
101
+ if pcia in senado_2023:
102
+ r_senado.append(dhont_senado(results))
103
  r.append(dhont(results, bancas))
104
 
105
+ return r, total, r_senado
106
+
107
+
108
 
109
+ st.sidebar.title("Simulacion Ausentes")
110
 
111
  ausentes_porcentaje = 0.12 # porcentaje de los que ya votaron en paso. Ej 0.1 es 70%=>77%
112
  boundary_lla_jxc, boundary_jxc_up = st.sidebar.slider("Votos de ausentes en Paso en genrales (LLA/JxC/UP)", 0, 100, (33, 67))
 
115
  ausentes_jxc = boundary_jxc_up - boundary_lla_jxc
116
  ausentes_up = 100 - boundary_jxc_up
117
 
118
+ st.sidebar.text(f"% Ausentes por LLA: {ausentes_lla}%")
119
+ st.sidebar.text(f"% Ausentes por JxC: {ausentes_jxc}%")
120
+ st.sidebar.text(f"% Ausentes por UP: {ausentes_up}%")
121
  st.sidebar.markdown("\n\n", unsafe_allow_html=True)
122
 
123
  ausentes = {
 
126
  'UP': ausentes_up
127
  }
128
 
129
+ st.sidebar.title("Simulacion cambio de votos")
130
 
131
  migracion = {
132
  'JxC': {
 
146
  for partido in ['JxC', 'LLA', 'UP']:
147
  migracion[partido][partido] = 100 - sum([migracion[partido][otro_partido] for otro_partido in ['JxC', 'LLA', 'UP'] if otro_partido != partido])
148
 
149
+ r, total, r_senado = calcular_resultados(paso, renuevan, ausentes, migracion, ausentes_porcentaje=0.1)
150
 
151
  st.subheader("Diputados por fuerza política")
152
  df_bancas = pd.DataFrame(data=r, index=paso.keys()).fillna(0).astype(int)
 
210
  st.plotly_chart(fig)
211
 
212
 
213
+ st.subheader("Diputados nuevos por provincia")
214
  st.dataframe(df_bancas, height=900, use_container_width=True)
215
+
216
+
217
+ st.subheader("Senadores por Fuerza politica")
218
+ df_bancas_senado = pd.DataFrame(data=r_senado, index=senado_2023).fillna(0).astype(int)
219
+ df_sum_senado = df_bancas_senado.sum().to_frame(name='Nuevos')
220
+ df_sum_senado['Salientes'] = {'JxC':11, 'LLA':0, 'UP':10, 'Provincial':2}
221
+ df_sum_senado['Netos'] = df_sum_senado['Nuevos'] - df_sum_senado['Salientes']
222
+ df_sum_senado['Conserva'] = {'JxC':22, 'LLA':0, 'UP':23, 'Provincial':6}
223
+ df_sum_senado['Nueva comp'] = df_sum_senado['Conserva'] + df_sum_senado['Nuevos']
224
+ st.write(df_sum_senado)
225
+
226
+ st.subheader("Senadores Nuevos por Provincia")
227
+ df_bancas_senado = pd.DataFrame(data=r_senado, index=senado_2023).fillna(0).astype(int)
228
+ st.write(df_bancas_senado)
229
+
230
+ st.subheader("Votos por fuerza política por provincia (Diputados)")
231
+ df_votos = pd.DataFrame(data=total).T[['LLA','JxC','UP']].astype(int)
232
+ st.dataframe(df_votos, height=900, use_container_width=True)
233
+
234
+
235
+
236
+
237
+ import plotly.graph_objects as go
238
+ st.subheader("% Votos por fuerza política total Nacional (Diputados)")
239
+ st.text("Calculo de % sobre 3 fuerzas mayoritarias")
240
+ p_votos = df_votos.sum()
241
+ p_votos.columns = ['Porcentaje']
242
+ fig = go.Figure(data=[go.Pie(labels=p_votos.index,
243
+ values=p_votos,
244
+ hole=.3,
245
+ textinfo='percent+label',
246
+ marker=dict(colors=[colors[key] for key in p_votos.index]))])
247
+ fig.update_layout(title_text='')
248
+ st.plotly_chart(fig)