Last active
January 4, 2016 18:49
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#---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