Actividad 2.1


1. En primer lugar, he cargado varios paquetes para el desarrollo de todas las actividades: dplyr,knitr, stingr y tidyr.

En segundo lugar, he cargado el marco de datos con el comando load("clea_uc_20220111.rdata") para poder explorarlo y lo he reordenado con la función glimpse para ver todas las variables.

glimpse(clea_uc_20220111)
## Rows: 86,964
## Columns: 33
## $ release <dbl> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12…
## $ id      <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ rg      <chr> "Latin America", "Latin America", "Latin America", "Latin Amer…
## $ ctr_n   <chr> "Argentina", "Argentina", "Argentina", "Argentina", "Argentina…
## $ ctr     <dbl> 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32…
## $ yr      <dbl> 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 20…
## $ mn      <dbl> 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10…
## $ sub     <chr> "-990", "-990", "-990", "-990", "-990", "-990", "-990", "-990"…
## $ cst_n   <chr> "BUENOS AIRES", "BUENOS AIRES", "BUENOS AIRES", "BUENOS AIRES"…
## $ cst     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,…
## $ mag     <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,…
## $ pty_n   <chr> "FRENTE RENOVADOR POPULAR", "MOVIMIENTO POPULAR PARA LA RECONQ…
## $ pty     <dbl> 5535, 71, 151, 196, 64, 6, 5210, 150, 5137, 168, 142, 175, 513…
## $ can     <chr> "-990", "-990", "-990", "-990", "-990", "-990", "-990", "-990"…
## $ pev1    <dbl> 9284915, 9284915, 9284915, 9284915, 9284915, 9284915, 9284915,…
## $ vot1    <dbl> 7155761, 7155761, 7155761, 7155761, 7155761, 7155761, 7155761,…
## $ vv1     <dbl> 5510765, 5510765, 5510765, 5510765, 5510765, 5510765, 5510765,…
## $ ivv1    <dbl> 1644996, 1644996, 1644996, 1644996, 1644996, 1644996, 1644996,…
## $ to1     <dbl> 0.7706868, 0.7706868, 0.7706868, 0.7706868, 0.7706868, 0.77068…
## $ cv1     <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ cvs1    <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ pv1     <dbl> 43349, 21030, 68750, 36626, 20793, 93441, 56663, 17348, 829549…
## $ pvs1    <dbl> 0.0079, 0.0038, 0.0125, 0.0066, 0.0038, 0.0170, 0.0103, 0.0031…
## $ pev2    <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ vot2    <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ vv2     <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ ivv2    <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ to2     <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ cv2     <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ cvs2    <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ pv2     <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ pvs2    <dbl> -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, -9…
## $ seat    <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,…


2.

  • Como podemos ver indicado encima de la tabla, el conjunto de datos contiene un total de 86.964 observaciones y 33 variables.

  • La unidad de observación sería el país - año de las elecciones.

  • Los tipos de variables que aparecen son: En primer lugar, las variables categóricas nominales almacenadas en forma de caracter (chr) como por ejemplo rg: referida a la región; las variables de cadena almacenadas en forma de caracter (chr) como: ctr_n, que se refiere al nombre del país; y los vectores númericos dobles (dbl), que son aquellos que pueden ser tanto números enteros como dobles, como por ejemplo, yr, referido al año en el que se celebraron las elecciones.

  • El nivel de análisis sería el estatal.


3. Una pregunta que se podría plantear en relación al marco de datos es: ¿Los ciudadanos de Chile prefieren votar al Partido Demócrata Cristiano antes que al Partido Socialista de Chile? Para responder a la pregunta me he basado en las elecciones de Chile del año 2013.

Para poder visualizar los datos que necesitamos crearé un marco de datos llamado votos_Chile_2013, utilizaré la función filter para filtrarlo por país y año de las elecciones; la función group_by para agrupar los datos en base al nombre del partido político; summarise para sumar los votos de la primer vuelta y crear una nueva variable llamada total_votosy arrange para ordenarlos de mayor a menor.

votos_chile_2013 <- clea_uc_20220111 %>%
  filter(ctr_n == "Chile" & yr == 2013) %>%
  group_by(pty_n) %>%
  summarise(total_votos = sum(pv1)) %>%
  arrange(desc(total_votos))

kable(votos_chile_2013)
pty_n total_votos
PARTIDO DEMOCRATA CRISTIANO 744261
RENOVACION NACIONAL 733726
PARTIDO SOCIALISTA DE CHILE 728455
UNION DEMOCRATA INDEPENDIENTE 662447
PARTIDO POR LA DEMOCRACIA 556131
INDEPENDIENTE LISTA J 333619
PARTIDO HUMANISTA 256620
INDEPENDIENTE LISTA I 219404
INDEPENDIENTE LISTA C 182224
MOVIMIENTO AMPLIO SOCIAL 156372
INDEPENDIENTE LISTA L 114355
INDEPENDIENTE LISTA H 95328
PARTIDO IGUALDAD 70692
PARTIDO ECOLOGISTA VERDE 9895
PARTIDO COMUNISTA DE CHILE 6423


4. En este caso existiría un problema de falacia ecológica ya que la unidad de análisis y la unidad de observación no coinciden. Esto es porque la unidad de observación se refiere a los votos obtenidos por cada partido a nivel estatal, mientras que la unidad de análisis serían los ciudadanos chilenos, ya que quiero analizar sus preferencias políticas.
Por lo tanto, a nivel estatal podría parecer que los ciudadanos chilenos prefieren votar al Partido Demócrata Cristiano antes que al Partido Socialista de Chile. Sin embargo, si desagregamos los datos y vemos los votos de los ciudadanos por circunscripciones, nos daremos cuenta de que el Partido Socialista de Chile ha ganado en un mayor número de circunscripciones que el Partido Demócrata Cristiano y otros partidos han ganado en otras circunscripciones. Por ende, no podemos realizar dicha afirmación y deberíamos contar con datos individuales o al menos, a un nivel inferior como es la circunscripción.

Para mostrarlo, he creado una tabla donde aparece el partido ganador en cada circunscripción y el número de votos obtenidos en la primera ronda en las elecciones de Chile de 2013. He utilizado la función filter para filtrar por Chile y elecciones del año 2013, la función group_bypara agrupar los datos por partidos políticos y circunscripciones; summarise; para calcular el máximo de votos obtenidos y crear una nueva variable llamada mas_votos; arrange para ordenarlos de mayor a menor y por último filter para que sólo aparezca la primera fila de cada columna.

ganador_circunscripcion <-(clea_uc_20220111) %>%
  filter(ctr_n == "Chile" & yr == 2013) %>%
  group_by(cst_n, pty_n) %>%
  summarise(mas_votos = max(pv1)) %>%
  arrange(cst_n, desc(mas_votos)) %>%
  filter(row_number() == 1)

kable(ganador_circunscripcion)
cst_n pty_n mas_votos
Antofagasta INDEPENDIENTE LISTA C 91112
Bío Bío Coast MOVIMIENTO AMPLIO SOCIAL 156372
Bío Bío Cordillera PARTIDO POR LA DEMOCRACIA 121620
Coquimbo PARTIDO DEMOCRATA CRISTIANO 78713
Los Lagos PARTIDO SOCIALISTA DE CHILE 135372
Los Ríos PARTIDO SOCIALISTA DE CHILE 70179
Magallanes PARTIDO DEMOCRATA CRISTIANO 22714
O’Higgins PARTIDO SOCIALISTA DE CHILE 156230
Santiago East RENOVACION NACIONAL 317311
Santiago West PARTIDO POR LA DEMOCRACIA 360949


Actividad 2.2


Creo una nueva base de datos llamada clea_b con las variables rg, ctr_n, cst_n, cst_n, sub, pty_n, can, vv1

clea_b <- clea_uc_20220111 %>%
  select(rg, ctr_n, cst_n, sub, pty_n, can, vv1)

print(clea_b)
## # A tibble: 86,964 × 7
##    rg            ctr_n     cst_n        sub   pty_n                 can      vv1
##    <chr>         <chr>     <chr>        <chr> <chr>                 <chr>  <dbl>
##  1 Latin America Argentina BUENOS AIRES -990  FRENTE RENOVADOR POP… -990  5.51e6
##  2 Latin America Argentina BUENOS AIRES -990  MOVIMIENTO POPULAR P… -990  5.51e6
##  3 Latin America Argentina BUENOS AIRES -990  DEL SOCIALISMO AUTEN… -990  5.51e6
##  4 Latin America Argentina BUENOS AIRES -990  POPULAR DE LA RECONS… -990  5.51e6
##  5 Latin America Argentina BUENOS AIRES -990  MOVIMIENTO POPULAR B… -990  5.51e6
##  6 Latin America Argentina BUENOS AIRES -990  ACCION POR LA REPUBL… -990  5.51e6
##  7 Latin America Argentina BUENOS AIRES -990  FRENTE COMPROMISO SO… -990  5.51e6
##  8 Latin America Argentina BUENOS AIRES -990  PROGRESO SOCIAL       -990  5.51e6
##  9 Latin America Argentina BUENOS AIRES -990  ALIANZA PARA EL TRAB… -990  5.51e6
## 10 Latin America Argentina BUENOS AIRES -990  HUMANISTA             -990  5.51e6
## # … with 86,954 more rows


A. La observación SALTA SOMOS TODOS se trata del nombre de un partido político de una circunscripción de Argentina llamada SALTA. Este partido político obtuvo 629291 votos en la primera ronda de las votaciones. Se desconocen los datos del subdepartamento y el nombre del candidato. Para descubrirlo he utilizado la función filter y he filtrado por la variable pty_n, es decir por nombres de los partidos políticos.

salta_somos_todos <- clea_b %>%
  filter(pty_n == "SALTA SOMOS TODOS")

kable(salta_somos_todos)
rg ctr_n cst_n sub pty_n can vv1
Latin America Argentina SALTA -990 SALTA SOMOS TODOS -990 629291


B. El candidato OBINNA B. EMUKA pertenece al partido político Congress for Democratic Change. Para saberlo, he filtrado con la función filter el candidato can y he seleccionado con la función select la variable pty_n, referida a los nombres de los partidos políticos y de nuevo can.

obinna_b_emuka <- clea_b %>%
  filter(can == "OBINNA B.EMUKA") %>%
  select(can, pty_n)

kable(obinna_b_emuka)
can pty_n
OBINNA B.EMUKA Congress for Democratic Change 


C. La circunscripción District 02 - Sokolov pertenece a la República Checa y Abia North a Nigeria. Para saberlo he utilizado la función filter para filtrar por el nombre de dichas circunscripciones, luego he utilizado la función select para seleccionar las variables de país ctr_n y circunscripción cst_npara que aparezcan en la tabla y distinct para eliminar las filas duplicadas.

sokolov_abia <- clea_b %>%
  filter(cst_n == "District 02 - Sokolov" | cst_n == "Abia North") %>%
  select(cst_n, ctr_n) %>%
  distinct(cst_n, .keep_all = TRUE)

kable(sokolov_abia)
cst_n ctr_n
Abia North Nigeria
District 02 - Sokolov Czech Republic


D. Para obtener el número de circunscripciones que no están en América Latina utiizo la función filter para filtrar las filas donde la variable de región rg no sea igual a América Latina. A continuación utilizo la función distinct para eliminar las filas que estén duplicadas de las circunscripciones, lo sumo utilizando la función summarise para contar el número de filas. Para poder mostrarlo utilizo la expresión no_latinoamerica$count. El resultado es: 1305 circunscripciones no se encuentran en América Latina.

no_latinoamerica <- clea_b %>%
  filter(rg != "Latin America") %>%
  distinct(cst_n) %>%
  summarise(count = n())

no_latinoamerica$count
## [1] 1305


E. Para poner los valores de la primera letra de la variable cst_n en mayúscula modifico el objeto clea_b, utilizo la función mutate para modificar la columna del nombre de las circunscripciones cst_n y aplico la función str_to_tittle del paquete stringr para poner la primera letra en mayúsculas.

clea_b <- clea_b %>%
  mutate(cst_n = str_to_title(cst_n))

print(clea_b)
## # A tibble: 86,964 × 7
##    rg            ctr_n     cst_n        sub   pty_n                 can      vv1
##    <chr>         <chr>     <chr>        <chr> <chr>                 <chr>  <dbl>
##  1 Latin America Argentina Buenos Aires -990  FRENTE RENOVADOR POP… -990  5.51e6
##  2 Latin America Argentina Buenos Aires -990  MOVIMIENTO POPULAR P… -990  5.51e6
##  3 Latin America Argentina Buenos Aires -990  DEL SOCIALISMO AUTEN… -990  5.51e6
##  4 Latin America Argentina Buenos Aires -990  POPULAR DE LA RECONS… -990  5.51e6
##  5 Latin America Argentina Buenos Aires -990  MOVIMIENTO POPULAR B… -990  5.51e6
##  6 Latin America Argentina Buenos Aires -990  ACCION POR LA REPUBL… -990  5.51e6
##  7 Latin America Argentina Buenos Aires -990  FRENTE COMPROMISO SO… -990  5.51e6
##  8 Latin America Argentina Buenos Aires -990  PROGRESO SOCIAL       -990  5.51e6
##  9 Latin America Argentina Buenos Aires -990  ALIANZA PARA EL TRAB… -990  5.51e6
## 10 Latin America Argentina Buenos Aires -990  HUMANISTA             -990  5.51e6
## # … with 86,954 more rows


F. Para recodificar la variable pty, que no aparece en el marco de datos clea b, he decidido crear un nuevo marco de datos llamado clea_b2 e incluir la variable. He utilizado la función mutate para modificar la variable pty y con case_when la he recodificado asignando las etiquetas.

Después, para mostrar un ejemplo de cada una de las etiquetas he creado una tabla nueva llamada recodificacion. He agrupado con la función group_by la variable pty para poder filtrarlo de forma que aparezca una sóla fila de cada etiqueta con filter(row_number() == 1). Por último, he utilizado la función drop_na del paquete tidyrpara eliminar los valores NA.

clea_b2 <- clea_uc_20220111 %>%
  select(rg, ctr_n, cst_n, sub, pty, pty_n, can, vv1) %>%
  mutate(pty = case_when(
    pty >= 1 & pty <= 3999 ~ "Partidos Políticos",
    pty >= 4000 & pty <= 5000 ~ "Otros",
    pty >= 5001 & pty <= 5999 ~ "Coaliciones o Alianzas",
    pty > 6000 ~ "Independiente"
  ))

recodificacion <- clea_b2 %>%
  group_by(pty) %>%
  filter(row_number() == 1) %>%
  drop_na()

kable(recodificacion)
rg ctr_n cst_n sub pty pty_n can vv1
Latin America Argentina BUENOS AIRES -990 Coaliciones o Alianzas FRENTE RENOVADOR POPULAR -990 5510765
Latin America Argentina BUENOS AIRES -990 Partidos Políticos MOVIMIENTO POPULAR PARA LA RECONQUISTA -990 5510765
Asia Bhutan Bumthang -990 Independiente Independent Jigme Palden 3616
Latin America Mexico AGUASCALIENTES -990 Otros Candidatos no registrados -990 207936


G. Los partidos que se consideran coaliciones o alianzas segñun el coodebook son aquellos que van del número 5001 a 5999 de la varible pty y se refiere a dos o más partidos que se unen en coalición para una elección o que forman una alianza.

Puedo filtar directamente o crear un nuevo marco de datos de las coaliciones y alianzas. He hecho lo segundo, he filtrado con la función filter los resultados de la variable pty iguales a coaliciones o alianzas y con distinct elimino los nombres duplicados de los partidos políticos pty_n. En este último paso, si quisiera que saliesen las demás columnas que tenemos en el marco de datos clea_b, podria utilizar la función keep_all=TRUE.

coaliciones <- clea_b2 %>%
  filter(pty == "Coaliciones o Alianzas") %>%
  distinct(pty_n)

print(coaliciones)
## # A tibble: 798 × 1
##    pty_n                                                    
##    <chr>                                                    
##  1 FRENTE RENOVADOR POPULAR                                 
##  2 FRENTE COMPROMISO SOCIAL                                 
##  3 ALIANZA PARA EL TRABAJO, LA JUSTICIA Y LA EDUCACION      
##  4 ALIANZA OBRERO - MOVIMIENTO AL SOCIALISMO                
##  5 IZQUIERDA UNIDA                                          
##  6 ALIANZA FRENTE POLO SOCIAL                               
##  7 ALTERNATIVA PARA UNA REPUBLICA DE IGUALES                
##  8 ALIANZA IZQUIERDA UNIDA                                  
##  9 ALIANZA FRENTE UNION POR BUENOS AIRES - ALIANZA DE CENTRO
## 10 ALIANZA 2001 PARA EL TRABAJO, LA JUSTICIA Y LA EDUCACION 
## # … with 788 more rows


Actividad 2.3

En primer lugar, he creado el marco de datos kings_battles para poder explorarlo.

kings_battles <- read.csv("5kings_battles_v1.csv")

Parte I

glimpse(kings_battles)
## Rows: 38
## Columns: 25
## $ name               <chr> "Battle of the Golden Tooth", "Battle at the Mummer…
## $ year               <int> 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 2…
## $ battle_number      <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …
## $ attacker_king      <chr> "Joffrey/Tommen Baratheon", "Joffrey/Tommen Barathe…
## $ defender_king      <chr> "Robb Stark", "Robb Stark", "Robb Stark", "Joffrey/…
## $ attacker_1         <chr> "Lannister", "Lannister", "Lannister", "Stark", "St…
## $ attacker_2         <chr> "", "", "", "", "Tully", "Tully", "", "", "", "", "…
## $ attacker_3         <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ attacker_4         <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ defender_1         <chr> "Tully", "Baratheon", "Tully", "Lannister", "Lannis…
## $ defender_2         <chr> "", "", "", "", "", "", "", "", "", "", "", "", "",…
## $ defender_3         <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ defender_4         <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ attacker_outcome   <chr> "win", "win", "win", "loss", "win", "win", "win", "…
## $ battle_type        <chr> "pitched battle", "ambush", "pitched battle", "pitc…
## $ major_death        <int> 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, …
## $ major_capture      <int> 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, …
## $ attacker_size      <int> 15000, NA, 15000, 18000, 1875, 6000, NA, NA, 1000, …
## $ defender_size      <int> 4000, 120, 10000, 20000, 6000, 12625, NA, NA, NA, N…
## $ attacker_commander <chr> "Jaime Lannister", "Gregor Clegane", "Jaime Lannist…
## $ defender_commander <chr> "Clement Piper, Vance", "Beric Dondarrion", "Edmure…
## $ summer             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ location           <chr> "Golden Tooth", "Mummer's Ford", "Riverrun", "Green…
## $ region             <chr> "The Westerlands", "The Riverlands", "The Riverland…
## $ note               <chr> "", "", "", "", "", "", "", "", "", "Greyjoy's troo…

En primer lugar, para poder analizar los datos del documento csv, he creado un marco de datos llamado king_battles.

Una vez creado, he utilizado la función glimpse que me permite reordenar la tabla de forma vertical, lo que me permite visualizar todas las variables y los primeros datos de cada una de ellas.

En la parte superior de la tabla y gracias a la función que he aplicado, puedo observar que tiene 38 observaciones y 25 variables.

La unidad de observación es el nombre de la batalla y el año, que corresponde a las dos primeras variables.

Gracias a la función glimpse veo todas las variables y cómo están almacenadas. Aunque puedo detectar de qué tipo son sabiendo cómo están almacenadas y viendo las primeras filas de cada una, me he apoyado del libro de códigos para describirlas:

  • Hay variables de cadena almacenadas en forma de caracter (chr) como name, nombre de la batalla;

  • variables categóricas nominales almacenadas en forma de caracter (chr) como defender_king, rey defensor;

  • vectores númericos que se almacenan en forma de números enteros (int) como por ejemplo, battle_number, número de batalla;

  • y por último, variables binarias como summer, verano sí o no, almacenadas en números enteros (int).

(201 palabras)

Parte II


1. En verano hubo 26 batallas. Para calcularlo he utilizado la función filter señalando que la variable summer debe ser igual a 1, ya que se trata de una variable binaria. En la tabla aparecerán tan sólo 5 batallas porque las he cortado con la función head.

batallas_verano <- kings_battles %>%
  filter(summer == 1) %>%
  head(n = 5)

kable(batallas_verano)
name year battle_number attacker_king defender_king attacker_1 attacker_2 attacker_3 attacker_4 defender_1 defender_2 defender_3 defender_4 attacker_outcome battle_type major_death major_capture attacker_size defender_size attacker_commander defender_commander summer location region note
Battle of the Golden Tooth 298 1 Joffrey/Tommen Baratheon Robb Stark Lannister Tully NA NA win pitched battle 1 0 15000 4000 Jaime Lannister Clement Piper, Vance 1 Golden Tooth The Westerlands
Battle at the Mummer’s Ford 298 2 Joffrey/Tommen Baratheon Robb Stark Lannister Baratheon NA NA win ambush 1 0 NA 120 Gregor Clegane Beric Dondarrion 1 Mummer’s Ford The Riverlands
Battle of Riverrun 298 3 Joffrey/Tommen Baratheon Robb Stark Lannister Tully NA NA win pitched battle 0 1 15000 10000 Jaime Lannister, Andros Brax Edmure Tully, Tytos Blackwood 1 Riverrun The Riverlands
Battle of the Green Fork 298 4 Robb Stark Joffrey/Tommen Baratheon Stark Lannister NA NA loss pitched battle 1 1 18000 20000 Roose Bolton, Wylis Manderly, Medger Cerwyn, Harrion Karstark, Halys Hornwood Tywin Lannister, Gregor Clegane, Kevan Lannister, Addam Marbrand 1 Green Fork The Riverlands
Battle of the Whispering Wood 298 5 Robb Stark Joffrey/Tommen Baratheon Stark Tully Lannister NA NA win ambush 1 1 1875 6000 Robb Stark, Brynden Tully Jaime Lannister 1 Whispering Wood The Riverlands


2. Roland Storm fue el comandante defensor en 1 batalla. Para averiguarlo he utilizado la función filter para filtrar por el nombre del comandante defensor.

roland_storm <- kings_battles %>%
  filter(defender_commander == "Rolland Storm")

kable(roland_storm)
name year battle_number attacker_king defender_king attacker_1 attacker_2 attacker_3 attacker_4 defender_1 defender_2 defender_3 defender_4 attacker_outcome battle_type major_death major_capture attacker_size defender_size attacker_commander defender_commander summer location region note
Siege of Dragonstone 300 35 Joffrey/Tommen Baratheon Stannis Baratheon Baratheon Baratheon NA NA win siege 0 0 2000 NA Loras Tyrell, Raxter Redwyne Rolland Storm 0 Dragonstone The Stormlands


3. Para obtener un data frame en el que el número de tropas atacantes sea superior a 10000 y el número de tropas defensoras sea inferior a 6000 he utilizado la función filter y he indicado que la variable attacker_size debe ser superior a 1000 y la variable defender_size es inferior a 6000.

atacantes_defensores <- kings_battles %>%
  filter(attacker_size > 10000, defender_size < 6000)

kable(atacantes_defensores)
name year battle_number attacker_king defender_king attacker_1 attacker_2 attacker_3 attacker_4 defender_1 defender_2 defender_3 defender_4 attacker_outcome battle_type major_death major_capture attacker_size defender_size attacker_commander defender_commander summer location region note
Battle of the Golden Tooth 298 1 Joffrey/Tommen Baratheon Robb Stark Lannister Tully NA NA win pitched battle 1 0 15000 4000 Jaime Lannister Clement Piper, Vance 1 Golden Tooth The Westerlands
Battle of Castle Black 300 28 Stannis Baratheon Mance Rayder Free folk Thenns Giants Night’s Watch Baratheon NA NA loss siege 1 1 100000 1240 Mance Rayder, Tormund Giantsbane, Harma Dogshead, Magnar Styr, Varamyr Stannis Baratheon, Jon Snow, Donal Noye, Cotter Pyke 0 Castle Black Beyond the Wall


4. He ordenado en orden descendente el número de tropas del atacante utilizando la función arrange indicando que el orden debe ser descendente en función de la variable attacker_size. La función select la he introducido para que solo aparezca en la tabla el nombre de la batalla y el tamaño del atacante. También he cortado la tabla utilizando la función head.

tropas_atacante <- kings_battles %>%
  arrange(desc(attacker_size)) %>%
  select(name, attacker_size) %>%
  head(n = 5)

kable(tropas_atacante)
name attacker_size
Battle of Castle Black 100000
Battle of the Blackwater 21000
Battle of the Fords 20000
Battle of the Green Fork 18000
Battle of the Golden Tooth 15000


5. He creado una nueva variable “shield_islands” que es TRUE cuando la batalla ocurrió en la localidad de “Shield Islands”. Para ello he utilizado la función mutate para crear la nueva variable; con la función if_else he señalado que será TRUE cuando la variable location coincida con Shield Islands y FALSE cuando no coincida.
Después he creado una nueva tabla en la que he utilizado la función group_by para que agrupe los datos en base a la nueva variable; la función filter(row_number() para que muestre un ejemplo de FALSE y otro de TRUE y por último, he utilizado select para que en la tabla solo aparezcan las variables que yo quiero.

kings_battles <- kings_battles %>% 
  mutate(shield_islands = if_else(location == "Shield Islands", TRUE, FALSE)) 

tabla_shield <- kings_battles %>%
  group_by(shield_islands) %>%
  filter(row_number() == 1) %>%
  select(name, location, shield_islands)

kable(tabla_shield)
name location shield_islands
Battle of the Golden Tooth Golden Tooth FALSE
Battle of the Shield Islands Shield Islands TRUE


6. He creado la variable “Lannister_Tully” con la función mutate; después he utilizado case when para crear las tres categorías: “Lannister” cuando el primer atacante sea igual a Lannister, “Tully” cuando el primer atacante sea igual a un Tully y “Otro” utilizando TRUE para decir que no es ni Lannister ni Tully.

Después he creado un ejemplo de una tabla sencilla con la función group by para agrupar por la nueva variable; filter(row_number() para que muestre un ejemplo de cada uno y por último, he utilizado select para que en la tabla solo aparezcan algunas variables. En este caso no aparece el ejemplo de Tully puesto que no hay ningún primer atacante que sea un Tully.

kings_battles <- kings_battles %>% 
  mutate(Lannister_Tully = case_when(
    attacker_1 == "Lannister" ~ "Lannister",
    attacker_1 == "Tully" ~ "Tully",
    TRUE ~ "Otro"
  )) 

tabla_Lannister_Tully <- kings_battles %>%
  group_by(Lannister_Tully) %>%
  filter(row_number() == 1) %>%
  select(name, attacker_1, Lannister_Tully)

kable(tabla_Lannister_Tully)
name attacker_1 Lannister_Tully
Battle of the Golden Tooth Lannister Lannister
Battle of the Green Fork Stark Otro


Parte III


1.¿Qué batallas con más de 5000 defensores fueron ganadas por el atacante?

La respuesta a esta pregunta sería la batalla de Siege of Storm’s End con 20000 defensores, la Battle of Camps con 12625, Battle of Riverrun con 10000, Battle of Oxcross con 10000, Battle of the Whispering Wood con 6000 y Battle of the Ruby Ford con 6000.

Para ello, he creado un nuevo marco de datos, he utilizado filter para ordenar que la variable defender_size sea mayor a 5000 y que el resultado de la variable attacker_outcome sea win. Después he utilizado select para incluir las variables que quiero que aparezcan en la tabla y arrange(desc) para ordenar de mayor a menor el tamaño de los defensores. (119 palabras)

batallas_ganadas_5000_defensores <- kings_battles %>%
  filter(defender_size > 5000, attacker_outcome == "win") %>%
  select(name, attacker_1, defender_1, attacker_outcome, defender_size) %>%
  arrange(desc(defender_size))

kable(batallas_ganadas_5000_defensores)
name attacker_1 defender_1 attacker_outcome defender_size
Siege of Storm’s End Baratheon Baratheon win 20000
Battle of the Camps Stark Lannister win 12625
Battle of Riverrun Lannister Tully win 10000
Battle of Oxcross Stark Lannister win 10000
Battle of the Whispering Wood Stark Lannister win 6000
Battle of the Ruby Ford Lannister Stark win 6000


2. ¿Quienes eran los reyes atacantes en las batallas tipo ambush de la region de The North donde hubo al menos una muerte de una figura importante durante la batalla?

La respuesta a la pregunta sería: el rey era Joffrey/Tommen Baratheon.

Para responder a esta pregunta he creado un nuevo marco de datos, he utilizado la función filter para que filtre los resultados en base a la variable region y que esta sea igual a la región sobre la que se basa mi pregunta, The North, que el tipo de batalla battle type sea ambush; después he utilizado mutate para que el resultado de la variable major_death en vez de 1 o 0 sea TRUE o FALSE; de nuevo filter para que sólo me de los resultados donde major_death sea igual a TRUEM; y por último, he seleccionado con la función select las variables que quiero que aparezcan en la tabla. (150 palabras)

the_north <- kings_battles %>%
  filter(region == "The North", battle_type == "ambush") %>%
  mutate(major_death = ifelse(major_death == 1, TRUE, FALSE)) %>%
  filter(major_death == TRUE) %>%
  select(name, attacker_king, defender_king, region, battle_type, major_death)

kable(the_north)
name attacker_king defender_king region battle_type major_death
Sack of Winterfell Joffrey/Tommen Baratheon Robb Stark The North ambush TRUE

Bibliografía

Chrisalbon. (2023).The War Of The Five Kings, A Dataset. Github. https://github.com/chrisalbon/war_of_the_five_kings_dataset

CLEA. (2023). Effective number of parties and party nationalization data. Coodebook.

Kollman, K., Hicken, A., Caramani, D., Backer, D., & Lublin, D. (2020). Constituency-Level Elections Archive [Data set and codebook]. Ann Arbor, MI: Center for Political Studies, University of Michigan [producer and distributor]. http://www.electiondataarchive.org.

Mas, J. (2023). Conjuntos de datos [recurso de aprendizaje textual]. Fundació Universitat Oberta de Catalunya (FUOC).

Singer, D. (1961). The Level-of-Analysis Problem in International Relations. World politics, 1961, Vol.14 (1), p.77-92, Article 77.