El presente documento contiene el código fuente de SQL utilizado para la consulta de datos a la base sobre financiamiento electoral privado a partidos políticos en Costa Rica, en el periodo setiembre 2009- diciembre 2018, del Tribunal Supremo de Elecciones, para la elaboración del artículo: Grandes donantes dinero, élites y partidos políticos en Costa Rica (2010-2018)
#install.packages("odbc")
#install.packages("DBI")
library(odbc)
library(DBI)
library(readxl)
library(tidyverse)
# instalar los siguientes paquetes para ejecutar código SQL en EL ENTORNO DE RStudio.Importar los datos, del excel BBDD_Financiamiento Privado del TSE.
BBDD <- read_excel(“C:rutadelarchivo.xlsx”)
#create database
con <- dbConnect(drv = RSQLite::SQLite(),
dbname = ":memory:")
#store sample data in database
dbWriteTable(conn = con,
name = "BBDD",
value = BBDD)
#remove the local data from the environment
#rm(BBDD)Código SQL
SELECT -- (SELECT MANDATORIO) consulte la columna partido político del subquery A
A.[PARTIDO POLÍTICO]
,SUM(A.MONTO) AS SumaColones -- sume todos los montos y llamelo SumaColones
,(SUM(A.MONTO) /534.32) AS dolarizado -- para dolarizar, a la suma de esos montos dividala por el tipo de cambio promerio para ese periodo
FROM -- haga la consulta al siguiente conjunto de datos (desde)
(
SELECT -- las columnas [PARTIDO POLÍTICO] y ,MONTO
[PARTIDO POLÍTICO]
,MONTO
FROM --desde la tabla DBO.BBDD
BBDD
WHERE -- donde la variable [PARTIDO POLÍTICO] sea igual a 'LIBERACION NACIONAL' o a 'UNIDAD SOCIAL CRISTIANA'...
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A -- este conjunto de datos que excluye a todos los otros partidos llamele subquery A
GROUP BY
A.[PARTIDO POLÍTICO] -- me agrupa el resultado del SELECT MANDATORIO por partido político
ORDER BY
SUM(A.MONTO) ASC| PARTIDO POLÍTICO | SumaColones | dolarizado |
|---|---|---|
| RESTAURACION NACIONAL | 155947532 | 291861.7 |
| UNIDAD SOCIAL CRISTIANA | 536042420 | 1003223.6 |
| FRENTE AMPLIO | 543324097 | 1016851.5 |
| MOVIMIENTO LIBERTARIO | 691121149 | 1293459.3 |
| ACCION CIUDADANA | 833463173 | 1559857.7 |
| LIBERACION NACIONAL | 4857523062 | 9091037.3 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]
, A.Suma AS colones
, (A.Suma /534.32) AS dolarizado
FROM --desde subquery A (conjunto de datos unicamente con los partidos de interés)
(
SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTO
, ROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima --Asigne una secuencia numerica a cada grupo particionado por cedula
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma -- sume todos los montos por cedula y ordene segun la fecha del monto
FROM BBDD -- desde tabla BBDD
WHERE -- donde [PARTIDO POLÍTICO] sea igual a los siguientes partidos
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A -- llamele al conjunto de datos A
WHERE -- que el resultado del select mandatorio sea igual unicamente a Liberacin Nacional
A.[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
AND A.SecuenciaUltima = 1 -- y de la secuencia muestre el valor 1 (para sacar el máximo de la suma de todos los montos)
ORDER BY A.Suma DESC -- ordene el resultado del select mandatorio según la suma de forma descendenete para obtener el mayor monto| PARTIDO POLÍTICO | colones | dolarizado |
|---|---|---|
| LIBERACION NACIONAL | 931301810 | 1742966.4 |
| LIBERACION NACIONAL | 366176024 | 685312.2 |
| LIBERACION NACIONAL | 149678564 | 280129.1 |
| LIBERACION NACIONAL | 142550875 | 266789.3 |
| LIBERACION NACIONAL | 82683207 | 154744.7 |
| LIBERACION NACIONAL | 78784000 | 147447.2 |
| LIBERACION NACIONAL | 58132000 | 108796.2 |
| LIBERACION NACIONAL | 56480000 | 105704.4 |
| LIBERACION NACIONAL | 55361000 | 103610.2 |
| LIBERACION NACIONAL | 55300000 | 103496.0 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]
, A.Suma AS Colones
,(A.Suma /534.32) AS dolarizado
FROM
(
SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTO
, ROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
FROM BBDD
WHERE
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A
WHERE
A.[PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC| PARTIDO POLÍTICO | Colones | dolarizado |
|---|---|---|
| ACCION CIUDADANA | 217385000 | 406844.21 |
| ACCION CIUDADANA | 13024224 | 24375.33 |
| ACCION CIUDADANA | 11497055 | 21517.17 |
| ACCION CIUDADANA | 11030331 | 20643.68 |
| ACCION CIUDADANA | 10066650 | 18840.11 |
| ACCION CIUDADANA | 8230039 | 15402.83 |
| ACCION CIUDADANA | 7937614 | 14855.54 |
| ACCION CIUDADANA | 7893019 | 14772.08 |
| ACCION CIUDADANA | 7691170 | 14394.31 |
| ACCION CIUDADANA | 7685129 | 14383.01 |
Montos recibidos entre setiembre 2009 y diciembre 2018. Para este partido como se trabajó con personas físicas y el segundo lugar correspondió a una persona jurpidica, se toma el top 31 para excluir la personería jurpidica en el análisis final.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]
, A.Suma AS Colones
,(A.Suma /534.32) AS dolarizado
FROM
(
SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTO
, ROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
FROM BBDD
WHERE
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A
WHERE
A.[PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC| PARTIDO POLÍTICO | Colones | dolarizado |
|---|---|---|
| UNIDAD SOCIAL CRISTIANA | 73398137 | 137367.38 |
| UNIDAD SOCIAL CRISTIANA | 47736527 | 89340.71 |
| UNIDAD SOCIAL CRISTIANA | 35240000 | 65952.99 |
| UNIDAD SOCIAL CRISTIANA | 31600000 | 59140.59 |
| UNIDAD SOCIAL CRISTIANA | 22439000 | 41995.43 |
| UNIDAD SOCIAL CRISTIANA | 18502800 | 34628.69 |
| UNIDAD SOCIAL CRISTIANA | 16807796 | 31456.42 |
| UNIDAD SOCIAL CRISTIANA | 8879321 | 16617.98 |
| UNIDAD SOCIAL CRISTIANA | 8321667 | 15574.31 |
| UNIDAD SOCIAL CRISTIANA | 8197000 | 15340.99 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]
, A.Suma AS Colones
,(A.Suma /534.32) AS dolarizado
FROM
(
SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTO
, ROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
FROM BBDD
WHERE
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A
WHERE
A.[PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC| PARTIDO POLÍTICO | Colones | dolarizado |
|---|---|---|
| MOVIMIENTO LIBERTARIO | 75265993 | 140863.14 |
| MOVIMIENTO LIBERTARIO | 37047964 | 69336.66 |
| MOVIMIENTO LIBERTARIO | 28050000 | 52496.63 |
| MOVIMIENTO LIBERTARIO | 25830600 | 48342.94 |
| MOVIMIENTO LIBERTARIO | 20837780 | 38998.69 |
| MOVIMIENTO LIBERTARIO | 16330000 | 30562.21 |
| MOVIMIENTO LIBERTARIO | 12650000 | 23674.95 |
| MOVIMIENTO LIBERTARIO | 9520000 | 17817.04 |
| MOVIMIENTO LIBERTARIO | 8495000 | 15898.71 |
| MOVIMIENTO LIBERTARIO | 7676700 | 14367.23 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]
, A.Suma AS Colones
,(A.Suma /534.32) AS dolarizado
FROM
(
SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTO
, ROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
FROM BBDD
WHERE
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A
WHERE
A.[PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC| PARTIDO POLÍTICO | Colones | dolarizado |
|---|---|---|
| FRENTE AMPLIO | 53609000 | 100331.26 |
| FRENTE AMPLIO | 45245578 | 84678.80 |
| FRENTE AMPLIO | 33248050 | 62224.98 |
| FRENTE AMPLIO | 27445600 | 51365.47 |
| FRENTE AMPLIO | 26008500 | 48675.89 |
| FRENTE AMPLIO | 25234062 | 47226.50 |
| FRENTE AMPLIO | 25000000 | 46788.44 |
| FRENTE AMPLIO | 24361000 | 45592.53 |
| FRENTE AMPLIO | 21958500 | 41096.16 |
| FRENTE AMPLIO | 21675000 | 40565.58 |
Montos recibidos entre setiembre 2009 y diciembre 2018.
Código SQL
SELECT --TOP 30
A.[PARTIDO POLÍTICO]
, A.Suma AS Colones
,(A.Suma /534.32) AS dolarizado
FROM
(
SELECT
[PARTIDO POLÍTICO]
,[CÉDULA]
, MONTO
, ROW_NUMBER () OVER (PARTITION BY [CÉDULA] ORDER BY FECHA ASC) AS Secuenciaultima
, SUM(MONTO) OVER (PARTITION BY [CÉDULA] ORDER BY FECHA DESC) AS Suma
FROM BBDD
WHERE
[PARTIDO POLÍTICO] = 'LIBERACION NACIONAL'
OR [PARTIDO POLÍTICO] = 'UNIDAD SOCIAL CRISTIANA'
OR [PARTIDO POLÍTICO] = 'ACCION CIUDADANA'
OR [PARTIDO POLÍTICO] = 'MOVIMIENTO LIBERTARIO'
OR [PARTIDO POLÍTICO] = 'FRENTE AMPLIO'
OR [PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
) AS A
WHERE
A.[PARTIDO POLÍTICO] = 'RESTAURACION NACIONAL'
AND A.SecuenciaUltima = 1
ORDER BY A.Suma DESC| PARTIDO POLÍTICO | Colones | dolarizado |
|---|---|---|
| RESTAURACION NACIONAL | 11728900 | 21951.078 |
| RESTAURACION NACIONAL | 11677415 | 21854.721 |
| RESTAURACION NACIONAL | 10200000 | 19089.684 |
| RESTAURACION NACIONAL | 9736525 | 18222.273 |
| RESTAURACION NACIONAL | 9733000 | 18215.676 |
| RESTAURACION NACIONAL | 9625000 | 18013.550 |
| RESTAURACION NACIONAL | 4720576 | 8834.736 |
| RESTAURACION NACIONAL | 4550000 | 8515.496 |
| RESTAURACION NACIONAL | 4500000 | 8421.919 |
| RESTAURACION NACIONAL | 3850000 | 7205.420 |
Para obtener el top 10, dado que algunas cédulas estaban registradas con 0, (INCONSISTENT) estas se posicionan en la primera poscisión y se toma los siguientes 10 contribuyentes con 3 o más partidos distintos.
Código SQL
SELECT -- consulte la cedula y el nombre y haga un conteo distinto de los partidos politicos
[CÉDULA]
,COUNT(DISTINCT [PARTIDO POLÍTICO]) AS CONTEOPARTIDODISTINTO
FROM -- desde la tabla
BBDD
WHERE
[ESCALA] = 'NACIONAL' -- solo partidos de escala nacional
GROUP BY -- agrupelo por cedula y por nombre
[CÉDULA]
ORDER BY -- ordene la consulta por el resultado del conteo distinto de forma descendente para obtener a quien tenga más partidos distintos.
COUNT(DISTINCT [PARTIDO POLÍTICO]) DESC| CÉDULA | CONTEOPARTIDODISTINTO |
|---|---|
| 0 | 7 |
| 104620192 | 6 |
| 900420144 | 4 |
| 900610047 | 3 |
| 900400076 | 3 |
| 601150376 | 3 |
| 109780599 | 3 |
| 107580258 | 3 |
| 106440138 | 3 |
| 104750144 | 3 |