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()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.