Estructura RMarkdown

Insertar videos

library(vembedr)
embed_url("https://www.youtube.com/watch?v=HF-CuxhPeW8")

Gráficas

Gráficas de Componentes:

  1. Gráfico de Barras Apiladas (Stacked Bar Chart): En este tipo de gráfico, las barras se dividen en segmentos que representan diferentes categorías. Cada segmento podría considerarse como un componente.

  2. Gráfico de Áreas Apiladas (Stacked Area Chart): Similar al gráfico de barras apiladas, pero con áreas. Cada área representa una categoría y las áreas se apilan unas sobre otras.

  3. Gráfico de Pastel (Pie Chart): Como en el código que proporcionaste, un gráfico circular puede tener secciones (o “componentes”) que representan diferentes proporciones o categorías.

  4. Gráfico de Donut (Donut Chart): Similar al gráfico circular, pero con un agujero en el centro. También tiene componentes que representan diferentes proporciones.

# Lectura de datos --------------------------------------------
# Se lee un archivo CSV llamado 'CARGA_DATASETS_V2.csv' y se almacena en la variable Trabajo.
# 'header = T' indica que la primera fila contiene nombres de columna.
# 'sep = ';'' especifica que el separador de campos es el punto y coma.
Trabajo = read.csv('CARGA_DATASETS_V2.csv', header = T, sep = ';')

# Limpieza de datos -------------------------------------------
# Se aplican transformaciones al conjunto de datos Trabajo:
# 1. Convertir fechas a objetos tipo Date utilizando ymd de lubridate.
# 2. Crear nuevas variables DIA_ATENCION y MES_ATENCION.
# 3. Normalizar nombres de departamentos.
# 4. Seleccionar un subconjunto específico de columnas.
Trabajo = Trabajo %>% mutate(
  FECHA_ATENCION = ymd(FECHA_ATENCION),
  FECHA_INTERNAMIENTO = ymd(FECHA_INTERNAMIENTO),
  FECHA_ALTA = ymd(FECHA_ALTA)
) %>%
  mutate(
    DIA_ATENCION = day(FECHA_ATENCION),
    MES_ATENCION = month(FECHA_ATENCION)
  ) %>%
  mutate(DEPARTAMENTO = ifelse(
    DEPARTAMENTO == 'JUNIN',
    'Junin',
    ifelse(DEPARTAMENTO == 'AREQUIPA', 'Arequipa',
           DEPARTAMENTO)
  )) %>%
  select(4:8, 11:12, 14:16, 18:19, 24:25, 20:22)
attach(Trabajo)  # No se recomienda usar attach; podría causar confusiones en el espacio de nombres

# Hallar proporción
# Calcular la proporción de cada valor único en la columna SEXO y redondear a cero decimales.
tsexo = round(prop.table(table(SEXO)) * 100, 0)

# Paleta de colores
# Definir una paleta de colores para el gráfico de pastel.
colores <- c("pink", "skyblue")

# Gráfico
# Crear un gráfico de pastel con etiquetas y colores personalizados.
pie(tsexo,
    labels = sprintf("%s\n%.0f%%", names(tsexo), tsexo), 
    col = colores,
    main = "Proporción de paciente por sexo", 
    cex = 0.8,  # Tamaño de las etiquetas
    radius = 0.8)  # Tamaño del pastel

# Filtrar datos para casos de cáncer de estómago
Cancer_Estomago = Trabajo %>%
  filter(GRUPO_DIAGNOSTICOS == "CANCER DE ESTOMAGO") %>%
  group_by(SEXO) %>% summarize(n = n())

# Calcular porcentaje en relación con el total de casos
Cancer_Estomago = Cancer_Estomago %>% mutate(porcentaje = (n/sum(n))*100)

# Crear gráfico de barras apiladas (geom_bar) con coordenadas polares
ggplot(Cancer_Estomago, aes(x = "", y = porcentaje, fill = SEXO)) +
  geom_bar(stat = "identity", width = 1) + coord_polar(theta = "y") +

  # Eliminar elementos de fondo (theme_void)
  theme_void() +

  # Agregar etiquetas de porcentaje en el centro de las barras (geom_text)
  geom_text(aes(label = sprintf("%.1f%%", porcentaje)),
            position = position_stack(vjust = 0.5), size = 5) +

  # Definir colores manuales (scale_fill_manual)
  scale_fill_manual(values = c("pink", "skyblue")) +

  # Configurar título del gráfico (labs) y estilo del título (theme)
  labs(title = "En el Perú las mujeres presentan más casos de\ncáncer al estómago que los hombres") +
  theme(plot.title = element_text(size = 30))

# Calcular la proporción de pacientes por sexo y redondear a cero decimales
tsexo = round(prop.table(table(SEXO)) * 100, 0)

# Crear un gráfico de waffle utilizando la librería waffle
waffle(tsexo, colors=c('pink','skyblue'),
       title = 'La cantidad de pacientes del sexo femenino es casi 3 veces mayor que la del sexo masculino')

# 2. Crear una gráfica de barras apiladas al 100% que represente cómo es la
# proporción de los casos de cáncer de colon, cuello uterino y estómago en los
# departamentos de Lima y Arequipa
# Filtrar datos para los casos de cáncer de colon, cuello uterino y estómago en Lima y Arequipa
Trabajo %>%
  filter(GRUPO_DIAGNOSTICOS %in% c("CANCER DE CUELLO UTERINO", "CANCER DE COLON", "CANCER DE ESTOMAGO") & DEPARTAMENTO %in% c('Lima', 'Arequipa')) %>%
  
  # Crear gráfico de barras apiladas al 100%
  ggplot() +
  aes(x = DEPARTAMENTO, fill = GRUPO_DIAGNOSTICOS) +
  geom_bar(position = "fill") +
  
  # Ajustar el esquema de color
  scale_fill_hue(direction = 1) +
  
  # Configurar título y etiquetas de ejes
  labs(title = "Tanto en Lima como Arequipa predomina el cáncer de cuello uterino sobre los de estómago y colon",
       y = "Porcentaje de DIAGNOSTICO") +
  
  # Configurar el tema del gráfico
  theme_minimal() +
  
  # Configurar el eje y para mostrar porcentajes
  scale_y_continuous(labels = scales::percent_format(scale = 100))

Gráfica de partidas

  1. Gráfica de barras horizontales: Muestra la pasición que ocupa cada elemento
# Lectura de datos --------------------------------------------  
df = read.csv2("Casos_Anemia_Region_Cusco_2010_2020_Cusco.csv", encoding = "UTF-8")

# Crear una nueva columna "TOTAL" sumando las columnas "CASOS" y "NORMAL"
# Renombrar algunas columnas para mayor claridad
df %>% 
  mutate(TOTAL = CASOS + NORMAL) %>% 
  dplyr::rename("CASOS_TOTALES" = TOTAL, "CASOS_SIN_ANEMIA" = NORMAL, "CASOS_CON_ANEMIA" = CASOS) -> df

# COMPARACIÓN DE PARTIDAS

# 1 - GRAFICA
# Filtrar las filas donde la columna "PROVINCIA" no sea "NULL"
# Agrupar por "PROVINCIA" y calcular la suma de "CASOS_CON_ANEMIA" y "CASOS_TOTALES" para cada provincia
df %>% 
  filter(PROVINCIA != "NULL") %>% 
  group_by(PROVINCIA) %>%
  summarise(SUMA_CASOS_CON_ANEMIA = sum(CASOS_CON_ANEMIA),
            SUMA_CASOS_TOTALES = sum(CASOS_TOTALES)) %>%

  # Crear un gráfico de barras apiladas horizontal
  ggplot() + aes(x = PROVINCIA,
                 y = SUMA_CASOS_CON_ANEMIA / SUMA_CASOS_TOTALES,
                 fill = PROVINCIA) +
  geom_bar(stat = "identity", show.legend = FALSE) + 
  scale_y_continuous(labels = scales::percent) + coord_flip() +

  # Resaltar la provincia de Quispicanchi
  gghighlight(PROVINCIA == "QUISPICANCHI") +

  # Configuración de etiquetas y título
  labs(y = "Proporción entre el número de casos de anemia entre el número de personas que se realizaron la prueba",
       title = "La provincia del departamento del Cusco con mayor proporción es Quispicanchi con el 52.9%",
       x = "Provincia") +
  
  # Agregar etiquetas de porcentaje en las barras
  geom_text(aes(label = paste(round(100 * SUMA_CASOS_CON_ANEMIA / SUMA_CASOS_TOTALES, 1), "%")),
            vjust = 0.0)

Gráfica de tiempo

  1. Gráfica de linea: Muestra cambios a travez del tiempo
# Lectura de datos
datos <- read_xlsx("Catalogo1960_2021.xlsx")

# Tabla que muestra la magnitud promedia de sismos ocurridos en agosto del 2007
datos %>% 
  # Convertir la columna FECHA_UTC a tipo de dato fecha
  mutate(FECHA_UTC = ymd(FECHA_UTC)) %>%
  # Crear nuevas columnas AÑO, MES, DIA a partir de la columna FECHA_UTC
  mutate(AÑO = year(FECHA_UTC), MES = month(FECHA_UTC), DIA = day(FECHA_UTC)) %>%
  # Seleccionar las columnas relevantes
  select(AÑO, MES, MAGNITUD, DIA) %>%
  # Filtrar los datos para el año 2007 y el mes de agosto
  filter(AÑO == 2007 & MES == 8) %>%
  # Agrupar por el día y calcular la magnitud media para cada día
  group_by(DIA) %>% 
  summarize(media_mag = mean(MAGNITUD)) -> graf_ejemplo

# Gráfica de la magnitud promedia en agosto del 2007
ggplot(graf_ejemplo) + 
  aes(x = DIA, y = media_mag) + 
  geom_line(size = 0.8, color = "green") +
  geom_point(color = "green") +
  theme_bw() +
  labs(title = "El 15 de Agosto del 2007 se registró el sismo de mayor magnitud media",
       x = "Días", 
       y = "Magnitud de los sismos") +
  scale_x_continuous(breaks = seq(1:31))

# Evolución de la magnitud promedio de los sismos en el periodo de estudio
datos %>% 
  # Convertir la columna FECHA_UTC a tipo de dato fecha
  mutate(FECHA_UTC = ymd(FECHA_UTC)) %>% 
  # Crear nuevas columnas año y mes a partir de la columna FECHA_UTC
  mutate(año = year(FECHA_UTC), mes = month(FECHA_UTC)) %>% 
  # Filtrar los datos para años menores a 2021
  filter(año < 2021) %>% 
  # Agrupar por año y calcular la magnitud promedio para cada año
  group_by(año) %>%
  summarise(magnitud_promedio = mean(MAGNITUD)) -> graf_ejemplo3

# Crear una gráfica de línea de la evolución de la magnitud promedio de sismos
ggplot(graf_ejemplo3) + aes(x = año, y = magnitud_promedio) +
  geom_line(size = 0.6, color = "orange") +
  geom_point() +
  labs(x = "Año", 
       y = "Magnitud promedio", 
       title = "Evolución de la magnitud promedio de sismos en el Perú desde 1960-2021")

# Convertir la gráfica ggplot a una gráfica interactiva con ggplotly
ggplotly()

Gráfica de distribución de frecuencia

  1. Histograma: Muestra cuántos elementos caen dentro de una serie de rangos numéricos progresivos.
# Lectura de datos
datos <- read.csv("Residuos municipales generados anualmente.csv", sep = ";")
datos %>% rename(REGION = REG_NAT) -> datos

# GRAFICOS NORMALES -------------------------------------------------------

# Creación de un gráfico de histograma con facetado por región y escala logarítmica en el eje y
datos %>%
  ggplot() +  # Inicia un objeto ggplot
  aes(x = (GPC_DOM * 1000), fill = REGION) +  # Asigna variables para el eje x y el color
  geom_histogram(color = "black", binwidth = 500, show.legend = FALSE) +  # Crea un histograma
  theme_bw() +  # Aplica un tema básico en blanco y negro al gráfico
  scale_x_continuous(breaks = seq(250, 2000, 500)) +  # Establece marcas específicas en el eje x
  facet_wrap(vars(REGION)) +  # Faceta el gráfico por la variable "REGION"
  scale_y_log10() +  # Aplica una escala logarítmica en el eje y
  scale_fill_manual(values = c(COSTA = "#fcab64", SELVA = "#09bc8a", SIERRA = "#dda15e")) +  # Establece colores específicos
  labs(title = "La mayor parte de residuos generados por cada Región están entre los 250g y 750g",  # Título del gráfico
       x = "Residuos generados por habitante (g)",  # Etiqueta del eje x
       y = "Conteo")  # Etiqueta del eje y

Minería de textos

Paqueteria importante: stringr (Manipulación de caracteres)

  1. str_length() N. de caracteres por palabra (cadena)
  2. str_to_upper() Todo mayuscula
  3. str_to_lower() Todo minuscula
  4. str_to_title() Formato titulo (primera mayuscula)
  5. str_sub() “vector, #, #” de cada cadena del vector se extraerá el # de letra # inicial y el # de letra final (asignación previa)
  6. str_replace() “vector, c1, a2” donde c1 será remplazado por a2
  7. str_sort() “vector, locale =”es”” orden alfabético
  8. str_detect() “vector,”letra”” si dentro del vector se encuentra la “letra”

Lectura de libros:

  • .txt scan(““)
  • .pdf pdf_text(““)

Funciones adicionales:

  • encoding = “latin1”
  • what = “char”
  • sep = ” ”

Construccion y limpieza de corpus (documentos de texto)

  1. Convertir el texto en un tibble
  2. Tokenizar

Análisis de textos

  • Eliminar StopWords: Las “stopwords” (palabras vacías o de parada en español) son palabras que generalmente se eliminan de un texto durante el procesamiento de lenguaje natural (NLP) porque son consideradas comunes y no aportan mucha información sobre el contenido del texto.

Texto procesado: Finalmente se eliminan las StopWords del tibble original

tText1_Final <- tText1 %>% anti_join(Stopwords)
tText1_Final
## # A tibble: 583 × 1
##    Token      
##    <chr>      
##  1 noches     
##  2 quiero     
##  3 dirigirme  
##  4 informarles
##  5 actual     
##  6 situación  
##  7 atraviesa  
##  8 país       
##  9 decisiones 
## 10 presidente 
## # ℹ 573 more rows

Realizada la limpieza se buscara llegar al objetivo…

GRAFICOS A BASE DEL ANALISIS DE TEXTOS

Grafico de barras con las palabras mas usadas
tText1_Res1 <- tText1_Final %>%
  count(Token, sort = TRUE) # sort ordena de forma descendente

Grafc1 <- tText1_Res1 %>% head(10) %>%
  ggplot() + aes(x=fct_reorder(Token, n), y=n, fill = Token) + # fct reordenado
# por frecuencia (forcats)
  geom_col() + # Siempre geom_col
  labs(title = "Mensaje presidencial",
       x = NULL,
       y = "Frecuencia") +
  theme_bw() +
  theme(legend.position = "none") + # Sin leyenda
  coord_flip() # Barras de lado
Grafc1

Grafico de nubes con palabras mas usadas
set.seed(123) # Asignamos una semilla (codigo de repeticion aleatorio)
wordcloud(words= tText1_Res1$Token, # Utilizamos el mismo item de frecuencia
          freq = tText1_Res1$n,
          max.words = 100, # Maximo de palabras
          random.order = FALSE, # Orden segun frecuencia activo
          min.freq = 1, # Frecuencia minima requerida para aparecer
          colors=brewer.pal(5,"Dark2")) # Paleta

set.seed(321)
wordcloud2(tText1_Res1, 
           size = 0.5,
           shape = 'cloud') # Define la forma

Titulo NIVEL (negrita “**”) 1

Titulo NIVEL (cursiva “*”) 2

Titulo NIVEL (negrita / cursiva “***”) 3

Titulo NIVEL 4

Titulo NIVEL 5
Titulo NIVEL 6

La escritura de parrafos o saltos de linea se hacen con doble espacio y enter.
Este es un ejemplo de salto de linea / parrafo.

Lista

Lista a travez de numeración.
Colocar numero seguido de un punto y un espacio (estrictamente).

  1. Lunes
  2. Martes
  3. Miercoles

Lo mismo aplica para los siguientes signos de lista (-, *, …)

Opción Efecto
Include = F No se mostrará ni código ni resultados, si eval = T solo se ejecutará
echo = F Solo mostrará resultado
result = “hide” No muestra resultados (tablas, estadísticas)
message = F No muestra los resultados de “salida”
warning = F Los warning se irán a la consola
eval = F No ejecutará

Lectura del libro

Realizada la lectura via R de la obra “Las Itermitencias de la Muerte - Saramago” junto con la tokenización obtenemos los siguientes gráficos.

Libro_Final <- Libro_Final %>%
  count(Token, sort = TRUE) # sort ordena de forma descendente

Grafc1 <- Libro_Final %>% head(10) %>%
  ggplot() + aes(x=fct_reorder(Token, n), y=n, fill = Token) + # fct reordenado
# por frecuencia (forcats)
  geom_col() + # Siempre geom_col
  labs(title = "Las Itermitencias de la Muerte",
       x = NULL,
       y = "Frecuencia") +
  theme_bw() +
  theme(legend.position = "none") + # Sin leyenda
  coord_flip() # Barras de lado
Grafc1

set.seed(123) # Asignamos una semilla (codigo de repeticion aleatorio)
wordcloud(words= Libro_Final$Token, # Utilizamos el mismo item de frecuencia
          freq = Libro_Final$n,
          max.words = 100, # Maximo de palabras
          random.order = FALSE, # Orden segun frecuencia activo
          min.freq = 1, # Frecuencia minima requerida para aparecer
          colors=brewer.pal(5,"Dark2")) # Paleta

Analizando sentmientos del libro

# 1. Lectura de diccionario nrc en castellano -----------------
sentimientos <- read.delim("sentimientos_2.txt")

sentimientos <- as.tibble(sentimientos)

sentimientos <- distinct(sentimientos)

# 2. Uniendo libro con el diccionario de sentimientos ------

Libro_Sentimientos <- Libro_Final %>% 
  inner_join(sentimientos,by=c("Token"="palabra"))

# 3. Contando y graficando los sentimientos en el libro ----

Libro_Sentimientos %>% 
  dplyr::count(sentimiento) %>% 
  ggplot() + aes(x=fct_reorder(sentimiento,n),
                 y=n,
                 fill=sentimiento) + 
  geom_col(show.legend = F) + coord_flip() +
  labs(title ="Análisis de sentimientos del Libro",
       subtitle = "Las Itermitencias de la Muerte",
       caption = "Fuente: Saramago",
       x = "Sentimientos",
       y= "Frecuencia") +
  theme_bw()