Herramientas de usuario

Herramientas del sitio


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:

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