Skip to content

Instantly share code, notes, and snippets.

@rparatodxs
Last active December 31, 2015 12:49
Show Gist options
  • Save rparatodxs/00a884bde2158ba63ccb to your computer and use it in GitHub Desktop.
Save rparatodxs/00a884bde2158ba63ccb to your computer and use it in GitHub Desktop.
#---actualizado 01-01-2016. Codigo trabajado usando las librerias:
#--lee las librerias que hace el web scrap. En caso de no tenerla instalada debe instalarla usando el comando:
#--"install.packages(c("rvest", "ggplot2","scales"))"--- no usar las cremillas exteriores.
library(rvest)
library(ggplot2)
library(scales)
#R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
#Copyright (C) 2015 The R Foundation for Statistical Computing
#Platform: i386-w64-mingw32/i386 (32-bit)
#-------------------------------------------------------------------------------------------------#
#-------------SCRIPT DE R PARA HACER WEBSCRAPING DE LOS SALARIOS DEL INE-CHILE--------------------#
#-------------transparencia.ine.cl----------------------------------------------------------------#
#-------------------------------------------------------------------------------------------------#
#---Este comando es solamente un limpiador. Significa que elimina todos los objetos creados
#en el area de trabajo del R. Si deseas visualizar los elementos debes usar el comando "ls()"
rm(list=ls())
#---Fija un directorio de trabajo, para principalmente exportar archivos de datos procesados.
setwd("C:/")
#---creamos un objeto de la primera hoja de los honorarios. Siempre la url debe tener cremillas adentro
#---del parentesis.
honorarios1 <- read_html("http://www.mma.gob.cl/transparencia/mma/2014/per_honorarios.html")
#---Transforma la pagina web a una tabla de datos de r, llamada data.frame
honorarios1 <-data.frame(html_table (honorarios1))
#---corta las observaciones que en este caso son 200 observaciones por hoja. Esta relacionado con el formato
#---de las bases de datos publicadas en la web.
honorarios1 <-honorarios1[1:165,]
#
dim(honorarios1 )
honorarios2014<-honorarios1
#Elimina los separadores de miles de la variable de Honorario total bruto
honorarios2014$Honorario.total.bruto<-gsub('\\$|,', '', honorarios2014$Honorario.total.bruto)
honorarios2014$Honorario.total.bruto<-gsub('\\.|,', '', honorarios2014$Honorario.total.bruto)
honorarios2014$Honorario.total.bruto<-gsub('\\s,', '', honorarios2014$Honorario.total.bruto)
honorarios2014$Honorario.total.bruto<-as.numeric(as.character(honorarios2014$Honorario.total.bruto))
#transforma a un string numerico la variable de interes
honorarios2014$Honorario.total.bruto<-as.numeric(as.character(honorarios2014$Honorario.total.bruto))
honorarios2014$Remuneración.bruta.mensualizada<-honorarios2014$Honorario.total.bruto
#------------------------------------------------------------------------------------------------------
#--------------------------MISMO PROCEDIMIENTO PARA CONTRATA Y PLANTA----------------------------------
#------------------------------------------------------------------------------------------------------
#--------------------------LECTURA DE CONTRATAS 2014
contrata1 <- read_html("http://transparencia.mma.gob.cl/index.php?anio=2014&cj=1")
contrata1 <-data.frame(html_table (contrata1))
contrata2014<-contrata1
dim(contrata2014)
#Elimina los separadores de mil
contrata2014$Remuneración.bruta.mensualizada<-gsub('\\Â|,', '', contrata2014$Remuneración.bruta.mensualizada)
contrata2014$Remuneración.bruta.mensualizada<-gsub('\\.|,', '', contrata2014$Remuneración.bruta.mensualizada)
t<-substr(contrata2014$Remuneración.bruta.mensualizada, 1, nchar(contrata2014$Remuneración.bruta.mensualizada)-2)
contrata2014$Remuneración.bruta.mensualizada<-as.numeric(as.character(t))
hist(contrata2014$Remuneración.bruta.mensualizada)
###---------- PLANTA
planta1 <- read_html("http://transparencia.mma.gob.cl/index.php?anio=2014&cj=2")
planta1 <-data.frame(html_table (planta1))
planta2014<-planta1
dim(planta2014)
#Elimina los separadores de mil
planta2014$Remuneración.bruta.mensualizada<-gsub('\\Â|,', '', planta2014$Remuneración.bruta.mensualizada)
planta2014$Remuneración.bruta.mensualizada<-gsub('\\.|,', '', planta2014$Remuneración.bruta.mensualizada)
t<-substr(planta2014$Remuneración.bruta.mensualizada, 1, nchar(planta2014$Remuneración.bruta.mensualizada)-2)
planta2014$Remuneración.bruta.mensualizada<-as.numeric(as.character(t))
#------------------------------------------------------------------------------------------------------
#--------------------------CONTRUCCION DE UNA TABLA CONSOLIDADA----------------------------------------
#------------------------------------------------------------------------------------------------------
#---el comando attach nos ayuda a ingresar directamente a la tabla sin usar $, luego se agrega---------
#---la categoria de empleado a los casos que tienen remuneracion mensual mayor a cero------------------
#------------------------------------------------------------------------------------------------------
attach(contrata2014)
contrata2014$trabajador_cat[Remuneración.bruta.mensualizada > 0] <- "Contrata2014"
detach(contrata2014)
attach(honorarios2014)
honorarios2014$trabajador_cat[Remuneración.bruta.mensualizada > 0] <- "Honorarios2014"
detach(honorarios2014)
attach(planta2014)
planta2014$trabajador_cat[Remuneración.bruta.mensualizada > 0] <- "Planta2014"
detach(planta2014)
#------------------------------------------------------------------------------------------------------
#---construimos una tabla de los honorarios considerando categoria de trabajador, region, descripción--
#---de la función, sueldo mensual y grado si corresponde-----------------------------------------------
#------------------------------------------------------------------------------------------------------
honorarios<-data.frame(honorarios2014$trabajador_cat,honorarios2014$Región,
honorarios2014$Descripción.de.la.función,
honorarios2014$Remuneración.bruta.mensualizada,
honorarios2014$Grado.EUS..si.corresponde)
#------Se asignan los nombres a las nuevas variables--------------------------------------------------
colnames(honorarios)<-c("trabajador_cat","región","función","remuneración","Grado")
#------------------------------------------------------------------------------------------------------
#---construimos una tabla de los contrata considerando categoria de trabajador, region, descripción----
#---de la función, sueldo mensual y grado si corresponde-----------------------------------------------
#------------------------------------------------------------------------------------------------------
contrata<-data.frame(contrata2014$trabajador_cat,
contrata2014$Región,contrata2014$Estamento,
contrata2014$Remuneración.bruta.mensualizada,
contrata2014$Grado.EUS)
colnames(contrata)<-c("trabajador_cat","región","función","remuneración","Grado")
#------------------------------------------------------------------------------------------------------
#---construimos una tabla de los contrata considerando categoria de trabajador, region, descripción----
#---de la función, sueldo mensual y grado si corresponde-----------------------------------------------
#------------------------------------------------------------------------------------------------------
planta<-data.frame(planta2014$trabajador_cat,
planta2014$Región,planta2014$Estamento,
planta2014$Remuneración.bruta.mensualizada,
planta2014$Grado.EUS)
colnames(planta)<-c("trabajador_cat","región","función","remuneración","Grado")
#------Se unen los tres tipos de empleados con la función rbind-----------------------------------------
trabajadores_MMA<-rbind(planta, contrata,honorarios)
#------------------------------------------------------------------------------------------------------
#---ANALISIS EXPLORATORIO PREVIO PARA INDENTIFICAR EVENTUALES ERROES DE LA BASE DE DATOS CREADA--------
#------------------------------------------------------------------------------------------------------
library(ggplot2)
#Elimina los menos de 100 lukas #PRINCIPALMENTE LOS CASOS RAROS DE MUESTREADORES RICOS!
trabajadores_MMA1<-subset(trabajadores_MMA, remuneración> 100000)
#--------------------visualización de los salarios por categoria de trabajador------------------------------
#-----------el parametro alpha puede modificarse para visualizar densidad de los puntos---------------------
#-----por ejemplo: alpha=I(1/2), alpha=I(1/4), alpha=I(1/5), alpha=I(1/6)
qplot(factor(trabajador_cat), remuneración, data = trabajadores_MMA1, geom=c("boxplot", "jitter"),
alpha = I(1/7))+
labs(title="MMA 2014: Salario en categorias de trabajador") +
labs(x="Trabajador", y="pesos por mes")+
scale_x_discrete(breaks=c("Planta2014", "Contrata2014", "Honorarios2014"),
labels=c("Planta", "Contrata", "Honorarios"))
#------------------------------------------------------------------------------------------------------
#--------grafico de cajas considerando promedio, ic95%, min y max--------------------------------------
#------------------------------------------------------------------------------------------------------
# funcion para calcular promedio, desviacion estandar, max y minimo de los valores---------------------
min.mean.sd.max <- function(x) {
r <- c(min(x), mean(x) - sd(x), mean(x), mean(x) + sd(x), max(x))
names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
r
}
#---------------------grafico---------------------------------------------------------------------------
p1 <- ggplot(aes(y = remuneración, x = factor(trabajador_cat)), data = trabajadores_MMA1)
p1 <- p1 + stat_summary(fun.data = min.mean.sd.max, geom = "boxplot") +
geom_jitter(position=position_jitter(width=.5), size=.5) +
ggtitle("Boxplot con media, IC 95%, valor min. y max.") +
xlab("categoria de empleado") + ylab("pesos/mes")
p1
#--------------otros gráficos---------------------------------------------------------------------------
qplot(remuneración, data = trabajadores_MMA1, geom = "histogram", colour = trabajador_cat,
main="MMA 2014: Salarios por categoria trabajador", ylab="Frecuencia",
xlab="pesos/mes", fill=trabajador_cat)
qplot(remuneración, data = trabajadores_MMA1, geom = "histogram", fill = trabajador_cat)
plot(trabajadores_MMA1$remuneración,trabajadores_MMA1$Grado)
plot(trabajadores_MMA1$Grado,trabajadores_MMA1$remuneración)
#---escribre un archivo csv en el disco local c:/
write.csv(trabajadores_MMA1, "C:/trabajadoresMMA_2014.csv")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment