Proyecto Opensource

En colaboración con la comunidad de Open source que viene difundiendo BEST en el Perú y latinoámerica, presentamos un proyecto basico que pueda ser útil en la estructurción de datos y visualización de la misma.

El proyecto esta orientada a analizar base de datos peruana, haciendo su limpieza, generando nuevas variables y finalmente quedando lista para su análisis estadístico y gráfico.

Base de datos

La data fue extraida del Ministerio de Energía y Minas (MINEM) de la seccíon minería y estadisticas de inversión minera, en formato de excel.

Ésta base de datos es semiestructurada, por lo que fue conveniente transformarla en columnas únicas para su mejor comprensíon y mayor potencial de análisis.

Librerías

Para hacer uso de las librerías, primero se tienen que instalar con el siguiente código install.packages(“Libreria”) y luego llamarlo con library(Librería)

Se detallan algunas librerias que fueron utilizadas:

  • library(readxl) : Es útil para leer archivos de Excel
  • library(readr) : Es un componente de dityverse que lee archivos distintos al Excel
  • library(tidyverse) : Contiene un conjunto de paquetes para manipular datos
  • library(dplyr) : Paquete para manipular datos
  • library(tidyr): Para convertir los datos a tidy dat
  • library(knitr) : Para generar informes dinámicos
  • library(forcats) : Para trabajar con variables tipo factor
  • library(ggplot2) : Para generar gráficos
  • library(kableExtra) : Para construir tablas
  • library(rmarkdown) : Para compilar documentos en html o latex
  • library(markdown): Permite fácil creación de documentos
  • library(tables) : Exporta tablas en latex o html
  • library(lubridate) : mMnejador de fechas
  • library(plotly) : Genera gráficos dinámicos

A continuación se muestra todo el proceso de la manipulación de datos:

#Fijamos nuestro directorio de trabajo

setwd("D:/CURSOS_VIRTUALES/BEST/Sesion3/Proyecto")
#Importamos la base de datos
INV2000_2019<-read_excel("INV2000-2019.xls", skip = 2, sheet = "Inversiones")
#Veamos cúales son nuestras variables
names(INV2000_2019)
FALSE   [1] "...1"       "2000"       "...3"       "...4"       "...5"      
FALSE   [6] "...6"       "...7"       "...8"       "...9"       "...10"     
FALSE  [11] "...11"      "...12"      "...13"      "Total 2000" "2001"      
FALSE  [16] "...16"      "...17"      "...18"      "...19"      "...20"     
FALSE  [21] "...21"      "...22"      "...23"      "...24"      "...25"     
FALSE  [26] "...26"      "Total 2001" "2002"       "...29"      "...30"     
FALSE  [31] "...31"      "...32"      "...33"      "...34"      "...35"     
FALSE  [36] "...36"      "...37"      "...38"      "...39"      "Total 2002"
FALSE  [41] "2003"       "...42"      "...43"      "...44"      "...45"     
FALSE  [46] "...46"      "...47"      "...48"      "...49"      "...50"     
FALSE  [51] "...51"      "...52"      "Total 2003" "2004"       "...55"     
FALSE  [56] "...56"      "...57"      "...58"      "...59"      "...60"     
FALSE  [61] "...61"      "...62"      "...63"      "...64"      "...65"     
FALSE  [66] "Total 2004" "2005"       "...68"      "...69"      "...70"     
FALSE  [71] "...71"      "...72"      "...73"      "...74"      "...75"     
FALSE  [76] "...76"      "...77"      "...78"      "Total 2005" "2006"      
FALSE  [81] "...81"      "...82"      "...83"      "...84"      "...85"     
FALSE  [86] "...86"      "...87"      "...88"      "...89"      "...90"     
FALSE  [91] "...91"      "Total 2006" "2007"       "...94"      "...95"     
FALSE  [96] "...96"      "...97"      "...98"      "...99"      "...100"    
FALSE [101] "...101"     "...102"     "...103"     "...104"     "Total 2007"
FALSE [106] "2008"       "...107"     "...108"     "...109"     "...110"    
FALSE [111] "...111"     "...112"     "...113"     "...114"     "...115"    
FALSE [116] "...116"     "...117"     "Total 2008" "2009"       "...120"    
FALSE [121] "...121"     "...122"     "...123"     "...124"     "...125"    
FALSE [126] "...126"     "...127"     "...128"     "...129"     "...130"    
FALSE [131] "Total 2009" "2010"       "...133"     "...134"     "...135"    
FALSE [136] "...136"     "...137"     "...138"     "...139"     "...140"    
FALSE [141] "...141"     "...142"     "...143"     "Total 2010" "2011"      
FALSE [146] "...146"     "...147"     "...148"     "...149"     "...150"    
FALSE [151] "...151"     "...152"     "...153"     "...154"     "...155"    
FALSE [156] "...156"     "Total 2011" "2012"       "...159"     "...160"    
FALSE [161] "...161"     "...162"     "...163"     "...164"     "...165"    
FALSE [166] "...166"     "...167"     "...168"     "...169"     "Total 2012"
FALSE [171] "2013"       "...172"     "...173"     "...174"     "...175"    
FALSE [176] "...176"     "...177"     "...178"     "...179"     "...180"    
FALSE [181] "...181"     "...182"     "Total 2013" "2014"       "...185"    
FALSE [186] "...186"     "...187"     "...188"     "...189"     "...190"    
FALSE [191] "...191"     "...192"     "...193"     "...194"     "...195"    
FALSE [196] "Total 2014" "2015"       "...198"     "...199"     "...200"    
FALSE [201] "...201"     "...202"     "...203"     "...204"     "...205"    
FALSE [206] "...206"     "...207"     "...208"     "Total 2015" "2016"      
FALSE [211] "...211"     "...212"     "...213"     "...214"     "...215"    
FALSE [216] "...216"     "...217"     "...218"     "...219"     "...220"    
FALSE [221] "...221"     "Total 2016" "2017"       "...224"     "...225"    
FALSE [226] "...226"     "...227"     "...228"     "...229"     "...230"    
FALSE [231] "...231"     "...232"     "...233"     "...234"     "Total 2017"
FALSE [236] "2018"       "...237"     "...238"     "...239"     "...240"    
FALSE [241] "...241"     "...242"     "...243"     "...244"     "...245"    
FALSE [246] "...246"     "...247"     "Total 2018" "2019/1"     "...250"    
FALSE [251] "...251"     "...252"     "...253"     "...254"     "...255"    
FALSE [256] "...256"
#Nos quedamos con las observaciones de nuestro interés

INV2000_2019<-INV2000_2019[c(1:151),]

Vamos a cambiar los nombres de las columnas o variables para saber qué es exactamente cada columna:

# Aquí le estamos indicando que desde la columna 2 hasta la columna 13, asiganle el nombre de 2000, y asi sucesivamente.

names(INV2000_2019)[2:13]="2000"
names(INV2000_2019)[15:26]="2001"
names(INV2000_2019)[28:39]="2002"
names(INV2000_2019)[41:52]="2003"
names(INV2000_2019)[54:65]="2004"
names(INV2000_2019)[67:78]="2005"
names(INV2000_2019)[80:91]="2006"
names(INV2000_2019)[93:104]="2007"
names(INV2000_2019)[106:117]="2008"
names(INV2000_2019)[119:130]="2009"
names(INV2000_2019)[132:143]="2010"
names(INV2000_2019)[145:156]="2011"
names(INV2000_2019)[158:169]="2012"
names(INV2000_2019)[171:182]="2013"
names(INV2000_2019)[184:195]="2014"
names(INV2000_2019)[197:208]="2015"
names(INV2000_2019)[210:221]="2016"
names(INV2000_2019)[223:234]="2017"
names(INV2000_2019)[236:247]="2018"
names(INV2000_2019)[249:256]="2019"

Una vez cambiada los nombres de las columnas, separamos la base de datos según cada rubro de inversión. Hemos identificado 6 rubros de inversion: * 1) DESARROLLO Y PREPARACIÓN * 2) EQUIPAMIENTO MINERO * 3)EXPLORACIÓN * 4)INFRAESTRUCTURA * 5) PLANTA DE BENEFICIO Y * 6) OTROS.

Rubro1<-INV2000_2019[c(3:26),] # seleccionamos el rubro I
names(Rubro1)[1]="Departamento" #Le asignamos un nombre a la primera columna
Rubro1[,-1]<-sapply(Rubro1[,-1],function(y) round(as.numeric(as.character(y)),2)) # convertimos los datos a numérico

# Y hacemos lo mismo para los 5 rubros mineros restantes

Rubro2<-INV2000_2019[c(28:51),]
names(Rubro2)[1]="Departamento"
Rubro2[,-1]<-sapply(Rubro2[,-1],function(y) round(as.numeric(as.character(y)),2))

Rubro3<-INV2000_2019[c(53:76),]
names(Rubro3)[1]="Departamento"
Rubro3[,-1]<-sapply(Rubro3[,-1],function(y) round(as.numeric(as.character(y)),2))

Rubro4<-INV2000_2019[c(78:101),]
names(Rubro4)[1]="Departamento"
Rubro4[,-1]<-sapply(Rubro4[,-1],function(y) round(as.numeric(as.character(y)),2))

Rubro5<-INV2000_2019[c(103:125),]
names(Rubro5)[1]="Departamento"
Rubro5[,-1]<-sapply(Rubro5[,-1],function(y) round(as.numeric(as.character(y)),2))

Rubro6<-INV2000_2019[c(127:150),]
names(Rubro6)[1]="Departamento" 
Rubro6[,-1]<-sapply(Rubro6[,-1],function(y) round(as.numeric(as.character(y)),2))

Como la data ya está separada, a continuacíon vamos a estructurar la data de cada rubro, es decir vamos a crear columnas únicas.

#Estructuramos la data del rubro 1, convirtiendo en variables únicas

INVMINA1<-Rubro1%>%
  pivot_longer(-Departamento, names_to = "Año", values_to = "Inversión") 
INVMINA1$Rubro="Desarrollo y preparación" #Agregamos una variable que identifique el rubro

INVMINA2<-Rubro2%>%
  pivot_longer(-Departamento,names_to = "Año", values_to = "Inversión")
INVMINA2$Rubro="Equipamiento Minero"

INVMINA3<-Rubro3%>%
  pivot_longer(-Departamento,names_to = "Año", values_to = "Inversión")
INVMINA3$Rubro="Exploración"

INVMINA4<-Rubro4%>%
  pivot_longer(-Departamento,names_to = "Año", values_to = "Inversión")
INVMINA4$Rubro="Infraestructura"

INVMINA5<-Rubro5%>%
  pivot_longer(-Departamento,names_to = "Año", values_to = "Inversión")
INVMINA5$Rubro="Planta de beneficio"

INVMINA6<-Rubro6%>%
  pivot_longer(-Departamento,names_to = "Año", values_to = "Inversión")
INVMINA6$Rubro="Otros"

#Veamos como quedó la data, una de ellas
names(INVMINA1) 
FALSE [1] "Departamento" "Año"          ".copy"        "Inversión"    "Rubro"
# ¿Cuátas columas tiene?
# Rpt: como hemos visto tiene 5 columnas únicas

Como la data de cada rubro ya está estructurada, vamos a unir todas para tener una sola data estructurada, y lo hacemos con la función rbind. Esta función va unir la data debajo de cada una, es decir trabaja por fila.

#creamos un objeto llamado DATAFINAL
DATAFINAL<-rbind(INVMINA1,INVMINA2,INVMINA3,INVMINA4,INVMINA5,INVMINA6)
#veamos cuál es la estructura
sapply(DATAFINAL,class)
FALSE Departamento          Año        .copy    Inversión        Rubro 
FALSE  "character"  "character"    "integer"    "numeric"  "character"
#Cambiamos el nombre de la columna 3
names(DATAFINAL)[3]="Mes"

Si vemos la base de datos estructurada, encontramos que aún falta hacer limpieza, por lo tanto hacemos esa tarea adicional:

#Generamos una lista que no deseamos tener en nuestra base de datos

Filtro<-c("Total 2000", "Total 2001","Total 2002", "Total 2003","Total 2004", "Total 2005", "Total 2006",
          "Total 2007","Total 2008","Total 2009","Total 2010", "Total 2011",
          "Total 2012", "Total 2013", "Total 2014", "Total 2015","Total 2016","Total 2017","Total 2018")

#Filtrar todas excepto Año=="Total*"

DATAFINAL<-DATAFINAL%>%
  filter(!Año %in% Filtro)

sapply(DATAFINAL,class) # verificamos la estuctura de los datos
FALSE Departamento          Año          Mes    Inversión        Rubro 
FALSE  "character"  "character"    "integer"    "numeric"  "character"
#Convertimos las columnas 2 y 3 en tipo numeric

DATAFINAL$Año<-sapply(DATAFINAL$Año, function(x) as.numeric(as.character(x)))
DATAFINAL$Mes<-sapply(DATAFINAL$Mes, function(y) as.numeric(as.integer(y)))

#Eliminamos los NAs
DATAFINAL<-DATAFINAL[complete.cases(DATAFINAL),]

#Convertimos en millones de dolares
DATAFINAL$Inversión<-round(DATAFINAL$Inversión/1000000,3)
#verificamos cómo quedó finalmente la estructura
sapply(DATAFINAL,class)
FALSE Departamento          Año          Mes    Inversión        Rubro 
FALSE  "character"    "numeric"    "numeric"    "numeric"  "character"

Ok, ahora ya podemos hacer estadística descriptiva y generar algunas gráficas, para vizualizar el comportamiento de las inversiones mineras en el Perú.

#CREAMOS TABLAS POR GRUPO

INV_DEPA<-DATAFINAL%>%
  group_by(Departamento,Año)%>%
  summarise(Total=sum(Inversión))%>%
  arrange(Año)

#Volverlo en horizontal para visualizar mejor
INV_DEPAH<-INV_DEPA%>%
  pivot_wider(names_prefix="Departamento", names_from = Año,values_from=Total)

names(INV_DEPAH)[2:21]<-c(2000:2019)
INV_DEPAH%>%
  DT::datatable()

La taba de inversiones mineras están en millones de dólares, que incluye los 6 rubros mineros.

**Visualización gráfica

Una gráfica general

G0<-ggplot(INV_DEPA, aes(x=Año, y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
  labs(title = "Inversión minera en el Peru por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
ggplotly(G0)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))

*Grafico de inversiones por rubro

G1<-ggplot(R1, aes(x=Año,y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
  labs(title = "Inversión minera en Desarrollo y preparación por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
ggplotly(G1)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))
G2<-ggplot(R2, aes(x=Año,y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
  labs(title = "Inversión minera en Equipamiento Minero por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
ggplotly(G2)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))
G3<-ggplot(R3, aes(x=Año,y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
  labs(title = "Inversión minera en Exploración por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
ggplotly(G3)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))
G4<-ggplot(R4, aes(x=Año,y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
  labs(title = "Inversión minera en Infraestructura por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
  ggplotly(G4)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))
G5<- ggplot(R5, aes(x=Año,y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
    labs(title = "Inversión minera en Planta de beneficio por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
ggplotly(G5)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))
G6<-ggplot(R6, aes(x=Año,y=Total))+
  geom_line(aes(color=Departamento), size=1)+
  theme_minimal()+
  labs(title = "Inversión minera Otros por Departamenos",
       subtitle = "En millones de dolares",
       caption = "Fuente: MINEM")
ggplotly(G6)%>% layout(legend = list(orientation = "h", x = 0.3, y = -0.1))

Final