Mostrando las entradas con la etiqueta tutoriales. Mostrar todas las entradas
Mostrando las entradas con la etiqueta tutoriales. Mostrar todas las entradas

lunes, 27 de mayo de 2024

Tutoriales

Using forcats

Muestro la utilidad del paquete forcats para el análisis de variables categóricas y ordinales.Propongo algunos ejemplos con data propia


categóricas y variables ordinales.


migracion %>% 
  ggplot(aes(quien_es)) + # se visualiza la data tal como está
  geom_bar() +
  coord_flip()

ordeno las categorías según sus frecuencias

# quienes han migrado
migracion %>% 
  ggplot(aes(fct_infreq(quien_es))) + #empleo la funcion fct_infreq() del paquete forcats
  geom_bar() +
  coord_flip()

Hay un conjunto de categorías que no tienen suficientes casos. Las reuno en una mayor a la que denomino Otros. Uso “lump()”, aunque se recomienda emplear las versiones más específicas. Esta que es genérica parece que desaparecerá pronto:

  • fct_lump_min(): para agregar categorías que aparecen un mínimo de veces,
  • fct_lump_prop(): para agregar categorías que aparecen por debajo de cierto proporción,
  • fct_lump_n(): agrega las categorías menos las que aparecen n número de veces,
  • fct_lump_lowfreq(): agrega las categorías que tienen una frecuencia muy baja.
# quienes han migrado
migracion %>%
  mutate(quien_es_lump = fct_lump(quien_es, n = 5,
                                  other_level = "Otros")) %>%
  count(quien_es_lump, sort = TRUE) %>% 
  ggplot(aes(quien_es_lump, n)) +
  geom_col() +
  coord_flip()

Se puede elegir por la frecuencia de la cateoría, por la proporción, etc.

migracion %>% 
  count(pais_emigro) %>%  # I need percentages
  na.omit() %>% 
 filter( n > 2) %>% 
  mutate(percentage = n/sum(n),
         percentage = round(percentage,2)) %>% 
  # obtengo el valor minimo  y maximo para y
  mutate(max = cumsum(percentage),
         min = c(0, head(max, n=-1))) %>% 
  mutate(posicion = (max + min) / 2,
         etiquetas =paste0(pais_emigro ,":", "\n ",
                           percentage*100, "%")) %>% 
  ggplot(aes(ymax = max, ymin = min, xmax=4,
             xmin = 3, fill = pais_emigro )) +
  geom_rect() +
  xlim(c(.1, 4)) +
  coord_polar(theta="y") +
  geom_text( x=3.5, aes(y=posicion, label=etiquetas), size=1.85,
             color = "gray90", fontface = "bold")+
  scale_fill_manual(values = c("#ffab18", 
                               "#1380a1", 
                               "#990000",
                               "#588300")) +
  # Try to remove that to understand how the chart is built initially
  theme_void() +
  theme(legend.position = "none")

LS0tDQp0aXRsZTogIlVzaW5nIGZvcmNhdHMiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCkVzdW4gcGFxdWV0ZSBleHRyZW1hZGFtZW50ZSDDunRpbCBwYXJhIHRyYWJhamFyIGNvbiB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIHkgdmFyaWFibGVzIG9yZGluYWxlcy4NCg0KYGBge3J9DQojIHF1aWVuZXMgaGFuIG1pZ3JhZG8NCm1pZ3JhY2lvbiAlPiUgDQogIGdncGxvdChhZXMocXVpZW5fZXMpKSArDQogIGdlb21fYmFyKCkgKw0KICBjb29yZF9mbGlwKCkNCmBgYA0KDQpvcmRlbm8gbGFzIGNhdGVnb3LDrWFzIHNlZ8O6biBzdXMgZnJlY3VlbmNpYXMNCg0KDQpgYGB7cn0NCiMgcXVpZW5lcyBoYW4gbWlncmFkbw0KbWlncmFjaW9uICU+JSANCiAgZ2dwbG90KGFlcyhmY3RfaW5mcmVxKHF1aWVuX2VzKSkpICsNCiAgZ2VvbV9iYXIoKSArDQogIGNvb3JkX2ZsaXAoKQ0KYGBgDQoNCg0KSGF5IHVuIGNvbmp1bnRvIGRlIGNhdGVnb3LDrWFzIHF1ZSBubyB0aWVuZW4gc3VmaWNpZW50ZXMgY2Fzb3MuIExhcyBqdW50byBlbiB1bmEgbWF5b3IuIFVzbyAibHVtcCgpIiwgYXVucXVlIHNlIHJlY29taWVuZGEgZW1wbGVhciBsYXMgdmVyc2lvbmVzIG3DoXMgZXNwZWPDrWZpY2FzLiBFc3RhIHF1ZSBlcyBnZW7DqXJpY2EgcGFyZWNlIHF1ZSBkZXNhcGFyZWNlcsOhIHByb250bzoNCg0K4oCiIGZjdF9sdW1wX21pbigpOiBsdW1wcyBsZXZlbHMgdGhhdCBhcHBlYXIgZmV3ZXIgdGhhbiBtaW4gdGltZXMuDQrigKIgZmN0X2x1bXBfcHJvcCgpOiBsdW1wcyBsZXZlbHMgdGhhdCBhcHBlYXIgaW4gZmV3ZXIgcHJvcCAqIG4gdGltZXMuDQrigKIgZmN0X2x1bXBfbigpIGx1bXBzIGFsbCBsZXZlbHMgZXhjZXB0IGZvciB0aGUgbiBtb3N0IGZyZXF1ZW50IChvciBsZWFzdCBmcmVxdWVudCBpZiBuIDwgMCkNCuKAoiBmY3RfbHVtcF9sb3dmcmVxKCkgbHVtcHMgdG9nZXRoZXIgdGhlIGxlYXN0IGZyZXF1ZW50IGxldmVscywgZW5zdXJpbmcgdGhhdCAib3RoZXIiIGlzIHN0aWxsDQp0aGUgc21hbGxlc3QgbGV2ZWwuDQoNCg0KDQpgYGB7cn0NCiMgcXVpZW5lcyBoYW4gbWlncmFkbw0KbWlncmFjaW9uICU+JQ0KICBtdXRhdGUocXVpZW5fZXNfbHVtcCA9IGZjdF9sdW1wKHF1aWVuX2VzLCBuID0gNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcl9sZXZlbCA9ICJPdHJvcyIpKSAlPiUNCiAgY291bnQocXVpZW5fZXNfbHVtcCwgc29ydCA9IFRSVUUpICU+JSANCiAgZ2dwbG90KGFlcyhxdWllbl9lc19sdW1wLCBuKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgY29vcmRfZmxpcCgpDQoNCmBgYA0KDQpTZSBwdWVkZSBlbGVnaXIgcG9yIGxhIGZyZWN1ZW5jaWEgZGUgbGEgY2F0ZW9yw61hLCBwb3IgbGEgcHJvcG9yY2nDs24sIGV0Yy4NCg0KDQpgYGB7cn0NCm1pZ3JhY2lvbiAlPiUgDQogIGNvdW50KHBhaXNfZW1pZ3JvKSAlPiUgICMgSSBuZWVkIHBlcmNlbnRhZ2VzDQogIG5hLm9taXQoKSAlPiUgDQogZmlsdGVyKCBuID4gMikgJT4lIA0KICBtdXRhdGUocGVyY2VudGFnZSA9IG4vc3VtKG4pLA0KICAgICAgICAgcGVyY2VudGFnZSA9IHJvdW5kKHBlcmNlbnRhZ2UsMikpICU+JSANCiAgIyBvYnRlbmdvIGVsIHZhbG9yIG1pbmltbyAgeSBtYXhpbW8gcGFyYSB5DQogIG11dGF0ZShtYXggPSBjdW1zdW0ocGVyY2VudGFnZSksDQogICAgICAgICBtaW4gPSBjKDAsIGhlYWQobWF4LCBuPS0xKSkpICU+JSANCiAgbXV0YXRlKHBvc2ljaW9uID0gKG1heCArIG1pbikgLyAyLA0KICAgICAgICAgZXRpcXVldGFzID1wYXN0ZTAocGFpc19lbWlncm8gLCI6IiwgIlxuICIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlKjEwMCwgIiUiKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHltYXggPSBtYXgsIHltaW4gPSBtaW4sIHhtYXg9NCwNCiAgICAgICAgICAgICB4bWluID0gMywgZmlsbCA9IHBhaXNfZW1pZ3JvICkpICsNCiAgZ2VvbV9yZWN0KCkgKw0KICB4bGltKGMoLjEsIDQpKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhPSJ5IikgKw0KICBnZW9tX3RleHQoIHg9My41LCBhZXMoeT1wb3NpY2lvbiwgbGFiZWw9ZXRpcXVldGFzKSwgc2l6ZT0xLjg1LA0KICAgICAgICAgICAgIGNvbG9yID0gImdyYXk5MCIsIGZvbnRmYWNlID0gImJvbGQiKSsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiI2ZmYWIxOCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMTM4MGExIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM5OTAwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjNTg4MzAwIikpICsNCiAgIyBUcnkgdG8gcmVtb3ZlIHRoYXQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYXJ0IGlzIGJ1aWx0IGluaXRpYWxseQ0KICB0aGVtZV92b2lkKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQpgYGANCg0KDQoNCg0KDQo=