import numpy as np, pandas as pd
from IPython.display import HTML
popTot = df2[df2['Indicator Name']=='Population, total']
popTot = popTot.reindex(columns = popTot.columns[:-2])
popTot.head()
Analizziamo quali sono le zone strategiche e i Paesi dove c'è stato un maggiore incremento della popolazione in valore assoluto tra il 1960 e il 2016.
Gli Stati in cui la popolazione è aumentata maggiormente in valore assoluto sono l'India (un incremento di 874,7 milioni negli ultimi 56 anni), seguita dalla Cina (un incremento di 711 milioni).
Terza l'Indonesia con un incremento di 173 milioni di persone.
Qui sotto vediamo le 50 zone geografiche/ gruppi socio-economici/ Stati, la cui popolazione è piu' aumentata tra il 1960 e il 2016.
pd.set_option('display.float_format', lambda x: '%.2f' % x)
def f_1960_2016(df):
return df['2016']-df['1960']
def highlight(s):
return ['background-color: lightgreen' if elem in ['India','China','Indonesia'] else '' for elem in s.index]
ordinePop = f_1960_2016(popTot).sort_values(ascending=False).head(50)
ordinePop = ordinePop.to_frame().rename(columns={0:'Incremento Popolazione 1960-2016'})
#ordinePop.style.set_properties(subset=['Incremento Popolazione 1960-2016'], **{'background-color': 'pink'})
styled = ordinePop.style.apply(highlight)
c = styled.format({'Incremento Popolazione 1960-2016': "{:.2f}"})
c
Per quanto riguarda la popolazione italiana, dal 1960 al 2016 è aumentata di piu' di 10 milioni. Un incremento del 20%.
print('Incremento popolazione italiana 1960-2016 :', f_1960_2016(popTot).sort_values(ascending=False)['Italy'])
Qui sotto abbiamo la conferma che ci fa vedere l'andamento anno per anno della nostra nazione.
popTot.loc['Italy'].to_frame().T
print('Italy: 1960->',popTot.loc['Italy']['1960'],' 2016->',popTot.loc['Italy']['2016'])
Andiamo a vedere ora quali sono i Paesi dove la popolazione è piu' aumentata in termini relativi e non assoluti.
Studiamo quindi l'andamento dei tassi di incremento della popolazione dal 1960 al 2016.
def deltaperc(df):
return (df['2016']-df['1960']) / df['1960']
N.B: i valori di cui sotto sono tassi. Quindi presta attenzione quando li converti in percentuali.
Gli Emirati Arabi sono ad. esempio lo Stato che piu' è aumentato in termini relativi, con un tasso pari a 99.
Cio' significa che la popolazione è aumentata del 9900 % rispetto al 1960.
deltanew = deltaperc(popTot).sort_values(ascending = False).to_frame().rename(columns={0:'Tasso di incremento 1960-2016'})
deltanew.head(30)
I due Stati dal maggior incremento relativo:
1) Gli Emirati Arabi, da 92mila abitanti del 1960, sono passati a piu' di 9 milioni nel 2016. (un po' come Ancona che diventa New York in soli 56 anni)
2) Il Qatar, da 47 mila abitanti del 1960, a piu' di 2 milioni e mezzo nel 2016. (un po' come Vasto che diventa Parigi)
print('Emirati Arabi: 1960->',popTot.loc['United Arab Emirates']['1960'],' 2016->',popTot.loc['United Arab Emirates']['2016'])
print('Qatar: 1960->',popTot.loc['Qatar']['1960'],' 2016->',popTot.loc['Qatar']['2016'])
Mettiamo ora su grafico l'andamento assoluto della popolazione relativo a:
1) Mondo
2) India
3) Cina
4) Indonesia
I primi 3 grafici sono scalati in miliardi (1e9 = 1 miliardo), mentre l'ultimo in centinaia di milioni (1e8 = 100 milioni).
Da notare che Cina e India, da sole, costituiscono circa 1/3 dell'intera popolazione mondiale.
import matplotlib.pyplot as plt
index = pd.to_datetime(popTot.loc['World'][1:].index)
fig, axes = plt.subplots(2,2, figsize=(18,18))
Grafici = []
Grafici.append(popTot.loc['World'][1:].to_frame().plot(x = index, ax = axes[0,0],grid=True, style='k+--'))
Grafici.append(popTot.loc['China'][1:].to_frame().plot(x = index, ax = axes[1,0],grid=True,style='r+--'))
Grafici.append(popTot.loc['India'][1:].to_frame().plot(x = index, ax = axes[0,1], grid=True,style='g+--'))#,logy=True))
Grafici.append(popTot.loc['Indonesia'][1:].to_frame().plot(x = index, ax = axes[1,1], grid=True,style='b+--'));#,logy=True))
lista = ['World','China','India','Indonesia']
for graph,elem in zip(Grafici,lista):
# if elem=='World':
# yticks = [2*10**9, 3*10**9, 4*10**9, 5*10**9, 6*10**9, 7*10**9, 8*10**9]
# yticks = [str(e) for e in yticks]
# graph.set_yticklabels(yticks, fontsize=14)
graph.set_title('{} '.format(elem), fontsize=20, color = 'k')
graph.tick_params(axis='both', labelsize = 14, labelcolor = 'k')
if elem == 'Indonesia':
graph.set_ylabel('Population (centinaia di mln)', fontsize=18, color = '#778899')
else:
graph.set_ylabel('Population (mld)', fontsize=18, color = '#778899')
Analizziamo ora invece i tassi di crescita annuali della popolazione mondiale, cinese, e indiana, dal 1960 al 2016.
Il grafico sotto mette in luce come il picco relativo di crescita ci sia stato negli anni '60-70.
In particolare in Cina, tra il 1962 e il 1963 la popolazione è aumentata di quasi il 3%.
I tassi annuali di crescita sia in Cina, sia in India, sia nel Mondo, sono stati superiori al 2% annuo fino a meta' degli anni '70.
In Cina dal 1970 i tassi annuali di crescita sono scesi in maniera evidente (pur tuttavia non essendo mai negativi: la popolazione quindi è sempre aumentata).
In India invece i tassi di crescita sono rimasti alti fino agli anni '80, quando hanno iniziato un graduale declino.
N.B: Tassi in declino ma positivi non significano che la situazione sia necessariamente sostenibile.
La popolazione sta crescendo anno dopo anno in termini assoluti, e questo fa si che anche un tasso di crescita molto piccolo, se positivo, comporta un aumento annuale importante in valore assoluto, visto che viene appunto applicato su un numero assoluto molto grande, qual è quello della popolazione.
fig, axes = plt.subplots(1,1, figsize=(12,12))
par = popTot.loc['World'][1:].to_frame().join([popTot.loc['China'][1:].to_frame(),popTot.loc['India'][1:].to_frame()])
par_perc = par.pct_change()
axes.set_title('Tassi di crescita annuali della popolazione', fontsize=18)
par_perc.plot(x = index, ax = axes, grid = True, style='o--');
#newticks = [str(i)+ ' mdl' for i in range(len(list(axes.get_yticklabels)))]
#newticks = [str(i)+ ' mld' for i in range(8)]
#axes.set_yticklabels(newticks)
print(par.head())
print()
print(par.tail())
print()
def f_2009_2016(df):
return df['2016']-df['2009']
La tabella sotto mostra le prime cinque regioni del database relative alla mortalita'infantile.
La statistica ci dice quanti bambini sotto i 5 anni muoiono su 1000 nascite.
mort_rate = df2[df2['Indicator Name']=='Mortality rate, under-5 (per 1,000)']
anni = ['2009','2010','2011','2012','2013','2014','2015','2016']
mort_rate = mort_rate.reindex(columns = anni)
mort_rate.head()
L'unico Paese nel Mondo che ha avuto un netto peggioramento rispetto al 2009 è la Repubblica Dominicana.
Su 1000 nascite, nel 2016 muoiono quasi 14 bambini in piu' rispetto al 2009.
peggioramenti = f_2009_2016(mort_rate).sort_values(ascending = False)
peggioramenti.head()
Se filtriamo invece gli Stati dove piu' si è abbassata la mortalita' infantile...i conti sembrano tornare.
I Paesi africano sono quelli dove piu' si è abbassata la mortalita' infantile negli ultimi 7 anni.
In Sierra Leone nel 2016, su 1000 nascite, muoiono 56 bambini in meno rispetto al 2009.
La mortalita' infantile quindi in Africa si sta abbassando molto, e cio' conferma la nostra ipotesi iniziale.
miglioramenti = f_2009_2016(mort_rate).sort_values()
miglioramenti.head(10)
Andamento mortalita' infantile 2009-2016 in Sierra Leone:
mort_rate = mort_rate.reindex(columns = anni)
mort_rate.loc['Sierra Leone']
Cio' non significa ovviamente che la situazione sia rosea in Africa. E' ancora la regione che presenta di gran lunga i piu' alti tassi di mortalita' infantile, nonostante gli evidenti miglioramenti degli ultimi 7 anni.
Sotto possiamo osservare gli Stati che hanno la mortalita' infantile piu' elevata nel mondo.
L'Africa ha ancora tassi molto alti.
high_mort_rate = mort_rate.sort_values(by='2016', ascending = False)
high_mort_rate.head(20)
Nonostante la situazione ancora drammatica, nel 2009 la situazione era peggiore in ognuno di questi Stati.
high_mort_rate_09_16 = high_mort_rate[['2009','2016']]
high_mort_rate_09_16.head(15)
Nell'ultimo grafico sotto sono presenti tutti gli Stati con la maggior mortalita' infantile.
Da sx verso dx gli Stati con la piu' alta mortalita' infantile nel 2016.
Si apprezza visivamente subito come nel 2009 la situazione fosse ancora piu' catastrofica.
ax = high_mort_rate_09_16.iloc[:11,:].plot.bar(figsize=(16,10), grid = True, alpha=0.7);
ax.set_ylabel('Under 5 deceduti su 1000 nati', fontsize=16)
ax.tick_params(axis='both', labelsize=14)
ax.set_xlabel('Country',fontsize=16);
ax.legend(prop={'size': 16});