Para resolver los ejercicios de este reto, usa las funciones de la librería dplyr que has aprendido hasta ahora. Considera si necesitas otras librerías para abrir, por ejemplo, las bases de datos que se proponen. Para hacer los gráficos, usa la librería ggplot. Un gráfico debe poder entenderse por sí solo, por lo que lo más importante cuando los hagas es que tengas presente aspectos como, por ejemplo, que los nombres de los ejes o la sleyendas sean idenfiticables, o que los colores (o formas) que uses permitan una buena identificación entre las categorías.
Actividad 1
En esta actividad usaremos un marco de datos que contiene información del Barómetro de Opinión Pública del CEO. És una encuesta que se realiza periodicamente en Cataluña y contiene diversas variables relacionadas con opiniones políticas y sociales. Con estos datos haremos un sencillo análisis de la opinión pública en Cataluña. Aprovecharemos que los datos estan colgados en la web del CEO para importarlas directamente de allí. Para hacerlo, copiaremos el link en el que se encuentran estos datos dentro de la función read_delim. Esta funcion permite importar ficheros de texto como a base de datos.
Mostrar código.
#Recuerda que todos los chunks estan en eval = F, para activarlos debes canviar a eval = Tceo <- readr::read_delim("https://upceo.ceo.gencat.cat/wsceop/9928/Microdades_anonimitzades_1145.csv",delim =";",locale = readr::locale(encoding ="ISO-8859-1") # Así nos aseguramos que los acentos se importan correctamente.)
Realiza una exploración rápida del mismo con las funciones que conoces, identificando el numero de observaciones, qué variables tiene, como están codificadas y la unidad de observación.
Mostrar código.
#glimpse(ceo) #nos da la estructura, el numero de variables y tipos, si son de texto, numericas o categóricasdim(ceo) #nos dice el numero de filas y columnas
[1] 2000 300
Mostrar código.
#names(ceo) #da la lista de los nombres de todas las variables. Las oculto para no alargar el ejercicio.
El dataset contiene 2000 observaciones (filas) y 300 variables (columnas), donde cada fila corresponde a una persona encuestada, es decir, la unidad de observación es el individuo.
Las variables se distribuyen entre variables categóricas, variables numéricas y variables de tipo carácter.
Las variables incluyen información sociodemográfica y opiniones políticas.
Actividad 2
Crea una tabla de frecuencias para la variable ‘MONARQUIA_REPUBLICA’ (¿Qué forma de gobierno prefiere usted, monarquía o república?) y comenta el resultado.
Mostrar código.
ceo |>group_by(MONARQUIA_REPUBLICA) |>#agrupo los datos por categoriasummarise(n =n()) |>#suma cuantas personas hay en cada grupomutate(per =round(n /sum(n) *100, 1)) #calcula la frecuencia relativa
# A tibble: 5 × 3
MONARQUIA_REPUBLICA n per
<chr> <int> <dbl>
1 Monarquia 335 16.8
2 No contesta 52 2.6
3 No ho sap 132 6.6
4 República 1424 71.2
5 Una altra 57 2.9
Los resultados arrojan una preferencia de la población catalana hacia un modelo de estado republicano, seguido de una gran proporcion de personas que destaca la monarquía como forma de gobierno, Hay un elevado número de peronas que no saben o no responde. En este caso, la ausencia de respuesta no necesariamente puede estar relacionada con una falta de opinion o criterio de las personas encuestadas, sino que puede verse afectada por el contexto sociopolítico de Cataluña. Este aspecto puede ser relevante de cara a la interpretación de los datos.
Crea una tabla con LLOC_NAIX (¿Me podría decir dónde nació?) que te permita responder a la pregunta siguiente: ¿Qué porcentaje de personas de la muestra han nacido en Cataluña (Catalunya, en catalán)?
Mostrar código.
ceo |>count(LLOC_NAIX)
# A tibble: 3 × 2
LLOC_NAIX n
<chr> <int>
1 A Catalunya 1405
2 A altres comunitats autònomes 400
3 Fora d'Espanya 195
Mostrar código.
ceo |>group_by(LLOC_NAIX) |>#agrupa a las personas por lugar de nacimientosummarise(n =n()) |>#cuenta las personas de cada grupomutate(per =round(n /sum(n) *100, 1)) |>#establece el porcentaje en cada grupofilter(LLOC_NAIX =="A Catalunya") #filtra el resulado Cataluña
# A tibble: 1 × 3
LLOC_NAIX n per
<chr> <int> <dbl>
1 A Catalunya 1405 70.2
El análisis de la variable LLOC_NAIX muestra que aproximadamente un 70% de la muestra ha nacido en Cataluña. Primero se han consultado los resultados sobre el lugar de nacimiento para asegurar la respuesta y luego establecer el porcentaje. Este resultado encaja con el lugar de realización de la encuesta, aunque también refleja la población nacida en otros territorios.
Calcula la frecuencia absoluta y relativa de la variable REC_PARLAMENT_VOT (Recuerdo de voto en el Parlament de aquellos que votaron). Elimina de la tabla los casos que no recuerdan haber votado (” “) con ‘filter’ antes de calular las frecuencias
Mostrar código.
ceo |>filter(REC_PARLAMENT_VOT !=" ") |># elimina la opción no recuerdo. Aquí hay que hacer el filtro antes para que no se alteren los resultadosgroup_by(REC_PARLAMENT_VOT) |># agrupa lso resultados por partido votadosummarise(n =n()) |># cuenta los resultados de cada opciónmutate(per =round(n /sum(n) *100, 1)) # calcula la frecuencia relativa
# A tibble: 15 × 3
REC_PARLAMENT_VOT n per
<chr> <int> <dbl>
1 Aliança Catalana 31 2.4
2 Altres partits 4 0.3
3 C's 1 0.1
4 CUP 66 5.1
5 Comuns Sumar 83 6.4
6 ERC 255 19.8
7 En blanc 29 2.3
8 Junts per Catalunya 184 14.3
9 No contesta 55 4.3
10 No ho sap 40 3.1
11 Nul 10 0.8
12 PACMA 9 0.7
13 PP 66 5.1
14 PSC/PSOE 385 29.9
15 VOX 69 5.4
La frecuencia absoluta nos indica el número total de votantes de cada partido, mientras que la relativa nos da el porcentaje de cada opción con respecto al total consultado, en este caso, de las opciones de partidos consultados sin las respuestas que indicaban no recordar el voto.
¿Cual fué el partido que más gente recuerda haber votado en aquellas elecciones? Elimina de la tabla los casos que no recuerdan haber votado (” “) con ‘filter’ y muestra sólo el valor más frecuente (moda) para la variable REC_PARLAMENT_VOT
Mostrar código.
ceo |>filter(REC_PARLAMENT_VOT !=" ") |># elimina la opción no recuerdo.group_by(REC_PARLAMENT_VOT) |># agrupa los resultados por partido votadosummarise(n =n()) |># cuenta los resultados de cada opciónarrange(desc(n)) #ordena de mayor a menor. El n con mayor frecuencia absoluta es la moda
# A tibble: 15 × 2
REC_PARLAMENT_VOT n
<chr> <int>
1 PSC/PSOE 385
2 ERC 255
3 Junts per Catalunya 184
4 Comuns Sumar 83
5 VOX 69
6 CUP 66
7 PP 66
8 No contesta 55
9 No ho sap 40
10 Aliança Catalana 31
11 En blanc 29
12 Nul 10
13 PACMA 9
14 Altres partits 4
15 C's 1
El partido más votado según la encuesta fue PSC/PSOE (29,9%), seguido de ERC (19,8%) y Junts per Catalunya (14,3%). (El porcentaje se ha obtenido en la tabla anterior).
Convierte la variable SATIS_DEMOCRACIA (¿Está usted muy, bastante, poco o nada satisfecho/a con el funcionamiento de nuestra democracia?) en una variable ordinal (factor) con el comando ‘mutate’ y ordena las categorias de respuesta de la manera siguiente: “Molt satisfet/a”, “Bastant satisfet/a”, “Poc satisfet/a”, “Gens satisfet/a”, “No ho sap”, “No contesta”. Después, Calcula la frecuencia absoluta y relativa.
Ten en cuenta que:
“Molt satisfet/a” significa “Muy satisfecho/a”
“Bastant satisfet/a” significa “Bastante satisfecho/a”
“Poc satisfet/a” significa “Poco satisfecho/a”
“Gens satisfet/a” significa “Nada satisfecho/a”
“No ho sap” significa “No lo sabe”
Mostrar código.
#primero hay que recodificar a factor ordinalceo <- ceo |>mutate( SATIS_DEMOCRACIA =factor(SATIS_DEMOCRACIA, #modifica la variable en ordinal dentro de la base de datos, con factorordered =TRUE, #convertimos en ordinallevels =c( #establece el orden que queremos"Molt satisfet/a","Bastant satisfet/a","Poc satisfet/a","Gens satisfet/a","No ho sap","No contesta")))#calculamos la frecuencia absoluta y relativaceo |>count(SATIS_DEMOCRACIA, sort = T) |>#cuenta cuantos casos hay en cada categoria y los ordenamutate(per =round(n /sum(n) *100, 1)) #frecuencia relativa
# A tibble: 6 × 3
SATIS_DEMOCRACIA n per
<ord> <int> <dbl>
1 Poc satisfet/a 949 47.4
2 Bastant satisfet/a 526 26.3
3 Gens satisfet/a 425 21.2
4 Molt satisfet/a 65 3.2
5 No ho sap 30 1.5
6 No contesta 5 0.2
Recodifica los valores de VAL_GOV_CAT_0_10 de tal manera que crees la variable VAL_GOV_CAT_0_10_NUM en el dataset ceo, que vaya del 10 al 1. No ho sap y No contesta dejalos cómo NA_real_.
Ten en cuenta que:
“10 Molt bona” significa “10 Muy buena”
“0 Molt dolenta” significa “0 Muy mala”
“No ho sap” significa “No lo sabe”
Primero comprobamos qué valores tiene la variable VAL_GOB_CAT_0_10
Mostrar código.
unique(ceo$VAL_GOV_CAT_0_10) #comprobamos que valores tiene la variable
[1] "5" "7" "6" "4"
[5] "8" "2" "3" "0 Molt dolenta"
[9] "9" "1" "10 Molt bona" "No ho sap"
[13] "No contesta"
Mostrar código.
ceo <- ceo |>mutate( #creamos una nueva variableVAL_GOV_CAT_0_10_NUM =case_when( #codificamos la variable categórica a numerica VAL_GOV_CAT_0_10 =="10 Molt bona"~10, VAL_GOV_CAT_0_10 =="9"~9, VAL_GOV_CAT_0_10 =="8"~8, VAL_GOV_CAT_0_10 =="7"~7, VAL_GOV_CAT_0_10 =="6"~6, VAL_GOV_CAT_0_10 =="5"~5, VAL_GOV_CAT_0_10 =="4"~4, VAL_GOV_CAT_0_10 =="3"~3, VAL_GOV_CAT_0_10 =="2"~2, VAL_GOV_CAT_0_10 =="1"~1, VAL_GOV_CAT_0_10 =="0 Molt dolenta"~0, VAL_GOV_CAT_0_10 %in%c("No ho sap", "No contesta") ~NA_real_, #asignamos NA_real a los valores NS/NC.default =NA_real_ ) )
Calcula la media y la mediana de la variable VAL_GOV_CAT_0_10_NUM segun recuerdo de voto REC_PARLAMENT_VOT y comenta brevemente el resultado. Recuerda eliminar a las personas que no recuerdan haber votado y las que no saben o no contestan la valoración del gobierno. Para resolver este ejercicio utilizamos los cálculos elaborados previamente. En primer lugar, filtramos los resultados eliminando las variables indicadas, personas que no recuerdan el voto y los que no saben, no contestan.A continuación averiguamos los valores de la media y la mediana.
Mostrar código.
ceo_filtro <- ceo |>filter(!REC_PARLAMENT_VOT %in%c("No ho sap", "No contesta", " "), #elimina los que no recuerdan el voto (no saben, no contestan + vacío)!is.na(VAL_GOV_CAT_0_10_NUM) #elimina los NA que creamos antes )ceo_filtro |>group_by(REC_PARLAMENT_VOT) |>#cuenta los resultados de cada categoríasummarise(media =mean(VAL_GOV_CAT_0_10_NUM, na.rm =TRUE), #calculamos la mediamediana =median(VAL_GOV_CAT_0_10_NUM, na.rm =TRUE), #calculamos la medianan =n() )
Ahora veremos si hay diferencias segun la edad en la valoración del gobierno. Haz un barplot (geom_bar, utiliza la opción position="dodge") de la distribucion de la variable VAL_GOV_CAT_0_10_NUM por EDAT_GR (Grupo de edad).
Mostrar código.
ggplot(ceo_filtro, #creamos el gráfico sobre nuestra seleccion anterioraes(x = EDAT_GR, #marca los esteticosfill =factor(VAL_GOV_CAT_0_10_NUM))) +#colorea las barras por grado de valoraciongeom_bar(position ="dodge") #esto junta las barras
Los resultados muestran diferencias significativas en cuanto al rango de edad de las personas encuestadas, destacando una valoreacion muy negativa en la franja de los 35 a los 64, especialmente en los más jovenes de este rango. Las personas de mayor edad son quienes valoran mas positivamente el gobierno.
Actividad 3
En esta actividad analizaremos un marco de datos obtenido a partir del Banco Mundial. El Banco Mundial pone a disposición pública una gran cantidad de indicadores comparados entre países sobre desarrollo económico y social, como el producto interior bruto, la esperanza de vida, la educación o el mercado laboral. Para importar estos datos directamente desde internet utilizaremos el paquete WDI, que permite descargar indicadores internacionales actualizados de forma sencilla desde R. Si no tienes el paquete instalado debes instalarlo con la función install.packages("WDI") y cargarlo.
summary(wdi) #nos da informacion de cada variable.
country iso2c iso3c year
Length:6384 Length:6384 Length:6384 Min. :2000
Class :character Class :character Class :character 1st Qu.:2006
Mode :character Mode :character Mode :character Median :2012
Mean :2012
3rd Qu.:2017
Max. :2023
gdp lifeExp population
Min. : 233 Min. :14.66 Min. :9.544e+03
1st Qu.: 1769 1st Qu.:65.17 1st Qu.:1.453e+06
Median : 5324 Median :71.96 Median :9.688e+06
Mean : 14380 Mean :70.51 Mean :2.869e+08
3rd Qu.: 18070 3rd Qu.:76.88 3rd Qu.:5.986e+07
Max. :225884 Max. :86.37 Max. :8.064e+09
NA's :273 NA's :24 NA's :24
Tras el análisis de los datos podemos determinar que el marco de datos contiene observaciones sobre los distintos paises del mundo por años.Las variables que contienen ausencia de datos, principalmente en las variables numéricas gdp,lifeExp y population, lo que puede deberse a la frecuencia o forma de recoger los daos de cada país.
Escoje dos países y visualiza cómo ha evolucionado la esperanza de vida a lo largo del tiempo. Comenta brevemente cómo estaba distribuída en las dos regiones entre el 2000 i el 2023.
Mostrar código.
wdi |>filter(country %in%c("Spain", "Angola")) |>#filtramos para elegir dos paísesggplot(aes(x = year, y = lifeExp, color = country)) +#establecemos los criterios de la gráficageom_line() +#elegimos una grafica de línea para mostrar la evolución de una variable a partir de una segunda variable de tipo temporallabs(x ="Año", y ="Esperanza de vida")
Los resultados muestran un crecimiento positivo en ambos países entre 2000 y 2023, si bien es mucho más acusado en el país africano que en España. España presenta niveles más altos durante todo el periodo, pero con un crecimiento más estable y moderado. En cambio, Angola parte de valores mucho más bajos, pero experimenta un crecimiento más rápido y sostenido a lo largo del tiempo. En ambos casos, hay un descenso de la esperanza de vida coincidente con la pandemia del COVID, en 2019-2020, si bien los efectos de esta crisis son mas significativos al inicio de la misma en España y posteriormente en Angola. A partir de ese momento se mantiene la tendencia positiva de la gráfica.
Haz un histograma con todos los datos de los mismos dos países, separado por un geom_facet():
Mostrar código.
wdi |>filter(country %in%c("Spain", "Angola")) |>#selecciona los dos países a compararggplot(aes(x = lifeExp)) +geom_histogram(binwidth =1, fill ="lightblue", color ="black") +facet_wrap(~country)
El gráfico muestra la distribución de los años de esperanza de vida en ambos países.
Hazte una pregunta sobre uno o diversos países que puedas resolver mediante una visualización de las que has estudiado en esta unidad. Respondela con un gráfico.
¿Qué relación existe entre el PIB per cápita y la esperanza de vida en Angola entre 2000 y 2023, y cómo ha evolucionado esta relación a lo largo del tiempo?
Mostrar código.
wdi |>filter(country =="Angola") |># Filtramos solo para Angolaggplot(aes(x = gdp, y = lifeExp)) +# Estéticosgeom_point(alpha =0.6) +# Puntos (observaciones)geom_smooth(method ="lm") +# Línea de relación entre las variables labs(title ="Relación entre PIB per cápita y esperanza de vida",x ="PIB per cápita",y ="Esperanza de vida" )
La gráfica resultante compara la evolucion de la esperanza de vida con el aumento del PIB per cápita de la oblación. Se observa un aumento progresivo en ambos aspectos, como indica la linea ascendente. Aunque hay dispersion en los datos en algunos años, se observa una relacion positiva entre ambar variables a lo largo del tiempo.