Estructura - pforero/electopy GitHub Wiki
Se me ocurre usar dos clases
Mapa Electoral
Electopy.Mapa_Electoral(circunscripciones,partidos,diputados)
El Mapa Electoral tiene tres atributos
- Circunscripciones
- Partidos
- Escaños por Circunscripcion
Esto podria ir dentro de la clase Elecciones. La unica razon por la que pienso que podria ir por separado, es que para comparar dos Elecciones, deberian de tener el mismo Mapa Electoral, pero con votos distintos. Ya que es asi, no se si el Mapa Electoral deberia de ser self contained, como algo separado a Votos.
Elecciones
Electopy.Elecciones(mapa electoral,votos)
Elecciones es una clase que se crea con dos inputs
- Mapa Electoral
- Votos
Los votos han de ser una matriz, donde las filas son circunscripciones (y han de ser las mismas que las de el Mapa Electoral), y las columnas partidos (y los mismos que el Mapa Electoral).
Elecciones tendra los siguientes Metodos:
Votos
Elecciones.votos(partido,circunscripcion)
Te dara el numero de votos obtenidos por el Partido en esa circunscripcion. Si se pone solo un partido, sale todos los votos del partido en cada circunscripcion. Y si se pone solo la circunscripcion, sale todos los votos de cada partido en esa circunscripcion. Si no se pone nada sale todos los votos de cada partido en cada circunscripcion. Lo ideal es que tambien puedas meter listas de partidos y circunscripciones y te las de.
Diputados
Elecciones.diputados(partido,circunscripcion)
Es similar a votos, pero te da los diputados en vez de los votos.
Parlamento
Elecciones.parlamento()
Te da la composicion del parlamento. Es decir el total de diputados por cada partido. Parlamento tambien tiene un metodo adicional
Visual
Elecciones.parlamento().visual()
Te da una representacion visual de la composicion del parlamento.
Mas Votado
Elecciones.mas_votado(circunscripcion)
Te da el partido mas votado en cada circunscripcion. Tambien tiene un metodo adicional
Visual
Elecciones.mas_votado().visual()
Te muestra un mapa de España con el color del partido mas votado de cada circunscripcion
Transformacion
Eleccion.transformacion(transformacion)
Te da unas elecciones nuevas con el mismo Mapa Electoral, pero con los votos cambiados, siguiendo las normas de la transformacion. Esto seria algo como que el 100% de los votos de un partido vayan a parar a otro partido.
Comparar
Eleccion.comparar(eleccion')
Si las dos elecciones tienen el mismo Mapa Electoral compara el resultado de las elecciones. Dependiendo de lo que queramos meter, a lo mejor el resultado deberia de ser una clase nueva en si mismo. Pero por ahora basta con solo la diferencia de escaños, asi que puede ser solo un metodo. Tambien se podria acceder a esta funcionalidad con
Electopy.comparar(eleccion, eleccion')
Tendria el siguiente submetodo
Visual
Electopy.comparar(eleccion, eleccion').visual()
Daria una representacion visual de la comparacion
Metodos de Carga
A parte del metodo de meter tu el Mapa Electoral y el Data Frame de votos, habria dos metodos mas que crea el objeto de Elecciones por ti
From MIR
Electopy.from_mir(year=2019)
Este metodo cargaria las elecciones del 2019 descargando los resultados de la pagina web del MIR. Luego haria las transformaciones necesarias para crear las Elecciones y te daria el objeto correspondiente a esas elecciones
From Data Frame
Electopy.from_df(votos,diputados)
Seria el mismo Data Frame de votos que hace falta para crear el objeto. Se sacaria del indice las cirscunscipciones, y de columnas los partidos. Diputados seria una Series, que el indice son las circunscripciones (y ha de coincidir con los de el df), y los valores el numero de escaños. La diferencia entre el objeto Elecciones es que este metodo crea el Mapa Electoral por ti.