En los sistemas de representación proporcional es necesario asignar a cada uno de los partidos o listas electorales un número de escaños en función de los votos recibidos. Uno de los métodos más utilizados es el método D’Hondt. Su objetivo es distribuir los escaños de manera proporcional a los votos obtenidos por cada partido o lista electoral. En esta entrada se verá en qué consiste el método D’Hondt y como se puede implementar en Python una función para asignar los escaños.
Fundamentos del método D’Hondt
El método D’Hondt, también conocido como el sistema D’Hondt, fue desarrollado por el matemático belga Victor D’Hondt a finales del siglo XIX. Siendo un método ampliamente utilizado en la actualidad en diferentes sistemas electorales. El objetivo del método D’Hondt es encontrar una manera de distribuir los escaños de manera justa y proporcional en un parlamento en función de los votos obtenidos por cada uno de los partidos o listas electorales.
El procedimiento para asignar los escaños según el método D’Hondt es:
- Votos obtenidos por cada partido: Primero, se recopilan los resultados electorales y se cuentan los votos obtenidos por cada partido o lista electoral.
- Divisor inicial: El método D’Hondt utiliza un divisor inicial que se ajusta durante el proceso de asignación de escaños. El divisor inicial es el número 1.
- Cálculo de cocientes: Se divide el número de votos obtenidos por cada partido entre el divisor actual para obtener un cociente. Este cociente representa cuántas veces el partido ha superado el divisor. \textrm {Cociente} = \frac{\textrm{Votos del partido}}{\textrm{Divisor actual}}
- Asignación de escaños: El escaño se asigna al partido que tenga el cociente más alto en cada ronda. Es decir, el partido que haya obtenido más votos en relación con el divisor actual. Ese partido recibe un escaño.
- Actualización del divisor: Después de asignar un escaño, se actualiza el divisor para el siguiente cálculo. El divisor se modifica dividiendo los votos obtenidos por cada partido entre el número de escaños que ya ha recibido más uno. \textrm{Divisor actualizado} = \frac{\textrm{Votos del partido}}{\textrm{Esca~nos asignados} + 1}
- Repetición del proceso: Los pasos 3 al 5 se repiten hasta que se asignan todos los escaños disponibles.
A medida que se asignan escaños, los cocientes de los partidos cambian, lo que afecta a la asignación de los escaños en las rondas posteriores.
Implementación en Python
El método D’Hondt se puede implementar fácilmente en Python mediante una función que solamente necesita el número de votos de cada partido en una lista y los escaños a repartir. Obteniendo como resultado el número de escaños asignados a cada partido. Una posible implementación de esta función puede ser la que se muestra a continuación.
def dhondt_method(votes, num_seats): """ Método para aplicar el método D'Hondt y obtener la asignación de escaños. Parámetros ---------- votes : array-like, shape (num_parties, ) Una lista o array con los votos obtenidos por cada partido. num_seats : int Número total de escaños a asignar. Retorna ------- seats : array, shape (num_parties,) Una lista con el número de escaños asignados a cada partido. """ num_parties = len(votes) # Inicializar la asignación de escaños a cero seats = [0] * num_parties # Realizar el proceso de asignación de escaños for _ in range(num_seats): max_index = max(range(num_parties), key=lambda i: votes[i] / (seats[i] + 1)) seats[max_index] += 1 return seats
En esta función primero se calcula el número de partidos a partir de la lista de votos. Una vez hecho esto se crea una lista en la que se cargará el número de asientos asignados a cada uno de los partidos o listas electorales. Posteriormente se inicia un bucle en el que en cada iteración se asignará el escaño a la lista con el resto más alto.
Ahora se puede ejecutar el código para ver cómo se reparten diferentes número de escaños entre varios partidos o listas electorales.
votes = [15000, 12000, 8000, 6000, 2000, 1200] print(dhondt_method(votes, 4)) print(dhondt_method(votes, 10)) print(dhondt_method(votes, 35))
[2, 1, 1, 0, 0, 0] [4, 3, 2, 1, 0, 0] [12, 10, 6, 5, 1, 1]
El método D’Hondt en España
En España, al igual que en otros países, las leyes electorales aplican el método D’Hondt con ciertas peculiaridades que pueden afectar los resultados electorales. Las dos más importantes son:
- Circunscripciones provinciales: El sistema electoral español usa las provincias como circunscripciones electorales independientes para la asignación de los escaños. Esto significa que los escaños se asignan en función de los resultados obtenidos por separado en cada provincia y no en todo el territorio. Salvo en las elecciones europeas donde existe una única circunscripción para todo el territorio. Esta peculiaridad no afecta a la función implementada, solamente se tiene que ejecutar para cada una de las circunscripciones. Aunque sí que afecta a la proporcionalidad final de los escaños asignados.
- Umbral electoral mínimo: En España, existe un umbral electoral mínimo para poder obtener representación parlamentaria. Para acceder a los escaños, un partido o lista electoral debe superar un determinado porcentaje de votos a nivel de cada circunscripción. En las elecciones generales, el umbral es del 3% de los votos válidos emitidos, incluyendo en el recuento de votos válidos en blanco. Para algunas elecciones autonómicas el umbral de votos puede subir al 5%. Esta peculiaridad hace necesario incluir unos cambios en la función anterior.
Modificación de la función de Python para España
Para adaptar la función a las peculiaridades de la ley electoral española solamente se deben incluir dos parámetros: los votos en blanco y el umbral. Con ambos valores se puede descartar aquellos partidos que no pasan el corte y no entran en el reparto de escaños. Una función modificada se puede ver en el siguiente código.
def dhondt_method_spain(votes, num_seats, blank_votes, threshold=0.03): """ Método para aplicar el método D'Hondt y obtener la asignación de escaños en el sistema electoral español. Parámetros ---------- votes : array-like, shape (num_parties,) Una lista o array con los votos obtenidos por cada partido. num_seats : int Número total de escaños a asignar. blank_votes : int Número total de votos en blanco emitidos threshold : float, opcional El umbral electoral en decimal (por ejemplo, 0.03 para 3%). Por defecto, se asume un umbral del 3%. Retorna ------- seats : array, shape (n_parties,) Una lista con el número de escaños asignados a cada partido. """ num_parties = len(votes) # Aplicar el umbral electoral y obtener los partidos que superan el umbral total_votes = sum(votes) + blank_votes valid_parties = [i for i in range(num_parties) if votes[i] / total_votes >= threshold] # Inicializar la asignación de escaños a cero para todos los partidos seats = [0] * num_parties # Realizar el proceso de asignación de escaños for _ in range(num_seats): max_index = max(valid_parties, key=lambda i: votes[i] / (seats[i] + 1)) seats[max_index] += 1 return seats
La única modificación es la selección de los partidos válidos como aquellos que superan el umbral mínimo del 3% de voto sobre el total. Los que no superan este umbral se eliminan del reparto. Ahora se puede ver cómo afecta este cambio al reparto de escaños.
print(dhondt_method_spain(votes, 4, 1000)) print(dhondt_method_spain(votes, 10, 1000)) print(dhondt_method_spain(votes, 35, 1000))
[2, 1, 1, 0, 0, 0] [4, 3, 2, 1, 0, 0] [13, 10, 6, 5, 1, 0]
Tal como se puede apreciar en el ejemplo, respecto a cuando no se fija un umbral mínimo de votos para entrar en el reparto de escaños, sólo afecta a los resultados cuando el número de escaños es relativamente alto. Cuando la cantidad de escaños es inferior a 30, el propio funcionamiento del método D’Hondt exige un umbral mayor. En el ejemplo se puede ver como el último partido o lista electoral pierde el escaño por no alcanzar el 3%, incluyendo el voto el blanco solo alcanza un 2,6%. Escaño que en este caso se le asigna a la lista más votada.
El voto en blanco también puede afectar a los resultados, ya que esto puede hacer que algún partido se quede fuera del reparto. Esto se puede ver en el siguiente ejemplo.
print(dhondt_method_spain(votes, 4, 30000)) print(dhondt_method_spain(votes, 10, 30000)) print(dhondt_method_spain(votes, 35, 30000))
[2, 1, 1, 0, 0, 0] [4, 3, 2, 1, 0, 0] [13, 10, 7, 5, 0, 0]
Ahora el penúltimo partido o lista electoral también pierde el escaño debido al voto en blanco. Con 1000 votos en blanco esta tenía un 4,4% de los votos, pero si los votos en blanco son 30.000 solo tendrá un 2,6%, por lo que sale del reparto. En este caso es la tercera lista la que obtiene el escaño de esta.
Conclusiones
El método D’Hondt es ampliamente utilizado para repartir los escaños de forma proporcional en diferentes sistemas electorales. En esta entrada se ha visto como se puede implementar en Python e incluir las modificaciones necesarias para utilizarlo con las peculiaridades de las leyes electorales españolas. Para aquellos que quieran una implementación del método en Excel pueden consultar la siguiente publicación.
Aunque el método D’Hondt es uno de los más utilizados, el concepto de asignación proporcional de escaños no es exclusivo de él. Existen otros métodos, como el método Sainte-Laguë o el método Hare-Niemeyer, que también se utilizan para lograr un reparto proporcional de escaños en diferentes sistemas electorales.
Imágenes: Unsplash (Arnaud Jaegers)
Deja una respuesta