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.
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.
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:
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.
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))
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))