library(igraph)
library(tidygraph)
library(ggraph)
library(tidyverse)
similitud <- read_delim("https://github.com/martinmontane/martinmontane.github.io/raw/master/similitud.csv",delim=";")
similitud <- similitud %>%
filter(flow>10) %>%
mutate(RijSimple=ifelse(RijCorregido>0,1,0)) %>%
filter(RijSimple == 1)
descripcion <- read_delim("https://raw.githubusercontent.com/martinmontane/martinmontane.github.io/master/descripcion.csv",delim=";")
grafo <- graph_from_data_frame(similitud,directed = FALSE)
grafo <- igraph::simplify(grafo,remove.loops=TRUE)
grafo <- as_tbl_graph(grafo)
grafo <- grafo %>%
activate(nodes) %>%
left_join(descripcion,by=c("name"="broadGroup"))
grafo <- grafo %>%
activate(nodes) %>%
mutate(nodeID=V(.))
distancias <- shortest.paths(grafo)
ocup_directas <- distancias %>%
as_tibble(rownames = NA) %>%
rownames_to_column() %>%
pivot_longer(.,cols =2:ncol(.)) %>%
rename(nodo1=rowname,
nodo2=name,
distancia=value) %>%
filter(distancia == 1)
ocup_directas <- merge (ocup_directas, descripcion, by.x = "nodo1", by.y = "broadGroup")
ocup_directas <- rename(ocup_directas, Ocupacion_1 = Desc)
ocup_directas <- merge (ocup_directas, descripcion, by.x = "nodo2", by.y = "broadGroup")
ocup_directas <- ocup_directas %>%
rename(Ocupacion_2 = Desc) %>%
select(-nodo1, -nodo2, -distancia)
Listado
print(head(ocup_directas))
## Ocupacion_1
## 1 Sales Representatives, Wholesale and Manufacturing
## 2 Miscellaneous Managers
## 3 First-Line Supervisors of Sales Workers
## 4 Retail Salespersons
## 5 Miscellaneous Sales Representatives, Services
## 6 Miscellaneous Managers
## Ocupacion_2
## 1 Marketing and Sales Managers
## 2 Marketing and Sales Managers
## 3 Marketing and Sales Managers
## 4 Marketing and Sales Managers
## 5 Marketing and Sales Managers
## 6 Financial Managers
Criterio de betweness
crit_betweness <- grafo %>%
activate(nodes) %>%
mutate(betweness=centrality_betweenness()) %>%
arrange(desc(betweness)) %>%
mutate(Top5_bet=ifelse(row_number() %in% 1:5, "red", "black"))
print(crit_betweness)
## # A tbl_graph: 98 nodes and 237 edges
## #
## # An undirected simple graph with 3 components
## #
## # Node Data: 98 x 5 (active)
## name Desc nodeID betweness Top5_bet
## <chr> <chr> <igrph.v> <dbl> <chr>
## 1 11-9190 Miscellaneous Managers 7 1832. red
## 2 37-2010 Building Cleaning Workers 32 1064. red
## 3 43-6010 Secretaries and Administrative Assistants 53 615. red
## 4 53-3030 Driver/Sales Workers and Truck Drivers 80 615. red
## 5 51-9190 Miscellaneous Production Workers 78 439. red
## 6 47-2060 Construction Laborers 62 317. black
## # ... with 92 more rows
## #
## # Edge Data: 237 x 2
## from to
## <int> <int>
## 1 1 46
## 2 46 63
## 3 7 46
## # ... with 234 more rows
Las cinco primeras ocupaciones centrales según el criterio de betweness son: 1.Gerentes varios 2.Trabajadores de limpieza de edificios 3.Secretarias y Asistentes administatrivas 4.Choferes, vendedores y choferes de camiones 5.Trabajadores generales de la producción
Criterio de clustering local
crit_clocal <- grafo %>%
activate(nodes) %>%
mutate(clusteringLocal=local_transitivity()) %>%
arrange(desc(clusteringLocal)) %>%
mutate(Top5_cloc=ifelse(row_number() %in% 1:5, "red", "black"))
print(crit_clocal)
## # A tbl_graph: 98 nodes and 237 edges
## #
## # An undirected simple graph with 3 components
## #
## # Node Data: 98 x 5 (active)
## name Desc nodeID clusteringLocal Top5_cloc
## <chr> <chr> <igrph.> <dbl> <chr>
## 1 11-9010 Farmers, Ranchers, and Other Agric~ 3 1 red
## 2 15-1120 Computer and Information Analysts 11 1 red
## 3 15-1130 Software Developers and Programmers 12 1 red
## 4 35-3010 Bartenders 28 1 red
## 5 37-3010 Grounds Maintenance Workers 33 1 red
## 6 41-1010 First-Line Supervisors of Sales Wo~ 36 1 black
## # ... with 92 more rows
## #
## # Edge Data: 237 x 2
## from to
## <int> <int>
## 1 23 60
## 2 6 23
## 3 23 54
## # ... with 234 more rows
Las cinco primeras ocupaciones centrales según el criterio de clustering local son: 1.Granjeros, rancheros y otros gerentes agricultores 2.Analista en computación e información 3.Desarrollador de software y programador 4.Mesero 5.Trabajador de mantenimiento
Claramente las ocupaciones centrales varían según el criterio de centralidad que utilicemos. A través de un gráfico intentaremos ver cuál es su ubicación relativa en la red.
centralidad <- grafo %>%
activate(nodes) %>%
mutate(betweness=centrality_betweenness()) %>%
arrange(desc(betweness)) %>%
mutate(Color=ifelse(row_number() %in% 1:5, "Top betweness", NA)) %>%
mutate(clusteringLocal=local_transitivity()) %>%
arrange(desc(clusteringLocal)) %>%
mutate(Color2=ifelse(row_number() %in% 1:5, "Top clustering local", Color))
ggraph(centralidad) +
geom_edge_link(color="black") +
geom_node_point(aes(size=10, color=Color2)) +
theme_gray() +
guides(size=FALSE) +
labs(x = "",
y = "") +
theme(axis.text = element_blank(), legend.title=element_blank())
## Using `stress` as default layout
Como se puede ver en el gráfico las ocupaciones centrales según el criterio de betweness son aquellas que se encuentran en el medio de las grandes redes de ocupaciones,es decir, nucleando y comunicando las diferentes comunidades de ocupaciones que se generan, son nodos de mayor grado. Estas podrían ser ocupaciones de base o de inicio para diferentes carreras profesionales. Por otro lado, las ocupaciones centrales según el criterio de clustering local son aquellas que se ubican en la periferia del gráfico y forman un triángulo con sus vecinos generando comunidad (y sólo están conectados con ellos), son nodos de grado dos.Es posible que estas últimas sean más específicas de un campo particular como es el caso de los puestos relacionados a la industria del software que aparecen.