In [186]:
import numpy as np, pandas as pd
from IPython.display import HTML

Studio Popolazione e mortalità infantile

Prendiamo il database generale dalla 'World Bank Open Data', un database che riguarda tutti i Paesi e le zone strategiche del mondo, per una serie di indicatori che vanno dal 1960 al 2016.

Selezioniamo l'indicatore relativo alla Popolazione.
Vediamo sotto le prime cinque zone strategiche del database e la corrispondente popolazione dal 1960 al 2016.

In [187]:
popTot = df2[df2['Indicator Name']=='Population, total']
popTot = popTot.reindex(columns = popTot.columns[:-2])
popTot.head()
Out[187]:
Indicator Name 1960 1961 1962 1963 1964 1965 1966 1967 1968 ... 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016
Country Name
Arab World Population, total 92490932.00 95044497.00 97682294.00 100411076.00 103239902.00 106174988.00 109230593.00 112406932.00 115680165.00 ... 331653797.00 339825483.00 348145094.00 356508908.00 364895878.00 373306993.00 381702086.00 390043028.00 398304960.00 406452690.00
Caribbean small states Population, total 4198307.00 4277802.00 4357746.00 4436804.00 4513246.00 4585777.00 4653919.00 4718167.00 4779624.00 ... 6851221.00 6895315.00 6939534.00 6984096.00 7029022.00 7074129.00 7118888.00 7162679.00 7204948.00 7245472.00
Central Europe and the Baltics Population, total 91401583.00 92237118.00 93014890.00 93845749.00 94722599.00 95447065.00 96148635.00 97043587.00 97882394.00 ... 105504531.00 105126686.00 104924372.00 104543801.00 104174038.00 103935318.00 103713726.00 103496179.00 103257751.00 102991323.00
Early-demographic dividend Population, total 979287407.00 1002523576.00 1026586722.00 1051414973.00 1077037307.00 1103433059.00 1130587356.00 1158571169.00 1187273756.00 ... 2778276175.00 2821797496.00 2865439651.00 2909410986.00 2953406021.00 2997066325.00 3040700765.00 3084236443.00 3127578757.00 3170657660.00
East Asia & Pacific Population, total 1039944591.00 1043546746.00 1058028198.00 1083802302.00 1109204182.00 1135650893.00 1165517897.00 1194424325.00 1223721287.00 ... 2162102842.00 2177421109.00 2192351452.00 2207154891.00 2221934234.00 2237082761.00 2252310372.00 2267745316.00 2283107673.00 2298727229.00

5 rows × 58 columns

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.

In [188]:
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
Out[188]:
Incremento Popolazione 1960-2016
Country Name
World 4411866832.00
Low & middle income 3976522496.00
Middle income 3471919983.00
Early-demographic dividend 2191370253.00
Lower middle income 2061351758.00
Upper middle income 1410568225.00
East Asia & Pacific 1258782638.00
South Asia 1194558048.00
South Asia (IDA & IBRD) 1194558048.00
Late-demographic dividend 1167345130.00
East Asia & Pacific (excluding high income) 1159342799.00
East Asia & Pacific (IDA & IBRD countries) 1145374630.00
India 874690746.00
Sub-Saharan Africa 804626738.00
Sub-Saharan Africa (IDA & IBRD countries) 804626738.00
Sub-Saharan Africa (excluding high income) 804573761.00
Least developed countries: UN classification 738645729.00
China 711595000.00
Pre-demographic dividend 690656262.00
Heavily indebted poor countries (HIPC) 582107396.00
Low income 504602513.00
OECD members 501163511.00
High income 435344336.00
Latin America & Caribbean 417234015.00
Latin America & the Caribbean (IDA & IBRD countries) 411177301.00
Latin America & Caribbean (excluding high income) 403847931.00
Fragile and conflict affected situations 383870950.00
Post-demographic dividend 347946104.00
Middle East & North Africa 331231415.00
Arab World 313961758.00
Middle East & North Africa (excluding high income) 275881289.00
Middle East & North Africa (IDA & IBRD countries) 271329723.00
Europe & Central Asia 244600894.00
Indonesia 173322941.00
North America 160833084.00
Pakistan 148295183.00
Europe & Central Asia (IDA & IBRD countries) 146651305.00
United States 142456513.00
Nigeria 140851828.00
Europe & Central Asia (excluding high income) 138318668.00
Brazil 135445311.00
Bangladesh 114751813.00
European Union 101862469.00
Mexico 89366311.00
Ethiopia 80251918.00
Philippines 77047197.00
Euro area 75365845.00
Egypt, Arab Rep. 68692148.00
Congo, Dem. Rep. 63487902.00
Vietnam 61898443.00

Per quanto riguarda la popolazione italiana, dal 1960 al 2016 è aumentata di piu' di 10 milioni. Un incremento del 20%.

In [29]:
print('Incremento popolazione italiana 1960-2016 :', f_1960_2016(popTot).sort_values(ascending=False)['Italy'])
Incremento popolazione italiana 1960-2016 : 10427798.0

Qui sotto abbiamo la conferma che ci fa vedere l'andamento anno per anno della nostra nazione.

In [30]:
popTot.loc['Italy'].to_frame().T
Out[30]:
Indicator Name 1960 1961 1962 1963 1964 1965 1966 1967 1968 ... 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016
Italy Population, total 50199700.00 50536350.00 50879450.00 51252000.00 51675350.00 52112350.00 52519000.00 52900500.00 53235750.00 ... 58438310.00 58826731.00 59095365.00 59277417.00 59379449.00 59539717.00 60233948.00 60789140.00 60730582.00 60627498.00

1 rows × 58 columns

In [31]:
print('Italy: 1960->',popTot.loc['Italy']['1960'],' 2016->',popTot.loc['Italy']['2016'])
Italy: 1960-> 50199700.0  2016-> 60627498.0

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.

In [32]:
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.


Questa tabella ci mostra in maniera evidente come il mondo arabo sia la regione che piu' è aumentata in termini relativi.
A seguire è la zona africana centrale quella che ha visto un maggior incremento relativo della popolazione.
Uganda, Nigeria, Kenya, hanno una popolazione del 500% in piu' rispetto al 1960.
Molto piu' in basso troviamo l'Europa nel suo complesso, in cui la popolazione è aumentata del 25% rispetto al 1960.

In [184]:
deltanew = deltaperc(popTot).sort_values(ascending = False).to_frame().rename(columns={0:'Tasso di incremento 1960-2016'})
deltanew.head(30)
Out[184]:
Tasso di incremento 1960-2016
Country Name
United Arab Emirates 99.07
Qatar 53.23
Kuwait 14.03
Djibouti 10.27
Jordan 9.14
Bahrain 7.77
Oman 7.02
Saudi Arabia 6.90
Cayman Islands 6.73
St. Martin (French part) 6.47
Cote d'Ivoire 5.66
Uganda 5.11
Niger 5.10
Turks and Caicos Islands 5.10
Kenya 4.98
Andorra 4.76
Gambia, The 4.54
Tanzania 4.52
Northern Mariana Islands 4.48
Zambia 4.45
Yemen, Rep. 4.33
Sudan 4.25
Somalia 4.20
Brunei Darussalam 4.18
Congo, Dem. Rep. 4.16
Angola 4.11
Iraq 4.10
Solomon Islands 4.09
Mauritania 4.01
Malawi 4.00

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)

In [34]:
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'])
Emirati Arabi: 1960-> 92634.0  2016-> 9269612.0
Qatar: 1960-> 47384.0  2016-> 2569804.0

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.

In [35]:
import matplotlib.pyplot as plt

index = pd.to_datetime(popTot.loc['World'][1:].index)
In [73]:
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.

In [74]:
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()
             World        China        India
1960 3032160395.00 667070000.00 449480608.00
1961 3073368588.00 660330000.00 458494963.00
1962 3126509808.00 665770000.00 467852537.00
1963 3191786431.00 682335000.00 477527970.00
1964 3257459749.00 698355000.00 487484535.00

             World         China         India
2012 7099548883.00 1350695000.00 1263065852.00
2013 7185078354.00 1357380000.00 1278562207.00
2014 7271228017.50 1364270000.00 1293859294.00
2015 7357369754.00 1371220000.00 1309053980.00
2016 7444027227.00 1378665000.00 1324171354.00

Passiamo ora allo studio della mortalita' infantile.


Se possiamo ipotizzare che l'incremento relativo enorme della popolazione del mondo arabo sia conseguenza della valorizzazione delle loro risorse energetiche naturali come il petrolio, che hanno portato quei territori ad allinearsi alla ricchezza e allo stile di vita 'occidentale', trasformando alcuni citta' del mondo arabo in metropoli simili a quelle occidentali, per quanto riguarda l'incremento relativo della popolazione dell'Africa centrale, una possibile ipotesi è la diminuzione della mortalita' infantile.
I dati che abbiamo relativi a questo indicatore pero' coprono solo gli ultimi 7 anni.
Non molti, ma possiamo verificare se c'è comunque un trend netto in questi ultimi anni per quanto riguarda la mortalita' infantile in Africa.
Se questa diminuisce anno per anno, allora si spiega meglio perche' la popolazione africana cresce con un'accelerazione maggiore di quasi tutto il resto del mondo.
Prendiamo i dati sulla mortalita' infantile nel mondo dal 2009 al 2016.

In [38]:
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.

In [39]:
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()
Out[39]:
2009 2010 2011 2012 2013 2014 2015 2016
Country Name
Arab World 45.37 43.86 42.59 41.51 40.47 39.59 38.74 37.96
Caribbean small states 21.99 21.44 20.92 20.37 19.84 19.27 18.67 18.09
Central Europe and the Baltics 7.46 7.11 6.77 6.46 6.19 5.94 5.79 5.61
Early-demographic dividend 54.10 52.08 49.26 47.07 45.01 43.08 41.29 39.67
East Asia & Pacific 23.24 21.99 20.88 19.80 18.82 17.89 17.11 16.35

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.

In [40]:
peggioramenti = f_2009_2016(mort_rate).sort_values(ascending = False)
peggioramenti.head()
Out[40]:
Country Name
Dominica               13.70
Grenada                 1.40
Macedonia, FYR          1.30
Syrian Arab Republic    1.10
Malaysia                0.40
dtype: float64

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.

In [41]:
miglioramenti = f_2009_2016(mort_rate).sort_values()
miglioramenti.head(10)
Out[41]:
Country Name
Sierra Leone   -56.10
Angola         -45.80
Malawi         -40.60
Niger          -40.30
Burkina Faso   -39.00
Zimbabwe       -38.50
Cameroon       -34.80
Swaziland      -34.50
Mozambique     -34.40
Uganda         -33.40
dtype: float64

Andamento mortalita' infantile 2009-2016 in Sierra Leone:

In [42]:
mort_rate = mort_rate.reindex(columns = anni)

mort_rate.loc['Sierra Leone']
Out[42]:
2009   169.60
2010   159.70
2011   149.80
2012   140.40
2013   132.00
2014   124.90
2015   118.80
2016   113.50
Name: Sierra Leone, dtype: float64

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.

In [43]:
high_mort_rate = mort_rate.sort_values(by='2016', ascending = False)
In [44]:
high_mort_rate.head(20)
Out[44]:
2009 2010 2011 2012 2013 2014 2015 2016
Country Name
Somalia 163.70 159.20 154.40 149.80 145.20 140.70 136.70 132.50
Chad 153.70 149.70 145.70 141.80 138.10 134.50 130.90 127.30
Central African Republic 152.70 148.90 145.20 141.30 137.70 133.60 128.80 123.60
Sierra Leone 169.60 159.70 149.80 140.40 132.00 124.90 118.80 113.50
Mali 141.70 136.50 131.30 126.60 122.10 118.30 114.20 110.60
Nigeria 134.80 129.60 124.60 120.00 115.60 111.60 108.00 104.30
Benin 113.20 111.10 109.20 107.20 105.10 102.80 100.30 97.60
Congo, Dem. Rep. 119.60 115.60 111.70 108.10 104.40 101.00 97.60 94.30
Lesotho 103.40 99.70 98.00 97.60 98.50 98.30 97.90 93.50
Cote d'Ivoire 112.80 110.50 107.70 104.90 101.70 98.30 95.10 91.80
Niger 131.60 123.30 115.80 109.20 104.00 99.20 95.00 91.30
Equatorial Guinea 114.40 110.60 107.00 103.70 100.40 97.10 94.00 90.90
South Sudan 117.00 112.50 108.30 104.30 100.60 96.90 93.80 90.70
Guinea 113.40 109.40 105.60 102.00 98.60 95.20 92.00 89.00
Guinea-Bissau 119.90 114.00 108.50 103.50 99.00 94.90 91.30 88.10
Burkina Faso 123.60 116.40 109.60 103.30 97.70 92.80 88.50 84.60
Angola 128.30 119.40 111.00 103.50 96.80 91.20 86.50 82.50
Mauritania 100.20 97.40 94.60 91.90 89.40 86.70 83.90 81.40
Pre-demographic dividend 107.84 103.33 98.94 94.84 90.99 87.41 84.09 81.00
Cameroon 114.50 108.30 102.50 97.00 91.90 87.50 83.30 79.70

Nonostante la situazione ancora drammatica, nel 2009 la situazione era peggiore in ognuno di questi Stati.

In [45]:
high_mort_rate_09_16 = high_mort_rate[['2009','2016']]
high_mort_rate_09_16.head(15)
Out[45]:
2009 2016
Country Name
Somalia 163.70 132.50
Chad 153.70 127.30
Central African Republic 152.70 123.60
Sierra Leone 169.60 113.50
Mali 141.70 110.60
Nigeria 134.80 104.30
Benin 113.20 97.60
Congo, Dem. Rep. 119.60 94.30
Lesotho 103.40 93.50
Cote d'Ivoire 112.80 91.80
Niger 131.60 91.30
Equatorial Guinea 114.40 90.90
South Sudan 117.00 90.70
Guinea 113.40 89.00
Guinea-Bissau 119.90 88.10

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.

In [48]:
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});
Out[48]:
The raw code for this IPython notebook is by default hidden for easier reading. To toggle on/off the raw code, click here.

In [ ]: