proyectos:analisis_votaciones_historicas_peru
¡Esta es una revisión vieja del documento!
Análisis de votaciones históricas
Notas para Elecciones Generales 2021
probando extraer las votaciones de las últimas elecciones generales del 2021:
Las direcciones para los JSON son:
-
- Ubigeos Total con paises: https://resultadoshistorico.onpe.gob.pe/assets/json/ecp/ubigeos/T.json
- Partidos Políticos (Resumen): https://resultadoshistorico.onpe.gob.pe/assets/json/results/10/000000.json
- Campo Presidencial:
- Resultados del Departamento: https://resultadoshistorico.onpe.gob.pe/assets/json/results/10/140000.json
- Resultados de la Provincia: https://resultadoshistorico.onpe.gob.pe/assets/json/results/10/140100.json
- Resultados de Distrito: https://resultadoshistorico.onpe.gob.pe/assets/json/results/10/140103.json
- Campo Congresal:
- Resultados Congresal: https://resultadoshistorico.onpe.gob.pe/assets/json/distritoelectoral/11.json
- Listar Congresistas: https://resultadoshistorico.onpe.gob.pe/assets/json/results/11/D44001.json
- Resultados por Candidatos: https://resultadoshistorico.onpe.gob.pe/assets/json/results/11/D44001/00000002.json
- Resultados por Organización Política: https://resultadoshistorico.onpe.gob.pe/assets/json/results/11.json
- Actas:
- Lista locales por distrito: https://resultadoshistorico.onpe.gob.pe/assets/json/mesas/locales/140103.json
- Acta/Mesa Datos (número de mesa): https://resultadoshistorico.onpe.gob.pe/assets/json/mesas/detalle/034376.json
- Acta Imagen (la dirección está en el JSON Mesa/Acta): https://resultadoshistorico.onpe.gob.pe/EG2021/IMAGENES/AC/C44073/PCP/ACPREC4407303437614.PDF
Para conseguir todos los datos, hay que recorrer guardar los datos de todas las actas, para ello hay que recorrer todas las mesas que da el listado de distritos y paises para votos extranjeros.
Consultas que he hecho con Postgresql para mostrar la data desde el resultado JSON.
Congresistas Por Actas:
-- ######## CONGRESISTAS POR ACTAS/MESAS WITH locales(ubigeo, distrito, codlocal, nomlocal, direc) AS ( SELECT l.distrito AS ubigeo ,'ATE' AS distrito ,r.elem::json->>'CCODI_LOCAL' AS codlocal ,r.elem::json->>'TNOMB_LOCAL' AS nomlocal ,r.elem::json->>'TDIRE_LOCAL' AS direc --,r.elem::json->>'TNOMB_LOCAL' AS nomlocal -- SELECT * FROM llamada AS l CROSS JOIN LATERAL JSONB_ARRAY_ELEMENTS_TEXT( l.rpta -> 'locales' ) AS r(elem) WHERE tipo = 'LOC' AND distrito = '140103' --id = 2 ),--WITH mesas (distrito, codlocal, nummesa, estadoprocesado) AS ( SELECT l.distrito AS distrito ,l.local AS codlocal ,r.elem::json->>'NUMMESA' AS nummesa ,r.elem::json->>'PROCESADO' AS estadoprocesado FROM llamada AS l CROSS JOIN LATERAL jsonb_array_elements_text( l.rpta->'mesasVotacion' ) AS r(elem) WHERE tipo = 'MES' and distrito = '140103' --AND local = 'C725' ),--WITH actas_votos ( id, tipo, distrito, codlocal, nummesa, NroLista, CodPartido, NomPartido, votos, top ) AS ( SELECT --x.*, l.id, l.tipo, l.distrito, l.local AS codlocal, l.mesa AS nummesa, r.elem::JSON->>'NLISTA' AS NroLista ,r.elem::JSON->>'CCODI_AUTO' AS CodPartido ,r.elem::JSON->>'AUTORIDAD' AS NomPartido ,r.elem::JSON->>'congresal' AS votos --,r.elem::JSON->>SELECT * ,RANK() OVER (PARTITION BY l.mesa ORDER BY (r.elem::JSON->>'congresal')::INT DESC) AS top FROM llamada AS l CROSS JOIN LATERAL jsonb_array_elements_text( l.rpta->'procesos'->'generalCon'->'votos' ) AS r(elem) WHERE tipo = 'ACT' --AND id = 221 AND r.elem::JSON->>'NLISTA' IS NOT NULL ), --WITH actas_estado (nummesa, total_votos_validos, votos_en_blancos, votos_nulos, votos_impugnados, total_votos_emitidos) AS ( SELECT nummesa, "TOTAL VOTOS VALIDOS" AS total_votos_validos, "VOTOS EN BLANCO" AS votos_en_blancos, "VOTOS NULOS" AS votos_nulos, "VOTOS IMPUGNADOS" AS votos_impugnados, "TOTAL VOTOS EMITIDOS" AS total_votos_emitidos FROM crosstab( $$ SELECT nummesa::varchar(100) AS nummesa, nompartido::varchar(100) AS nompartido, votos::int AS votos FROM ( --CREATE TEMPORARY TABLE tbl AS SELECT --x.*, l.id, l.tipo, l.distrito, l.local AS codlocal, l.mesa AS nummesa, r.elem::JSON->>'NLISTA' AS NroLista ,r.elem::JSON->>'AUTORIDAD' AS NomPartido ,r.elem::JSON->>'congresal' AS votos --,r.elem::JSON->>SELECT * FROM llamada AS l CROSS JOIN LATERAL jsonb_array_elements_text( l.rpta->'procesos'->'generalCon'->'votos' -- <-------- ###### VOTOS CONGRESAL ) AS r(elem) WHERE tipo = 'ACT' --AND id = 221 AND r.elem::JSON->>'NLISTA' IS NULL ) AS w $$ ) AS ct("nummesa" VARCHAR(100), "TOTAL VOTOS VALIDOS" INT, "VOTOS EN BLANCO" INT, "VOTOS NULOS" INT, "VOTOS IMPUGNADOS" INT, "TOTAL VOTOS EMITIDOS" INT ) ) SELECT l.ubigeo, l.distrito, l.codlocal, l.nomlocal, l.direc, m.nummesa, --m.estadoprocesado, --a.nrolista, a.codpartido, a.nompartido, a.votos, a.top, ae.total_votos_validos, ae.votos_en_blancos, ae.votos_nulos, ae.votos_impugnados, ae.total_votos_emitidos FROM locales AS l LEFT JOIN mesas AS m ON m.codlocal = l.codlocal LEFT JOIN actas_votos AS a ON a.nummesa = m.nummesa LEFT JOIN actas_estado AS ae ON ae.nummesa = a.nummesa ORDER BY l.ubigeo DESC, m.codlocal ASC, m.nummesa ASC, a.top ASC
Congresistas Por Colegios:
-- ######## CONGRESISTAS POR COLEGIOS WITH locales(ubigeo, distrito, codlocal, nomlocal, direc) AS ( SELECT l.distrito AS ubigeo ,'ATE' AS distrito ,r.elem::json->>'CCODI_LOCAL' AS codlocal ,r.elem::json->>'TNOMB_LOCAL' AS nomlocal ,r.elem::json->>'TDIRE_LOCAL' AS direc --,r.elem::json->>'TNOMB_LOCAL' AS nomlocal -- SELECT * FROM llamada AS l CROSS JOIN LATERAL JSONB_ARRAY_ELEMENTS_TEXT( l.rpta -> 'locales' ) AS r(elem) WHERE tipo = 'LOC' AND distrito = '140103' --id = 2 ),--WITH mesas (distrito, codlocal, nummesa, estadoprocesado) AS ( SELECT l.distrito AS distrito ,l.local AS codlocal ,r.elem::json->>'NUMMESA' AS nummesa ,r.elem::json->>'PROCESADO' AS estadoprocesado FROM llamada AS l CROSS JOIN LATERAL jsonb_array_elements_text( l.rpta->'mesasVotacion' ) AS r(elem) WHERE tipo = 'MES' and distrito = '140103' --AND local = 'C725' ),--WITH actas_votos ( id, tipo, distrito, codlocal, nummesa, NroLista, CodPartido, NomPartido, votos, top ) AS ( SELECT --x.*, l.id, l.tipo, l.distrito, l.local AS codlocal, l.mesa AS nummesa, r.elem::JSON->>'NLISTA' AS NroLista ,r.elem::JSON->>'CCODI_AUTO' AS CodPartido ,r.elem::JSON->>'AUTORIDAD' AS NomPartido ,r.elem::JSON->>'congresal' AS votos --,r.elem::JSON->>SELECT * ,RANK() OVER (PARTITION BY l.mesa ORDER BY (r.elem::JSON->>'congresal')::INT DESC) AS top -- SELECT SUM( (r.elem::JSON->>'congresal')::INT ) AS sumar FROM llamada AS l CROSS JOIN LATERAL jsonb_array_elements_text( l.rpta->'procesos'->'generalCon'->'votos' ) AS r(elem) WHERE tipo = 'ACT' --AND id = 221 AND r.elem::JSON->>'NLISTA' IS NOT NULL ), actas_preestados ( codlocal, nompartido, votos) AS ( SELECT codlocal, nompartido, votos FROM ( --CREATE TEMPORARY TABLE tbl AS SELECT --x.*, --l.id, l.tipo, l.distrito, l.local AS codlocal --, l.mesa AS nummesa --,r.elem::JSON->>'NLISTA' AS NroLista ,r.elem::JSON->>'AUTORIDAD'::varchar AS NomPartido ,(r.elem::JSON->>'congresal')::int AS votos --,r.elem::JSON->>SELECT * FROM llamada AS l CROSS JOIN LATERAL jsonb_array_elements_text( l.rpta->'procesos'->'generalCon'->'votos' -- <-------- ###### VOTOS CONGRESAL ) AS r(elem) WHERE tipo = 'ACT' --AND l.local = 'W187' AND r.elem::JSON->>'AUTORIDAD' = 'TOTAL VOTOS VALIDOS' --'V143' --AND id = 221 AND r.elem::JSON->>'NLISTA' IS NULL ) AS w --WHERE codlocal = 'W187' --AND nompartido = 'TOTAL VOTOS VALIDOS' --GROUP BY codlocal, nompartido ORDER BY 1, 2 ), actas_estados ( codlocal, total_votos_validos, votos_en_blancos, votos_nulos, votos_impugnados, total_votos_emitidos ) AS ( SELECT ww.codlocal, ( SELECT SUM( votos ) FROM actas_preestados WHERE codlocal = ww.codlocal AND nompartido = 'TOTAL VOTOS VALIDOS' ) AS total_votos_validos, --'TOTAL VOTOS VALIDOS' ( SELECT SUM( votos ) FROM actas_preestados WHERE codlocal = ww.codlocal AND nompartido = 'VOTOS EN BLANCO' ) AS votos_en_blancos, --'TOTAL VOTOS VALIDOS' ( SELECT SUM( votos ) FROM actas_preestados WHERE codlocal = ww.codlocal AND nompartido = 'VOTOS NULOS' ) AS votos_nulos, --'TOTAL VOTOS VALIDOS' ( SELECT SUM( votos ) FROM actas_preestados WHERE codlocal = ww.codlocal AND nompartido = 'VOTOS IMPUGNADOS' ) AS votos_impugnados, --'TOTAL VOTOS VALIDOS' ( SELECT SUM( votos ) FROM actas_preestados WHERE codlocal = ww.codlocal AND nompartido = 'TOTAL VOTOS EMITIDOS' ) AS total_votos_emitidos FROM ( SELECT DISTINCT codlocal FROM actas_preestados ) AS ww ) SELECT l.ubigeo, l.distrito, l.codlocal, l.nomlocal, l.direc, --m.nummesa, --m.estadoprocesado, --a.nrolista, a.CodPartido, a.nompartido, SUM(a.votos::INT) AS votos--, -- a.top, ,RANK() OVER (PARTITION BY l.codlocal ORDER BY SUM(a.votos::INT)::INT DESC) AS top ,ae.total_votos_validos, ae.votos_en_blancos, ae.votos_nulos, ae.votos_impugnados, ae.total_votos_emitidos FROM locales AS l LEFT JOIN mesas AS m ON m.codlocal = l.codlocal LEFT JOIN actas_votos AS a ON a.nummesa = m.nummesa LEFT JOIN actas_estados AS ae ON ae.codlocal = a.codlocal --WHERE m.codlocal = 'W187'--'C731' GROUP BY l.ubigeo, l.distrito, l.codlocal, l.nomlocal, l.direc, a.CodPartido, a.nompartido --m.nummesa, ,a.nompartido, ae.total_votos_validos, ae.votos_en_blancos, ae.votos_nulos, ae.votos_impugnados, ae.total_votos_emitidos ORDER BY l.ubigeo DESC, l.codlocal ASC, SUM(a.votos::INT)::INT DESC
proyectos/analisis_votaciones_historicas_peru.1769742791.txt.gz · Última modificación: 2026/01/30 03:13 por admin
