KESTÄVYYS - fysikaalisia pohdintoja ilmakehästämme #

v0.3 8.4.25 - TÄMÄ KIRJANEN KEHITTYY VIELÄ

Työn rakenne#

Yksinkertainen projekti noudattaa yleensä simppeliä perusrakennetta:

  1. Määritetään kiinnostuksen kohde (tutkimuskysymys)

  2. Etsitään aineistoa (datankeruu)

  3. Tarkastellaan löydöksiä (analyysi)

  4. Arvioidaan, kritisoidaan (tulokset ja johtopäätökset)

  5. Selitetään tarpeen mukaan käytetyt aineistot (lähteet)

1. Tutkimuskysymyksiä #

Ilmastonmuutoksen ymmärtäminen ja seuraaminen vaatii maailmanlaajuista verkostoa. Kansalliset säähavaintoasemat, tutkimuslaitokset, yliopistot ja monet muut instituutit ympäri planeettaa tarjoavat kattavan valikoiman jatkuvasti päivittyviä havaintoja käyttöömme.

Valitaan aluksi mitä suureita aiomme tarkastella. Lämpötila, hiilidioksidin ja metaanin määrä ilmassa, kasvuston hiilensidonta ja -vapautus, sade ja tuulet ja niin edelleen.

Miten valitut suureet käyttäytyvät ajan mukaan? Millaista vaihtelua niissä esiintyy? Miten mittauspaikan sijainti vaikuttaa tuloksiin?

2. Aineisto #

Otetaan pohjaksi hiilen kiertoon keskittyvän ICOS-projektin aineistoja. Tämän monikansallisen yhteisponnistuksen sivuilta löytyy korkealaatuisia mittauksia yhteisessä ja täten näppärästi vertailtavassa muodossa.

HUOM! Aineistoissa on kymmeniä tai satoja tuhansia rivejä havaintoja ja paljon erilaisia kryptisesti nimettyjä sarakkeita, joihin asemien mittaukset on tallennettu. Kunkin aineiston kohdalla on linkki portaalin sivulle, josta voi katsoa niin kutsutusta metadatasta mitä kunkin sarakkeen nimi tarkoittaa. Tutkimustyössä erilaisten selitteiden ja viitteiden tekeminen on tärkeää epäselvyyksien välttämiseksi.

2.1 Työkalut#

# Tuodaan tarvittavat työkalukirjastot.

import pandas as pd 
import matplotlib.pyplot as plt
import numpy as np

2.2 Data - Hyytiälä, Keski-Suomi#

# Metaanikonsentraatio
# Hyytiälä 67.2 m CH4 2016-12-13–2024-03-31
# https://meta.icos-cp.eu/objects/dRcSIk0KfrWgkxela5ZkYVwn

HyyCH4 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/HyyCH4.csv",
                     parse_dates = ["TIMESTAMP"])

# Hiilidioksidikonsentraatio
# Hyytiälä 67.2 m CO2 2016-12-13–2024-03-31
# https://meta.icos-cp.eu/objects/35BFfFD4PpruQ_BIJYfiiGyK

HyyCO2 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/HyyCO2.csv",
                     parse_dates = ["TIMESTAMP"])

# Säätiedot
# Hyytiälä 67.2 m ICOS ATC Meteo 2016-12-13–2024-03-31
# https://meta.icos-cp.eu/objects/ZZzQARNs53Ym2q1PNebsZoog

HyyMeteo = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/HyyMeteo.csv",
                       parse_dates = ["TIMESTAMP"])

# Virtaukset
# Hyytiälän FLUXNET-arkisto 1996-2020 sekä 2017-2024 kurantit mittaukset
# https://meta.icos-cp.eu/objects/4F2-9d7QV9A0SlL2pIaRxsJP
# https://meta.icos-cp.eu/objects/S0JKJttktErL42vbm13iioez

HyyGPP = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/HyyGPP.csv",
                     parse_dates = ["TIMESTAMP"])
HyyNEE = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/HyyNEE.csv",
                     parse_dates = ["TIMESTAMP"]) # tässä mukana myös lämpötila

2.3 Data - Utö, Meri-Suomi#

# Metaanikonsentraatio
# Atmospheric CH4 product, Utö - Baltic sea (57.0 m) 2012-03-23–2023-03-31
# https://meta.icos-cp.eu/objects/0QpkTakURubEz9vnSxkAIL3j

UtCH4 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/UtCH4.csv",
                    parse_dates = ["TIMESTAMP"])

# Hiilidioksidikonsentraatio
# Atmospheric CO2 product, Utö - Baltic sea (57.0 m) 2012-03-23–2023-03-31
# https://meta.icos-cp.eu/objects/Gfcb8rZBPxZQNJgm7qiwAcYz

UtCO2 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/UtCO2.csv",
                    parse_dates = ["TIMESTAMP"])

# Säätiedot
# Utö 58 m ICOS ATC Meteo 2018-12-12–2023-03-31
# https://meta.icos-cp.eu/objects/Q9In1Q-KI-HrxDHlrHytOCOd

UtMeteo = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/UtMeteo.csv",
                      parse_dates = ["TIMESTAMP"])

2.4 Data - Pallas ja Kenttärova, Pohjois-Suomi#

# Atmospheric CH4 product, Pallas (12.0 m)
# 2004-02-11–2023-03-31
# https://meta.icos-cp.eu/objects/ATqgqugIHsWAIXKZgEq2QkKz

PalCH4 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/PalCH4.csv",
                     parse_dates = ["TIMESTAMP"])

# Atmospheric CO2 product, Pallas (12.0 m)
# 1998-07-01–2023-03-31
# https://meta.icos-cp.eu/objects/sp32Z270ruWRU847KagynNOK

PalCO2 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/PalCO2.csv",
                     parse_dates = ["TIMESTAMP"])

# Fluxnet Product, Kenttarova
# 2017-12-31–2020-12-31
# https://meta.icos-cp.eu/objects/vXcr9a7FPpBA3_Tg5X2gT1xo

KenFlux1 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/KenFlux1.csv",
                       parse_dates = ["TIMESTAMP"])

# ETC L2 Fluxnet (half-hourly), Kenttarova
# 2019-12-31–2022-12-31
# https://meta.icos-cp.eu/objects/aqULa_iF0GDVTc4_AUb7h-nN

KenFlux2 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/KenFlux2.csv",
                       parse_dates = ["TIMESTAMP"])
/tmp/ipykernel_2073/2414738136.py:19: DtypeWarning: Columns (7,11,13,25) have mixed types. Specify dtype option on import or set low_memory=False.
  KenFlux1 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/KenFlux1.csv",

2.5 Data - Karlsruhe, Saksa#

# Metaanikonsentraatio
# Karlsruhe 60 m CH4 2016-12-16–2023-03-31
# https://meta.icos-cp.eu/objects/lO1I16P7gM7zloZbzWLSur02

KarlCH4 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/KarlCH4.csv",
                      parse_dates = ["TIMESTAMP"])

# Hiilidioksidikonsentraatio
# Karlsruhe 60 m CO2 2016-12-16–2023-03-31
# https://meta.icos-cp.eu/objects/vXTxJscV4CHFfaljH9KQ5pty

KarlCO2 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/KarlCO2.csv",
                      parse_dates = ["TIMESTAMP"])

# Säätiedot
# Karlsruhe 60 m ICOS ATC Meteo 2019-08-01–2023-03-31
# https://meta.icos-cp.eu/objects/rJGDmG0anqNeRrPyLBuog258

KarlMeteo = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/KarlMeteo.csv",
                        parse_dates = ["TIMESTAMP"])

2.6 Data - Castelporziano 2, Italia#

# Virtaukset
# Castelporziano ETC L2 Fluxnet 2020-12-31–2023-10-31
# https://meta.icos-cp.eu/objects/DZcO_1NvbH4wRqTcxnNVKd47

CasFlux = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/CasFlux.csv",
                      parse_dates = ["TIMESTAMP"])

# Säätiedot
# Castelporziano ETC L2 Meteo 2020-12-31–2023-10-31
# https://meta.icos-cp.eu/objects/b9jFmI9WtonRGMRRsWOeBQK9

CasMeteo = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/CasMeteo.csv",
                       parse_dates = ["TIMESTAMP"])
/tmp/ipykernel_2073/3475241156.py:5: DtypeWarning: Columns (11,13,25) have mixed types. Specify dtype option on import or set low_memory=False.
  CasFlux = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/CasFlux.csv",

2.7 Data - Izaña, Espanja (Teneriffa)#

# Metaanikonsentraatio
# Atmospheric CH4 product, Izaña (29.0 m) 1984-01-01–2024-03-31
# https://meta.icos-cp.eu/objects/mBZ45apJRKS_TXzbu9thbXQK

IzaCH4 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/IzaCH4.csv",
                     parse_dates = ["TIMESTAMP"])

# Hiilidioksidikonsentraatio
# Atmospheric CO2 product, Izaña (29.0 m) 2007-01-19–2024-03-31
# https://meta.icos-cp.eu/objects/GkP3sQtjFjjKD2eDKdezCL25

IzaCO2 = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/IzaCO2.csv",
                     parse_dates = ["TIMESTAMP"])

# Säähavainnot
# 1996-01-01-2024-12-21
# https://meteostat.net/en/station/60010
# (eri kohteesta haettu, koska ICOS-ajan tiedot ovat vielä hyvin lyhyet vaikka sääasemalla onkin pitkä historia)

IzaMet = pd.read_csv("https://raw.githubusercontent.com/opendata-education/Tyopajat/main/materiaali/data/IzaMet.csv",
                     parse_dates = ["date"])

3. Analyysi #

Lähdetään tarkastelemaan mitä aineistoissa on. Alla oleva esimerkki on tehty Hyytiälän havainnoista, mutta samoilla käskyillä pystyt tarkastelemaan muitakin asemia vaihtamalla sisään toisennimisiä muuttujia.

3.1 Vilkaisu aineistoihin#

# Katsotaan miltä muuttujiin tallennettu kama näyttää. 

HyyCO2
Stdev TIMESTAMP co2
0 -9.990 2016-12-13 00:00:00 NaN
1 -9.990 2016-12-13 01:00:00 NaN
2 -9.990 2016-12-13 02:00:00 NaN
3 -9.990 2016-12-13 03:00:00 NaN
4 0.011 2016-12-13 04:00:00 411.702
... ... ... ...
63966 0.238 2024-03-31 19:00:00 425.800
63967 0.101 2024-03-31 20:00:00 426.426
63968 0.264 2024-03-31 21:00:00 426.438
63969 0.614 2024-03-31 22:00:00 427.758
63970 0.375 2024-03-31 23:00:00 428.537

63971 rows × 3 columns

# Tehdään mahdollisimman yksinkertainen kuvaaja yhden sarakkeen tiedoista.

plt.plot(HyyCO2["TIMESTAMP"], HyyCO2["co2"])
plt.show()
../_images/e55a7613eba59dea61a664991aab616fbb5c410f564922d9b194132511aa41b9.png

Onko kuvaajassa havaittavissa toistuvia kuvioita? Mistä on kyse?

3.2 Yksityiskohtaisempi vilkaisu#

# Lisätään muotoilutermejä.

plt.figure(figsize = (20, 10))

plt.plot(HyyCO2["TIMESTAMP"], HyyCO2["co2"], label = "CO2", color = "green")

plt.ylabel("Hiilidioksidikonsentraatio ilmassa (µmol mol-1) \n", fontsize = 15)
plt.xlabel("\n Aika (vuosi)", fontsize = 15)
plt.title("CO2-fraktio ilmakehässä Hyytiälän SMEAR-asemalla 2017-2024 \n", fontsize = 20)
plt.legend(loc = "upper left", fontsize = 20)

plt.show()
../_images/0c413faba04e6810c9f977dea81714b367092de1aff52012effa2eaf04801fbc.png
# Laitetaan useampi suure näkyviin samaan aikaan.

plt.figure(figsize = (20, 10))

plt.subplot(311)
plt.plot(HyyCO2["TIMESTAMP"], HyyCO2["co2"], label = "CO2", c = "g")
plt.ylabel("Konsentraatio ilmassa \n (µmol mol-1) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.title("Molekyylifraktiot ilmakehässä Hyytiälän SMEAR-asemalla 2017-2024 \n", fontsize = 20)

plt.subplot(312)
plt.plot(HyyCH4["TIMESTAMP"], HyyCH4["ch4"], label = "CH4", c = "b")
plt.ylabel("Konsentraatio ilmassa \n (nmol mol-1) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.subplot(313)
plt.plot(HyyMeteo["TIMESTAMP"], HyyMeteo["AT"], label = "Lämpötila", c = "cyan")
plt.ylabel("Ilman lämpötila (°C) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.xlabel("\n Aika (vuosi)", fontsize = 15)
plt.show()
../_images/5a6b37984a78c1cd01d49d4c302f2f3c13da45fad3eae935f1284fbc05988a78.png

Riippuvatko kuvaajien suureet toisistaan? Onko niissä havaittavia yhteneväisyyksiä tai poikkeavuuksia?

# Toistetaan äskeinen myös kasvuston toiminnalle hieman pidemmältä ajalta. Lisätään nollaviiva selkeyttämään.

plt.figure(figsize = (20, 10))

plt.subplot(311)
plt.plot(HyyNEE["TIMESTAMP"], HyyNEE["NEE_VUT_REF"], label = "NEE", c = "g")
plt.axhline(y = 0, color = 'y', linestyle = 'dashed')
plt.ylabel("Ekosysteemin nettovaihtovuo \n (µmol m-2 s-1) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.title("Metsän hiilenkierto Hyytiälän SMEAR-asemalla 1996-2024 \n", fontsize = 20)

plt.subplot(312)
plt.plot(HyyGPP["TIMESTAMP"], HyyGPP["GPP_DT_VUT_REF"], label = "GPP DT", c = "b", alpha = 0.5)
plt.plot(HyyGPP["TIMESTAMP"], HyyGPP["GPP_NT_VUT_REF"], label = "GPP NT", c = "orange", alpha = 0.5)
plt.axhline(y = 0, color = 'y', linestyle = 'dashed')
plt.ylabel("CO2 bruttotuotto \n (µmol m-2 s-1) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.subplot(313)
plt.plot(HyyNEE["TIMESTAMP"], HyyNEE["TA_F"], label = "Lämpötila", c = "cyan")
plt.axhline(y = 0, color = 'y', linestyle = 'dashed')
plt.ylabel("Ilman lämpötila (°C) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.xlabel("\n Aika (vuosi)", fontsize = 15)
plt.show()
../_images/2db24b9f1b081d3a62ef4ab634d5d50c3125155b42bdb1fc72670b14242ba400.png

Näkyykö pitkässä sarjassa vaihtelua vuosien tai vuodenaikojen välillä?

3.3. Aineiston ymmärtäminen vaatii sen muokkaamista#

Kuvaajia tarkasteltaessa on hyvä huomioida mittausten määrä ja tiheys. Yllä olevat tiedot on kerätty automaattisesti tunneittain tai tiheämmin, mikä saattaa välillä johtaa hankaluuksiin kuvaajien lukemisessa piirtotiheyden vuoksi. Selkeyden nimissä on usein tarpeen jaotella, luokitella tai muutoin muokata alkuperäistä dataa sekä eristää sieltä nousevia tilastollisia muuttujia.

# Muokataan olemassaolevaa muuttujaa siten, että erotetaan tallennetusta aikaleimasta päivät, kellonajat sun muut omiksi
# sarakkeikseen. Tällöin on helpompaa leikellä aineistosta palasia, kuten "vain kesäkuukaudet" tai vastaavat.

# Esimerkiksi hiilidioksiditaulukkomme ensimmäisten kymmenen rivin sisältö oli:
print("HyyCO2 aluksi: ")
print(HyyCO2.head(10))

# Lisätään sarakkeet kaivamalla aikaleimasta tiedot kullekin riville.

HyyCO2['PVM'] = pd.to_datetime(HyyCO2['TIMESTAMP']).dt.date
HyyCO2['PVM'] = pd.to_datetime(HyyCO2['PVM'])                # Tässä korjataan date-tyyppi erilaiseksi aikaleimaksi.
HyyCO2['VUO'] = pd.to_datetime(HyyCO2['TIMESTAMP']).dt.year
HyyCO2['KK'] = pd.to_datetime(HyyCO2['TIMESTAMP']).dt.month
HyyCO2['VRK'] = pd.to_datetime(HyyCO2['TIMESTAMP']).dt.day
HyyCO2['TUN'] = pd.to_datetime(HyyCO2['TIMESTAMP']).dt.hour

print("HyyCO2 pienen muokkauksen jälkeen: ")
print(HyyCO2.head(10))
HyyCO2 aluksi: 
   Stdev           TIMESTAMP      co2
0 -9.990 2016-12-13 00:00:00      NaN
1 -9.990 2016-12-13 01:00:00      NaN
2 -9.990 2016-12-13 02:00:00      NaN
3 -9.990 2016-12-13 03:00:00      NaN
4  0.011 2016-12-13 04:00:00  411.702
5  0.185 2016-12-13 05:00:00  411.800
6  2.023 2016-12-13 06:00:00  414.534
7  0.222 2016-12-13 07:00:00  416.558
8  0.338 2016-12-13 08:00:00  416.367
9  0.401 2016-12-13 09:00:00  417.059
HyyCO2 pienen muokkauksen jälkeen: 
   Stdev           TIMESTAMP      co2        PVM   VUO  KK  VRK  TUN
0 -9.990 2016-12-13 00:00:00      NaN 2016-12-13  2016  12   13    0
1 -9.990 2016-12-13 01:00:00      NaN 2016-12-13  2016  12   13    1
2 -9.990 2016-12-13 02:00:00      NaN 2016-12-13  2016  12   13    2
3 -9.990 2016-12-13 03:00:00      NaN 2016-12-13  2016  12   13    3
4  0.011 2016-12-13 04:00:00  411.702 2016-12-13  2016  12   13    4
5  0.185 2016-12-13 05:00:00  411.800 2016-12-13  2016  12   13    5
6  2.023 2016-12-13 06:00:00  414.534 2016-12-13  2016  12   13    6
7  0.222 2016-12-13 07:00:00  416.558 2016-12-13  2016  12   13    7
8  0.338 2016-12-13 08:00:00  416.367 2016-12-13  2016  12   13    8
9  0.401 2016-12-13 09:00:00  417.059 2016-12-13  2016  12   13    9
# Kokeillaan kuukausikeskiarvojen laskemista.

KA = HyyCO2.groupby(["KK"]).mean(numeric_only = True)

print(KA["co2"])

k = ["tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo", "syys", "loka", "marras", "joulu"]

plt.figure(figsize = (20, 10))
plt.plot(k, KA["co2"], c = "y")
plt.scatter(k, KA["co2"], c = "red", label = "CO2")

plt.ylabel("Konsentraatio ilmassa (µmol mol-1) \n", fontsize = 15)
plt.xlabel("\n Aika (kuukausi)", fontsize = 15)
plt.title("Hiilidioksidifraktio ilmakehässä Hyytiälän SMEAR-asemalla, kuukausikeskiarvo 2017-2024 \n", fontsize = 20)
plt.legend(loc = "center right", fontsize = 15)

plt.show()
KK
1     424.377297
2     424.810247
3     423.362963
4     420.545571
5     417.881080
6     411.357302
7     406.461138
8     407.401265
9     412.127879
10    417.971593
11    424.054693
12    425.309426
Name: co2, dtype: float64
../_images/eb97608a3c7983a93236c260c314e90b476c82525bf2e59f87a55a22fc9a9ca7.png

Miltä keskiarvoistettu kuvaaja näyttää alkuperäisiin havaintoihin verrattuna?

# Pitkästä aineistosta voidaan havaita vuodenaikaisvaihtelua.
# Entäs lyhyemmällä ajalla, kuten yksittäisen vuorokauden aikana?

d = '2017-07-06'
pvm = HyyCO2.query("PVM == @d")

plt.figure(figsize = (20, 10))
plt.plot(pvm["TIMESTAMP"], pvm["co2"], c = "y")
plt.scatter(pvm["TIMESTAMP"], pvm["co2"], c = "red", label = "CO2")

plt.ylabel("Konsentraatio ilmassa (µmol mol-1) \n", fontsize = 15)
plt.xlabel("\n Aika (h)", fontsize = 15)
plt.title(f"Hiilidioksidifraktio ilmakehässä Hyytiälän SMEAR-asemalla, {d} \n", fontsize = 20)
plt.legend(loc = "center right", fontsize = 15)

plt.show()
/tmp/ipykernel_2073/3974219115.py:5: FutureWarning: The behavior of 'isin' with dtype=datetime64[ns] and castable values (e.g. strings) is deprecated. In a future version, these will not be considered matching by isin. Explicitly cast to the appropriate dtype before calling isin instead.
  pvm = HyyCO2.query("PVM == @d")
../_images/538ae1caf76baec4ee4adcde99bb31f3a65f68a91e8de2635683211b2de87490.png
# Tai tiettyjen päivämäärien välillä?
# Kokeile vaihtaa päivämääriä vaikkapa kahden päivän, viikon tai kuukauden ajalle.

a = '2017-07-07'
b = '2017-07-09'
vali = HyyCO2.query("PVM >= @a & PVM < @b")

plt.figure(figsize = (20, 10))
plt.plot(vali["TIMESTAMP"], vali["co2"], c = "y")
plt.scatter(vali["TIMESTAMP"], vali["co2"], c = "red", label = "CO2")

plt.ylabel("Konsentraatio ilmassa (µmol mol-1) \n", fontsize = 15)
plt.xlabel("\n Aika (h)", fontsize = 15)
plt.title(f"Hiilidioksidifraktio ilmakehässä Hyytiälän SMEAR-asemalla, {a} ja {b} välillä \n", fontsize = 20)
plt.legend(loc = "center right", fontsize = 15)

plt.show()
../_images/bed5178e51c7625f0fd970c054b5e073b60c00470492b30df4064ce1befb2bf0.png

Millaisia eroja löydät päivien välillä saman vuodenajan sisällä? Muuttuvatko päivävaihteluiden arvot tai muodot vuodenaikojen välillä?

3.4 Yhteyksien löytäminen vaatii useiden suureiden ja aineistojen vertailua#

# Päivittäiset CO2-tasot, lämpötilat, sademäärä, lyhytaaltosäteily, GPP?

3.5 Vertailu eri asemien välillä kertoo paikallisista eroista#

# Esimerkkinä Hyytiälä v. Izana

ala = "2016-01-01"
yla = "2024-06-01"

ala = pd.to_datetime(ala)
yla = pd.to_datetime(yla)

plt.figure(figsize = (20, 10))

ax1 = plt.subplot(211)
plt.plot(HyyCO2["TIMESTAMP"], HyyCO2["co2"], label = "Hyytiälä", c = "g", alpha = 0.5)
plt.plot(IzaCO2["TIMESTAMP"], IzaCO2["co2"], label = "Izana", c = "b", alpha = 0.5)
plt.ylabel("Konsentraatio ilmassa \n (µmol mol-1) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)
plt.xlim(ala, yla)

plt.title(f"CO2-pitoisuudet ja lämpötilat mitta-asemien ilmatilassa {ala} - {yla} \n", fontsize = 20)

plt.subplot(212, sharex = ax1)
plt.plot(HyyMeteo["TIMESTAMP"], HyyMeteo["AT"], label = "Hyytiälä", c = "cyan", alpha = 0.7)
plt.plot(IzaMet["date"], IzaMet["tavg"], label = "Izana", c = "red", alpha = 0.5)
plt.axhline(y = 0, color = 'y', linestyle = 'dashed')
plt.ylabel("Ilman lämpötila (°C) \n", fontsize = 10)
plt.legend(loc = "upper left", fontsize = 20)

plt.xlabel("\n Aika (vuosi)", fontsize = 15)
plt.show()
../_images/44e99a1096b58041921f1150e77d3ed12f13f0bd46822eda948be8a1602d162f.png

Miten Suomen ja Kanariansaarten havainnot eroavat toisistaan? Onko aineistoissa havaittavissa hetkellisiä poikkeamia? Onko lämpötiloissa syytä huomioida ero sillä, että Izañan arvot ovat päiväkohtaisia keskiarvoja?

# Sovitetaan ylösalas sahaaviin havaintoihin yleiskuvaa tasoittava trendiviivakin.

plt.figure(figsize = (20, 10))

# Havainnot

plt.plot(HyyCO2["TIMESTAMP"], HyyCO2["co2"], label = "Hyytiälä", c = "g", alpha = 0.5)
plt.plot(IzaCO2["TIMESTAMP"], IzaCO2["co2"], label = "Izana", c = "b", alpha = 0.5)

# Hyytiälän trendi

x = np.arange(HyyCO2['TIMESTAMP'].size)
y = HyyCO2["co2"].copy()
y[np.isnan(y)] = y[~np.isnan(y)].mean()

z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(HyyCO2['TIMESTAMP'], p(x), c = "black", linestyle = "dashed", label = "Hyytiälä", alpha = 0.7)

# Izañan trendi

q = np.arange(IzaCO2['TIMESTAMP'].size)
w = IzaCO2["co2"].copy()
w[np.isnan(w)] = w[~np.isnan(w)].mean()

v = np.polyfit(q, w, 1)
pf = np.poly1d(v)
plt.plot(IzaCO2['TIMESTAMP'], pf(q), "r--", label = "Izana", alpha = 0.7)

# Selitteet

plt.xlabel("\n Aika (vuosi)", fontsize = 20)
plt.ylabel("Konsentraatio ilmassa (µmol mol-1) \n", fontsize = 20)
plt.legend(loc = "upper left", fontsize = 20)

plt.title("CO2-pitoisuuksien trendi mitta-asemilla 2008-2024 \n", fontsize = 20)
plt.show()

print(f"Hyytiälän trendiviivan yhtälö: y = {z[0]}*x + {z[1]}")
print(f"Izañan trendiviivan yhtälö: y = {v[0]}*x + {v[1]}")
../_images/6c67ae1c0af7597f2268576d79fb0b8ee6b18873bc377484f76c025071f88cd7.png
Hyytiälän trendiviivan yhtälö: y = 0.0002745232373427903*x + 409.4827833577826
Izañan trendiviivan yhtälö: y = 0.000257227561759758*x + 382.68451850415585

4. Tulokset ja johtopäätökset #

5. Lähteet #

Ylläolevissa aineistoissa on aina ollut mukana paljon tekijöitä, jotka ansaitsevat kiitoksen työstään. Koulutyön kannalta meidän ei kannata toisintaa tässä sivutolkulla nimiä, mutta jokaisen aineiston metadatan takaa löydät “citation”-kohdasta osallisten nimet. Esimerkiksi Izanan kaasuaineistojen linkistä https://meta.icos-cp.eu/objects/mBZ45apJRKS_TXzbu9thbXQK löytäisit tekijätiedot

“Rivas-Soriano, P. (2024). Atmospheric CH4 product from Izaña (29.0 m), 1984-01-01–2024-03-31, European ObsPack, https://hdl.handle.net/11676/mBZ45apJRKS_TXzbu9thbXQK”