R que R

Data Visualization: Treemaps

Sat, Nov 9, 2019
R Data Visualization
#treemap #3dtreeR #Perú #VAB #PIB


Paquetes y Dataset


Cargamos los paquetes necesarios:



library(tidyverse)
library(treemap)
library(readxl)
library(stringr)
library(knitr)


En esta ocasión utilizaremos el Valor Agregado Bruto por actividades económicas según departamento de Perú para el año 2016. Los datos, obtenidos del INEI, muestran los valores a precios constantes de 2007. Por su parte, la región de Lima incluye también la Provincia Constitucional del Callao.



Peru_vab_sectores <- read_excel("C:/Users/Usuario/Desktop/r_que_r/r_que_r/content/datasets/Peru_vab_sectores.xlsx")
head(Peru_vab_sectores)
## # A tibble: 6 x 13
##   Departamentos `Agricultura, G~ `Pesca y Acuicu~ `Extracción de ~ Manufactura
##   <chr>                    <dbl>            <dbl>            <dbl>       <dbl>
## 1 Amazonas                891535              434            88744      122537
## 2 Ancash                  640755           259165          8723743     1578256
## 3 Apurímac                402859              461          3867222       94690
## 4 Arequipa               1662593            44181         10962201     3476996
## 5 Ayacucho                604838              958          1205183      384229
## 6 Cajamarca              1286478              802          2254607      699070
## # ... with 8 more variables: `Electricidad, Gas y Agua` <dbl>,
## #   Construcción <dbl>, Comercio <dbl>, `Transporte, Almacen., Correo y
## #   Mensajería` <dbl>, `Alojamiento y Restaurantes` <dbl>, `Telecom. y Otros
## #   Serv. de Información` <dbl>, `Administración Pública y Defensa` <dbl>,
## #   `Otros Servicios` <dbl>


Como vemos, el dataframe sobre el que vamos a trabajar presenta en la primera columna los nombres de los distintos departamentos o regiones del país. En las siguientes columnas se recoge información de las actividades económicas, habiendo en cada una de ellas información relativa a cada uno de los 12 grandes sectores productivos.


Para trabajar con este dataset nos interesa reorganizarla información mostrada. Para ello utilizaremos la función gather() como vemos en el comando siguiente. De esta forma sintetizamos el dataframe en tres columnas, una para el nombre de los departamentos, otro para el sector económico y otro para el valor agregado bruto de cada sector en cada región.



Peru_sectores <- Peru_vab_sectores %>%
  gather(key = "sector", value = "vab", 2:13)

head(Peru_sectores)
## # A tibble: 6 x 3
##   Departamentos sector                                          vab
##   <chr>         <chr>                                         <dbl>
## 1 Amazonas      Agricultura, Ganadería, Caza y Silvicultura  891535
## 2 Ancash        Agricultura, Ganadería, Caza y Silvicultura  640755
## 3 Apurímac      Agricultura, Ganadería, Caza y Silvicultura  402859
## 4 Arequipa      Agricultura, Ganadería, Caza y Silvicultura 1662593
## 5 Ayacucho      Agricultura, Ganadería, Caza y Silvicultura  604838
## 6 Cajamarca     Agricultura, Ganadería, Caza y Silvicultura 1286478


Con la función unique() podemos ver los sectores económicos que contiene nuestro dataset.



unique(Peru_sectores$sector)
##  [1] "Agricultura, Ganadería, Caza y Silvicultura"
##  [2] "Pesca y Acuicultura"                        
##  [3] "Extracción de Petróleo, Gas y Minerales"    
##  [4] "Manufactura"                                
##  [5] "Electricidad, Gas y Agua"                   
##  [6] "Construcción"                               
##  [7] "Comercio"                                   
##  [8] "Transporte, Almacen., Correo y Mensajería"  
##  [9] "Alojamiento y Restaurantes"                 
## [10] "Telecom. y Otros Serv. de Información"      
## [11] "Administración Pública y Defensa"           
## [12] "Otros Servicios"


El objetivo de los treemap es, en esencia, visualizar en un gráfico la participación de algunas observaciones sobre un agregado. En nuestro caso particular nos interesa identificar el peso de los sectores productivos sobre el VAB total de la economía peruana y de las respectivas economías regionales. Antes de proceder a realizar los gráficos podemos hacernos una serie de preguntas para profundizar en estos aspectos:


1. ¿Qué peso tiene cada una de las economías regionales sobre el valor agregado bruto total de la economía peruana?



a <- Peru_sectores %>%
  group_by(Departamentos) %>%
  summarise(vab_regional = sum(vab)) %>%
  mutate(total= sum(vab_regional), porcentaje = 100*(vab_regional/total)) %>%
  arrange(desc(porcentaje)) %>%
  select(Departamentos, porcentaje) 
## `summarise()` ungrouping output (override with `.groups` argument)

a$porcentaje <- formatC(a$porcentaje, format = "f", digits = 2)

kable(a)
Departamentos porcentaje
Lima 48.32
Arequipa 6.52
Cusco 4.79
La Libertad 4.49
Piura 4.18
Ancash 4.03
Ica 3.35
Junín 3.14
Lambayeque 2.43
Cajamarca 2.32
Puno 1.99
Moquegua 1.90
Loreto 1.65
Tacna 1.43
Apurímac 1.39
San Martín 1.23
Pasco 1.17
Huánuco 1.17
Ayacucho 1.13
Ucayali 0.91
Huancavelica 0.71
Amazonas 0.61
Madre de Dios 0.59
Tumbes 0.55


Resulta evidente la gran concentración de la actividad productiva en la capital, Lima, donde en 2016 se concentra el 48,32% de la actividad productiva del país. Por el contrario otras regiones, véase Tumbes, Madre de Dios, Amazonas, Huancavelica o Ucayali, no representan ni el 1% cada una del total del VAB total de la economía peruana.


2. ¿Qué peso tiene cada sector sobre el valor agregado total de la economía peruana en su conjunto?



b <- Peru_sectores %>%
  group_by(sector) %>%
  summarise(vab_regional = sum(vab)) %>%
  mutate(total= sum(vab_regional), porcentaje = 100*(vab_regional/total)) %>%
  arrange(desc(porcentaje)) %>%
  select(sector, porcentaje) 
## `summarise()` ungrouping output (override with `.groups` argument)

b$porcentaje <- formatC(b$porcentaje, format = "f", digits = 2)

kable(b)
sector porcentaje
Otros Servicios 25.22
Manufactura 14.59
Extracción de Petróleo, Gas y Minerales 14.32
Comercio 11.72
Construcción 6.44
Transporte, Almacen., Correo y Mensajería 6.01
Agricultura, Ganadería, Caza y Silvicultura 5.69
Administración Pública y Defensa 5.52
Telecom. y Otros Serv. de Información 4.57
Alojamiento y Restaurantes 3.51
Electricidad, Gas y Agua 2.05
Pesca y Acuicultura 0.36


Vemos que una cuarta parte del VAB total de la economía peruana corresponde al sector Otros Servicios, un 14,6% a la actividad manufacturera/industrial y un 14,3% a la actividad extractiva (petróleo, gas y minería). El sector que contribuye en menor medida al valor agregado bruto total del país es el sector pesquero (0,36%).


3. ¿Qué sectores a nivel regional contribuyen en mayor y en menor medida al VAB total de la economía peruana?



c <- Peru_sectores %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(Departamentos, sector,porcentaje) %>%
  arrange(desc(porcentaje)) 

c$porcentaje <- formatC(c$porcentaje, format = "f", digits = 4)
  
library(knitr)

# Los diez sectores a nivel regional que más contribuyen

knitr::kable(c %>%
  head(n=10))
Departamentos sector porcentaje
Lima Otros Servicios 16.2317
Lima Manufactura 8.9247
Lima Comercio 6.3806
Lima Transporte, Almacen., Correo y Mensajería 3.3633
Lima Telecom. y Otros Serv. de Información 2.9291
Lima Administración Pública y Defensa 2.7299
Lima Construcción 2.5621
Arequipa Extracción de Petróleo, Gas y Minerales 2.4061
Cusco Extracción de Petróleo, Gas y Minerales 2.3587
Lima Alojamiento y Restaurantes 2.2963

# Los diez sectores a nivel regional que menos contribuyen

knitr::kable(c %>%
  tail(n=10))
Departamentos sector porcentaje
Huancavelica Pesca y Acuicultura 0.0013
San Martín Pesca y Acuicultura 0.0009
Madre de Dios Pesca y Acuicultura 0.0003
Ayacucho Pesca y Acuicultura 0.0002
Cajamarca Pesca y Acuicultura 0.0002
Cusco Pesca y Acuicultura 0.0002
Huánuco Pesca y Acuicultura 0.0001
Apurímac Pesca y Acuicultura 0.0001
Amazonas Pesca y Acuicultura 0.0001
Pasco Pesca y Acuicultura 0.0001


El sector Otros Servicios en Lima contribuye al 16,2% del VAB peruano total mientras que la actividad pesquera en Pasco, Amazonas, Apurímac o Huánuco lo hacen un 0,0001%.


4. ¿Qué peso tiene cada sector sobre el VAB de cada región?


Si ordenamos las regiones por orden alfabético y de mayor a menor participación podemos identificar los sectores más importantes en cada región (ie. Agropecuario en Amazonas, Extractivo en Ancash, Apurímac o Arequipa, etc.) y el peso de cada actividad sobre la economía regional. No obstante, por motivos de espacio mostramos únicamente los primeros 12 valores del dataset creado (que corresponden a la región Amazonas).



d <- Peru_sectores %>%
  group_by(Departamentos) %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(Departamentos, sector, porcentaje) %>%
  arrange(Departamentos, desc(porcentaje)) %>%
  head(n=12)

d$porcentaje <- formatC(d$porcentaje, format = "f", digits = 2)

kable(d)
Departamentos sector porcentaje
Amazonas Agricultura, Ganadería, Caza y Silvicultura 32.03
Amazonas Otros Servicios 19.62
Amazonas Comercio 11.54
Amazonas Construcción 10.26
Amazonas Administración Pública y Defensa 10.06
Amazonas Manufactura 4.40
Amazonas Transporte, Almacen., Correo y Mensajería 4.28
Amazonas Extracción de Petróleo, Gas y Minerales 3.19
Amazonas Telecom. y Otros Serv. de Información 1.95
Amazonas Alojamiento y Restaurantes 1.47
Amazonas Electricidad, Gas y Agua 1.17
Amazonas Pesca y Acuicultura 0.02


Para observar la composición sectorial de una región en concreto, pongamos por ejemplo Ica, podríamos indicar el siguiente código:



d_b <- Peru_sectores %>%
  group_by(Departamentos) %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(Departamentos, sector, porcentaje) %>%
  arrange(Departamentos, desc(porcentaje)) %>%
  filter(Departamentos == "Ica")

d_b$porcentaje <- formatC(d_b$porcentaje, format = "f", digits = 2)

kable(d_b)
Departamentos sector porcentaje
Ica Manufactura 19.45
Ica Extracción de Petróleo, Gas y Minerales 15.76
Ica Otros Servicios 14.78
Ica Agricultura, Ganadería, Caza y Silvicultura 13.10
Ica Construcción 11.09
Ica Comercio 9.58
Ica Transporte, Almacen., Correo y Mensajería 6.49
Ica Administración Pública y Defensa 3.32
Ica Telecom. y Otros Serv. de Información 2.76
Ica Alojamiento y Restaurantes 1.57
Ica Electricidad, Gas y Agua 1.57
Ica Pesca y Acuicultura 0.55


5. ¿En qué medida contribuyen las regiones peruanas al VAB agregado de cada uno de los grandes sectores productivos?


Esta pregunta es similar a la anterior. No obstante, en lugar de querer identificar el peso de cada sector en cada región pretende identificar el peso de cada región en el agregado total de cada actividad productiva del país. Esto lo conseguimos realizando ligeros cambios al código inicial (de nuevo, por motivos de espacio, mostramos los primeros valores que corresponden, por estar ordenados de forma alfabética, a la Administración Pública y Defensa).



e <- Peru_sectores %>%
  group_by(sector) %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(sector, Departamentos,porcentaje) %>%
  arrange(sector, desc(porcentaje)) %>%
  head(n=10)

e$porcentaje <- formatC(e$porcentaje, format = "f", digits = 2)

kable(e)
sector Departamentos porcentaje
Administración Pública y Defensa Lima 49.46
Administración Pública y Defensa Piura 4.54
Administración Pública y Defensa La Libertad 3.95
Administración Pública y Defensa Cajamarca 3.48
Administración Pública y Defensa Arequipa 3.43
Administración Pública y Defensa Ancash 3.39
Administración Pública y Defensa Junín 3.29
Administración Pública y Defensa Cusco 3.18
Administración Pública y Defensa Lambayeque 3.04
Administración Pública y Defensa Puno 2.81


Al igual que hemos hecho previamente, podemos identificar la participación de cada región sobre una actividad productiva en concreto, por ejemplo la actividad extractiva, realizando algún pequeño cambio al código anterior.



e_b <- Peru_sectores %>%
  group_by(sector) %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(sector, Departamentos,porcentaje) %>%
  arrange(sector, desc(porcentaje)) %>%
  filter(sector == "Extracción de Petróleo, Gas y Minerales") %>%
  head(n=10)

e_b$porcentaje <- formatC(e_b$porcentaje, format = "f", digits = 2)

kable(e_b)
sector Departamentos porcentaje
Extracción de Petróleo, Gas y Minerales Arequipa 16.80
Extracción de Petróleo, Gas y Minerales Cusco 16.47
Extracción de Petróleo, Gas y Minerales Ancash 13.37
Extracción de Petróleo, Gas y Minerales Junín 6.40
Extracción de Petróleo, Gas y Minerales Apurímac 5.93
Extracción de Petróleo, Gas y Minerales Lima 5.65
Extracción de Petróleo, Gas y Minerales Pasco 4.99
Extracción de Petróleo, Gas y Minerales Moquegua 3.86
Extracción de Petróleo, Gas y Minerales Tacna 3.77
Extracción de Petróleo, Gas y Minerales Ica 3.69


La tabla anterior indica claramente cuáles son las principales regiones productoras de minerales, petróleo o gas del Perú en 2016. Las regiones de Arequipa, Cusco y Ancash contribuyeron a más del 45% del valor agregado bruto de la actividad extractiva del país en el año 2016.


6. ¿Cuál es el sector en cada región que más contribuye al VAB nacional y al VAB de dicha región?


Si queremos identificar únicamente el sector en cada una de las regiones peruanas que más contribuye al VAB nacional podemos modificar el código utilizado en la pregunta 3 (mostramos solo las 10 primeras observaciones).



f <- Peru_sectores %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(Departamentos, sector,porcentaje) %>%
  arrange(desc(porcentaje)) %>%
  group_by(Departamentos) %>%
  top_n(1) %>%
  head(n=10)

f$porcentaje <- formatC(f$porcentaje, format = "f", digits = 2)
  
kable(f)
Departamentos sector porcentaje
Lima Otros Servicios 16.23
Arequipa Extracción de Petróleo, Gas y Minerales 2.41
Cusco Extracción de Petróleo, Gas y Minerales 2.36
Ancash Extracción de Petróleo, Gas y Minerales 1.91
La Libertad Otros Servicios 0.96
Junín Extracción de Petróleo, Gas y Minerales 0.92
Apurímac Extracción de Petróleo, Gas y Minerales 0.85
Piura Otros Servicios 0.84
Moquegua Manufactura 0.82
Pasco Extracción de Petróleo, Gas y Minerales 0.72


Por su parte, si queremos identificar únicamente el sector de cada departamento que más contribuye al VAB de dicha región, comprobando de forma indirecta el grado de concentración productiva existente en las regiones peruanas, podemos también realizar alguna pequeña modificación al código previo (mostramos de nuevo solo las 10 primeras observaciones).



f_b <- Peru_sectores %>%
  group_by(Departamentos) %>%
  mutate(suma_total= sum(vab), porcentaje= 100*(vab/suma_total)) %>%
  select(Departamentos, sector,porcentaje) %>%
  arrange(desc(porcentaje)) %>%
  top_n(1) %>%
  head(n=10)

f_b$porcentaje <- formatC(f_b$porcentaje, format = "f", digits = 2)
  
kable(f_b)
Departamentos sector porcentaje
Pasco Extracción de Petróleo, Gas y Minerales 61.08
Apurímac Extracción de Petróleo, Gas y Minerales 60.91
Cusco Extracción de Petróleo, Gas y Minerales 49.23
Ancash Extracción de Petróleo, Gas y Minerales 47.50
Madre de Dios Extracción de Petróleo, Gas y Minerales 46.53
Moquegua Manufactura 43.38
Tacna Extracción de Petróleo, Gas y Minerales 37.76
Arequipa Extracción de Petróleo, Gas y Minerales 36.91
Lima Otros Servicios 33.59
Amazonas Agricultura, Ganadería, Caza y Silvicultura 32.03


Resulta patente la gran concentración productiva en la actividad extractiva existente en regiones como Pasco, Apurímac, Cusco, Ancash, Madre de Dios, Tacna o Arequipa. Moquegua registra una gran concentración de su actividad productiva en Manufactura, actividad que en dicha región está también fuertemente vinculada a la producción y refinado de minerales, principalmente cobre.


Treemap con el paquete treemap


No obstante, bien es sabido que una imagen vale más que mil palabras. Para ello una buena opción son los gráficos treemap que permiten visualizar el peso de cada región o de cada sector sobre el conjunto de la economía. Una forma sencilla de realizar gráficos treemap es mediante el paquete del mismo nombre.



tree_sectores <- treemap(
  Peru_sectores,
  index=c("sector","Departamentos"),
  vSize="vab",
  title = "VAB por actividades económicas según departamento en 2016.",
  vColor="sector",
  type="index",
  palette = "Set3",
  force.print.labels = F,
  border.col = c("black", "white"),
  border.lwds = c(3,2),
  align.labels = list(
    c("center","center"),
    c("center", "top")
  )
)


El gráfico muestra claramente que, como vimos, la actividad económica de mayor valor agregado bruto es el sector Otros Servicios, seguido por la Manufactura, el sector extractivo y la actividad comercial. La Pesca es, sin duda, el sector productivo de menor valor agregado bruto del país. Por su parte comprobamos que Lima, centro indiscutible de la economía del país, representa una gran parte del VAB total procedente del sector Otros Servicios, pero también en los sectores Manufactura, Comercio, Construcción entre otros.


Sin embargo, para visualizar más fácilmente la importancia de Lima sobre el VAB total podemos modificar ligeramente el código anterior para generar un treemap alternativo. De esta forma obtenemos una imagen más sugerente de la enorme concentración productiva que existe en Perú, donde domina enormemente la capital con respecto al resto de regiones del país. Asimismo, el nuevo treemap nos muestra claramente que la actividad extractiva, es decir, la extracción de petróleo, gas o la actividad minera, representa una parte muy importante del VAB total de algunas regiones peruanas, como por ejemplo Arequipa, Cusco, Ancash, Junín, Tacna, Apurímac o Pasco entre otras. Nótese además que la actividad extractiva tiende a ser una actividad caracterizada por su alto nivel de productividad pero, en el lado negativo, suele ser una actividad altamente intensiva en capital, es decir que es creadora de poco empleo y, por su parte, es una actividad potencialmente generadora de conflictos sociales y problemas medioambientales.



tree_regiones <- treemap(
  Peru_sectores,
  index=c("Departamentos", "sector"),
  vSize="vab",
  title = "VAB por actividades económicas según departamento en 2016.",
  vColor="sector",
  type="index",
  palette = "Set2",
  force.print.labels = F,
  border.col = c("white", "black"),
  border.lwds = c(4,1),
  align.labels = list(
    c("center","center"),
    c("center", "top")
  )
)


Treemap interactivo con d3treeR


Los gráficos anteriores nos permite hacernos una imagen general de qué sectores y regiones representan una mayor proporción con respecto al valor agregado bruto total de la economía peruana y cuáles tienen un menor peso en la economía en su conjunto. No obstante, estos gráficos estáticos no permiten ver de forma adecuada los valores más pequeños, los cuales quedan difuminados e invisibilizados con respecto a los de mayor peso debido a su menor participación relativa (en nuestro caso con respecto a otros sectores o regiones). Para solucionar esto podemos realizar treemaps dinámicos o interactivos, que nos permitan visualizar fácilmente todas las categorías incluidas en el treemap.


Para ello, el paquete {d3treeR} nos permite realizar de forma sencilla treemaps interactivos. Por ejemplo, en los siguientes comandos realizamos treemaps interactivos partiendo de los treemaps realizados en el punto previo.


El treemap inteactivo de tree_sectores:



library(d3treeR)

d3tree(tree_sectores, 
       rootname = "VAB por actividades económicas según departamento en 2016. (valores a precios constantes de 2007)")


El treemap interactivo de tree_regiones:



d3tree(tree_regiones, 
       rootname = "VAB por actividades económicas según departamento en 2016. (valores a precios constantes de 2007)")