Perämeri#

Versio 0.1 - Kehityksen alla

Ilmastokeskusteluun ja sääilmiöiden ymmärtämiseen tarvitaan havaintoja monista eri suureista. Näitä ovat esimerkiksi vedenkorkeus merellä, lämpötila vedessä ja ilmassa, sateen ja lumen määrät, tuulisuus ynnä muut.

Ilmatieteenlaitos tarjoaa näihin tarpeisiin laajan valikoiman tilastoja. Kaikki alla olevat materiaalit on haettu 24.4.2025 Havaintojen lataus -portaalista https://www.ilmatieteenlaitos.fi/havaintojen-lataus.

Yleiseen katseluun ja kauniisti kartalle aseteltuun grafiikkaan pääsee käsiksi esimerkiksi https://www.aaltopoiju.fi/ sivun avulla.

1. Työkalut#

# Aja tämä solu aina ensimmäisenä!

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

2. Aineistot#

Tämä kirjanen on suunniteltu Kokkolan ympärysalueelle. Kunkin suureen mittauspaikka on pyritty valitsemaan mahdollisimman läheltä kaupunkia sikäli mikäli aineistoa on ollut ITL:n sivuilla saatavilla.

# Pietarsaaren Leppäluoto
# Mareografinen vedenkorkeuden mittaus
# Vuosia valittu muutamia väliltä 1971-2024

leppa241 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto241.csv", sep = ",")
leppa242 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto242.csv", sep = ",")
leppa211 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto211.csv", sep = ",")
leppa212 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto212.csv", sep = ",")
leppa11 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto11.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
leppa01 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto01.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
leppa91 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto91.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
leppa81 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto81.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
leppa71 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto71.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)

# Yhdistetään tiedot yhteen muuttujaan

leppa = pd.concat([leppa71, leppa81, leppa91, leppa01, leppa11, leppa211, leppa212, leppa241, leppa242])

# Korjataan äskeisen liitoksen rivien järjestysluvut estetiikan nimissä.

leppa = leppa.reset_index(drop = True)
/tmp/ipykernel_2146/2975525808.py:9: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  leppa11 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto11.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:9: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  leppa11 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto11.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:11: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  leppa01 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto01.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:11: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  leppa01 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto01.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:13: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  leppa91 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto91.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:13: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  leppa91 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto91.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:15: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  leppa81 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto81.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:15: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  leppa81 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto81.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:17: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  leppa71 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto71.csv", sep = ",",
/tmp/ipykernel_2146/2975525808.py:17: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  leppa71 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Pietarsaari_Leppaluoto71.csv", sep = ",",
# Perämeren aaltopoiju ja Kalajoen Maakalla
# Veden lämpötilamittaukset
# 2010-luvulta alkaen

per = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Perameri_aaltopoiju1224.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
maak = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kalajoki_Maakalla1224.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
/tmp/ipykernel_2146/34637790.py:5: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  per = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Perameri_aaltopoiju1224.csv", sep = ",",
/tmp/ipykernel_2146/34637790.py:5: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  per = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Perameri_aaltopoiju1224.csv", sep = ",",
/tmp/ipykernel_2146/34637790.py:7: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  maak = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kalajoki_Maakalla1224.csv", sep = ",",
/tmp/ipykernel_2146/34637790.py:7: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  maak = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kalajoki_Maakalla1224.csv", sep = ",",
# Kokkolan Tankar
# Ilman lämpötila ja tuulen nopeus
# Kyseiset suureet 1990-luvulta alkaen

tank90 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar90.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
tank00 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar00.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
tank10 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar10.csv", sep = ",", decimal = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)

# Yhdistetään tiedot yhteen muuttujaan

tank = pd.concat([tank90, tank00, tank10])

# Korjataan äskeisen liitoksen rivien järjestysluvut estetiikan nimissä.

tank = tank.reset_index(drop = True)
/tmp/ipykernel_2146/3837091871.py:5: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  tank90 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar90.csv", sep = ",",
/tmp/ipykernel_2146/3837091871.py:5: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  tank90 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar90.csv", sep = ",",
/tmp/ipykernel_2146/3837091871.py:7: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  tank00 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar00.csv", sep = ",",
/tmp/ipykernel_2146/3837091871.py:7: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  tank00 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar00.csv", sep = ",",
/tmp/ipykernel_2146/3837091871.py:9: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  tank10 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar10.csv", sep = ",", decimal = ",",
/tmp/ipykernel_2146/3837091871.py:9: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  tank10 = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Tankar10.csv", sep = ",", decimal = ",",
# Kruunupyyn lentoasema ja Kokkolan Santahaka rannikolla, Halsuan kirkonkylä hieman sisämaassa
# Sade- ja lumimittauksia
# Lentoasema ja Halsua 1970-2000 -luvuilta, Santahaka tuoreempana

lento = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kruunupyy_Kokkola-Pietarsaari_lentoasema71.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
sant = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Santahaka08.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
hal = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Halsua71.csv", sep = ",",
                   parse_dates = {"Aika":["Vuosi", "Kuukausi", "Päivä", "Aika [Paikallinen aika]"]}, keep_date_col = True)
/tmp/ipykernel_2146/1939484206.py:5: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  lento = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kruunupyy_Kokkola-Pietarsaari_lentoasema71.csv", sep = ",",
/tmp/ipykernel_2146/1939484206.py:5: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  lento = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kruunupyy_Kokkola-Pietarsaari_lentoasema71.csv", sep = ",",
/tmp/ipykernel_2146/1939484206.py:7: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  sant = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Santahaka08.csv", sep = ",",
/tmp/ipykernel_2146/1939484206.py:7: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  sant = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Kokkola_Santahaka08.csv", sep = ",",
/tmp/ipykernel_2146/1939484206.py:9: FutureWarning: The 'keep_date_col' keyword in pd.read_csv is deprecated and will be removed in a future version. Explicitly remove unwanted columns after parsing instead.
  hal = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Halsua71.csv", sep = ",",
/tmp/ipykernel_2146/1939484206.py:9: FutureWarning: Support for nested sequences for 'parse_dates' in pd.read_csv is deprecated. Combine the desired columns with pd.to_datetime after parsing instead.
  hal = pd.read_csv("https://github.com/opendata-education/Tyopajat/raw/refs/heads/main/materiaali/data/Halsua71.csv", sep = ",",

Katsotaan testiksi, miltä aineistossa näyttää.

leppa
Aika Havaintoasema Vuosi Kuukausi Päivä Aika [Paikallinen aika] N2000-järjestelmässä [mm]
0 1971-01-02 00:00:00 Pietarsaari Leppäluoto 1971 1 2 00:00 169
1 1971-01-02 01:00:00 Pietarsaari Leppäluoto 1971 1 2 01:00 187
2 1971-01-02 02:00:00 Pietarsaari Leppäluoto 1971 1 2 02:00 205
3 1971-01-02 03:00:00 Pietarsaari Leppäluoto 1971 1 2 03:00 211
4 1971-01-02 04:00:00 Pietarsaari Leppäluoto 1971 1 2 04:00 215
... ... ... ... ... ... ... ...
1096182 2024-12-31 23:55:00 Pietarsaari Leppäluoto 2024 12 31 23:55 325
1096183 2024-12-31 23:56:00 Pietarsaari Leppäluoto 2024 12 31 23:56 323
1096184 2024-12-31 23:57:00 Pietarsaari Leppäluoto 2024 12 31 23:57 322
1096185 2024-12-31 23:58:00 Pietarsaari Leppäluoto 2024 12 31 23:58 321
1096186 2024-12-31 23:59:00 Pietarsaari Leppäluoto 2024 12 31 23:59 320

1096187 rows × 7 columns

per
Aika Havaintoasema Vuosi Kuukausi Päivä Aika [Paikallinen aika] Veden lämpötila [°C]
0 2012-05-31 01:25:00 Perämeri aaltopoiju 2012 5 31 01:25 3.1
1 2012-05-31 01:55:00 Perämeri aaltopoiju 2012 5 31 01:55 3.1
2 2012-05-31 02:25:00 Perämeri aaltopoiju 2012 5 31 02:25 3.1
3 2012-05-31 02:55:00 Perämeri aaltopoiju 2012 5 31 02:55 3.1
4 2012-05-31 03:25:00 Perämeri aaltopoiju 2012 5 31 03:25 3.1
... ... ... ... ... ... ... ...
101890 2024-11-27 10:30:00 Perämeri aaltopoiju 2024 11 27 10:30 4.6
101891 2024-11-27 11:00:00 Perämeri aaltopoiju 2024 11 27 11:00 4.6
101892 2024-11-27 11:30:00 Perämeri aaltopoiju 2024 11 27 11:30 4.6
101893 2024-11-27 12:00:00 Perämeri aaltopoiju 2024 11 27 12:00 4.5
101894 2024-11-27 12:30:00 Perämeri aaltopoiju 2024 11 27 12:30 4.6

101895 rows × 7 columns

3. Aineiston korjaus#

Aineisto näyttää hyvältä, mutta ärsyttävästi ITL-aineistot ovat joskus tietokoneen mielestä tekstinä (string) eivätkä numeroina (int tai float). Määritämme alla funktion, jolla voimme käydä helposti kunkin muuttujan läpi ja pakottaa alkiot oikeisiin muotoihin. Jos etsit uusia aineistoja, lisää vain funktioon mukaan uusi try-except-else -pätkä sopivalla tietosarakkeen nimellä.

# Tämä funktio korjaa tekstiä numeroiksi, kun sille syöttää dataframe-muuttujan.

def korjaus(df):
    try:
        df["Vuosi"] = pd.to_numeric(df["Vuosi"], errors = "coerce")
    except:
        print("Vuotta ei ole")
    else:
        print("Vuosi korjattu") 
    try:
        df["Kuukausi"] = pd.to_numeric(df["Kuukausi"], errors = "coerce")
    except:
        print("Kuukautta ei ole")
    else:
        print("Kuukausi korjattu") 
    try:
        df["Päivä"] = pd.to_numeric(df["Päivä"], errors = "coerce")
    except:
        print("Päivää ei ole")
    else:
        print("Päivä korjattu") 
    try:
        df["Lämpötilan keskiarvo [°C]"] = pd.to_numeric(df["Lämpötilan keskiarvo [°C]"], errors = "coerce")
    except:
        print("Lämpötilan keskiarvoa ei ole")
    else:
        print("Lämpötilan keskiarvo korjattu") 
    try:
        df["Keskituulen nopeus [m/s]"] = pd.to_numeric(df["Keskituulen nopeus [m/s]"], errors = "coerce")
    except:
        print("Keskituulen nopeutta ei ole")
    else:
        print("Keskituulen nopeus korjattu")
    try:
        df["N2000-järjestelmässä [mm]"] = pd.to_numeric(df["N2000-järjestelmässä [mm]"], errors = "coerce")
    except:
        print("N2000-syvyyttä ei ole")
    else:
        print("N2000-syvyys korjattu")
    try:
        df["Veden lämpötila [°C]"] = pd.to_numeric(df["Veden lämpötila [°C]"], errors = "coerce")
    except:
        print("Veden lämpötilaa ei ole")
    else:
        print("Veden lämpötila korjattu")
    try:
        df["Sademäärä [mm]"] = pd.to_numeric(df["Sademäärä [mm]"], errors = "coerce")
    except:
        print("Sademäärää ei ole")
    else:
        print("Sademäärä korjattu")
    try:
        df["Lumensyvyys [cm]"] = pd.to_numeric(df["Lumensyvyys [cm]"], errors = "coerce")
    except:
        print("Lumensyvyyttä ei ole")
    else:
        print("Lumensyvyys korjattu")
# Tästä tulee tekstiseinä, älä välitä.

korjaus(leppa)
korjaus(tank)
korjaus(per)
korjaus(maak)
korjaus(lento)
korjaus(sant)
korjaus(hal)
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvoa ei ole
Keskituulen nopeutta ei ole
N2000-syvyys korjattu
Veden lämpötilaa ei ole
Sademäärää ei ole
Lumensyvyyttä ei ole
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvo korjattu
Keskituulen nopeus korjattu
N2000-syvyyttä ei ole
Veden lämpötilaa ei ole
Sademäärää ei ole
Lumensyvyyttä ei ole
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvoa ei ole
Keskituulen nopeutta ei ole
N2000-syvyyttä ei ole
Veden lämpötila korjattu
Sademäärää ei ole
Lumensyvyyttä ei ole
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvoa ei ole
Keskituulen nopeutta ei ole
N2000-syvyyttä ei ole
Veden lämpötila korjattu
Sademäärää ei ole
Lumensyvyyttä ei ole
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvoa ei ole
Keskituulen nopeutta ei ole
N2000-syvyyttä ei ole
Veden lämpötilaa ei ole
Sademäärä korjattu
Lumensyvyys korjattu
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvoa ei ole
Keskituulen nopeutta ei ole
N2000-syvyyttä ei ole
Veden lämpötilaa ei ole
Sademäärä korjattu
Lumensyvyys korjattu
Vuosi korjattu
Kuukausi korjattu
Päivä korjattu
Lämpötilan keskiarvoa ei ole
Keskituulen nopeutta ei ole
N2000-syvyyttä ei ole
Veden lämpötilaa ei ole
Sademäärä korjattu
Lumensyvyys korjattu

4. Analyysiä#

Ryhdytään tekemään alustavia kuvaajia tarkastelluista suureista.

4.1 Vedenkorkeus#

# Leppäluoto
# Yli miljoona mittapistettä, ensin karkeasti kuvattuna.

plt.scatter(leppa["Aika"], leppa["N2000-järjestelmässä [mm]"])

plt.show()
../_images/ffa087858c0276be13cb91244b6922f749dc20cddc2563b8192c6922e0dfb22e.png
# Sama hieman selkeämmin.

plt.figure(figsize = (20,10))
plt.scatter(leppa["Aika"], leppa["N2000-järjestelmässä [mm]"])

plt.title("Pietarsaaren Leppäluodon vedenkorkeus \n", fontsize = 20)
plt.ylabel("N2000-järjestelmän mukainen korkeus (mm)", fontsize = 15)
plt.xlabel("\n Vuosi", fontsize = 15)
plt.show()
../_images/74d1048e89ddae5314e861d7b13c6ef0f5235dce2610978477cff7c70fcc8d60.png
# Mittapisteitä on niin paljon, että eritellään aineistoa hieman. Otetaan yksi vuosi tarkasteluun.

vuosi = 1981
valinta = leppa.query("Vuosi == @vuosi")

plt.figure(figsize = (20,10))
plt.scatter(valinta["Aika"], valinta["N2000-järjestelmässä [mm]"])

maksimi = valinta["N2000-järjestelmässä [mm]"].max()
minimi = valinta["N2000-järjestelmässä [mm]"].min()

tieto = f"Vuoden korkein arvo oli {maksimi} mm ja matalin {minimi} mm."

plt.title(f"Pietarsaaren Leppäluodon vedenkorkeus vuonna {vuosi}. \n {tieto}", fontsize = 20)
plt.ylabel("N2000-järjestelmän mukainen korkeus (mm)", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.show()
../_images/1fc9e42fc86be71beb840f65ce36dae86a8873805eb463abef15aa4aa09c9f9b.png
# Voisimme laskea myös vuosi- tai kuukausikeskiarvot.

ehto = "Vuosi"

KAV = leppa.groupby([ehto]).mean(numeric_only = True)
vaaka = leppa[ehto].unique()

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

plt.plot(vaaka, KAV["N2000-järjestelmässä [mm]"], c = "y", alpha = 0.5)
plt.scatter(vaaka, KAV["N2000-järjestelmässä [mm]"], c = "firebrick")

plt.title("Pietarsaaren Leppäluodon vedenkorkeus, vuosikeskiarvo", fontsize = 20)
plt.ylabel("N2000-järjestelmän mukainen korkeus (mm)", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.show()
../_images/874ae0f6799f4a0737c61391f4431beadc01e17e2ddcdc2a64955d1bae866025.png
# Voisimme myös sovittaa havaintoihin kehitystä kuvaavan trendiviivan.

ehto = "Vuosi"

KAV = leppa.groupby([ehto]).mean(numeric_only = True)
vaaka = leppa[ehto].unique()

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

plt.plot(vaaka, KAV["N2000-järjestelmässä [mm]"], c = "y", alpha = 0.5)
plt.scatter(vaaka, KAV["N2000-järjestelmässä [mm]"], c = "firebrick", label = "mittaukset")

# Trendi.
x = np.arange(len(vaaka))
y = KAV["N2000-järjestelmässä [mm]"].copy()

# Tästä lukua vaihtamalla voi muuttaa sovitetun yhtälön astetta.
z = np.polyfit(x, y, 3)
p = np.poly1d(z)
plt.plot(vaaka, p(x), c = "black", linestyle = "dashed", label = "trendiviiva", alpha = 0.7)

plt.title("Pietarsaaren Leppäluodon vedenkorkeus, vuosikeskiarvo", fontsize = 20)
plt.ylabel("N2000-järjestelmän mukainen korkeus (mm)", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/36ac4a3958647f4f9d72de802f1aa5c9e10c6d2a5e4847345a616b12b88ec87b.png

4.2 Veden lämpötilat#

# Veden lämpötilat

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

plt.plot(per["Aika"], per["Veden lämpötila [°C]"], label = "Aaltopoiju")
plt.plot(maak["Aika"], maak["Veden lämpötila [°C]"], label = "Maakalla")

plt.legend(fontsize = 15)
plt.show()
../_images/c1dfe6958eac2bc0b66bf93f410f26c228f2bfa668e2e71ac2892c6292ad101a.png
# Valitaan tarkasteltava ehto

ehto = "Vuosi"

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

# Perämeren aaltopoiju

KAP = per.groupby([ehto]).mean(numeric_only = True)
vaaka = per[ehto].unique()

plt.plot(vaaka, KAP["Veden lämpötila [°C]"], c = "y", alpha = 0.5)
plt.scatter(vaaka, KAP["Veden lämpötila [°C]"], c = "firebrick", label = "mittaukset Perämeri")

# Trendi.
x = np.arange(len(vaaka))
y = KAP["Veden lämpötila [°C]"].copy()

# Tästä lukua vaihtamalla voi muuttaa sovitetun yhtälön astetta.
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(vaaka, p(x), c = "black", linestyle = "dashed", label = "trendi Per", alpha = 0.7)

# Kalajoen Maakalla

KAK = maak.groupby([ehto]).mean(numeric_only = True)
vaaka = maak[ehto].unique()

plt.plot(vaaka, KAK["Veden lämpötila [°C]"], c = "slateblue", alpha = 0.5)
plt.scatter(vaaka, KAK["Veden lämpötila [°C]"], c = "blue", label = "mittaukset Maakalla")

# Trendi.
x = np.arange(len(vaaka))
y = KAK["Veden lämpötila [°C]"].copy()

# Tästä lukua vaihtamalla voi muuttaa sovitetun yhtälön astetta.
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(vaaka, p(x), c = "grey", linestyle = "dashed", label = "trendi Maak", alpha = 0.7)

plt.title(f"Meriveden lämpötilamittaukset, keskiarvo ({ehto})", fontsize = 20)
plt.ylabel("Veden lämpötila [°C]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/71e27b693fa0acf51a8eccf6e126b4792e07ef9e90b9924f11b7663e69d45691.png

4.3 Ilman lämpötilat#

# Ilman lämpötilat

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

# Piirretään kuvaaja
plt.plot(tank["Aika"], tank["Lämpötilan keskiarvo [°C]"])

plt.ylabel("Ilman lämpötila [°C]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.title("Kokkolan Tankarin ilman lämpötilamittaukset, tuntikeskiarvo \n", fontsize = 20)
plt.show()
../_images/1478056d12454bd5ce12e98fe4a665707d0b968d10a8a514ac2ba1511b986eb2.png
# Valitaan tarkasteltava ehto

ehto = "Vuosi"

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

KAT = tank.groupby([ehto]).mean(numeric_only = True)
vaaka = tank[ehto].unique()

plt.plot(vaaka, KAT["Lämpötilan keskiarvo [°C]"], c = "slateblue", alpha = 0.5)
plt.scatter(vaaka, KAT["Lämpötilan keskiarvo [°C]"], c = "blue", label = "mittaukset Tankar")

# Trendi.
x = np.arange(len(vaaka))
y = KAT["Lämpötilan keskiarvo [°C]"].copy()

# Tästä lukua vaihtamalla voi muuttaa sovitetun yhtälön astetta.
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(vaaka, p(x), c = "grey", linestyle = "dashed", label = "trendi Tankar", alpha = 0.7)

plt.title(f"Ilman lämpötilamittaukset, keskiarvo ({ehto})", fontsize = 20)
plt.ylabel("Ilman lämpötila [°C]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/7171a5aeaa51ec394b75bd8a625305419231721b3b5eb717574223d86c1ee3d8.png
# Lähdetään metsästämään helteitä vaikkapa yhden vuoden ajalta

# Valitaan vuosi
vuosi = 2020
helle = 25
valinta = tank.query("Vuosi == @vuosi")
helteet = valinta.query("`Lämpötilan keskiarvo [°C]` >= @helle")
maksimi = valinta["Lämpötilan keskiarvo [°C]"].max()

# Piirretään kuvaajat
plt.figure(figsize = (20,10))

plt.scatter(valinta["Aika"], valinta["Lämpötilan keskiarvo [°C]"], c = "slateblue", label = "Lämpötila")
plt.scatter(helteet["Aika"], helteet["Lämpötilan keskiarvo [°C]"], c = "red", label = "Myrsky")
plt.axhline(y = helle, color = 'y', linestyle = 'dashed', label = "Helleraja")

plt.title(f"Kokkolan Tankarin lämpötilat, {vuosi}, maksimilämpötila {maksimi} °C", fontsize = 20)
plt.ylabel("Lämpötilan keskiarvo [°C]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/7a531d57a8a2e3ffff9c11b71ea633524a97af99679f3104f2f97f0ff06d10ee.png

4.4 Tuuli#

# Tuulen keskimääräisen nopeuden arvo
plt.figure(figsize = (20, 5))

# Piirretään kuvaaja
plt.plot(tank["Aika"], tank["Keskituulen nopeus [m/s]"])

plt.ylabel("Keskituulen nopeus [m/s]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.title("Kokkolan Tankarin keskituuli, tuntikeskiarvo \n", fontsize = 20)
plt.show()
../_images/de26b9e867e5a19f428129a98e8601ab6c2f7d5a04aaca0bd190dd50f8e02fc1.png
# Voisimme myös sovittaa havaintoihin kehitystä kuvaavan trendiviivan.

ehto = "Vuosi"

KAT = tank.groupby([ehto]).mean(numeric_only = True)
vaaka = tank[ehto].unique()

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

plt.plot(vaaka, KAT["Keskituulen nopeus [m/s]"], c = "y", alpha = 0.5)
plt.scatter(vaaka, KAT["Keskituulen nopeus [m/s]"], c = "firebrick", label = "mittaukset")

# Trendi.
x = np.arange(len(vaaka))
y = KAT["Keskituulen nopeus [m/s]"].copy()

# Tästä lukua vaihtamalla voi muuttaa sovitetun yhtälön astetta.
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(vaaka, p(x), c = "black", linestyle = "dashed", label = "trendiviiva", alpha = 0.7)

plt.title("Kokkolan Tankarin keskituuli, vuosikeskiarvo", fontsize = 20)
plt.ylabel("Keskituulen nopeus [m/s]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/8e20a30fb06ce0ef1ffc54adfd817c753e4573807d429c4cba9727218356f333.png
# Lähdetään metsästämään myrskyjä vaikkapa yhden vuoden ajalta

# Valitaan vuosi
vuosi = 2015
nopeus = 21
valinta = tank.query("Vuosi == @vuosi")
myrskyt = valinta.query("`Keskituulen nopeus [m/s]` >= @nopeus")
maksimi = valinta["Keskituulen nopeus [m/s]"].max()

# Piirretään kuvaajat
plt.figure(figsize = (20,10))

plt.scatter(valinta["Aika"], valinta["Keskituulen nopeus [m/s]"], c = "slateblue", label = "Tuuli")
plt.scatter(myrskyt["Aika"], myrskyt["Keskituulen nopeus [m/s]"], c = "red", label = "Myrsky")
plt.axhline(y = nopeus, color = 'y', linestyle = 'dashed', label = "Myrskyraja")

plt.title(f"Kokkolan Tankarin keskituuli, {vuosi}, maksiminopeus {maksimi} m/s", fontsize = 20)
plt.ylabel("Keskituulen nopeus [m/s]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/ee65a1718e83b046dcb914cfcce6ce10bdf2d66a55c8e6dffb809e75bb9070fc.png
# Tehdään päivämäärävalitsin tarkempaa katselua varten

a = '2015-02-07'
b = '2015-03-01'
nopeus = 21
vali = tank.query("Aika >= @a & Aika < @b")

maksimi = vali["Keskituulen nopeus [m/s]"].max()

# Piirretään kuvaajat
plt.figure(figsize = (20,5))

plt.plot(vali["Aika"], vali["Keskituulen nopeus [m/s]"], c = "grey")
plt.scatter(vali["Aika"], vali["Keskituulen nopeus [m/s]"], c = "slateblue", label = "Tuuli")
plt.axhline(y = nopeus, color = 'y', linestyle = 'dashed', label = "Myrskyraja")

plt.title(f"Kokkolan Tankarin keskituuli, välillä {a} ja {b}, maksiminopeus {maksimi} m/s.", fontsize = 20)
plt.ylabel("Keskituulen nopeus [m/s]", fontsize = 15)
plt.xlabel("\n Aika", fontsize = 15)
plt.legend(fontsize = 15)
plt.show()
../_images/1663801572449bc830b644d2a19056d944be94380ae2e596c08be926ada51982.png

4.5 Sade ja lumi#

# Sademäärät

plt.plot(lento["Aika"], lento["Sademäärä [mm]"], label = "Lentokenttä")
plt.plot(hal["Aika"], hal["Sademäärä [mm]"], label = "Halsuan kirkonkylä")
plt.legend(fontsize = 15)
plt.show()

plt.plot(sant["Aika"], sant["Sademäärä [mm]"], label = "Santahaka")
plt.legend(fontsize = 15)
plt.show()
../_images/c8049b157ca989bea2d52130306d73da5fc3b48b66c87ff7f44f452922687e24.png ../_images/32c6ba11b305cd0c0f84fba702341cc7590975443eab176af88aa5eed7f463ca.png