if (fs::file_exists("europee2019_elettori_votanti_italia.csv")==FALSE) {
download.file(url = "https://dait.interno.gov.it/documenti/europee2019_elettori_votanti_italia.csv", destfile = "europee2019_elettori_votanti_italia.csv")
}
elettori_votanti_italia <- readr::read_delim(file = "europee2019_elettori_votanti_italia.csv", delim = ";")
scrutini_area_italia <- readr::read_delim(file = "europee2019_scrutini_area_italia.csv", delim = ";")
preferenze_italia <- readr::read_csv(file = "europee2019_preferenze_italia.csv")
comuni_scrutini <- read_csv(fs::path("..", "scrutini", "scrutini_comuni_full.csv"))
comuni_preferenze <- read_csv(fs::path("..", "scrutini", "scrutini_preferenze_comune_full.csv"))
colore_m <- "#6f2c91"
colore_f <- "#a6ce39"
comuni_scrutini %>%
mutate(combo = paste(desc_com, cod_com, desc_prov, cod_prov)) %>%
distinct(combo, .keep_all = TRUE) %>%
select(desc_com, desc_prov, ele_m, ele_f) %>%
mutate(genere = if_else(condition = ele_f>ele_m, true = "Più femmine", false = "Più maschi")) %>%
count(genere) %>%
ggplot(mapping = aes(x = genere, y = n, fill = genere)) +
geom_col() +
scale_fill_manual(values = c(colore_f, colore_m), guide = FALSE) +
scale_y_continuous(name = "Numero di comuni", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Comuni italiani in cui hanno diritto di voto più femmine o più maschi",
subtitle = "Nella maggior parte dei comuni italiani più donne che uomini hanno diritto di voto",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
comuni_scrutini %>%
mutate(combo = paste(desc_com, cod_com, desc_prov, cod_prov)) %>%
distinct(combo, .keep_all = TRUE) %>%
select(desc_com, desc_prov, vot_m, vot_f) %>%
mutate(genere = if_else(condition = vot_f>vot_m, true = "Più femmine", false = "Più maschi")) %>%
count(genere) %>%
ggplot(mapping = aes(x = genere, y = n, fill = genere)) +
geom_col() +
scale_fill_manual(values = c(colore_f, colore_m), guide = FALSE) +
scale_y_continuous(name = "Numero di comuni", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Comuni italiani in cui hanno votato più femmine o più maschi",
subtitle = "Nella maggior parte dei comuni italiani più uomini che donne\nhanno effettivamente paretecipato al voto",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
### versione animata:
comuni_diritto_votanti_animata <- bind_rows(`Comuni italiani in cui hanno diritto di voto più femmine o più maschi` =
comuni_scrutini %>%
mutate(combo = paste(desc_com, cod_com, desc_prov, cod_prov)) %>%
distinct(combo, .keep_all = TRUE) %>%
select(desc_com, desc_prov, ele_m, ele_f) %>%
mutate(genere = if_else(condition = ele_f>ele_m, true = "Più femmine", false = "Più maschi")) %>%
count(genere),
`Comuni italiani in cui hanno votato più femmine o più maschi` = comuni_scrutini %>%
mutate(combo = paste(desc_com, cod_com, desc_prov, cod_prov)) %>%
distinct(combo, .keep_all = TRUE) %>%
select(desc_com, desc_prov, vot_m, vot_f) %>%
mutate(genere = if_else(condition = vot_f>vot_m, true = "Più femmine", false = "Più maschi")) %>%
count(genere), .id = "tipo"
) %>%
ggplot(mapping = aes(x = genere, y = n, fill = genere)) +
geom_col() +
scale_fill_manual(values = c(colore_f, colore_m), guide = FALSE) +
scale_y_continuous(name = "Numero di comuni", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
theme(axis.text.x = element_text(family = "Roboto Condensed", size = 14)) +
transition_states(tipo, transition_length = 1, state_length = 3) +
ease_aes('quadratic-in-out') +
enter_drift(x_mod = -1) + exit_drift(x_mod = 1) +
labs(title = "{closest_state}")
animate(comuni_diritto_votanti_animata,
renderer = av_renderer('comuni_diritto_votanti_animata_1280_150.mp4'),
width = 1280,
height = 1280,
res = 150,
fps = 25,
nframes = 200)
comuni_diritto_votanti_animata
comuni_preferenze %>%
mutate(combo = paste(cogn, nome, sex, d_nasc, sep = "-")) %>%
distinct(combo, .keep_all = TRUE) %>%
count(sex) %>%
mutate(sex = factor(x = sex, levels = c("F", "M"), labels = c("Femmine", "Maschi"))) %>%
ggplot(mapping = aes(x = sex, y = n, fill = sex)) +
geom_col() +
scale_fill_manual(values = c(colore_f, colore_m), guide = FALSE) +
scale_y_continuous(name = "Numero di candidati", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Numero di candidati alle elezioni europee per genere",
subtitle = "Come imposto dalla legge elettorale, vi è bilanciamento di genere tra i candidati",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
comuni_preferenze %>%
group_by(sex) %>%
summarise(voti = sum(voti)) %>%
mutate(sex = factor(x = sex, levels = c("F", "M"), labels = c("Femmine", "Maschi"))) %>%
ggplot(mapping = aes(x = sex, y = voti, fill = sex)) +
geom_col() +
scale_fill_manual(values = c(colore_f, colore_m), guide = FALSE) +
scale_y_continuous(name = "Preferenze", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Numero di preferenze accordate per genere",
subtitle = "Candidati maschi hanno ottenuto quasi il doppio delle preferenze",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
df <-
comuni_preferenze %>%
mutate(salvini = if_else(condition = cogn == "SALVINI"&nome == "MATTEO",
true = "Salvini", false = if_else(condition = cogn == "MELONI"&nome == "GIORGIA",
true = "Meloni", false = sex))) %>%
group_by(sex, salvini) %>%
summarise(voti = sum(voti)) %>%
ungroup() %>%
mutate(sex = factor(x = sex, levels = c("F", "M"), labels = c("Femmine", "Maschi"))) %>%
mutate(salvini = factor(x = salvini, levels = c("Meloni", "F", "Salvini", "M"), labels = c("Meloni", "Femmine", "Salvini", "Maschi")))
df %>%
ggplot(mapping = aes(x = sex, y = voti, fill = salvini)) +
geom_col() +
scale_fill_manual(values = c("#d1e59b", colore_f, "#bf9ad1", colore_m), guide = FALSE) +
scale_y_continuous(name = "Preferenze", labels = scales::number) +
scale_x_discrete(name ="") +
annotate("text", x = "Maschi", y = df$voti[df$salvini=="Maschi"]+(df$voti[df$salvini=="Salvini"]/2), label = "Matteo Salvini", size = 6, family = "Roboto Condensed") +
annotate("text", x = "Femmine", y = df$voti[df$salvini=="Femmine"]+(df$voti[df$salvini=="Meloni"]/2), label = "Giorgia Meloni", size = 6, family = "Roboto Condensed") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Numero di preferenze accordate per genere",
subtitle = "Leader di partito candidati in più cirscoscrizioni hanno raccolto molte preferenze",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
salvini_meloni_tutte_animata <-
bind_rows(`Candidati maschi hanno ottenuto quasi il doppio delle preferenze` = df %>% group_by(sex) %>% summarise(voti = sum(voti)) %>% ungroup() %>% mutate(salvini = sex) %>%
add_case(sex = "Femmine", salvini = "Meloni", voti = 0) %>%
add_case(sex = "Maschi", salvini = "Salvini", voti = 0) %>%
mutate(text = c("", "", "Giorgia Meloni", "Matteo Salvini"), position = c(sum(df$voti[df$sex=="Maschi"]), sum(df$voti[df$sex=="Maschi"]), sum(df$voti[df$sex=="Femmine"]), sum(df$voti[df$sex=="Maschi"]))),
`Leader di partito candidati in più cirscoscrizioni hanno raccolto molte preferenze` = df %>%
mutate(text = c("", "Giorgia Meloni", "Matteo Salvini", ""), position = c(0, df$voti[df$salvini=="Femmine"]+(df$voti[df$salvini=="Meloni"]/2), df$voti[df$salvini=="Maschi"]+(df$voti[df$salvini=="Salvini"]/2), 0)),.id = "sottotitolo") %>%
mutate(salvini = factor(x = salvini, levels = c("Meloni", "Femmine", "Salvini", "Maschi"))) %>%
mutate(visibility = c(rep(x = 0, 5), 1, 1, 0)) %>%
ggplot(mapping = aes(x = sex, y = voti, fill = salvini)) +
geom_col() +
geom_text(mapping = aes(x = sex, y = position, label = text, alpha = visibility), size = 6, family = "Roboto Condensed") +
scale_fill_manual(values = c("#d1e59b", colore_f, "#bf9ad1", colore_m), guide = FALSE) +
scale_alpha(guide = FALSE, range = c(0, 1)) +
scale_y_continuous(name = "Preferenze", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Numero di preferenze accordate per genere",
subtitle = "{closest_state}",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet") +
transition_states(states = sottotitolo, transition_length = 1, state_length = 3)
salvini_meloni_tutte_animata
animate(salvini_meloni_tutte_animata,
renderer = av_renderer('salvini_meloni_tutte_animata_1280_150.mp4'),
width = 1280,
height = 1280,
res = 150,
fps = 25,
nframes = 200)
preferenze <- readr::read_csv(file = file.path("..", "scrutini",
"scrutini_preferenze_circoscrizione_full.csv"),
col_types = cols(d_nasc = col_character(),
cogn = col_character(),
nome = col_character(),
sex = col_character(),
voti = col_double(),
desc = col_character(),
desc_circ = col_character())) %>%
dplyr::transmute(cognome = cogn, nome, sex, voti, nascita = d_nasc, lista = desc) %>%
dplyr::mutate(nascita = as.numeric(stringr::str_extract(string = nascita, pattern = "[[:digit:]]{4}"))) %>%
dplyr::mutate(eta = 2019-nascita) %>%
dplyr::mutate(combo = paste(cognome, nome, nascita, lista, sep = "_")) %>%
dplyr::group_by(cognome, nome, nascita, lista, eta, sex, combo) %>%
summarise(voti = sum(voti)) %>%
ungroup()
preferenze %>%
ggplot(mapping = aes(x = eta, y = voti, colour = sex)) +
geom_point() +
geom_text_repel(
data = subset(preferenze, voti > 150000) %>%
mutate(full_name = paste(nome, cognome)),
aes(label = full_name),
size = 4,
box.padding = unit(0.2, "lines"),
point.padding = unit(0.5, "lines"),
color = "black",
min.segment.length = unit(0, 'lines'),
nudge_y = 20000, nudge_x = 10, family = "Roboto Condensed"
) +
scale_colour_manual(values = c(colore_f, colore_m)) +
scale_y_continuous(name = "", labels = scales::number) +
scale_x_continuous(name = "") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
theme(legend.position="none") +
labs(title = "Distribuzione delle preferenze per età e genere\n(nome incluso per i candidati con oltre 150 000 preferenze)",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
(da stabilire logica per quali nomi visualizzare)
preferenze %>%
ggplot(mapping = aes(x = eta, y = voti, colour = sex)) +
geom_point() +
scale_colour_manual(values = c(colore_f, colore_m)) +
scale_y_continuous(name = "", labels = scales::number) +
scale_x_continuous(name = "") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
theme(legend.position="none") +
labs(caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet") +
transition_filter(transition_length = 1, filter_length = 2,
fase1 = voti>0, fase2 = voti<500000, fase3 = voti<200000) +
ggtitle(
'Filter: {closest_filter}',
subtitle = '{closest_expression}'
) +
enter_fade() +
exit_fly(y_loc = 0) +
view_follow(fixed_x = TRUE)
comuni_preferenze %>%
mutate(combo = paste(desc_com, cod_com, desc_prov, cod_prov)) %>%
group_by(combo, sex) %>%
summarise(voti = sum(voti)) %>%
spread(key = sex, value = voti) %>%
mutate(genere = if_else(condition = `F`>`M`, true = "Più femmine", false = "Più maschi")) %>%
ungroup() %>%
count(genere) %>%
ggplot(mapping = aes(x = genere, y = n, fill = genere)) +
geom_col() +
scale_fill_manual(values = c(colore_f, colore_m), guide = FALSE) +
scale_y_continuous(name = "Numero di comuni", labels = scales::number) +
scale_x_discrete(name ="") +
theme_minimal(base_family = "Roboto Condensed", base_size = 14) +
labs(title = "Comuni in cui sono state accordate più preferenze\na femmine o a maschi",
subtitle = "Candidati maschi hanno ottenuto più preferenze in quasi tutti i comuni",
caption = "Fonte: Ministero degli Interni;\nElaborazione: EDJNet")
comuni_preferenze %>%
mutate(combo = paste(desc_com, desc_prov, sep = "-")) %>%
group_by(combo, sex) %>%
summarise(voti = sum(voti)) %>%
spread(key = sex, value = voti) %>%
mutate(genere = if_else(condition = `F`>`M`, true = "Più femmine", false = "Più maschi")) %>%
arrange(genere, desc(F))
## # A tibble: 7,915 x 4
## # Groups: combo [7,915]
## combo F M genere
## <chr> <dbl> <dbl> <chr>
## 1 PISA-PISA 11391 10931 Più femmine
## 2 CASCINA-PISA 6169 3631 Più femmine
## 3 SPOLETO-PERUGIA 5087 5062 Più femmine
## 4 SCANDICCI-FIRENZE 3641 3422 Più femmine
## 5 ALBENGA-SAVONA 2984 2972 Più femmine
## 6 CASTEL SAN GIORGIO-SALERNO 2737 2192 Più femmine
## 7 SANTA TERESA DI RIVA-MESSINA 2373 2040 Più femmine
## 8 TRASACCO-L'AQUILA 2148 2080 Più femmine
## 9 PONTEDERA-PISA 2146 1792 Più femmine
## 10 FOSSANO-CUNEO 2126 1874 Più femmine
## # … with 7,905 more rows