Introducción

En este documento se estarán haciendo un agrupamiento del panorama profesional por estado en México. La base de datos utilizada tiene datos recabados por estado del número de profesionistas ocupados, ingreso promedio, porcentaje de hombres y porcentaje de mujeres. Por lo tanto, la definición del panorama profesional va más allá del número de profesionistas que tienen un empleo.

Estos datos se recabaron del Observatorio Laboral del Gobierno de México.

Link de referencia: https://www.observatoriolaboral.gob.mx/static/estudios-publicaciones/Panorama_profesional_estados.html

Paso 1. Instalar paquetes y llamar librerías

#install.packages("cluster") #Análisis de agrupamiento
library(cluster)
#install.packages("ggplot2") #Graficar
library(ggplot2)
#install.packages("data.table") #Manejo de muchos datos
library(data.table)
#install.packages("factoextra") #Gráfica optimización de número de clusters
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Paso 2. Obtener los datos

df<-read.csv("C:\\Users\\artur\\OneDrive\\Documentos\\Panorama_profesional.csv", stringsAsFactors = FALSE)

Paso 3. Revisar los datos

summary(df)
##    Entidad          Número.de.profesionistas.ocupados
##  Length:32          Min.   :    224.4                
##  Class :character   1st Qu.: 129284.2                
##  Mode  :character   Median : 188742.5                
##                     Mean   : 291213.6                
##                     3rd Qu.: 307256.8                
##                     Max.   :1424891.0                
##  Ingreso.promedio.mensual....  Hombres....     Mujeres....   
##  Min.   :13012                Min.   :47.30   Min.   :42.70  
##  1st Qu.:15120                1st Qu.:50.88   1st Qu.:45.83  
##  Median :16489                Median :52.20   Median :47.80  
##  Mean   :16951                Mean   :52.45   Mean   :47.55  
##  3rd Qu.:17616                3rd Qu.:54.17   3rd Qu.:49.12  
##  Max.   :26813                Max.   :57.30   Max.   :52.70
str(df)
## 'data.frame':    32 obs. of  5 variables:
##  $ Entidad                          : chr  "Aguascalientes" "Baja California" "Baja California Sur" "Campeche" ...
##  $ Número.de.profesionistas.ocupados: num  125805 332627 85407 67171 230783 ...
##  $ Ingreso.promedio.mensual....     : int  17017 21119 21174 16952 13451 19170 26813 18205 16891 14060 ...
##  $ Hombres....                      : num  54.1 53.5 52.4 55.3 57.3 52.3 50.5 56.8 51.8 52 ...
##  $ Mujeres....                      : num  45.9 46.5 47.6 44.7 42.7 47.7 49.5 43.2 48.2 48 ...

Paso 4. Dejar Entidad como nombres de fila

rownames(df) <- df$Entidad 
df_numeric <- df[ , !(names(df) %in% "Entidad")]

Paso 5. Escalar los datos

datos_escalados <- scale(df_numeric)

Paso 6. Determinar el número de grupos

#Siempre es un valor inicial "cualquiera", luego se optimiza.
grupos <-3

Paso 7. Generar los grupos

set.seed(123)
clusters <- kmeans(datos_escalados,grupos)
clusters
## K-means clustering with 3 clusters of sizes 15, 15, 2
## 
## Cluster means:
##   Número.de.profesionistas.ocupados Ingreso.promedio.mensual.... Hombres....
## 1                        -0.3096842                   -0.5723894  -0.7957396
## 2                        -0.1401863                    0.3908583   0.8171376
## 3                         3.3740286                    1.3614828  -0.1604853
##   Mujeres....
## 1   0.7957396
## 2  -0.8171376
## 3   0.1604853
## 
## Clustering vector:
##      Aguascalientes     Baja California Baja California Sur            Campeche 
##                   2                   2                   2                   2 
##             Chiapas           Chihuahua    Ciudad de México            Coahuila 
##                   2                   2                   3                   2 
##              Colima             Durango    Estado de México          Guanajuato 
##                   1                   1                   3                   1 
##            Guerrero             Hidalgo             Jalisco           Michoacán 
##                   1                   1                   2                   1 
##             Morelos             Nayarit          Nuevo León              Oaxaca 
##                   1                   1                   2                   1 
##              Puebla           Querétaro        Quintana Roo     San Luis Potosí 
##                   1                   2                   2                   1 
##             Sinaloa              Sonora             Tabasco          Tamaulipas 
##                   1                   2                   2                   2 
##            Tlaxcala            Veracruz             Yucatán           Zacatecas 
##                   1                   1                   2                   1 
## 
## Within cluster sum of squares by cluster:
## [1] 14.433991 26.484156  8.536615
##  (between_SS / total_SS =  60.1 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Paso 7. Optimizar el número de grupos

set.seed(123)
optimizacion <- clusGap(datos_escalados, FUN=kmeans, nstart=1, K.max=10)
#El k.max normalmente es 10, en este ejercicio al ser 8 se dejó en 7.
plot(optimizacion,xlab="Número de clusters", main="Optimización de clusters")

# Se selecciona como óptimo el primer punto más alto
fviz_cluster(clusters, data=datos_escalados)

Paso 9. Agregar clusters a la base de datos

df1_clusters <- cbind(df, cluster=clusters$cluster)
head(df1_clusters)
##                                 Entidad Número.de.profesionistas.ocupados
## Aguascalientes           Aguascalientes                            125805
## Baja California         Baja California                            332627
## Baja California Sur Baja California Sur                             85407
## Campeche                       Campeche                             67171
## Chiapas                         Chiapas                            230783
## Chihuahua                     Chihuahua                            312944
##                     Ingreso.promedio.mensual.... Hombres.... Mujeres....
## Aguascalientes                             17017        54.1        45.9
## Baja California                            21119        53.5        46.5
## Baja California Sur                        21174        52.4        47.6
## Campeche                                   16952        55.3        44.7
## Chiapas                                    13451        57.3        42.7
## Chihuahua                                  19170        52.3        47.7
##                     cluster
## Aguascalientes            2
## Baja California           2
## Baja California Sur       2
## Campeche                  2
## Chiapas                   2
## Chihuahua                 2

Conclusiones

Finalmente, los resultados se agruparon en 3 clusters distintos. El Estado de México y la Ciudad de México se alejan de los otros 2 clusters debido a que tienen el doble de número de profesionistas ocupados. Mientras que los otros dos grupos tienen números similares en cuanto a número de ocupantes, ingresos y demás.

LS0tDQp0aXRsZTogIkluZ3Jlc28gZGUgY2FycmVyYXMgcG9yIEVzdGFkbyBlbiBNw6l4aWNvIiANCmF1dGhvcjogIkFydHVybyBEaXgiDQpkYXRlOiAiMjAyNS0wOC0xOCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRvYzogVFJVRSANCiAgICB0b2NfZmxvYXQ6IFRSVUUgDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KLS0tDQoNCiFbXShodHRwczovL3d3dy5lbGZpbmFuY2llcm8uY29tLm14L3Jlc2l6ZXIvSGVLaGpqRWZRd25idHMwUDFieEhEaEprc2VjPS9hcmMtcGhvdG8tZWxmaW5hbmNpZXJvL2FyYzItcHJvZC9wdWJsaWMvS1VOSzREVElBSkVFTkZGQjUzS09OWk9XS1EuanBnKQ0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibGFjazsiPiBJbnRyb2R1Y2Npw7NuIDwvc3Bhbj4gDQpFbiBlc3RlIGRvY3VtZW50byBzZSBlc3RhcsOhbiBoYWNpZW5kbyB1biBhZ3J1cGFtaWVudG8gZGVsIHBhbm9yYW1hIHByb2Zlc2lvbmFsIHBvciBlc3RhZG8gZW4gTcOpeGljby4gTGEgYmFzZSBkZSBkYXRvcyB1dGlsaXphZGEgdGllbmUgZGF0b3MgcmVjYWJhZG9zIHBvciBlc3RhZG8gZGVsIG7Dum1lcm8gZGUgcHJvZmVzaW9uaXN0YXMgb2N1cGFkb3MsIGluZ3Jlc28gcHJvbWVkaW8sIHBvcmNlbnRhamUgZGUgaG9tYnJlcyB5IHBvcmNlbnRhamUgZGUgbXVqZXJlcy4gUG9yIGxvIHRhbnRvLCBsYSBkZWZpbmljacOzbiBkZWwgcGFub3JhbWEgcHJvZmVzaW9uYWwgdmEgbcOhcyBhbGzDoSBkZWwgbsO6bWVybyBkZSBwcm9mZXNpb25pc3RhcyBxdWUgdGllbmVuIHVuIGVtcGxlby4gDQoNCkVzdG9zIGRhdG9zIHNlIHJlY2FiYXJvbiBkZWwgT2JzZXJ2YXRvcmlvIExhYm9yYWwgZGVsIEdvYmllcm5vIGRlIE3DqXhpY28uIA0KDQpMaW5rIGRlIHJlZmVyZW5jaWE6ICpodHRwczovL3d3dy5vYnNlcnZhdG9yaW9sYWJvcmFsLmdvYi5teC9zdGF0aWMvZXN0dWRpb3MtcHVibGljYWNpb25lcy9QYW5vcmFtYV9wcm9mZXNpb25hbF9lc3RhZG9zLmh0bWwqDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrOyI+IFBhc28gMS4gSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyA8L3NwYW4+DQoNCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoImNsdXN0ZXIiKSAjQW7DoWxpc2lzIGRlIGFncnVwYW1pZW50bw0KbGlicmFyeShjbHVzdGVyKQ0KI2luc3RhbGwucGFja2FnZXMoImdncGxvdDIiKSAjR3JhZmljYXINCmxpYnJhcnkoZ2dwbG90MikNCiNpbnN0YWxsLnBhY2thZ2VzKCJkYXRhLnRhYmxlIikgI01hbmVqbyBkZSBtdWNob3MgZGF0b3MNCmxpYnJhcnkoZGF0YS50YWJsZSkNCiNpbnN0YWxsLnBhY2thZ2VzKCJmYWN0b2V4dHJhIikgI0dyw6FmaWNhIG9wdGltaXphY2nDs24gZGUgbsO6bWVybyBkZSBjbHVzdGVycw0KbGlicmFyeShmYWN0b2V4dHJhKQ0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibGFjazsiPiBQYXNvIDIuIE9idGVuZXIgbG9zIGRhdG9zIDwvc3Bhbj4NCmBgYHtyfQ0KZGY8LXJlYWQuY3N2KCJDOlxcVXNlcnNcXGFydHVyXFxPbmVEcml2ZVxcRG9jdW1lbnRvc1xcUGFub3JhbWFfcHJvZmVzaW9uYWwuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibGFjazsiPiBQYXNvIDMuICBSZXZpc2FyIGxvcyBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGYpDQpzdHIoZGYpDQpgYGANCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrOyI+IFBhc28gNC4gRGVqYXIgRW50aWRhZCBjb21vIG5vbWJyZXMgZGUgZmlsYSA8L3NwYW4+DQpgYGB7cn0NCnJvd25hbWVzKGRmKSA8LSBkZiRFbnRpZGFkIA0KZGZfbnVtZXJpYyA8LSBkZlsgLCAhKG5hbWVzKGRmKSAlaW4lICJFbnRpZGFkIildDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6YmxhY2s7Ij4gUGFzbyA1LiBFc2NhbGFyIGxvcyBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCmRhdG9zX2VzY2FsYWRvcyA8LSBzY2FsZShkZl9udW1lcmljKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsYWNrOyI+IFBhc28gNi4gRGV0ZXJtaW5hciBlbCBuw7ptZXJvIGRlIGdydXBvcyA8L3NwYW4+DQpgYGB7cn0NCiNTaWVtcHJlIGVzIHVuIHZhbG9yIGluaWNpYWwgImN1YWxxdWllcmEiLCBsdWVnbyBzZSBvcHRpbWl6YS4NCmdydXBvcyA8LTMNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibGFjazsiPiBQYXNvIDcuICBHZW5lcmFyIGxvcyBncnVwb3MgPC9zcGFuPg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpjbHVzdGVycyA8LSBrbWVhbnMoZGF0b3NfZXNjYWxhZG9zLGdydXBvcykNCmNsdXN0ZXJzDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6YmxhY2s7Ij4gUGFzbyA3LiAgT3B0aW1pemFyIGVsIG7Dum1lcm8gZGUgZ3J1cG9zIDwvc3Bhbj4NCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0Kb3B0aW1pemFjaW9uIDwtIGNsdXNHYXAoZGF0b3NfZXNjYWxhZG9zLCBGVU49a21lYW5zLCBuc3RhcnQ9MSwgSy5tYXg9MTApDQojRWwgay5tYXggbm9ybWFsbWVudGUgZXMgMTAsIGVuIGVzdGUgZWplcmNpY2lvIGFsIHNlciA4IHNlIGRlasOzIGVuIDcuDQpwbG90KG9wdGltaXphY2lvbix4bGFiPSJOw7ptZXJvIGRlIGNsdXN0ZXJzIiwgbWFpbj0iT3B0aW1pemFjacOzbiBkZSBjbHVzdGVycyIpDQojIFNlIHNlbGVjY2lvbmEgY29tbyDDs3B0aW1vIGVsIHByaW1lciBwdW50byBtw6FzIGFsdG8NCmBgYA0KDQpgYGB7cn0NCmZ2aXpfY2x1c3RlcihjbHVzdGVycywgZGF0YT1kYXRvc19lc2NhbGFkb3MpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6YmxhY2s7Ij4gUGFzbyA5LiBBZ3JlZ2FyIGNsdXN0ZXJzIGEgbGEgYmFzZSBkZSBkYXRvcyA8L3NwYW4+DQpgYGB7cn0NCmRmMV9jbHVzdGVycyA8LSBjYmluZChkZiwgY2x1c3Rlcj1jbHVzdGVycyRjbHVzdGVyKQ0KaGVhZChkZjFfY2x1c3RlcnMpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6YmxhY2s7Ij4gQ29uY2x1c2lvbmVzIDwvc3Bhbj4NCg0KRmluYWxtZW50ZSwgbG9zIHJlc3VsdGFkb3Mgc2UgYWdydXBhcm9uIGVuIDMgY2x1c3RlcnMgZGlzdGludG9zLiBFbCBFc3RhZG8gZGUgTcOpeGljbyB5IGxhIENpdWRhZCBkZSBNw6l4aWNvIHNlIGFsZWphbiBkZSBsb3Mgb3Ryb3MgMiBjbHVzdGVycyBkZWJpZG8gYSBxdWUgdGllbmVuIGVsIGRvYmxlIGRlIG7Dum1lcm8gZGUgcHJvZmVzaW9uaXN0YXMgb2N1cGFkb3MuIE1pZW50cmFzIHF1ZSBsb3Mgb3Ryb3MgZG9zIGdydXBvcyB0aWVuZW4gbsO6bWVyb3Mgc2ltaWxhcmVzIGVuIGN1YW50byBhIG7Dum1lcm8gZGUgb2N1cGFudGVzLCBpbmdyZXNvcyB5IGRlbcOhcy4gDQo=