Δεδομενα

Τα αποθέματα νερού σε live γραφήματα

Με τη χρήση RSS feed, συλλέγουμε καθημερινά τα τελευταία δεδομένα της ΕΥΔΑΠ για τα απολήψιμα αποθέματα νερού. Τα στοιχεία οπτικοποιούνται σε γραφήματα που ανανεώνονται αυτόματα, για την παρακολούθηση των αποθεμάτων των τεσσάρων ταμιευτήρων που τροφοδοτούν την Αττική.

Το ζήτημα της λειψυδρίας έχει επανέλθει στο προσκήνιο τα τελευταία χρόνια, λόγω της κλιματικής αλλαγής και της δραματικής πτώσης της στάθμης των ταμιευτήρων που τροφοδοτούν την Αθήνα με νερό. Συγκεκριμένα, κατά τα προηγούμενα δύο καλοκαίρια τα συνολικά απολήψιμα αποθέματα, όπως αυτά καταγράφονται από την ΕΥΔΑΠ, είχαν μειωθεί κατά 50% – από ένα δισ. κυβικά μέτρα σε 500 εκατ. κυβικά μέτρα, μεταξύ της 1ης Αυγούστου 2023 και της 1ης Αυγούστου 2025.

Από την αρχή του 2026, ένα αρκετά πιο βροχερό διάστημα, συγκριτικά με τα προηγούμενα χρόνια, προσέφερε μια σημαντική «ανάσα», ωστόσο το πρόβλημα παραμένει, με τα αποθέματα να βρίσκονται ακόμα σε χαμηλότερα επίπεδα σε σχέση με την προηγούμενη δεκαετία.

Φωτογραφία που δόθηκε στη δημοσιότητα το Σάββατο 31 Αυγούστου 2024 και απεικονίζει σπίτια και κτίρια του βυθισμένου χωριού Κάλλιου, που αποκαλύφθηκαν καθώς υποχώρησε η στάθμη της τεχνητής λίμνης του Μόρνου, κοντά στο χωριό Λιδωρίκι του νομού Φωκίδας, Πέμπτη 29 Αυγούστου 2024 Φωτογραφία: ΑΠΕ-ΜΠΕ/ΓΙΑΝΝΗΣ ΚΟΛΕΣΙΔΗΣ

Το iMEdD συνέλεξε τα δεδομένα των απολήψιμων αποθεμάτων από το 1985 έως και σήμερα, και δημιούργησε γραφήματα τα οποία ανανεώνονται αυτόματα σε καθημερινή βάση και είναι ελεύθερα για να τα χρησιμοποιήσει η δημοσιογραφική κοινότητα.

Μείωση 50% μέσα σε δύο έτη

Από το 2020 και για τα αμέσως επόμενα χρόνια, τα απολήψιμα αποθέματα νερού της Αθήνας, όπως καταγράφονται από την ΕΥΔΑΠ, παρέμεναν κοντά ή πάνω από 1 δισ. κυβικών μέτρων. Η κατάσταση ξεκίνησε να αλλάζει από το 2023, όταν η χειμερινή αναπλήρωση, από τις βροχοπτώσεις και τις χιονοπτώσεις, δεν ήταν εξίσου επαρκής με τα προηγούμενα έτη, ένα μοτίβο που συνεχίστηκε για τα επόμενα δύο χρόνια, οδηγώντας τα αποθέματα να μειωθούν κατά 50% μεταξύ 2023 και 2025, από 1 δισ. κυβικά μέτρα σε 500 εκατ. κυβικά μέτρα, την 1η Αυγούστου κάθε φορά.

Τα δεδομένα ακολούθησαν καθοδική πορεία έως και το τέλος του 2025. Μετά το έως σήμερα βροχερό 2026, τα αποθέματα έχουν αυξηθεί συγκριτικά με πέρυσι, παραμένοντας ωστόσο χαμηλότερα από τα αντίστοιχα των προηγούμενων ετών.

  • <iframe src="https://datawrapper.dwcdn.net/bzTnv/" height="550" width="100%" allow="fullscreen"></iframe>

Η σύγκριση των αποθεμάτων από έτος σε έτος οφείλει κάθε φορά να γίνεται για το ίδιο διάστημα λόγω εποχικότητας: υπάρχει σημαντική μεταβλητότητα ανάμεσα στη θερινή-φθινοπωρινή και τη χειμερινή-ανοιξιάτικη περίοδο, καθώς στην πρώτη υπάρχει περισσότερη εκροή παρά εισροή. Επομένως, στο παρακάτω γράφημα, οπτικοποιείται το απόθεμα την τελευταία ημέρα για την οποία διαθέτουμε στοιχεία κάθε φορά και την ίδια μέρα όλων των προηγούμενων ετών.

  • <iframe src="https://datawrapper.dwcdn.net/0YAzZ/" height="500" width="100%" allow="fullscreen"></iframe>

Τα δεδομένα της ΕΥΔΑΠ δίνουν την εικόνα για τα αποθέματα νερού, σε βάθος τεσσάρων δεκαετιών, στη μεγαλύτερη αστική περιοχή της χώρας. Εδώ, εξαίρεση αποτελεί ο ταμιευτήρας του Εύηνου, για τον οποίο υπάρχουν δεδομένα από τις 26 Δεκεμβρίου 2001.

  • <iframe src="https://datawrapper.dwcdn.net/PiR9q/" height="550" width="100%" allow="fullscreen"></iframe>

Τα ημερήσια απολήψιμα αποθέματα νερού

Στο σύνολο δεδομένων που συγκροτήσαμε, κάθε γραμμή αντιστοιχεί σε μία ημέρα του έτους. Η πρώτη στήλη («date») περιέχει όλες τις ημερομηνίες για τις οποίες έχουν συλλεχθεί στοιχεία. Οι επόμενες τέσσερις στήλες στο dataset με τα αποθέματα νερού («Eyinos», «Marathonas», «Mornos», «Yliki») αντιστοιχούν στους ταμιευτήρες όπου εμφανίζεται το απόθεμα νερού, σε κυβικά μέτρα για κάθε ημερομηνία. Η τελευταία στήλη («Total») αναφέρεται στo συνολικό απόθεμα νερού για κάθε ημέρα.

DateEyinosMarathonasMornosYlikiTotal
1985-01-010187441485617360004914250001071905148
1985-01-020182883945620600004993400001079688394
1985-01-030179590915644900005038800001086329091
1985-01-040176329165669500005068310001091413916
1985-01-050169560005692600005095550001095771000
1985-01-060172929085717350005115980001100625908
1985-01-070165887285742100005136410001104439728
1985-01-080162085555783350005161380001110681555
1985-01-090157997965851400005184200001119359796
1985-01-100153636285901500005218700001127383628
1985-01-110149009425914860005248600001131246942
1985-01-120143665865929890005267000001134055586
1985-01-130140099975943250005280800001136414997
1985-01-140135810885958280005294600001138869088
1985-01-150131426525963290005308400001140311652
1985-01-160126953225973310005322200001142246322
1985-01-170168888605983330005340600001149281860
1985-01-180167218005993500005405000001156571800
1985-01-190164229646003700005456260001162418964
1985-01-200161593106012200005498200001167199310
1985-01-210158160656020700005528490001170735065
1985-01-220154117606025800005554120001173403760
1985-01-230150120506032600005572760001175548050
1985-01-240146641126041100005589070001177681112
1985-01-250145228306049600005605380001180020830
1985-01-260143353986059800005619360001182251398
1985-01-270140099976070000005631010001184110997
1985-01-280136572686081900005640330001185880268
1985-01-290134292326095500005644990001187478232
1985-01-300131126066107400005649650001188817606
1985-01-310127693876119300005661300001190829387
1985-02-010123419406129500005668290001192120940
1985-02-020119927386132900005668290001192111738
1985-02-030115760516136300005665960001191802051
1985-02-040111652326139700005661300001191265232
1985-02-050107741506144800005658970001191151150
1985-02-060103750396148200005654310001190626039
1985-02-07099549306149900005651980001190142930
1985-02-08095542406153300005647320001189616240
1985-02-09091309526156730005642660001189069952
1985-02-10087377606158460005640330001188616760
1985-02-11084776566160190005638000001188296656
1985-02-12080421186180950005633340001189471118
1985-02-13077157786201710005631010001190987778
1985-02-14075548706225930005633340001193481870
1985-02-15074932506238040005633340001194631250
1985-02-16073708806243230005631010001194794880
1985-02-17072979746250150005631010001195413974
1985-02-18072493706257070005628680001195824370
1985-02-19074075916260530005626350001196095591
1985-02-20074932506263990005624020001196294250
1985-02-21076289016263990005621690001196196901
1985-02-22078030906263990005619360001196138090
1985-02-23077905926262260005619360001195952592
1985-02-24078781656262260005619360001196040165
1985-02-25079410906262260005619360001196103090
1985-02-26080674626260530005619360001196056462
1985-02-27080421186260530005619360001196031118
1985-02-28081564276258800005619360001195972427
1985-03-01082329816244960005619360001194664981
1985-03-02082714326246690005619360001194876432
1985-03-03086465156250150005621690001195830515
1985-03-04081564276253610005626350001196152427
1985-03-05089470366244960005633340001196777036
1985-03-06088161306238040005638000001196420130
1985-03-07086595506253610005642660001198286550
1985-03-08084776566260530005644990001199029656
1985-03-09081947046260530005644990001198746704
1985-03-10079410906260530005644990001198493090
1985-03-11077406006260530005644990001198292600
1985-03-12075918426262260005644990001198316842
1985-03-13074932506262260005642660001197985250
1985-03-14074198286262260005642660001197911828
1985-03-15074932506265720005640330001198098250
1985-03-16074687766274370005644990001199404776
1985-03-17073831176283020005651980001200883117
1985-03-18073708806291670005654310001201968880
1985-03-19076041666314160005654310001204451166
1985-03-20076289016333250005654310001206384901
1985-03-21077281896340250005654310001207184189
1985-03-22078280866343750005654310001207634086
1985-03-23079159206347250005658970001208537920
1985-03-24080041026350750005663630001209442102
1985-03-25080547906354250005665960001210075790
1985-03-26080674626357750005668290001210671462
1985-03-27080421186364750005668290001211346118
1985-03-28080167746371750005665960001211787774
1985-03-29081436686377000005665960001212439668
1985-03-30084259286382250005665960001213246928
1985-03-31086856206385750005665960001213856620
1985-04-01089208086387500005665960001214266808
1985-04-02091836466389250005665960001214704646
1985-04-03094746086389250005665960001214995608
1985-04-04097541146387500005665960001215100114
1985-04-050100627386387500005663630001215175738
1985-04-060103613506387500005661300001215241350
1985-04-070106358506387500005658970001215282850
1985-04-080108853586385750005656640001215124358
1985-04-090111511886387500005654310001215332188

Πώς συλλέξαμε τα δεδομένα

Η συλλογή των δεδομένων γίνεται μέσω προγράμματος, σε γλώσσα Python, που είναι διαθέσιμο στο Github και «τρέχει» μία φορά καθημερινά, μετά την ημερήσια ενημέρωση των στοιχείων από την ΕΥΔΑΠ. Από τον Μάιο 2026 και έπειτα, η πηγή των δεδομένων είναι το RSS feed της ΕΥΔΑΠ, ενώ για τη συλλογή όλων των παλαιότερων στοιχείων χρησιμοποιήθηκε το API (Application Programming Interface) της πλατφόρμας Open Water API, η οποία επιστρέφει το απόθεμα όλων των ταμιευτήρων της Αττικής σε κυβικά μέτρα (m³), για το χρονικό διάστημα που έχει οριστεί στον κώδικα. Σημειωτέον, τα RSS feed της ΕΥΔΑΠ φαίνεται να έχουν ένα μικρό σφάλμα: στην πραγματικότητα, το RSS feed για τα αποθέματα διαθέτει τα στοιχεία παραγωγής πόσιμου νερού στις μονάδες επεξεργασίας, ενώ το RSS feed για την παραγωγή πόσιμου νερού παρουσιάζει τα στοιχεία για τα απολήψιμα αποθέματα.

Εφόσον διαπιστώσαμε αυτήν την «αντίστροφη» διάθεση των στοιχείων, χρησιμοποιήσαμε το RSS feed για την παραγωγή πόσιμου νερού, προκειμένου να οπτικοποιήσουμε τα αποθέματα νερού, τα οποία είναι και αυτά τα οποία παρουσιάζονται στους πίνακες που διαθέτει η ΕΥΔΑΠ για το ευρύ κοινό.

Ο κώδικας για την συγκέντρωση των δεδομένων μπορεί να χρησιμοποιηθεί εύκολα και σε notebook του Google Colab. Παρακάτω παρατίθενται τα δύο code cells που μπορείτε να τρέξετε για να συλλέξετε ιστορικά αλλά και τα τελευταία στοιχεία.

Ο κώδικας για το API

 
import requests
import pandas as pd
import datetime as dt
import time

BASE_URL = "https://opendata-api-eydap.growthfund.gr/api/Savings/Day"

def parse_int(x):
    if x is None:
        return None
    return int(str(x).replace(".", "").strip())

def fetch_day(date):
    url = f"{BASE_URL}/{date.strftime('%d-%m-%Y')}"
    r = requests.get(url, timeout=30)
    r.raise_for_status()
    return r.json()

# Insert the date span
start_date = dt.date(2026, 4, 1)
end_date = dt.date(2026, 5, 20)

records = {}

current = start_date

while current <= end_date:

    try:
        data = fetch_day(current)

        for row in data:

            rec_date = dt.datetime.strptime(
                row["Date"],
                "%d/%m/%Y"
            ).date()

            if rec_date < start_date:
                continue

            records[rec_date] = {
                "date": rec_date,
                "eyinos": parse_int(row["Eyinos"]),
                "marathonas": parse_int(row["Marathonas"]),
                "mornos": parse_int(row["Mornos"]),
                "yliko": parse_int(row["Yliko"]),
                "total": parse_int(row["Total"]),
            }


    except Exception as e:
        print(f"Failed {current}: {e}")

    current += dt.timedelta(days=1)
    time.sleep(0.05)

df = (
    pd.DataFrame(records.values())
      .sort_values("date")
      .reset_index(drop=True)
)

Ο αναλυτικός κώδικας για το RSS feed, η αναλυτική μεθοδολογία του, καθώς τα αρχεία .csv που διαθέτουν τα παλαιότερα και νεότερα δεδομένα, βρίσκονται στο repository eydap_water_reserves του iMEdD.

Ο κώδικας για το RSS feed

 
import requests
import pandas as pd
from xml.etree import ElementTree as ET
from bs4 import BeautifulSoup


def fetch_eydap_reservoir_rss() -> pd.DataFrame:
    url = "https://www.eydap.gr/handlers/rss.ashx?collection=WaterProduction&Culture=69"
    response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
    response.raise_for_status()

    root = ET.fromstring(response.content)
    description_html = root.find(".//item/description").text

    soup = BeautifulSoup(description_html, "html.parser")
    table = soup.find("table")

    headers, rows = None, []
    for tr in table.find_all("tr"):
        cells = [td.get_text(strip=True) for td in tr.find_all(["th", "td"])]
        if headers is None:
            headers = cells
        else:
            rows.append(cells)

    df = pd.DataFrame(rows, columns=headers)

    df = df.rename(columns={
        "ΗΜΕΡΟΜΗΝΙΑ": "Date",
        "ΕΥΗΝΟΣ": "Eyinos",
        "ΜΑΡΑΘΩΝΑΣ": "Marathonas",
        "ΜΟΡΝΟΣ": "Mornos",
        "ΥΛΙΚΗ": "Yliki",
        "ΣΥΝΟΛΟ": "Synolo",
        "TOTAL": "Total",
    })

    df["Date"] = pd.to_datetime(df["Date"].str.strip(), format="%d/%m/%Y")

    numeric_cols = ["Eyinos", "Marathonas", "Mornos", "Yliki", "Synolo", "Total"]
    for col in numeric_cols:
        if col in df.columns:
            df[col] = (
                df[col]
                .astype(str)
                .str.strip()
                .str.replace(".", "", regex=False)
                .str.replace(",", ".", regex=False)
                .astype(float)
                .astype(int)
            )

    if "Total" in df.columns:
        df = df.drop(columns=["Total"])

    return df.reset_index(drop=True)


df = fetch_eydap_reservoir_rss()
df = df.rename(columns={
  "Synolo": "Total"
  })

Σε προηγούμενη δημοσίευση του iMEdD τον Ιούλιο 2025 είχαμε αναλύσει τα δεδομένα της ΕΥΔΑΠ από το 1985 έως 10 Ιουλίου 2025 σε στατική μορφή. Για τα στοιχεία του παρόντος, έως και τον Ιούλιο 2025, χρησιμοποιήθηκαν τα δεδομένα από το αντίστοιχο repository στο Github.

Creative Commons license logo