OBJETIVO: Analizar datos con salarios y agregar columnas

Utilizar la lirberia “dplyr”" para analizar datos de salarios

library(readr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
require(stats)  # Para tener la misma semilla cuando la generemos

Cargamos los datos de salarios los datos

# Cargar datos de salarios
#salarios <- read.csv("https://raw.githubusercontent.com/rpizarrog/Curso-Titulacion-Data-Science-/master/2019/Datos/Salaries.csv")
ruta <- "c:/Users/Hector/Documents/ciencia de los datos/datos/Salaries.csv"
salarios <- read.csv(ruta)
# salarios   # Ya no los queremos ver

str(salarios)
## 'data.frame':    148654 obs. of  13 variables:
##  $ Id              : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ EmployeeName    : Factor w/ 110810 levels "A Bernard  Fatooh",..: 77636 34712 1560 17232 81101 23164 3271 22709 73975 47938 ...
##  $ JobTitle        : Factor w/ 2159 levels "Account Clerk",..: 836 298 298 2149 594 135 246 609 246 370 ...
##  $ BasePay         : num  167411 155966 212739 77916 134402 ...
##  $ OvertimePay     : num  0 245132 106088 56121 9737 ...
##  $ OtherPay        : num  400184 137811 16453 198307 182235 ...
##  $ Benefits        : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ TotalPay        : num  567595 538909 335280 332344 326373 ...
##  $ TotalPayBenefits: num  567595 538909 335280 332344 326373 ...
##  $ Year            : int  2011 2011 2011 2011 2011 2011 2011 2011 2011 2011 ...
##  $ Notes           : logi  NA NA NA NA NA NA ...
##  $ Agency          : Factor w/ 1 level "San Francisco": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Status          : Factor w/ 3 levels "","FT","PT": 1 1 1 1 1 1 1 1 1 1 ...
summary(salarios)
##        Id               EmployeeName   
##  Min.   :     1   Kevin Lee   :    13  
##  1st Qu.: 37164   Richard Lee :    11  
##  Median : 74328   Steven Lee  :    11  
##  Mean   : 74328   William Wong:    11  
##  3rd Qu.:111491   John Chan   :     9  
##  Max.   :148654   KEVIN LEE   :     9  
##                   (Other)     :148590  
##                          JobTitle         BasePay      
##  Transit Operator            :  7036   Min.   :  -166  
##  Special Nurse               :  4389   1st Qu.: 33588  
##  Registered Nurse            :  3736   Median : 65007  
##  Public Svc Aide-Public Works:  2518   Mean   : 66325  
##  Police Officer 3            :  2421   3rd Qu.: 94691  
##  Custodian                   :  2418   Max.   :319275  
##  (Other)                     :126136   NA's   :609     
##   OvertimePay           OtherPay           Benefits       
##  Min.   :    -0.01   Min.   : -7058.6   Min.   :  -33.89  
##  1st Qu.:     0.00   1st Qu.:     0.0   1st Qu.:11535.40  
##  Median :     0.00   Median :   811.3   Median :28628.62  
##  Mean   :  5066.06   Mean   :  3648.8   Mean   :25007.89  
##  3rd Qu.:  4658.18   3rd Qu.:  4236.1   3rd Qu.:35566.86  
##  Max.   :245131.88   Max.   :400184.2   Max.   :96570.66  
##  NA's   :4           NA's   :4          NA's   :36163     
##     TotalPay        TotalPayBenefits        Year       Notes        
##  Min.   :  -618.1   Min.   :  -618.1   Min.   :2011   Mode:logical  
##  1st Qu.: 36169.0   1st Qu.: 44065.7   1st Qu.:2012   NA's:148654   
##  Median : 71426.6   Median : 92404.1   Median :2013                 
##  Mean   : 74768.3   Mean   : 93692.6   Mean   :2013                 
##  3rd Qu.:105839.1   3rd Qu.:132876.5   3rd Qu.:2014                 
##  Max.   :567595.4   Max.   :567595.4   Max.   :2014                 
##                                                                     
##            Agency       Status     
##  San Francisco:148654     :110535  
##                         FT: 22334  
##                         PT: 15785  
##                                    
##                                    
##                                    
## 
head(salarios)  # Los primeros seis registros
##   Id      EmployeeName                                       JobTitle
## 1  1    NATHANIEL FORD GENERAL MANAGER-METROPOLITAN TRANSIT AUTHORITY
## 2  2      GARY JIMENEZ                CAPTAIN III (POLICE DEPARTMENT)
## 3  3    ALBERT PARDINI                CAPTAIN III (POLICE DEPARTMENT)
## 4  4 CHRISTOPHER CHONG           WIRE ROPE CABLE MAINTENANCE MECHANIC
## 5  5   PATRICK GARDNER   DEPUTY CHIEF OF DEPARTMENT,(FIRE DEPARTMENT)
## 6  6    DAVID SULLIVAN                      ASSISTANT DEPUTY CHIEF II
##    BasePay OvertimePay OtherPay Benefits TotalPay TotalPayBenefits Year
## 1 167411.2        0.00 400184.2       NA 567595.4         567595.4 2011
## 2 155966.0   245131.88 137811.4       NA 538909.3         538909.3 2011
## 3 212739.1   106088.18  16452.6       NA 335279.9         335279.9 2011
## 4  77916.0    56120.71 198306.9       NA 332343.6         332343.6 2011
## 5 134401.6     9737.00 182234.6       NA 326373.2         326373.2 2011
## 6 118602.0     8601.00 189082.7       NA 316285.7         316285.7 2011
##   Notes        Agency Status
## 1    NA San Francisco       
## 2    NA San Francisco       
## 3    NA San Francisco       
## 4    NA San Francisco       
## 5    NA San Francisco       
## 6    NA San Francisco

Agregamos la columna paisOrigen a un conjunto de datos de salarios de empleados pero unicamente del año 2014 Las nacionalidades

set.seed(1000)
nacionalidades <- c("MEXICO", "ESTADOS UNIDOS", "INGLATERRA", "JAPON", "CHINA", "ARGENTINA", 
"BRASIL", "CANADA", "CHILE",
"HOLANDA", "FINLANDIA", "EGIPTO", "SUECIA", "AUSTRALIA",   "FRANCIA", "ITALIA", "ESPAÑA", "CUBA", "COLOMBIA",
"IRLADA", "NORUEGA", "COREA DEL NORTE", "SINGAPUR",
"INDIA")
nacionalidades
##  [1] "MEXICO"          "ESTADOS UNIDOS"  "INGLATERRA"     
##  [4] "JAPON"           "CHINA"           "ARGENTINA"      
##  [7] "BRASIL"          "CANADA"          "CHILE"          
## [10] "HOLANDA"         "FINLANDIA"       "EGIPTO"         
## [13] "SUECIA"          "AUSTRALIA"       "FRANCIA"        
## [16] "ITALIA"          "ESPAÑA"          "CUBA"           
## [19] "COLOMBIA"        "IRLADA"          "NORUEGA"        
## [22] "COREA DEL NORTE" "SINGAPUR"        "INDIA"
# Mediante mutate generar una nueva columna a salarios 
# llamada paisOrigen que sea un valor aleatorios de las
# nacionalidades
#

# Primero vamos a generar todas las nacionalidades

n <- nrow(salarios)  # Número de observaciones total de salrios

paises <- rep(nacionalidades, n*2) # Genera un vector muy grande 

head(paises) ; tail(paises)
## [1] "MEXICO"         "ESTADOS UNIDOS" "INGLATERRA"     "JAPON"         
## [5] "CHINA"          "ARGENTINA"
## [1] "COLOMBIA"        "IRLADA"          "NORUEGA"         "COREA DEL NORTE"
## [5] "SINGAPUR"        "INDIA"

Generamos un conjunto de datos solo del año 2014 de los empleados

salarios2014 <- filter(salarios, Year == 2014)

n <- nrow(salarios2014) # Número de observaciones de salaros2014
# Ahora mediante función mutate() agregamos la columna a salarios2014
paises <- sample(paises, n) # Ahora una muestra aletoria de todos los paises

salarios2014 <- mutate(salarios2014, paisOrigen = paises)

head(salarios2014)  # Los primeros seis
##       Id         EmployeeName                 JobTitle  BasePay
## 1 110532          David Shinn           Deputy Chief 3 129150.0
## 2 110533           Amy P Hart        Asst Med Examiner 318835.5
## 3 110534 William J Coaker Jr. Chief Investment Officer 257340.0
## 4 110535       Gregory P Suhr          Chief of Police 307450.0
## 5 110536 Joanne M Hayes-White   Chief, Fire Department 302068.0
## 6 110537      Ellen G Moffatt        Asst Med Examiner 270222.0
##   OvertimePay  OtherPay Benefits TotalPay TotalPayBenefits Year Notes
## 1        0.00 342802.63 38780.04 471952.6         510732.7 2014    NA
## 2    10712.95  60563.54 89540.23 390112.0         479652.2 2014    NA
## 3        0.00  82313.70 96570.66 339653.7         436224.4 2014    NA
## 4        0.00  19266.72 91302.46 326716.8         418019.2 2014    NA
## 5        0.00  24165.44 91201.66 326233.4         417435.1 2014    NA
## 6     6009.22  67956.20 71580.48 344187.5         415767.9 2014    NA
##          Agency Status      paisOrigen
## 1 San Francisco     PT       ARGENTINA
## 2 San Francisco     FT          CANADA
## 3 San Francisco     PT      INGLATERRA
## 4 San Francisco     FT         HOLANDA
## 5 San Francisco     FT COREA DEL NORTE
## 6 San Francisco     FT       AUSTRALIA
tail(salarios2014)
##           Id  EmployeeName                   JobTitle BasePay OvertimePay
## 38118 148649   Leon Walker                  Custodian       0           0
## 38119 148650 Roy I Tillery                  Custodian       0           0
## 38120 148651           NaN                        NaN     NaN         NaN
## 38121 148652           NaN                        NaN     NaN         NaN
## 38122 148653           NaN                        NaN     NaN         NaN
## 38123 148654     Joe Lopez Counselor, Log Cabin Ranch       0           0
##       OtherPay Benefits TotalPay TotalPayBenefits Year Notes        Agency
## 38118     0.00        0     0.00             0.00 2014    NA San Francisco
## 38119     0.00        0     0.00             0.00 2014    NA San Francisco
## 38120      NaN      NaN     0.00             0.00 2014    NA San Francisco
## 38121      NaN      NaN     0.00             0.00 2014    NA San Francisco
## 38122      NaN      NaN     0.00             0.00 2014    NA San Francisco
## 38123  -618.13        0  -618.13          -618.13 2014    NA San Francisco
##       Status paisOrigen
## 38118     PT       CUBA
## 38119     PT     IRLADA
## 38120             CHINA
## 38121            CANADA
## 38122         FINLANDIA
## 38123     PT  FINLANDIA

Filtrandosolo mexicanos y determinanando media y desviación estandard

mexicanos <- filter(salarios2014, paisOrigen == "MEXICO")
# mexicanos
meanMx <- mean(mexicanos$TotalPayBenefits)
desvstdMex <- sd(mexicanos$TotalPayBenefits)

meanMx
## [1] 99910.91
desvstdMex
## [1] 66113.36
str(mexicanos)
## 'data.frame':    1561 obs. of  14 variables:
##  $ Id              : int  110561 110595 110597 110615 110618 110625 110627 110655 110674 110676 ...
##  $ EmployeeName    : Factor w/ 110810 levels "A Bernard  Fatooh",..: 9751 37179 29951 94920 44495 49147 3862 57015 50358 58458 ...
##  $ JobTitle        : Factor w/ 2159 levels "Account Clerk",..: 467 297 772 59 1415 432 1267 297 738 59 ...
##  $ BasePay         : num  267914 87324 246928 213558 100149 ...
##  $ OvertimePay     : num  0 0 0 3773 15716 ...
##  $ OtherPay        : num  0 199112 0 18589 152038 ...
##  $ Benefits        : num  79800 24960 63924 66845 33847 ...
##  $ TotalPay        : num  267914 286436 246928 235920 267903 ...
##  $ TotalPayBenefits: num  347714 311397 310852 302765 301750 ...
##  $ Year            : int  2014 2014 2014 2014 2014 2014 2014 2014 2014 2014 ...
##  $ Notes           : logi  NA NA NA NA NA NA ...
##  $ Agency          : Factor w/ 1 level "San Francisco": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Status          : Factor w/ 3 levels "","FT","PT": 2 3 2 3 3 2 2 2 2 3 ...
##  $ paisOrigen      : chr  "MEXICO" "MEXICO" "MEXICO" "MEXICO" ...

Análisis de datos haciendo agrupaciones mediante summarize() La media y la sd de la variable TotalPubBenefits de los que son de México del año 2014 comparada contra todos los paises

# Agrupamos por pais de Origen
agrupados <- group_by(salarios2014, paisOrigen)
resumen <- summarise(agrupados, media = mean(TotalPayBenefits), desvstd = sd(TotalPayBenefits) )

resumen
## # A tibble: 24 x 3
##    paisOrigen        media desvstd
##    <chr>             <dbl>   <dbl>
##  1 ARGENTINA       101437.  67311.
##  2 AUSTRALIA       102286.  67674.
##  3 BRASIL           98838.  63844.
##  4 CANADA           98885.  67057.
##  5 CHILE            98759.  66323.
##  6 CHINA           104758.  68022.
##  7 COLOMBIA        100889.  68021.
##  8 COREA DEL NORTE  98892.  64196.
##  9 CUBA             99644.  67685.
## 10 EGIPTO          100941.  66593.
## # ... with 14 more rows
# Un resumen mas completo
resumen <- summarise(agrupados, media = mean(TotalPayBenefits), desvstd = sd(TotalPayBenefits), maximo = max(TotalPayBenefits), minimo = min(TotalPayBenefits), 
primerCuartil = quantile(TotalPayBenefits, 0.25),
segundoCuartil = quantile(TotalPayBenefits, 0.50),
tercerCuartil = quantile(TotalPayBenefits, 0.75),
                     registros = n() )

resumen
## # A tibble: 24 x 9
##    paisOrigen  media desvstd maximo minimo primerCuartil segundoCuartil
##    <chr>       <dbl>   <dbl>  <dbl>  <dbl>         <dbl>          <dbl>
##  1 ARGENTINA  1.01e5  67311. 5.11e5    0          47009.        101381.
##  2 AUSTRALIA  1.02e5  67674. 4.16e5    0          46735.        102797.
##  3 BRASIL     9.88e4  63844. 3.54e5   54.4        45142.        100519.
##  4 CANADA     9.89e4  67057. 4.80e5    0          37951.        100917.
##  5 CHILE      9.88e4  66323. 4.01e5    0          41588.         97533.
##  6 CHINA      1.05e5  68022. 3.29e5    0          48360.        103392.
##  7 COLOMBIA   1.01e5  68021. 3.65e5   40.5        42279.        101368.
##  8 COREA DEL~ 9.89e4  64196. 4.17e5   13.8        46266.         99774.
##  9 CUBA       9.96e4  67685. 3.74e5    0          40213.         99363.
## 10 EGIPTO     1.01e5  66593. 3.95e5    0          43734.        101549.
## # ... with 14 more rows, and 2 more variables: tercerCuartil <dbl>,
## #   registros <int>

Ordenando resumen

resumen <- arrange(resumen, desc(media))
class(resumen)   # de que tipo de datos estamos hablando
## [1] "tbl_df"     "tbl"        "data.frame"
resumen <- as.data.frame(resumen)

class(resumen) # De que tipo de dato queda ????
## [1] "data.frame"
resumen
##         paisOrigen     media  desvstd   maximo  minimo primerCuartil
## 1            CHINA 104757.59 68022.13 329147.3    0.00      48359.66
## 2          NORUEGA 103374.01 65204.12 303476.2    0.00      56507.21
## 3         SINGAPUR 102561.50 65653.61 355299.9    0.00      48760.29
## 4        AUSTRALIA 102286.11 67673.70 415767.9    0.00      46735.38
## 5       INGLATERRA 101916.13 65730.20 436224.4   22.56      49425.95
## 6        ARGENTINA 101437.08 67311.32 510732.7    0.00      47009.44
## 7           ITALIA 101280.12 64360.54 292573.1    0.00      52387.23
## 8           EGIPTO 100941.31 66593.22 395361.9    0.00      43734.49
## 9         COLOMBIA 100889.33 68021.03 364814.5   40.46      42279.16
## 10         HOLANDA 100709.89 65745.05 418019.2    0.00      48528.23
## 11         FRANCIA  99964.57 66598.23 342814.3   75.85      41566.33
## 12       FINLANDIA  99921.13 67341.68 374598.0 -618.13      41670.33
## 13          MEXICO  99910.91 66113.36 347713.9   23.72      44503.18
## 14          IRLADA  99802.97 65080.17 314018.2    0.00      46165.07
## 15            CUBA  99644.20 67684.97 374083.5    0.00      40212.87
## 16          ESPAÑA  99219.06 65067.76 321216.7   46.36      45607.40
## 17           INDIA  98929.65 65683.19 379918.7    0.00      45005.15
## 18 COREA DEL NORTE  98892.47 64195.68 417435.1   13.77      46266.37
## 19          CANADA  98884.96 67056.75 479652.2    0.00      37950.89
## 20          BRASIL  98838.41 63843.66 353797.1   54.39      45142.11
## 21          SUECIA  98766.07 66789.62 347713.9   25.57      37987.83
## 22           CHILE  98759.42 66322.89 401070.9    0.00      41588.08
## 23  ESTADOS UNIDOS  97505.85 66338.76 398984.5   18.39      36414.26
## 24           JAPON  97134.45 67000.10 297504.6    0.00      33305.20
##    segundoCuartil tercerCuartil registros
## 1       103392.28      152998.1      1561
## 2       103842.15      148389.0      1541
## 3       104669.07      144383.5      1590
## 4       102796.53      147011.8      1563
## 5       103446.04      147322.4      1573
## 6       101380.58      142663.4      1613
## 7       102321.42      141401.0      1496
## 8       101548.65      141134.4      1631
## 9       101367.54      143953.6      1604
## 10      101219.43      143386.8      1728
## 11      102354.60      141919.3      1529
## 12      101270.92      142831.0      1549
## 13      101034.81      139867.4      1561
## 14      100640.58      139592.6      1561
## 15       99363.47      142223.9      1541
## 16      100228.06      140906.0      1613
## 17      100323.83      140325.0      1649
## 18       99773.62      135564.9      1641
## 19      100917.44      140563.0      1629
## 20      100519.17      141853.7      1586
## 21       99352.40      141973.0      1632
## 22       97533.10      140824.1      1541
## 23       99051.49      139926.5      1615
## 24       96823.19      139692.7      1576

Visualizando resumen

# Vamos a visualizar resumen
pie(head(resumen$media)) # Muy feo

# Vamos a poner los tres mejores y los tres peores
mejores <- head(resumen, 3) # Los tres primeros
peores <- tail(resumen, 3)
mejores
##   paisOrigen    media  desvstd   maximo minimo primerCuartil
## 1      CHINA 104757.6 68022.13 329147.3      0      48359.66
## 2    NORUEGA 103374.0 65204.12 303476.2      0      56507.21
## 3   SINGAPUR 102561.5 65653.61 355299.9      0      48760.29
##   segundoCuartil tercerCuartil registros
## 1       103392.3      152998.1      1561
## 2       103842.1      148389.0      1541
## 3       104669.1      144383.5      1590
peores
##        paisOrigen    media  desvstd   maximo minimo primerCuartil
## 22          CHILE 98759.42 66322.89 401070.9   0.00      41588.08
## 23 ESTADOS UNIDOS 97505.85 66338.76 398984.5  18.39      36414.26
## 24          JAPON 97134.45 67000.10 297504.6   0.00      33305.20
##    segundoCuartil tercerCuartil registros
## 22       97533.10      140824.1      1541
## 23       99051.49      139926.5      1615
## 24       96823.19      139692.7      1576
barplot(mejores$media / 1000) # represent.. en miles

barplot(peores$media / 1000) # represent.. en miles

De un total de 148654 registros analizamos el salario de los empleados despues de haber agregado el valor paises:

con ello pudimos determinar la media y la desviacion estandar

Pais media desviacion estandar

ARGENTINA 101437.08 67311.32

AUSTRALIA 102286.11 67673.70

BRASIL 98838.41 63843.66

CANADA 98884.96 67056.75

CHILE 98759.42 66322.89

CHINA 104757.59 68022.13

COLOMBIA 100889.33 68021.03

COREA DEL NORTE 98892.47 64195.68

CUBA 99644.20 67684.97

EGIPTO 100941.31 66593.22

ADEMAS LOS 3 PEORES (CHINA, NORUEGA Y SINGAPUR) Y MEJORES (CHILE, ESTADOS UNIDOS Y JAPON) PAISES EN SALARIOS