Terveysongelmien jakautuminen muuttuvassa maailmassa

Terveysongelmien jakautuminen muuttuvassa maailmassa#

The Global Burden of Disease on suuri maailmanlaajuinen tutkimus, jossa tutkittiin kuolleisuutta ja sairauksia arvioimalla erilaisia syitä ja ja riskitekijöitä. Tutkimuksen tulokset julkaistiin lääketieteen The Lancet -huippulehdessä vuonna 2021. Tähän datasettiin on kerätty tiedot eri riskitekijöiden mahdollisesti aiheuttamista kuolemista muutaman viimeisen vuosikymmenen ajalta.

Ilmanlaadulla on suuri vaikutus ihmisten terveyteen, ja ilmanlaatua voidaankin tarkastella erikseen myös ulkoilman sekä sisäilman osalta. On yleistä, että etenkin matalamman tulotason maissa ruuanlaitossa ja lämmityksessä käytetään kiinteitä polttoaineita, kuten satojätteitä, lantaa, puuta ja hiiltä, joiden polttaminen synnyttää aerosolipäästöjä ja siten heikentää sisäilmanlaatua. Näitä kiinteitä polttoaineita käytetään, koska parempia vaihtoehtoja joko ei ole saatavilla tai ne ovat liian kalliita.

Alkuperäiseen aineistoon pääsee kirjautumalla sivulle https://vizhub.healthdata.org/gbd-results/, mutta aineistoja saa myös visualisoitua näppärästi Our World in Data -sivuston kautta osoitteessa https://ourworldindata.org/grapher/number-of-deaths-by-risk-factor.

Tämän harjoitteen kannalta lähdemme kuitenkin kokeilemaan vähän omakätisemmin aineiston käsittelyä.

1. Työkalut#

# Aja tämä solu ensin.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

2. Aineisto#

Alla oleva GBD-aineisto kattaa noin vuodet 1990-2019.

data = pd.read_csv('https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/number-of-deaths-by-risk-factor.csv')
# Vilkaistaan yleisesti materiaalin muotoa.
data
Entity Code Year Outdoor air pollution High systolic blood pressure Diet high in sodium Diet low in whole grains Alcohol use Diet low in fruits Unsafe water source ... High body-mass index Unsafe sanitation No access to handwashing facility Drug use Low bone mineral density Vitamin A deficiency Child stunting Discontinued breastfeeding Non-exclusive breastfeeding Iron deficiency
0 Afghanistan AFG 1990 3169 25633 1045 7077 356 3185 3702 ... 9518 2798 4825 174 389 2016 7686 107 2216 564
1 Afghanistan AFG 1991 3222 25872 1055 7149 364 3248 4309 ... 9489 3254 5127 188 389 2056 7886 121 2501 611
2 Afghanistan AFG 1992 3395 26309 1075 7297 376 3351 5356 ... 9528 4042 5889 211 393 2100 8568 150 3053 700
3 Afghanistan AFG 1993 3623 26961 1103 7499 389 3480 7152 ... 9611 5392 7007 232 411 2316 9875 204 3726 773
4 Afghanistan AFG 1994 3788 27658 1134 7698 399 3610 7192 ... 9675 5418 7421 247 413 2665 11031 204 3833 812
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
6835 Zimbabwe ZWE 2015 2835 11483 1063 1354 4854 1820 4336 ... 5636 2879 4328 1068 407 138 730 21 734 282
6836 Zimbabwe ZWE 2016 2781 11663 1082 1383 4915 1854 4244 ... 5849 2798 4295 1042 415 101 674 20 700 275
6837 Zimbabwe ZWE 2017 2700 11819 1098 1409 4992 1883 4193 ... 6047 2744 4251 1007 424 82 629 19 678 267
6838 Zimbabwe ZWE 2018 2669 12002 1117 1439 5044 1917 4013 ... 6248 2608 4153 969 434 85 607 17 644 261
6839 Zimbabwe ZWE 2019 2680 12241 1140 1475 5156 1960 3914 ... 6475 2531 4113 963 438 81 585 16 631 259

6840 rows × 31 columns

Huomaamme, että aineistossa on tuhansia rivejä ja enemmän sarakkeita kuin mahtuu helposti näkyviin. Kaivetaan niiden sisällöt esiin helpommin luettaviksi listoiksi.

# Luetellaan uniikit alueet, jotka Entity-sarake sisältää.
data["Entity"].unique()
array(['Afghanistan', 'African Region (WHO)', 'Albania', 'Algeria',
       'American Samoa', 'Andorra', 'Angola', 'Antigua and Barbuda',
       'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan',
       'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus',
       'Belgium', 'Belize', 'Benin', 'Bermuda', 'Bhutan', 'Bolivia',
       'Bosnia and Herzegovina', 'Botswana', 'Brazil', 'Brunei',
       'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cameroon',
       'Canada', 'Cape Verde', 'Central African Republic', 'Chad',
       'Chile', 'China', 'Colombia', 'Comoros', 'Congo', 'Cook Islands',
       'Costa Rica', "Cote d'Ivoire", 'Croatia', 'Cuba', 'Cyprus',
       'Czechia', 'Democratic Republic of Congo', 'Denmark', 'Djibouti',
       'Dominica', 'Dominican Republic', 'East Asia & Pacific (WB)',
       'Eastern Mediterranean Region (WHO)', 'Ecuador', 'Egypt',
       'El Salvador', 'England', 'Equatorial Guinea', 'Eritrea',
       'Estonia', 'Eswatini', 'Ethiopia', 'Europe & Central Asia (WB)',
       'European Region (WHO)', 'Fiji', 'Finland', 'France', 'G20',
       'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Greece',
       'Greenland', 'Grenada', 'Guam', 'Guatemala', 'Guinea',
       'Guinea-Bissau', 'Guyana', 'Haiti', 'Honduras', 'Hungary',
       'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Ireland',
       'Israel', 'Italy', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan',
       'Kenya', 'Kiribati', 'Kuwait', 'Kyrgyzstan', 'Laos',
       'Latin America & Caribbean (WB)', 'Latvia', 'Lebanon', 'Lesotho',
       'Liberia', 'Libya', 'Lithuania', 'Luxembourg', 'Madagascar',
       'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta',
       'Marshall Islands', 'Mauritania', 'Mauritius', 'Mexico',
       'Micronesia (country)', 'Middle East & North Africa (WB)',
       'Moldova', 'Monaco', 'Mongolia', 'Montenegro', 'Morocco',
       'Mozambique', 'Myanmar', 'Namibia', 'Nauru', 'Nepal',
       'Netherlands', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria',
       'Niue', 'North America (WB)', 'North Korea', 'North Macedonia',
       'Northern Ireland', 'Northern Mariana Islands', 'Norway',
       'OECD Countries', 'Oman', 'Pakistan', 'Palau', 'Palestine',
       'Panama', 'Papua New Guinea', 'Paraguay', 'Peru', 'Philippines',
       'Poland', 'Portugal', 'Puerto Rico', 'Qatar',
       'Region of the Americas (WHO)', 'Romania', 'Russia', 'Rwanda',
       'Saint Kitts and Nevis', 'Saint Lucia',
       'Saint Vincent and the Grenadines', 'Samoa', 'San Marino',
       'Sao Tome and Principe', 'Saudi Arabia', 'Scotland', 'Senegal',
       'Serbia', 'Seychelles', 'Sierra Leone', 'Singapore', 'Slovakia',
       'Slovenia', 'Solomon Islands', 'Somalia', 'South Africa',
       'South Asia (WB)', 'South Korea', 'South Sudan',
       'South-East Asia Region (WHO)', 'Spain', 'Sri Lanka',
       'Sub-Saharan Africa (WB)', 'Sudan', 'Suriname', 'Sweden',
       'Switzerland', 'Syria', 'Taiwan', 'Tajikistan', 'Tanzania',
       'Thailand', 'Timor', 'Togo', 'Tokelau', 'Tonga',
       'Trinidad and Tobago', 'Tunisia', 'Turkey', 'Turkmenistan',
       'Tuvalu', 'Uganda', 'Ukraine', 'United Arab Emirates',
       'United Kingdom', 'United States', 'United States Virgin Islands',
       'Uruguay', 'Uzbekistan', 'Vanuatu', 'Venezuela', 'Vietnam',
       'Wales', 'Western Pacific Region (WHO)', 'World',
       'World Bank High Income', 'World Bank Low Income',
       'World Bank Lower Middle Income', 'World Bank Upper Middle Income',
       'Yemen', 'Zambia', 'Zimbabwe'], dtype=object)
# Samaten listataan kaikki sarakkeiden nimet, jotta tiedämme mitä alamme kutsumaan.
data.columns
Index(['Entity', 'Code', 'Year', 'Outdoor air pollution',
       'High systolic blood pressure', 'Diet high in sodium',
       'Diet low in whole grains', 'Alcohol use', 'Diet low in fruits',
       'Unsafe water source', 'Secondhand smoke', 'Low birth weight',
       'Child wasting', 'Unsafe sex', 'Diet low in nuts and seeds',
       'Household air pollution from solid fuels', 'Diet low in vegetables',
       'Low physical activity', 'Smoking', 'High fasting plasma glucose',
       'Air pollution (indoor and outdoor)', 'High body-mass index',
       'Unsafe sanitation', 'No access to handwashing facility', 'Drug use',
       'Low bone mineral density', 'Vitamin A deficiency', 'Child stunting',
       'Discontinued breastfeeding', 'Non-exclusive breastfeeding',
       'Iron deficiency'],
      dtype='object')

3. Analyysi#

Nyt tiedämme alustavasti, mitä maita ja suureita tarkastelemamme aineisto sisältää. Tältä pohjalta pystymme rajaamaan käsittelemäämme tietoa relevantteihin palasiin kulloisenkin mielenkiinnonkohteemme mukaan.

# Valitaan yksittäinen alue uudeksi muuttujaksi. Voit vaihtaa aluetta vapaasti.
# Tämän harjoituksen monet muut solut nojaavat tässä tehtyyn valintaan.
valinta = data.query('Entity == "European Region (WHO)"')

# Tässä korjataan alkuperäiset rivi-indeksit pois ihan vain estetiikan nimissä.
valinta = valinta.reset_index(drop = True)
valinta
Entity Code Year Outdoor air pollution High systolic blood pressure Diet high in sodium Diet low in whole grains Alcohol use Diet low in fruits Unsafe water source ... High body-mass index Unsafe sanitation No access to handwashing facility Drug use Low bone mineral density Vitamin A deficiency Child stunting Discontinued breastfeeding Non-exclusive breastfeeding Iron deficiency
0 European Region (WHO) NaN 1990 627103 2399430 312367 518009 502397 194493 13734 ... 947836 10984 12806 42225 53617 774 11598 669 14556 763
1 European Region (WHO) NaN 1991 630469 2425069 314023 527129 517232 198575 13177 ... 970124 10518 12236 45555 53913 682 10835 634 13604 736
2 European Region (WHO) NaN 1992 637868 2470630 320816 541122 544850 205295 12801 ... 1002549 10197 11909 49690 54223 624 10277 609 12942 701
3 European Region (WHO) NaN 1993 665431 2595573 335194 573947 591738 220395 12479 ... 1068318 9907 11825 55494 55692 578 9815 583 12411 676
4 European Region (WHO) NaN 1994 679027 2666193 343373 592942 628806 229482 12398 ... 1113091 9785 11757 60581 56235 540 9452 565 12009 660
5 European Region (WHO) NaN 1995 673676 2653770 340485 590665 636013 228384 11753 ... 1118495 9212 11421 63240 55798 501 8929 527 11349 636
6 European Region (WHO) NaN 1996 653195 2602671 332560 577267 624779 222702 10900 ... 1105445 8447 10915 63854 54641 459 8290 479 10570 576
7 European Region (WHO) NaN 1997 634043 2554006 324987 564840 612303 217502 10182 ... 1096584 7786 10433 62888 53518 403 7616 440 9864 540
8 European Region (WHO) NaN 1998 616400 2517902 316431 556326 612386 213877 9372 ... 1092381 7054 9918 62759 53266 348 6895 401 9086 503
9 European Region (WHO) NaN 1999 617364 2556348 317654 566083 636629 218825 8523 ... 1122999 6310 9475 67459 54229 292 6156 363 8296 497
10 European Region (WHO) NaN 2000 609463 2555912 316765 566970 659411 219791 7653 ... 1136318 5583 9000 70816 54864 244 5447 322 7488 461
11 European Region (WHO) NaN 2001 601779 2554402 315927 566321 677040 218833 6726 ... 1148543 4822 8515 71514 55734 192 4789 280 6681 418
12 European Region (WHO) NaN 2002 604099 2581706 318211 572631 703045 220084 5917 ... 1174565 4142 8185 72755 56809 169 4235 241 5933 389
13 European Region (WHO) NaN 2003 599531 2581306 318183 572008 725002 218842 5056 ... 1191221 3512 7807 75424 57585 141 3768 197 5257 357
14 European Region (WHO) NaN 2004 582291 2517004 310301 557985 731485 212341 4382 ... 1179492 3005 7328 77534 56810 94 3332 165 4720 320
15 European Region (WHO) NaN 2005 582573 2532746 313011 561388 759252 212854 3935 ... 1201556 2678 7124 83882 57498 74 2999 141 4293 309
16 European Region (WHO) NaN 2006 565710 2447899 301339 540365 731117 202266 3689 ... 1171432 2499 6769 83565 56942 63 2755 126 4009 291
17 European Region (WHO) NaN 2007 564401 2411406 295412 531363 714660 196496 3462 ... 1166489 2327 6510 84676 57343 55 2539 113 3743 281
18 European Region (WHO) NaN 2008 569086 2403801 293866 528964 708224 193478 3288 ... 1175383 2196 6329 86530 58248 50 2347 105 3502 273
19 European Region (WHO) NaN 2009 562023 2350346 287544 514846 676736 185572 3086 ... 1160346 2059 6068 84485 58054 47 2194 98 3289 278
20 European Region (WHO) NaN 2010 560071 2343907 286565 512171 662632 183019 2943 ... 1166499 1952 5900 84791 58898 44 2045 91 3083 247
21 European Region (WHO) NaN 2011 543822 2293863 279599 500596 627842 176545 2829 ... 1150167 1851 5731 83771 59320 41 1940 86 2937 238
22 European Region (WHO) NaN 2012 530307 2284427 278073 496883 610660 173793 2780 ... 1154882 1788 5699 83729 60756 36 1851 84 2842 218
23 European Region (WHO) NaN 2013 511590 2265253 274661 491663 595735 170820 2736 ... 1156417 1723 5673 82916 61742 33 1741 79 2695 219
24 European Region (WHO) NaN 2014 494212 2260280 275670 488361 588698 168830 2674 ... 1165547 1656 5662 85173 62569 30 1634 74 2548 222
25 European Region (WHO) NaN 2015 491367 2312963 280221 500986 594439 172750 2599 ... 1201639 1577 5721 87578 65053 26 1513 68 2369 219
26 European Region (WHO) NaN 2016 467151 2301978 278169 497345 583706 170686 2517 ... 1203119 1506 5637 87567 65635 24 1394 63 2212 210
27 European Region (WHO) NaN 2017 450446 2291072 276585 495289 574298 168768 2424 ... 1202591 1438 5499 85183 65636 22 1278 58 2047 204
28 European Region (WHO) NaN 2018 455291 2327370 280305 503720 577701 170613 2337 ... 1223266 1373 5415 84878 66717 21 1197 55 1939 199
29 European Region (WHO) NaN 2019 460353 2360893 283323 510860 583873 171882 2263 ... 1243937 1315 5357 84757 67787 19 1115 52 1834 195

30 rows × 31 columns

Yksinkertaisimmillaan haluaisimme jonkin kiinnostavan suureen kuvaajaksi. Otetaan yksi sarake tietoa ja kuvataan se aika-akselin kanssa.

plt.plot(valinta["Year"], valinta["Alcohol use"])
plt.show()
../_images/a5407fe8c60819525947bb1f44ee9807b403edf383bcb123fb8ee030ebf576f1.png

Hyvässä kuvaajassa on toki selitteet mukana, eli lisätään vähän tarkkuutta.

# Asetetaan mittasuhteet.
plt.figure(figsize = (10,5))

# Piirretään käyrät.
plt.plot(valinta["Year"], valinta["Alcohol use"], label = "Alkoholi", color = "green")

# Määritetään selitteet.
plt.title("Alkoholinkäytön aiheuttamat kuolemat valitulla alueella \n", fontsize = 20)
plt.ylabel("Kuolleet (n)", fontsize = 15)
plt.xlabel("\n Vuosi", fontsize = 15)
plt.legend(fontsize = 15)

# Näytetään tuotos.
plt.show()
../_images/70374af2aaad5d962aa6c41719b0b54a78465047a38d1946dd801bd70591ffcf.png

Meidän ei toki tarvitse rajoittua yhteen suureeseen, vaan voimme piirtää niitä useampia rinnakkain samaan kuvaan. Voimme samalla huomata tehokkaan tietojenkäsittelijän olevan hieman laiska, eli kirjoittavan koodiaan sellaisella tavalla jossa muutettavia nimiä tarvitsee muuttaa vain yhdessä kohtaa. Kirjoittamalla suureisiin eri sarakeotsikoiden nimiä voit helposti vaihtaa kuvaajan sisältöä.

# Valitaan tarkasteltavat suureet
suure1 = "Outdoor air pollution"
suure2 = "Household air pollution from solid fuels"
suure3 = "Air pollution (indoor and outdoor)"

a = valinta[suure1]
b = valinta[suure2]
c = valinta[suure3]
aika = valinta["Year"]

# Mittasuhteet.
plt.figure(figsize = (10,5))

# Piirrellään kuvaajia.
plt.plot(aika, a, label = suure1)
plt.plot(aika, b, label = suure2)
plt.plot(aika, c, label = suure3)

# Määritetään selitteet.
plt.title("Eri syistä seuranneet kuolemat valitulla alueella \n", fontsize = 20)
plt.ylabel("Kuolleet (n)", fontsize = 15)
plt.xlabel("\n Vuosi", fontsize = 15)
plt.legend(fontsize = 15)

plt.legend()
plt.show()
../_images/a20ca6797de115b1bcb5cd10a400ee4ed9c142a9a6226e154f693addd145ae18.png

Kuvaajan ohella saattaisimme haluta tarkastella yksittäisen vuoden tietoja helpommin luettavassa muodossa. Tätä varten jatkamme aineiston paloittelua ehtolauseilla, kuten vuosiluvun vastaavuudella.

# Vaihda tästä haluamasi vuosiluku.
vuosi = 1990

tiedot = valinta.query('Year == @vuosi')
tiedot
Entity Code Year Outdoor air pollution High systolic blood pressure Diet high in sodium Diet low in whole grains Alcohol use Diet low in fruits Unsafe water source ... High body-mass index Unsafe sanitation No access to handwashing facility Drug use Low bone mineral density Vitamin A deficiency Child stunting Discontinued breastfeeding Non-exclusive breastfeeding Iron deficiency
0 European Region (WHO) NaN 1990 627103 2399430 312367 518009 502397 194493 13734 ... 947836 10984 12806 42225 53617 774 11598 669 14556 763

1 rows × 31 columns

Yllä näkyvä rivi on yhä dataframe-muodossa. Repäistään rivi irti luettavaksi hieman yksinkertaisempana oliona.

# Otetaan halutulla rivillä olleet tiedot, nyt vain neljännestä sarakkeesta eteenpäin.
rivi = tiedot.iloc[0][3:]
print(rivi)
Outdoor air pollution                        627103
High systolic blood pressure                2399430
Diet high in sodium                          312367
Diet low in whole grains                     518009
Alcohol use                                  502397
Diet low in fruits                           194493
Unsafe water source                           13734
Secondhand smoke                             208726
Low birth weight                             106917
Child wasting                                 66633
Unsafe sex                                    49293
Diet low in nuts and seeds                   194706
Household air pollution from solid fuels     128366
Diet low in vegetables                       103560
Low physical activity                        181820
Smoking                                     1639113
High fasting plasma glucose                  879141
Air pollution (indoor and outdoor)           751288
High body-mass index                         947836
Unsafe sanitation                             10984
No access to handwashing facility             12806
Drug use                                      42225
Low bone mineral density                      53617
Vitamin A deficiency                            774
Child stunting                                11598
Discontinued breastfeeding                      669
Non-exclusive breastfeeding                   14556
Iron deficiency                                 763
Name: 0, dtype: object

Ylläoleva tuotos on sinänsä selkeä, mutta jos meillä olisi vaikkapa tuhat tarkempaa saraketta, meidän pitäisi silti järjestellä asioita uudelleen. Laitetaan tiedot suuruusjärjestykseen.

jarjestys = rivi.sort_values(ascending=False)
print(jarjestys)
High systolic blood pressure                2399430
Smoking                                     1639113
High body-mass index                         947836
High fasting plasma glucose                  879141
Air pollution (indoor and outdoor)           751288
Outdoor air pollution                        627103
Diet low in whole grains                     518009
Alcohol use                                  502397
Diet high in sodium                          312367
Secondhand smoke                             208726
Diet low in nuts and seeds                   194706
Diet low in fruits                           194493
Low physical activity                        181820
Household air pollution from solid fuels     128366
Low birth weight                             106917
Diet low in vegetables                       103560
Child wasting                                 66633
Low bone mineral density                      53617
Unsafe sex                                    49293
Drug use                                      42225
Non-exclusive breastfeeding                   14556
Unsafe water source                           13734
No access to handwashing facility             12806
Child stunting                                11598
Unsafe sanitation                             10984
Vitamin A deficiency                            774
Iron deficiency                                 763
Discontinued breastfeeding                      669
Name: 0, dtype: object

Erinomaista, olemme nyt siis saaneet listattua tietyn valitsemamme alueen tietyn vuoden tärkeimmät kuolemaan johtaneet riskitekijät. Mutta entä jos pyrkisimme automatisoimaan tällaista maksimiarvon etsimistä vielä hieman? Voisimme laittaa tietokoneen ilmoittamaan meille esimerkiksi seuraavaa:

print(f"Vuoden {vuosi} suurin vaikutus oli {str(rivi.max())}, kohdassa '{str(rivi.idxmax())}'.")
Vuoden 1990 suurin vaikutus oli 2399430, kohdassa 'High systolic blood pressure'.

Luvut saattavat olla myös joskus helpommin hahmotettavissa toisella tavoin kuvattuina.

plt.figure(figsize = (15,5))
ax = jarjestys.plot.barh()
ax.bar_label(ax.containers[0], padding = 3)
plt.title(f"Kuolemaan johtaneet riskitekijät valitulla alueella {vuosi} \n", fontsize = 20)
plt.xlabel("\n Kuolleisuus (miljoonaa ihmistä)", fontsize = (15))
plt.show()
../_images/4a178c85cc4b934de5c48854573dfe2add19f235b4b2b639aafb75182a9e475c.png

Tee itse!#

Voit vapaasti vaihdella ylläolevia alue- tai riskitekijäsarakevalintojen nimiä ja ajaa koodia uudelleen. Tai voit kirjoittaa omaa koodiasi, joko tähän alle tai lisäilemällä soluja halusi mukaan pitkin matkaa. Alla on muutamia kiinnostavia mahdollisuuksia tutkiskeltaviksi:

  • Vertaile yksittäisen valtion tuloksia omaan maanosaansa (Suomi vs. Eurooppa, Angola vs. Afrikka jne.).

  • Vertaile taloudellisesti kehittyneitä valtioita köyhempiin valtioihin (Saksa vs. Zimbabwe, Yhdysvallat vs. Intia jne.).

  • Vertaile ilmastoltaan erilaisten alueiden kärkitekijöitä toisiinsa (Norja vs. Irak).

  • Tutki miten yksittäisen valtion riskitekijöiden kehitys on kulkenut 30 vuoden aikana.

# Koodaile tähän. Lisää soluja saa plusnapista tai b-näppäimellä kun et ole aktiivisen solun sisällä.