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"

In Italia ci sono 7 915 comuni

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") 

versione animata:

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")

versione animata:

(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") 

Pisa è l’unico capoluogo di provincia in cui candidati donna hanno ricevuto più preferenze

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