Skip to content

Instantly share code, notes, and snippets.

@rparatodxs
Last active January 4, 2016 18:49
Show Gist options
  • Save rparatodxs/2a17666081f1265bf073 to your computer and use it in GitHub Desktop.
Save rparatodxs/2a17666081f1265bf073 to your computer and use it in GitHub Desktop.
Este codigo es un ejemplo para obtener los datos del sitio de transparencia del INE, correspondiente a los datos del 2014. Siempre debe hacerse cuando el año esta finalizado.
#---actualizado 01-01-2016. Codigo trabajado usando las librerias:
#--Optimizar para http://www.gobiernotransparentechile.cl/directorio/entidad
#--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://transparencia.ine.cl/personal/2014/enero/honorarios/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:200,]
#---El proceso se repite para las siguientes hojas.
honorarios2 <- read_html("http://transparencia.ine.cl/personal/2014/enero/honorarios/per_honorarios-2.html")
honorarios2 <-data.frame(html_table (honorarios2))
honorarios2 <-honorarios2[1:200,]
honorarios3 <- read_html("http://transparencia.ine.cl/personal/2014/enero/honorarios/per_honorarios-3.html")
honorarios3 <-data.frame(html_table (honorarios3))
honorarios3 <-honorarios3[1:200,]
honorarios4 <- read_html("http://transparencia.ine.cl/personal/2014/enero/honorarios/per_honorarios-4.html")
honorarios4 <-data.frame(html_table (honorarios4))
honorarios4 <-honorarios4[1:200,]
honorarios5 <- read_html("http://transparencia.ine.cl/personal/2014/enero/honorarios/per_honorarios-5.html")
honorarios5 <-data.frame(html_table (honorarios5))
honorarios5 <-honorarios5[1:200,]
#---Unimos las 5 hojas con el comando rbind
honorarios2014<-rbind(honorarios1,honorarios2,honorarios3,honorarios4,honorarios5)
#---Identifica las dimensiones de la tabla final de los honorarios. El primer digito indica el total de casos (trabajadores)
dim(honorarios2014)
#Elimina los separadores de miles de la variable de Honorario total bruto
honorarios2014$Honorario.total.bruto<-gsub('\\.|,', '', 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
hist(honorarios2014$Honorario.total.bruto, breaks=30)
#table(honorarios2014$Descripción.de.la.función)
analista<-subset(honorarios2014, Descripción.de.la.función=="ANALISTA")
hist(analista$Honorario.total.bruto)
contrata1 <- read_html("http://transparencia.ine.cl/personal/2015/enero/contrata/per_contrata.html")
contrata1 <-data.frame(html_table (contrata1))
contrata2 <- read_html("http://transparencia.ine.cl/personal/2015/enero/contrata/per_contrata-2.html")
contrata2 <-data.frame(html_table (contrata2))
contrata3 <- read_html("http://transparencia.ine.cl/personal/2015/enero/contrata/per_contrata-3.html")
contrata3 <-data.frame(html_table (contrata3))
contrata4 <- read_html("http://transparencia.ine.cl/personal/2015/enero/contrata/per_contrata-4.html")
contrata4 <-data.frame(html_table (contrata4))
contrata5 <- read_html("http://transparencia.ine.cl/personal/2015/enero/contrata/per_contrata-5.html")
contrata5 <-data.frame(html_table (contrata5))
contrata6 <- read_html("http://transparencia.ine.cl/personal/2015/enero/contrata/per_contrata-6.html")
contrata6 <-data.frame(html_table (contrata6))
contrata2014<-rbind(contrata1,contrata2,contrata3,contrata4,contrata5,contrata6)
dim(contrata2014)
#Elimina los separadores de mil
contrata2014$Remuneración.bruta.mensualizada<-gsub('\\.|,', '', contrata2014$Remuneración.bruta.mensualizada)
contrata2014$Remuneración.bruta.mensualizada<-as.numeric(as.character(contrata2014$Remuneración.bruta.mensualizada))
hist(contrata2014$Remuneración.bruta.mensualizada)
###---------- PLANTA
planta1 <- read_html("http://transparencia.ine.cl/personal/2015/enero/planta/per_planta.html")
planta1 <-data.frame(html_table (planta1))
planta2<- read_html("http://transparencia.ine.cl/personal/2015/enero/planta/per_planta-2.html")
planta2<-data.frame(html_table (planta2))
planta2014<-rbind(planta1 ,planta2)
dim(planta2014)
#Elimina los separadores de mil
planta2014$Remuneración.bruta.mensualizada<-gsub('\\.|,', '', planta2014$Remuneración.bruta.mensualizada)
planta2014$Remuneración.bruta.mensualizada<-as.numeric(as.character(planta2014$Remuneración.bruta.mensualizada))
#------------------------------------------------------------------------------------------------------
#--------------------------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_INE<-rbind(planta, contrata,honorarios)
#---eliminamos los casos que estan vacios sin información y con NA, para lo cual es necesario----------
#---observar el objeto trabajadores_INE, simplemente llamando al objeto creado con: "trabajadores_INE"
trabajadores_INE<-trabajadores_INE[1:2193,] # Elimina los casos con NA
#------------------------------------------------------------------------------------------------------
#---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_INE1<-subset(trabajadores_INE, 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_INE1, geom=c("boxplot", "jitter"),
alpha = I(1/7))+
labs(title="INE 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_INE1)
p1 <- p1 + stat_summary(fun.data = min.mean.sd.max, geom = "boxplot") +
geom_jitter(position=position_jitter(width=.2), size=3) +
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_INE1, geom = "histogram", colour = trabajador_cat,
main="INE 2014: Salarios por categoria trabajador", ylab="Frecuencia",
xlab="pesos/mes", fill=trabajador_cat)
qplot(remuneración, data = trabajadores_INE, geom = "histogram", fill = trabajador_cat)
plot(trabajadores_INE$remuneración,trabajadores_INE$Grado)
plot(trabajadores_INE$Grado,trabajadores_INE$remuneración)
#---escribre un archivo csv en el disco local c:/
write.csv(trabajadores_INE1, "C:/trabajadoresINE_2014.csv")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment