data-raw/R/Informacion.R

options(scipiens = 999)
# FUNCIONES--------------------------------------------------------------

# numero de notas y medios

contar_notas_medios <- function(bd){

  res = bd %>%
    summarise(total_notas = n(),
              total_medios = bd %>%
                count(Medio) %>%
                mutate(total = n()) %>%
                pull(total) %>%
                unique())

  return(res)
}

#Contar valores

contar_valores <- function(bd,variable = TipoNota){

  res = bd %>%
    group_by({{variable}}) %>%
    summarise(n = n())

  return(res)

}


## numero y porcentajes

calcular_n_pp <- function(bd, variable = TipoNota){

  res = contar_valores(bd = bd, variable = {{variable}}) %>%
    mutate(total_notas = sum(n),
           porcentaje = n/total_notas)

  return(res)

}

## resumen estadistico para variables numericas (default = Costo)
# se puede agrupar (default por Calificación)

resumen_estadistico <- function(bd, variable = Costo, grupo = Calificación){

  res =  bd%>%
    count({{grupo}}) %>%
    left_join(bd %>%
                group_by({{grupo}}) %>%
                summarise(total = sum({{variable}}),
                          promedio = mean({{variable}}),
                          mediana = median({{variable}}),
                          valor_max = max({{variable}}),
                          valor_min = min({{variable}}),
                          desvest = sd({{variable}}),
                          coefvar = desvest/promedio,
                          q1 = quantile({{variable}},probs = .25),
                          q2 = quantile({{variable}},probs = .5),
                          q3 = quantile({{variable}},probs = .75),
                          q4 = quantile({{variable}},probs = .1),
                          r_intercuartil = q3 - q1)) %>%
    mutate(porcentaje = n/total)


  return(res)

}


## indice calificacion por grupo

calcular_indice_calificiacion <- function(bd, grupo){

  res = bd %>%
    mutate(Calificación = ifelse(Calificación == "Positivo", 1,
                                 ifelse(Calificación == "Neutro", 0,-1))) %>%
    group_by({{grupo}}) %>%
    summarise(indice = sum(Calificación)/n())

  return(res)

}

# contar variablews cruzadas

contar_variables_cruzadas <- function(bd, variable_1, variable_2){

 res =  bd %>%
  count({{variable_1}}, {{variable_2}})

 return(res)

}

# Descripciones generales base ---------------------------------------

# lugares

bd %>%
  count(Pais)

# impacto por tipo de medio y clacificacion

bd %>%
  group_by(TipoMedio, Calificación) %>%
  summarise(imp = sum(Impacto)) %>%
  arrange(-imp)

# prueba

prueba <- bd %>%
  group_by(TipoNota) %>%
  count(Fecha) %>%
  summarise(total = sum(n),
            promedio = mean(n),
            mediana = median(n),
            valor_max = max(n),
            valor_min = min(n),
            desvest = sd(n),
            coefvar = desvest/promedio,
            q1 = quantile(n,probs = .25),
            q2 = quantile(n,probs = .5),
            q3 = quantile(n,probs = .75),
            q4 = quantile(n,probs = .1),
            r_intercuartil = q3 - q1)

### Cuantos días hay tanto numero de notas

inicio_periodo <- min(bd$Fecha)
fin_periodo <- max(bd$Fecha)

notasXdia <- bd %>%
  count(Fecha) %>%
  complete(Fecha=seq(inicio_periodo,
                     fin_periodo,
                     by= "1 day"),
           fill=list(n=0)) %>%
  count(n) %>%
  select("dias" = nn, num_notas = n)

#### dias sin notas concecutivos

dias_sin_notas_tbl <- bd %>%
  count(Fecha) %>%
  arrange(Fecha) %>%
  mutate(dias_sin_notas = Fecha - lag(Fecha))



# Analisis --------------------------------------------------------------------

# Inicio y fin periodo

inicio_periodo <- min(bd$Fecha)
fin_periodo <- max(bd$Fecha)

# Total de notas

total_notas <- contar_notas_medios(bd) %>%
  pull(total_notas)

#Total de medios

total_medios <- contar_notas_medios(bd) %>%
  pull(total_medios)

# TipoNota con mayor porcentaje

tiponota_max_per <- calcular_n_pp(bd,TipoNota) %>%
  summarise(maximo = porcentaje[which.max(porcentaje)]) %>%
  pull()

tiponota_max <- calcular_n_pp(bd,TipoNota) %>%
  summarise(maximo = TipoNota[which.max(porcentaje)]) %>%
  pull()

# contar por tipo de medio y calificación

bd%>%
  group_by(Calificación) %>%
  count(TipoMedio)

# porcentaje positivo, negativo, neutro

pp_neutro <- calcular_n_pp(bd,Calificación) %>%
  filter(Calificación == "Neutro") %>%
  pull(porcentaje)

pp_positivo <- calcular_n_pp(bd,Calificación) %>%
  filter(Calificación == "Positivo") %>%
  pull(porcentaje)

pp_negativo <- calcular_n_pp(bd,Calificación) %>%
  filter(Calificación == "Negativo") %>%
  pull(porcentaje)

# numero de notas por medio

tbl_tipomedio <- calcular_n_pp(bd, TipoMedio) %>%
  select(TipoMedio,
         "Total" = n,
         "Porcentaje" = porcentaje)

# Indice calificación

tbl_indice_tipomedio <- calcular_indice_calificiacion(bd, TipoMedio)



#TipoMedio ---------------------------------------------------------------

## dona

g_tipomedio <- tbl_tipomedio %>%
  mutate(csum = rev(cumsum(rev(Porcentaje))),
         pos = Porcentaje/2 + lead(csum, 1),
         pos = if_else(is.na(pos), Porcentaje/2, pos)) %>%
  ggplot(aes(x=2,
             y=Porcentaje,
             fill=TipoMedio)) +
  geom_bar(stat = "identity",
           position = position_stack(),
           width = 1) +
  scale_fill_brewer(palette = "Pastel1") +
  coord_polar("y")  +
  xlim(.01,2.5)+
  theme_void() +
#Plotear porcentajes
  ggrepel::geom_label_repel(aes(y = pos, label = scales::percent(Porcentaje)),
                            size = 4.5,
                            nudge_x = 1, show.legend = FALSE)

# medios más positivos

tbl_calificacion <- contar_variables_cruzadas(bd, TipoMedio, Calificación)


g_calificacion_tipomedio <- ggplot(tbl_calificacion) +
  aes(x = TipoMedio,
      fill = Calificación,
      weight = n) +
  geom_bar(position = "dodge") +
  scale_fill_manual(values = list(Negativo = "#42728E",
                                  Neutro = "#BCBFFF",
                                  Positivo = "#3FAFFF")) +
  coord_flip()+
  scale_y_continuous(limits = c(0, 185),
                     breaks = c(0, 10, 20, 50, 100, 180))+
  theme_bw()





# notas con mas impacto/costo ----


g_impacto_costo <- bd %>%
  select(Titulo,
         Costo,
         Impacto,
         Calificación) %>%

ggplot() +
 aes(x = Impacto, y = Costo, colour = Calificación, size = Impacto) +
 geom_point(shape = "circle") +
 scale_color_manual(values = list(Negativo = "#A50026", Neutro = "#8B8B8B", Positivo = "#868CFF")) +
 scale_x_continuous(trans = "log") +
 scale_y_continuous(trans = "log") +
 theme_bw()

# notas con mayor impacto

tbl_mayor_impacto <- bd %>%
  select(Titulo,
         Impacto) %>%
  arrange(-Impacto) %>%
  head(10)

# impacto mas positivo

tbl_mas_positivo <- bd %>%
  select(Titulo,
         Impacto,
         Calificación) %>%
  filter(Calificación == "Positivo") %>%
  arrange(-Impacto) %>%
  head(10)

# impacto negativo

tbl_mas_negativo <- bd %>%
  select(Titulo,
         Impacto,
         Calificación) %>%
  filter(Calificación == "Negativo") %>%
  arrange(-Impacto) %>%
  head(10)

# notas con mayorcosto

tbl_mayor_costo <- bd %>%
  select(Titulo,
         Costo) %>%
  arrange(-Costo) %>%
  head(10)

# costo por tipo de medio y clacificacion

tbl_tmedio_cal_costo <- bd %>%
  group_by(TipoMedio, Calificación) %>%
  summarise(costo = sum(Costo)) %>%
  arrange(-costo)

# Impacto por tipo de medio y clacificacion

tbl_tmedio_cal_imp <- bd %>%
  group_by(TipoMedio, Calificación) %>%
  summarise(Impacto = sum(Impacto)) %>%
  arrange(-Impacto)

# Fechas ---------------------------------------------------------------

# Promedio Notas por Día

promedio_notas_dia <- bd %>%
  count(Fecha) %>%
  complete(Fecha=seq(inicio_periodo,
                     fin_periodo,
                     by= "1 day"),
           fill=list(n=0)) %>%
  summarise(promedio = mean(n)) %>%
  pull()
gorantesj/mediaR documentation built on Jan. 26, 2022, 6:07 a.m.