Cargamos la base de datos. Los datos se obtuvieron de Banco Mundial y se agruparon diversas bases.
El dataset puede descargarse desde aqui.
También puede cargarse desde una query a data.world:
bancomundial <- read.csv(“https://query.data.world/s/owzasudqx4g5a3lqt32ykoudalq3ul”, header=TRUE, stringsAsFactors=TRUE)
bancomundial <- read.csv("data-wb/dataset_bancomundial.csv",
stringsAsFactors = TRUE)
Podemos ver que en el global environment se creo nuestro objeto bancomundial.
La función dim() nos permite ver la dimensión de nuestro dataset.
dim(bancomundial)
## [1] 13237 9
Nuestro dataset tiene 13237 filas y 9 columnas.
Se pueden utilizar también las funciones nrow() y ncol() para conocer la cantidad de filas y de columnas respectivamente.
nrow(bancomundial)
## [1] 13237
ncol(bancomundial)
## [1] 9
Ahora que conocemos las dimensiones, queremos ver los nombres de esas nueve columnas o variables.
names(bancomundial)
## [1] "Country.Name" "Country.Code" "Region"
## [4] "IncomeGroup" "year" "pop_total"
## [7] "perc_urban_pop" "pop_in_largest_city" "GDP_in_USD"
Todavía no sabemos que contienen las variables. Para averiguarlo, podemos usar la función head() que muestra por default las primeras 6 observaciones.
head(bancomundial)
## Country.Name Country.Code Region IncomeGroup year
## 1 American Samoa ASM East Asia & Pacific Upper middle income 1960
## 2 American Samoa ASM East Asia & Pacific Upper middle income 1961
## 3 American Samoa ASM East Asia & Pacific Upper middle income 1962
## 4 American Samoa ASM East Asia & Pacific Upper middle income 1963
## 5 American Samoa ASM East Asia & Pacific Upper middle income 1964
## 6 American Samoa ASM East Asia & Pacific Upper middle income 1965
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 20123 66.211 NA NA
## 2 20602 66.641 NA NA
## 3 21253 67.068 NA NA
## 4 22034 67.493 NA NA
## 5 22854 67.916 NA NA
## 6 23672 68.334 NA NA
Podemos configurar la cantidad de observaciones. Por ejemplo, si quisieramos ver 10 filas, deberíamos agregar ese parámetro en la función:
head(bancomundial, 10)
## Country.Name Country.Code Region IncomeGroup year
## 1 American Samoa ASM East Asia & Pacific Upper middle income 1960
## 2 American Samoa ASM East Asia & Pacific Upper middle income 1961
## 3 American Samoa ASM East Asia & Pacific Upper middle income 1962
## 4 American Samoa ASM East Asia & Pacific Upper middle income 1963
## 5 American Samoa ASM East Asia & Pacific Upper middle income 1964
## 6 American Samoa ASM East Asia & Pacific Upper middle income 1965
## 7 American Samoa ASM East Asia & Pacific Upper middle income 1966
## 8 American Samoa ASM East Asia & Pacific Upper middle income 1967
## 9 American Samoa ASM East Asia & Pacific Upper middle income 1968
## 10 American Samoa ASM East Asia & Pacific Upper middle income 1969
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 20123 66.211 NA NA
## 2 20602 66.641 NA NA
## 3 21253 67.068 NA NA
## 4 22034 67.493 NA NA
## 5 22854 67.916 NA NA
## 6 23672 68.334 NA NA
## 7 24462 68.750 NA NA
## 8 25248 69.163 NA NA
## 9 25989 69.574 NA NA
## 10 26703 69.980 NA NA
La función summary() nos permite ver un resumen de la información contenida en nuestro dataset.
summary(bancomundial)
## Country.Name Country.Code Region
## Afghanistan : 61 ABW : 61 East Asia & Pacific :2257
## Albania : 61 AFG : 61 Europe & Central Asia :3538
## Algeria : 61 AGO : 61 Latin America & Caribbean :2562
## American Samoa: 61 ALB : 61 Middle East & North Africa:1281
## Andorra : 61 AND : 61 North America : 183
## Angola : 61 ARE : 61 South Asia : 488
## (Other) :12871 (Other):12871 Sub-Saharan Africa :2928
## IncomeGroup year pop_total
## High income :5002 Min. :1960 Min. :3.893e+03
## Low income :1769 1st Qu.:1975 1st Qu.:4.686e+05
## Lower middle income:3050 Median :1990 Median :4.133e+06
## Upper middle income:3416 Mean :1990 Mean :2.434e+07
## 3rd Qu.:2005 3rd Qu.:1.323e+07
## Max. :2020 Max. :1.398e+09
## NA's :326
## perc_urban_pop pop_in_largest_city GDP_in_USD
## Min. : 2.077 Min. : 5254 Min. :8.824e+06
## 1st Qu.: 30.185 1st Qu.: 519169 1st Qu.:1.410e+09
## Median : 50.258 Median : 1136880 Median :7.481e+09
## Mean : 51.131 Mean : 2618042 Mean :1.740e+11
## 3rd Qu.: 71.755 3rd Qu.: 2658965 3rd Qu.:4.975e+10
## Max. :100.000 Max. :37468302 Max. :2.143e+13
## NA's :345 NA's :4125 NA's :3352
¿Qué vemos?
Hay 61 observaciones por país, cada una de ellas corresponde a un año. Los años van desde 1960 a 2020. El país con menos habitantes de la muestra tuvo 3.893hab, y el país más habitado contó con 1.397.715.000hab. El porcentaje de población urbana promedio es 50.258%, mientras existe algún país con 100% de población urbana.
Algunos resultados están escritos en notación científica. Podemos configurar el archivo para que se toleren números muy grandes.
options(scipen = 99)
Volvemos a ejecutar la función summary() para ver como se modificaron los valores.
summary(bancomundial)
## Country.Name Country.Code Region
## Afghanistan : 61 ABW : 61 East Asia & Pacific :2257
## Albania : 61 AFG : 61 Europe & Central Asia :3538
## Algeria : 61 AGO : 61 Latin America & Caribbean :2562
## American Samoa: 61 ALB : 61 Middle East & North Africa:1281
## Andorra : 61 AND : 61 North America : 183
## Angola : 61 ARE : 61 South Asia : 488
## (Other) :12871 (Other):12871 Sub-Saharan Africa :2928
## IncomeGroup year pop_total
## High income :5002 Min. :1960 Min. : 3893
## Low income :1769 1st Qu.:1975 1st Qu.: 468584
## Lower middle income:3050 Median :1990 Median : 4133322
## Upper middle income:3416 Mean :1990 Mean : 24335531
## 3rd Qu.:2005 3rd Qu.: 13226839
## Max. :2020 Max. :1397715000
## NA's :326
## perc_urban_pop pop_in_largest_city GDP_in_USD
## Min. : 2.077 Min. : 5254 Min. : 8824448
## 1st Qu.: 30.185 1st Qu.: 519169 1st Qu.: 1409873950
## Median : 50.258 Median : 1136880 Median : 7480968858
## Mean : 51.131 Mean : 2618042 Mean : 173953217878
## 3rd Qu.: 71.755 3rd Qu.: 2658965 3rd Qu.: 49745088112
## Max. :100.000 Max. :37468302 Max. :21433226000000
## NA's :345 NA's :4125 NA's :3352
Por último, podemos utilizar la función str() para ver como es la estructura de nuestro dataset:
str(bancomundial)
## 'data.frame': 13237 obs. of 9 variables:
## $ Country.Name : Factor w/ 217 levels "Afghanistan",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ Country.Code : Factor w/ 217 levels "ABW","AFG","AGO",..: 9 9 9 9 9 9 9 9 9 9 ...
## $ Region : Factor w/ 7 levels "East Asia & Pacific",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ IncomeGroup : Factor w/ 4 levels "High income",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ year : int 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
## $ pop_total : num 20123 20602 21253 22034 22854 ...
## $ perc_urban_pop : num 66.2 66.6 67.1 67.5 67.9 ...
## $ pop_in_largest_city: int NA NA NA NA NA NA NA NA NA NA ...
## $ GDP_in_USD : num NA NA NA NA NA NA NA NA NA NA ...
Las variables ‘Country.Name’, ‘Country.Code’, ‘Region’ e ‘IncomeGroup’ son variables de tipo factor o categórica.
Las variables ‘year’ y ‘pop_total’ son variables tipo integer, o números enteros.
Las variables ‘pop_total’, ‘perc_urban_pop’ y ‘GDP_in_USD’ son variables tipo number o númericas (generalmente con decimales)
Las funciones que utilizamos son de R base, es decir que vienen con el programa. Sin embargo existen muchas otras funciones disponibles para R. Estas se encuentran en paquetes. El paquete o librería tidyverse nos van a permitir manipular los datos y transformarlos.
Para utilizar un paquete, se instala 1 vez por computadora y se activa cada vez que lo queremos usar. La instalación se realiza con:
install.packages("tidyverse") o desde Tools > Install Packages > Tidyverse.
## install.packages("tidyverse")
Una vez instalado el paquete, es necesario activarlo con la funcíon library().
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4
## ✓ tibble 3.0.3 ✓ dplyr 1.0.1
## ✓ tidyr 1.1.1 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
Muchas veces aparecen advertencias. No se preocupen, no son errores.
Ahora que ya tenemos la librería activada, vamos a utilizar algunas de las funciones. Las funciones que veremos a continuación son:
- filter() para filtrar registros en función de alguna característica
- select() para seleccionar columnas a fin de reducir el tamaño del dataset
- mutate() para mutar o modificar registros, o para generar nuevas variables
- rename() para modificar el nombre de nuestras variables (o columnas)
- arrange() para ordenar las filas en función de alguna variable
- group_by() + summarise() para agrupar y resumir el dataset
Podemos utilizar la función filter() para filtrar observaciones:
Por ejemplo, queremos obtener solo las observaciones de Argentina.
datos_argentina <- filter(bancomundial, Country.Name == "Argentina")
Vemos que en nuestro environment tenemos un nuevo objeto que se llama ‘datos_argentina’. Como vimos antes, podemos utilizar la función head() para ver que contiene.
head(datos_argentina)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1960
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1961
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1962
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1963
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1964
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1965
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 20481779 73.611 6761837 NA
## 2 20817266 74.217 6919245 NA
## 3 21153052 74.767 7071464 24450604878
## 4 21488912 75.309 7227032 18272123664
## 5 21824425 75.844 7386244 25605249382
## 6 22159650 76.369 7548511 28344705967
También podemos filtrar otros tipos de condiciones. Por ejemplo, queremos que nuestro dataset comience en año 1990.
datos_argentina <- filter(datos_argentina, year >= 1990)
head(datos_argentina)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 32618651 86.984 11147566 141352368715
## 2 33079000 87.328 11276696 189719984268
## 3 33529326 87.542 11407033 228788617202
## 4 33970111 87.752 11538512 236741715015
## 5 34402672 87.960 11671691 257440000000
## 6 34828170 88.164 11806407 258031750000
Podríamos haber puesto las dos condiciones en una misma línea de código
datos_argentina <- filter(bancomundial, Country.Name == "Argentina" & year >= 1990)
head(datos_argentina)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 32618651 86.984 11147566 141352368715
## 2 33079000 87.328 11276696 189719984268
## 3 33529326 87.542 11407033 228788617202
## 4 33970111 87.752 11538512 236741715015
## 5 34402672 87.960 11671691 257440000000
## 6 34828170 88.164 11806407 258031750000
La función select() nos permite seleccionar las columnas (variables).
Por ejemplo, en nuestro nuevo dataset ‘datos_argentina’ solo queremos ver el año, la población total y el porcentaje de población urbana.
datos_argentina_seleccion <- select(datos_argentina, year, pop_total, perc_urban_pop)
head(datos_argentina_seleccion)
## year pop_total perc_urban_pop
## 1 1990 32618651 86.984
## 2 1991 33079000 87.328
## 3 1992 33529326 87.542
## 4 1993 33970111 87.752
## 5 1994 34402672 87.960
## 6 1995 34828170 88.164
También se puede seleccionar las columnas que no queremos guardar
datos_argentina_seleccion2 <- select(datos_argentina, -Country.Name, - Country.Code, - Region)
head(datos_argentina_seleccion2)
## IncomeGroup year pop_total perc_urban_pop pop_in_largest_city
## 1 Upper middle income 1990 32618651 86.984 11147566
## 2 Upper middle income 1991 33079000 87.328 11276696
## 3 Upper middle income 1992 33529326 87.542 11407033
## 4 Upper middle income 1993 33970111 87.752 11538512
## 5 Upper middle income 1994 34402672 87.960 11671691
## 6 Upper middle income 1995 34828170 88.164 11806407
## GDP_in_USD
## 1 141352368715
## 2 189719984268
## 3 228788617202
## 4 236741715015
## 5 257440000000
## 6 258031750000
Como sacamos las 3 primeras columnas, también podríamos escribirlo como intervalo.
datos_argentina_seleccion3 <- select(datos_argentina, 4:9)
head(datos_argentina_seleccion3)
## IncomeGroup year pop_total perc_urban_pop pop_in_largest_city
## 1 Upper middle income 1990 32618651 86.984 11147566
## 2 Upper middle income 1991 33079000 87.328 11276696
## 3 Upper middle income 1992 33529326 87.542 11407033
## 4 Upper middle income 1993 33970111 87.752 11538512
## 5 Upper middle income 1994 34402672 87.960 11671691
## 6 Upper middle income 1995 34828170 88.164 11806407
## GDP_in_USD
## 1 141352368715
## 2 189719984268
## 3 228788617202
## 4 236741715015
## 5 257440000000
## 6 258031750000
La función mutate() permite modificar o generar nuevas variables.
datos_argentina_modificado <- mutate(datos_argentina, pop_millones = pop_total /1000000)
head(datos_argentina_modificado)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD pop_millones
## 1 32618651 86.984 11147566 141352368715 32.61865
## 2 33079000 87.328 11276696 189719984268 33.07900
## 3 33529326 87.542 11407033 228788617202 33.52933
## 4 33970111 87.752 11538512 236741715015 33.97011
## 5 34402672 87.960 11671691 257440000000 34.40267
## 6 34828170 88.164 11806407 258031750000 34.82817
También se puede realizar operaciones entre variables.
datos_argentina_modificado <- mutate(datos_argentina_modificado,
urban_pop = pop_total * perc_urban_pop / 100)
head(datos_argentina_modificado)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD pop_millones
## 1 32618651 86.984 11147566 141352368715 32.61865
## 2 33079000 87.328 11276696 189719984268 33.07900
## 3 33529326 87.542 11407033 228788617202 33.52933
## 4 33970111 87.752 11538512 236741715015 33.97011
## 5 34402672 87.960 11671691 257440000000 34.40267
## 6 34828170 88.164 11806407 258031750000 34.82817
## urban_pop
## 1 28373007
## 2 28887229
## 3 29352243
## 4 29809452
## 5 30260590
## 6 30705908
Podemos también agregar texto para todas las variables.
datos_argentina_modificado <- mutate(datos_argentina_modificado,
fuente = "Banco Mundial")
head(datos_argentina_modificado)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD pop_millones
## 1 32618651 86.984 11147566 141352368715 32.61865
## 2 33079000 87.328 11276696 189719984268 33.07900
## 3 33529326 87.542 11407033 228788617202 33.52933
## 4 33970111 87.752 11538512 236741715015 33.97011
## 5 34402672 87.960 11671691 257440000000 34.40267
## 6 34828170 88.164 11806407 258031750000 34.82817
## urban_pop fuente
## 1 28373007 Banco Mundial
## 2 28887229 Banco Mundial
## 3 29352243 Banco Mundial
## 4 29809452 Banco Mundial
## 5 30260590 Banco Mundial
## 6 30705908 Banco Mundial
Podríamos hacer las tres modificaciones en una misma línea de código.
datos_argentina_modificado2 <- mutate(datos_argentina,
pop_millones = pop_total /1000000,
urban_pop = pop_total * perc_urban_pop / 100,
fuente = "Banco Mundial")
head(datos_argentina_modificado2)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD pop_millones
## 1 32618651 86.984 11147566 141352368715 32.61865
## 2 33079000 87.328 11276696 189719984268 33.07900
## 3 33529326 87.542 11407033 228788617202 33.52933
## 4 33970111 87.752 11538512 236741715015 33.97011
## 5 34402672 87.960 11671691 257440000000 34.40267
## 6 34828170 88.164 11806407 258031750000 34.82817
## urban_pop fuente
## 1 28373007 Banco Mundial
## 2 28887229 Banco Mundial
## 3 29352243 Banco Mundial
## 4 29809452 Banco Mundial
## 5 30260590 Banco Mundial
## 6 30705908 Banco Mundial
La función rename() permite cambiar los nombres de las columnas.
datos_argentina_renombrado <- rename(datos_argentina,
Pais = Country.Name,
Codigo = Country.Code,
Grupo = IncomeGroup)
head(datos_argentina_renombrado)
## Pais Codigo Region Grupo year pop_total
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990 32618651
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991 33079000
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992 33529326
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993 33970111
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994 34402672
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995 34828170
## perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 86.984 11147566 141352368715
## 2 87.328 11276696 189719984268
## 3 87.542 11407033 228788617202
## 4 87.752 11538512 236741715015
## 5 87.960 11671691 257440000000
## 6 88.164 11806407 258031750000
La función arrange() nos permite reordenar el dataset según un valor en particular.
datos_argentina_ordenado <- arrange(datos_argentina, perc_urban_pop)
head(datos_argentina_ordenado)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 1990
## 2 Argentina ARG Latin America & Caribbean Upper middle income 1991
## 3 Argentina ARG Latin America & Caribbean Upper middle income 1992
## 4 Argentina ARG Latin America & Caribbean Upper middle income 1993
## 5 Argentina ARG Latin America & Caribbean Upper middle income 1994
## 6 Argentina ARG Latin America & Caribbean Upper middle income 1995
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 32618651 86.984 11147566 141352368715
## 2 33079000 87.328 11276696 189719984268
## 3 33529326 87.542 11407033 228788617202
## 4 33970111 87.752 11538512 236741715015
## 5 34402672 87.960 11671691 257440000000
## 6 34828170 88.164 11806407 258031750000
También lo podríamos ordenar de forma descendiente.
datos_argentina_ordenado2 <- arrange(datos_argentina, desc(perc_urban_pop))
head(datos_argentina_ordenado2)
## Country.Name Country.Code Region IncomeGroup year
## 1 Argentina ARG Latin America & Caribbean Upper middle income 2019
## 2 Argentina ARG Latin America & Caribbean Upper middle income 2018
## 3 Argentina ARG Latin America & Caribbean Upper middle income 2017
## 4 Argentina ARG Latin America & Caribbean Upper middle income 2016
## 5 Argentina ARG Latin America & Caribbean Upper middle income 2015
## 6 Argentina ARG Latin America & Caribbean Upper middle income 2014
## pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1 44938712 91.991 15057273 445445177459
## 2 44494502 91.870 14966530 517626700413
## 3 44044811 91.749 14879100 643628665303
## 4 43590368 91.627 14792181 557531376218
## 5 43131966 91.503 14705533 594749285413
## 6 42669500 91.377 14619510 526319673732
Las funciones group_by() y summarise() suelen utilizarse en conjunto.
group_by() genera grupos de observaciones según alguna variable. No genera resultados parciales, solo las agrupa.
summarise() genera resumenes o nuevos resultados a partir de los datos agrupados.
Por ejemplo, nos gustaría obtener el GDP total y la cantidad de observaciones que hay para cada Income Group.
Entonces, en primer lugar, vamos a agrupar por income group
income_agrupado <- group_by(bancomundial, IncomeGroup)
head(income_agrupado)
## # A tibble: 6 x 9
## # Groups: IncomeGroup [1]
## Country.Name Country.Code Region IncomeGroup year pop_total perc_urban_pop
## <fct> <fct> <fct> <fct> <int> <dbl> <dbl>
## 1 American Sa… ASM East … Upper midd… 1960 20123 66.2
## 2 American Sa… ASM East … Upper midd… 1961 20602 66.6
## 3 American Sa… ASM East … Upper midd… 1962 21253 67.1
## 4 American Sa… ASM East … Upper midd… 1963 22034 67.5
## 5 American Sa… ASM East … Upper midd… 1964 22854 67.9
## 6 American Sa… ASM East … Upper midd… 1965 23672 68.3
## # … with 2 more variables: pop_in_largest_city <int>, GDP_in_USD <dbl>
Vemos que los datos no se modificaron. Lo que hace R es agruparlos sin realizar ninguna operación.
Para eso, necesitamos resumir los datos agrupados.
income_resumen <- summarise(income_agrupado,
cantidad = n(), # la funcion n() realiza conteos
GDP_total = sum(GDP_in_USD, na.rm = TRUE)) # na.rm = TRUE evita los valores NA
## `summarise()` ungrouping output (override with `.groups` argument)
head(income_resumen)
## # A tibble: 4 x 3
## IncomeGroup cantidad GDP_total
## <fct> <int> <dbl>
## 1 High income 5002 1.26e15
## 2 Low income 1769 7.69e12
## 3 Lower middle income 3050 9.20e13
## 4 Upper middle income 3416 3.57e14
Si realizaron todas las funciones, van a ver que su global environment está lleno de objetos. Fuimos generando objetos intermedios a los cuales les aplicamos las distintas funciones. Por suerte, podemos concatenar funciones, y así evitarnos los objetos intermedios.
Para concatenar funciones (es decir, realizar una a continuación de la otra) se utiliza el operador pipe %>%. Cuando utilizamos funciones sueltas, el dataset iba dentro de la función. Al utilizar el pipe %>% los datos suelen ir por fuera.
A modo de ejemplo, vamos a un ejercicio. Queremos conocer la cantidad de países discriminados por región que se encuentran dentro del grupo de ingresos medio superior (Income Group: Upper middle income) en el año 2000. Además queremos saber el GDP total de esa región, la población total de esa región y el promedio de población por país.
¡Resolvamoslo en un único chunk!
upper_middle_income <- bancomundial %>% #primero se coloca la base de datos
filter(IncomeGroup == "Upper middle income" & year == 2000) %>% #filtramos los datos
group_by(Region) %>% #agrupamos por region
summarise(cantidad_paises = n(),
GDP_total = sum(GDP_in_USD, na.rm = TRUE),
pop_total_r = sum(pop_total, na.rm = TRUE),
GDP_per_capita = GDP_total/pop_total_r) %>%
arrange(desc(GDP_per_capita))
## `summarise()` ungrouping output (override with `.groups` argument)
Veamos los resultados:
head(upper_middle_income)
## # A tibble: 6 x 5
## Region cantidad_paises GDP_total pop_total_r GDP_per_capita
## <fct> <int> <dbl> <dbl> <dbl>
## 1 Latin America & Caribbean 20 2.05e12 458554206 4462.
## 2 Sub-Saharan Africa 5 1.52e11 50240154 3027.
## 3 South Asia 1 6.24e 8 279398 2235.
## 4 Europe & Central Asia 15 6.14e11 281278244 2183.
## 5 Middle East & North Afri… 5 1.74e11 103444152 1678.
## 6 East Asia & Pacific 10 1.60e12 1561507123 1024.
Para hacer gráficos, podemos utilizar ggplot(). GGPLOT es un paquete que se encuentra dentro de la librería Tidyverse.
La lógica de ggplot es sumar capas de objetos a los gráficos. Siempre se escribe primero la función ggplot() y después podemos ir sumando la información.
Como ya sabemos manipular la base de datos, buscamos visualizar la distribución de la población en el año 2000.
Para visualizar una distribución, el tipo de gráfico más común es el histograma:
bancomundial %>% #primero la base de datos
filter(year == 2000) %>% #filtramos el año
ggplot() + #realizamos la función ggplot
geom_histogram(aes(x = pop_total)) #sumamos un tipo de geometría
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Vemos una distribución muy dispar. Hay dos países (posiblemente China e India) que superar el billón de habitantes.
Otra forma de escribir la base de datos es dentro de la función ggplot()
ggplot(bancomundial %>% filter(year == 2000)) +
geom_histogram(aes(x = pop_total))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Obtenemos el mismo gráfico.
Para visualizar la cantidad de países por Income Group en el año 2015, podríamos realizar un gráfico de barras.
bancomundial %>%
filter(year == 2015) %>%
ggplot() +
geom_bar(aes(x = IncomeGroup))
Podemos agregar color y modificar los títulos.
bancomundial %>%
filter(year == 2015) %>%
ggplot() +
geom_bar(aes(x = IncomeGroup, fill = IncomeGroup), color = "grey30") +
labs(title = "Cantidad de países por Income Group",
subtitle = "Año 2015",
caption = "Fuente: Banco Mundial",
x = "Income Group",
y = "Cantidad")
Como el parámetro ‘fill’ depende de una variable (en este caso IncomeGroup), se encuentra DENTRO de la función aes(). El parámetro ‘color’ no depende de ninguna variable, entonces se encuentra fuera.
bancomundial %>%
filter(year == 2015) %>%
ggplot() +
geom_bar(aes(x = IncomeGroup), color = "grey30", fill = "cornflowerblue") +
labs(title = "Cantidad de países por Income Group",
subtitle = "Año 2015",
caption = "Fuente: Banco Mundial",
x = "Income Group",
y = "Cantidad") +
facet_wrap(~Region, ncol = 4) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
Introducción a Big Data Urbana de Angie Scetta.
Conociendo R de Angie Scetta.
Importar un dataset de Angie Scetta.
Big Data Urbana de Angie Scetta.
Ciencia de datos para gente sociable de Antonio Vazquez Brust.
Otras funciones de tidyverse de Paula Videla.