#instalar libreria deseada
#install.packages('sqldf')
library (sqldf)
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
Cargamos la informacion de nuestras bases:
#Definir directorio
setwd("G:/TRABAJO/DOCENCIA/KONRAND LORENZ")
#Cargar las bases de datos de interes
nomina=read.csv2("BDD_NOMINA.csv", header = TRUE, sep = ";", dec=",")
perfil=read.csv2("BDD_PERFIL.csv", header = TRUE, sep = ";", dec=",")
head(nomina,5)
## TIPO_ID_CLIENTE ID_CLIENTE Ingreso meses_contrato
## 1 C 9604 1500000 18
## 2 C 28898 3000000 30
## 3 C 23331 2250000 24
## 4 C 31254 4000000 30
## 5 C 15325 3000000 19
nomina$meses_contrato=as.integer(nomina$meses_contrato)
head(nomina,3)
## TIPO_ID_CLIENTE ID_CLIENTE Ingreso meses_contrato
## 1 C 9604 1500000 18
## 2 C 28898 3000000 30
## 3 C 23331 2250000 24
head(perfil,5)
## TIPO_ID_CLIENTE ID_CLIENTE CLSEXO CLESTADO_CIVIL EDAD_ANOS CLNIVEL_EDUCATIVO
## 1 C 9604 F CASADO 44 PRIMARIA
## 2 C 28898 F UNION LIBRE 22 UNIVERSITARIO
## 3 C 23331 M CASADO 41 BACHILLERATO
## 4 C 31254 F UNION LIBRE 32 TECNICO
## 5 C 15325 F UNION LIBRE 40 TECNICO
## CLTIPO_VIVIENDA CIUDAD_AGRUPADA
## 1 PROPIA BOGOTA
## 2 FAMILIAR BOGOTA
## 3 ARRENDADA BOGOTA
## 4 FAMILIAR BOGOTA
## 5 PROPIA MEDELLIN
#EJERCICIO A:Indique el ingreso promedio de las mujeres entre 20 a 25 anos, compare con el mismo rango para los hombres.
ex1=sqldf('
SELECT b.CLSEXO, avg(a.Ingreso) as avg_ingreso
FROM nomina a
INNER JOIN perfil b
ON a.ID_CLIENTE=b.ID_CLIENTE
WHERE b.EDAD_ANOS >=20 and
b.EDAD_ANOS <=25
GROUP BY b.CLSEXO
')
ex1
## CLSEXO avg_ingreso
## 1 F 4082623
## 2 M 3969350
El ingreso en el rango de edad de 20 a 25 anos para mujeres es mayor.
#EJERCICIO B: Indique la edad promedio de los empleados segun el tipo de vivienda.
ex2=sqldf('
SELECT CLTIPO_VIVIENDA,AVG(EDAD_ANOS) AS EDAD
FROM perfil
GROUP BY CLTIPO_VIVIENDA
ORDER BY EDAD
')
ex2
## CLTIPO_VIVIENDA EDAD
## 1 FAMILIAR 39.56418
## 2 ARRENDADA 41.29392
## 3 PROPIA 50.05309
Se observa un promedio de edad mayor en aquellos empleados que tienen vivienda propia.
#EJERCICIO C: Calcule empleados que tiene la empresa por genero en cada ciudad.
ex3=sqldf('
SELECT CIUDAD_AGRUPADA,CLSEXO,COUNT(ID_CLIENTE) as EMPLEADOS
FROM perfil
GROUP BY CIUDAD_AGRUPADA,CLSEXO
')
ex3
## CIUDAD_AGRUPADA CLSEXO EMPLEADOS
## 1 BOGOTA F 1915
## 2 BOGOTA M 1921
## 3 CALI F 296
## 4 CALI M 150
## 5 MEDELLIN F 698
## 6 MEDELLIN M 486
#bonus track
ex3$prop_emple = prop.table(ex3$EMPLEADOS)*100
ex3
## CIUDAD_AGRUPADA CLSEXO EMPLEADOS prop_emple
## 1 BOGOTA F 1915 35.034760
## 2 BOGOTA M 1921 35.144530
## 3 CALI F 296 5.415295
## 4 CALI M 150 2.744237
## 5 MEDELLIN F 698 12.769850
## 6 MEDELLIN M 486 8.891328
En Cali y Medellin se observa diferencia entre Hombres y Mujeres, existiendo una mayor proporcion de estas.
#EJERCICIO D: Realice rangos en la variable meses_contrato (0 a 12; 13 a 24, 25 a 36 y 36 o mas), calcule el promedio de la edad de los empleados en dichos rangos y el promedio del ingreso.
ex4=sqldf('
SELECT CASE
WHEN (a.meses_contrato) between 0 and 12 then "0 a 12"
WHEN (a.meses_contrato) between 13 and 24 then "13 a 24"
WHEN (a.meses_contrato) between 25 and 36 then "25 a 36"
ELSE "37 o mas" end r_meses_contrato,
count(a.ID_CLIENTE) as empleados,
avg(b.EDAD_ANOS) as avg_edad,
avg(a.Ingreso) as avg_Ingreso
FROM nomina a
INNER JOIN perfil b
ON a.ID_CLIENTE=b.ID_CLIENTE
GROUP BY r_meses_contrato
')
head(ex4,5)
## r_meses_contrato empleados avg_edad avg_Ingreso
## 1 0 a 12 765 40.47451 2052118
## 2 13 a 24 2776 42.96218 4156374
## 3 25 a 36 1572 45.23155 10491358
## 4 37 o mas 353 46.82436 34067083