Caricamento pachetti:

library(dplyr)
library(ggplot2)
library(reshape2)
library(readxl)

Caricamento dati:

# Dati da : https://ourworldindata.org/grapher/population-growth-rates 
population.growth.rates <- read.csv("population-growth-rates.csv")

countryContinent <- read.csv("countryContinent.csv")

# Dati da : https://ourworldindata.org/grapher/population-by-age-group-to-2100?country=~OWID_WRL
population.by.age.group.to.2100 <- read.csv("population-by-age-group-to-2100.csv")

# Dati da : https://ourworldindata.org/grapher/children-born-per-woman
children.born.per.woman <- read.csv("children-born-per-woman.csv")

# Dati da : https://population.un.org/wpp/Download/Standard/Migration/
Net_Number_Of_Migrants <- read_excel("WPP2019_MIGR_F02_NET_NUMBER_OF_MIGRANTS.xlsx", sheet = "ESTIMATES", range = "A17:U272")

# Popolazione italiana al primo gennaio 2022 da : http://dati.istat.it/Index.aspx?DataSetCode=DCIS_POPRES1#
DCIS_POPRES1_01062022081230389 <- read.csv("DCIS_POPRES1_01062022081230389.csv")
population.by.age.group.to.2100$population <- population.by.age.group.to.2100$X15.24.years.old..UNWPP..2017. + population.by.age.group.to.2100$X25.64.years.old..UNWPP..2017. +
  population.by.age.group.to.2100 $X65..years.old..UNWPP..2017. +
  population.by.age.group.to.2100$Under.5.years.old..UNWPP..2017. +
  population.by.age.group.to.2100$X5.14.years.old..UNWPP..2017.


colnames(population.by.age.group.to.2100)[4] <- "[15-24 anni]"
colnames(population.by.age.group.to.2100)[5] <- "[25-64 anni]"
colnames(population.by.age.group.to.2100)[6] <- "[oltre 65 anni]"
colnames(population.by.age.group.to.2100)[7] <- "[sotto 5 anni]"
colnames(population.by.age.group.to.2100)[8] <- "[5-14 anni]"

Net_Number_Of_Migrants[,8:21] <- lapply(Net_Number_Of_Migrants[,8:21], as.numeric)

Net_Number_Of_Migrants<-Net_Number_Of_Migrants[-which(is.na(Net_Number_Of_Migrants$`1950-1955`)),]

Domanda di ricerca

Si vuole evidenziare che la popolazione italiana incluse nascite, decessi e migrazioni tende a decrescere. In particolare dal 2019 al 2022 la popolazione è diminuita di -775.928 unità per cui al primo gennaio 2022 la popolazione risulta di 58.983.122 unità . Mentre la fascia degli ultra sessantacinquenni continua a crescere, le altre fasce d’età continuano a decrescere, trend che dovrebbe continuare fino a al 2040 secondo le previsioni ONU . Le regioni italiane dove diminuisce in maniera considerevole la popolazione sono Sicilia e Campania. Negli altri stati prevale invece un trend crescente della popolazione sebbene in Europa il tasso di crescita di molti paesi è minore di 0 . In particolare in Africa la popolazione cresce in maniera esagerata al punto che tutti gli stati africani hanno un tasso di crescita positivo della popolazione, quindi non sembra che ci sia una significativa correlazione positiva tra il benessere economico degli stati e la crescita della popolazione. Il numero di figli per donna rimane in Europa minore di 2, il chè non accade negli altri continenti. Dal 2014 in Italia è iniziato un notevole incremento dei migranti che sembra non incidere sulla crescita della popolazione complessiva, anche perchè i migranti sembrano prediligere stati come la Germania, Regno Unito, Russia come meta finale della loro migrazione.

Esplorazione dati

Italia:

df<-population.by.age.group.to.2100 %>%
  filter(Entity=="Italy") 

df$variable <- ifelse(df$Year>2017,"previsione","serie storica")

df %>%
  ggplot(aes(Year,population/1000000, colour=variable)) +
  geom_line()+
  geom_vline(xintercept = 2017)+
  scale_x_continuous(breaks = seq(1950,2100,10))+
  scale_y_continuous(breaks = seq(45,60,1))+
  theme(axis.text.x = element_text(angle=45,hjust=1))+
  xlab("Anno")+
  ylab("Popolazione")+
  ggtitle("Popolazione italiana in milioni dal 1950 al 2100", subtitle = "incluse nascite, decessi, migrazioni")

df1 <- melt(df[,-c(1:2,9:10)], id="Year")


df1 %>%
  ggplot(aes(Year,value/1000000, colour=variable))+
  geom_line()+
  geom_vline(xintercept = 2017)+
  scale_x_continuous(breaks = seq(1950,2100,10))+
  scale_y_continuous(breaks = seq(0,35,2))+
  theme(axis.text.x = element_text(angle=45,hjust=1))+
  xlab("Anno")+
  ylab("Popolazione")+
  ggtitle("Popolazione italiana in milioni dal 1950 al 2100 ", subtitle = "per fasce d'età incluse nascite, decessi, migrazioni con previsione dal 2017 in poi")

df<-DCIS_POPRES1_01062022081230389 %>%
filter(Territorio %in% c("Abruzzo","Basilicata","Calabria","Campania","Emilia-Romagna","Friuli-Venezia Giulia","Lazio", "Liguria" ,"Lombardia","Marche","Molise","Piemonte","Reggio nell'Emilia","Sardegna","Sicilia","Toscana","Umbria","Valle d'Aosta / Vallée d'Aoste","Veneto","Provincia Autonoma Bolzano / Bozen","Provincia Autonoma Trento") , Sesso=="totale" , Stato.civile=="totale" , Età=="totale", TIME==2019) %>%
  select(Territorio,Value)

df1<-DCIS_POPRES1_01062022081230389 %>%
filter(Territorio %in% c("Abruzzo","Basilicata","Calabria","Campania","Emilia-Romagna","Friuli-Venezia Giulia","Lazio", "Liguria" ,"Lombardia","Marche","Molise","Piemonte","Reggio nell'Emilia","Sardegna","Sicilia","Toscana","Umbria","Valle d'Aosta / Vallée d'Aoste","Veneto","Provincia Autonoma Bolzano / Bozen","Provincia Autonoma Trento") , Sesso=="totale" , Stato.civile=="totale" , Età=="totale", TIME==2022) %>%
  select(Territorio,Value)

df2<- data.frame(Regione=df$Territorio,Incremento=df1$Value-df$Value)

df2 <- df2[-2,]

cat("Dal 2019 al 2022 la popolazione italiana è diminuita di", sum(df2$Incremento),"unità\n")
## Dal 2019 al 2022 la popolazione italiana è diminuita di -775928 unità
df2 %>%
  mutate(Regione=reorder(Regione,Incremento , decreasing=TRUE)) %>%
  ggplot(aes(Regione,Incremento, fill=Regione ))+
  geom_bar(stat = "identity")+
  geom_text(aes(label=Incremento), hjust=0, size=2)+
  coord_flip()+
  guides(fill="none")

Tasso di crescita della popolazione

colnames(countryContinent)[3] <- "Code"

df1<-countryContinent %>%
  select(Code,continent)

population.growth.rates <- merge(population.growth.rates,df1, by="Code")
df<-population.growth.rates %>%
  filter(Year==2020) %>%
  select(Entity,Estimates..1950...2020..Annually.interpolated.demographic.indicators...Population.growth.rate..percentage., continent)

variable <- ifelse(df$Estimates..1950...2020..Annually.interpolated.demographic.indicators...Population.growth.rate..percentage.>0,"in aumento","in diminuzione")

df<- cbind(df,variable)

colnames(df)[2]<-"Tasso di crescita"
colnames(df)[1] <- "region"

world_map <- map_data("world")
df1 <- left_join(df, world_map, by = "region")

df1 %>%
  ggplot(aes(long, lat, group = group))+
  geom_polygon(aes(fill =`Tasso di crescita`  ), color = "white")+
  scale_fill_viridis_c(option = "C", direction = -1)+
  ggtitle("Tasso di crescita della popolazione nel mondo")

for (c in levels(as.factor(df$continent))) {
g<-  df %>%
  filter(continent==c) %>%
  mutate(region=reorder(region,`Tasso di crescita`))  %>%
  ggplot(aes(region,`Tasso di crescita`, fill=variable))+
  geom_bar(stat="identity")+
  coord_flip()+
 geom_text(aes(label=`Tasso di crescita`), hjust=0, size=2)+
  ylab("Tasso di crescita") +
  xlab("stati") +
  ggtitle(paste("Tasso di crescita della popolazione in",c) ,subtitle = "in aumento o diminuzione nel 2020")

print(g)
  
}

Numero di figli per donna

colnames(countryContinent)[3] <- "Code"

df1<-countryContinent %>%
  select(Code,continent)

children.born.per.woman <- merge(children.born.per.woman ,df1, by="Code")
df<-children.born.per.woman %>%
  filter(Year==2019) %>%
  select(Entity,Fertility.rate..Select.Gapminder..v12...2017., continent)

variable <- ifelse(df$Fertility.rate..Select.Gapminder..v12...2017.>2,"> 2","< 2")

df<- cbind(df,variable)

colnames(df)[2]<-"Figli per donna"
colnames(df)[1] <- "region"

world_map <- map_data("world")
df1 <- left_join(df, world_map, by = "region")

df1 %>%
  ggplot(aes(long, lat, group = group))+
  geom_polygon(aes(fill =`Figli per donna`  ), color = "white")+
  scale_fill_viridis_c(option = "C", direction = -1)+
  ggtitle("Figli per donna nel mondo")

for (c in levels(as.factor(df$continent))) {
g<-  df %>%
  filter(continent==c) %>%
  mutate(region=reorder(region,`Figli per donna`))  %>%
  ggplot(aes(region,`Figli per donna`, fill=variable))+
  geom_bar(stat="identity")+
  coord_flip()+
 geom_text(aes(label=`Figli per donna`), hjust=0, size=2)+
  ylab("Figli per donna") +
  xlab("stati") +
  ggtitle(paste("Figli per donna in",c,"nel 2019") )

print(g)
  
}

Numero netto di migranti

df <- Net_Number_Of_Migrants %>%
  filter(`Region, subregion, country or area *`=="Italy") %>%
  select(3,8:21)

df <- melt(df,id ="Region, subregion, country or area *")

#df$variable <- as.numeric(df$variable)
df %>%
  ggplot(aes(seq(1955,2020,5),value))+
  geom_line(colour="red")+
  geom_point()+
  geom_text(aes(label=value), vjust=-0.5, size=2)+
  scale_x_continuous(breaks = seq(1950,2020,5))+
  scale_y_continuous(breaks = seq(-600,1600,100))+
  theme(axis.text.x = element_text(angle=45,hjust=1))+
  xlab("Anno")+
  ylab("Numero netto di migranti")+
  ggtitle("Numero netto di migranti in migliaia in Italia dal 1950 al 2020")

df <-Net_Number_Of_Migrants %>%
  filter(`Country code` %in% countryContinent$country_code) %>%
  select(`Country code`,`Region, subregion, country or area *`,`2015-2020`)

df1<-countryContinent %>%
  select(country_code,continent)

colnames(df)[2] <- "Country"
colnames(df1)[1] <- "Country code"

df <- merge(df,df1, by="Country code")

df$variable <- ifelse(df$`2015-2020`>0,"in aumento", "in diminuzione")
for (c in unique(df$continent)) {
  g<-df %>%
      filter(continent==c) %>%
      mutate(Country=reorder(Country,`2015-2020`)) %>%
      ggplot(aes(Country,`2015-2020`, fill=variable))+
      geom_bar(stat = "identity")+
      coord_flip()+
      geom_text(aes(label=`2015-2020`), hjust=0, size=2)+
  ylab("Numero netto di migranti") +
  xlab("Stati") +
  ggtitle(paste("Numero netto di migranti in",c) ,subtitle = "in aumento o diminuzione tra il 2015 e il 2020")

  
  print(g)
}