Skip to main content

Python implementation of NedborAfstromnings Model (NAM) lumped rainfall–runoff model

Project description

TJ_HYD_NAM

Python implementation of NedborAfstromnings Model (NAM) lumped rainfall–runoff model, based on the original code from NAM_Model by hckaraman

Installation

pip install tj_hyd_nam

Getting Started

Prepare the Dataset

The dataset should include columns: Date, Temperature, Precipitation, Evapotranspiration, and Discharge, with column names customizable.

Date Temp Q P E
10/9/2016 15.4 0.25694 0 2.79
10/10/2016 14.4 0.25812 0 3.46
10/11/2016 14.9 0.30983 0 3.65
10/12/2016 16.1 0.31422 0 3.46
10/13/2016 20.1 0.30866 0 5.64
10/14/2016 13.9 0.30868 0 3.24
10/15/2016 11.1 0.31299 0 3.41
... ... ... ... ...

The time intervals between dates must be equal (e.g., 24 hours) for the model to function accurately.

Initialize the NAM Model

import pandas as pd
from tj_hyd_nam import TJHydNAM, NAMColNames, NAMConfig

# Load the dataset
df = pd.read_csv('data_example.csv')
# Specify the column names as required
nam_col_names = NAMColNames(
    date='Date',
    temperature='Temp',
    precipitation='P',
    evapotranspiration='E',
    discharge='Q'
)
# Configure the model parameters
nam_config = NAMConfig(
    area=58.8,
    start_date=None,
    end_date=None,
    interval=24.0,
    spin_off=0.0,
    umax=0.97,
    lmax=721.56,
    cqof=0.18,
    ckif=495.91,
    ck12=25.16,
    tof=0.97,
    tif=0.11,
    tg=0.19,
    ckbf=1121.74,
    csnow=2.31,
    snowtemp=3.51,
)
NAM = TJHydNAM(
    dataset=df,
    nam_col_names=nam_col_names,
    nam_config=nam_config
)
print(NAM)

The output will detail the NAM model based on the loaded dataset:

TJ_HYD_NAM 🍃 🌧 ☔ 💦
FROM: 2016-10-09 00:00:00+00:00
TO: 2018-09-30 00:00:00+00:00
NAMConfig(area=58.8, start_date=None, end_date=None, flow_rate=0.6805555555555555, interval=24.0, spin_off=0.0, umax=0.97, lmax=721.56, cqof=0.18, ckif=495.91, ck12=25.16, tof=0.97, tif=0.11, tg=0.19, ckbf=1121.74, csnow=2.31, snowtemp=3.51)
NAMStatistic(nse=-0.17835445482281131, rmse=1.7864602332317054, fbias=75.23828249740461)

Display and Save Graphs

# Plot and save the discharge comparison graph
NAM.show_discharge(save=True, filename='discharge.png')
# Plot and save all calculated model information
NAM.show(save=True, filename='result.png')

Optimize the Model

NAM.optimize()
print(NAM)
Optimization terminated successfully    (Exit mode 0)
            Current function value: 2.036882878807083
            Iterations: 7
            Function evaluations: 70
            Gradient evaluations: 7
TJ_HYD_NAM 🍃 🌧  💦
FROM: 2016-10-09 00:00:00+00:00
TO: 2018-09-30 00:00:00+00:00
NAMConfig(area=58.8, start_date=None, end_date=None, flow_rate=0.6805555555555555, interval=24.0, spin_off=0.0, umax=0.97, lmax=721.56, cqof=0.18, ckif=495.91, ck12=25.16, tof=0.97, tif=0.11, tg=0.19, ckbf=1121.74, csnow=2.31, snowtemp=3.51)
NAMStatistic(nse=-0.5318680456177058, rmse=2.036882878807083, fbias=91.77841692580132)

Reconfigure the Model Based on Properties

The model parameters will change and be recalculated based on new properties.

NAM.re_config_by_props(
    start_date=pd.to_datetime('09/10/2016', dayfirst=True, utc=True),
    end_date=pd.to_datetime('20/10/2016', dayfirst=True, utc=True)
)

Reconfigure All Parameters

NAM.re_config(
    NAMConfig(
        area=60,
        start_date=None,
        end_date=None,
        interval=24.0,
        spin_off=0.0,
        umax=0.8,
        lmax=719.56,
        cqof=0.14,
        ckif=493.86,
        ck12=45.16,
        tof=0.97,
        tif=0.45,
        tg=0.19,
        ckbf=1121.74,
        csnow=2.31,
        snowtemp=3.51,
    )
)

Save Calculated Model Data

NAM.save_to_csv('result.csv')

Convert Calculated Data to DataFrame

nam_df = NAM.to_dataframe()

Save the Model

NAM.save('nam_model')

Load a Saved Model

SAVED_NAM = NAM.load('nam_model.tjnam')

Use the Previous Model's Configuration for Prediction

PRED_NAM = TJHydNAM(
    pd.read_csv('future_data.csv'),
    NAMColNames(
        date='Date',
        temperature='Temp',
        precipitation='P',
        evapotranspiration='E',
        discharge='Q'
    ),
    SAVED_NAM.config
)

Accessing calculated variables (>=1.1.0)

NAM.size       # Access the value of _size
NAM.date       # Access the value of _date
NAM.T          # Access the value of _T (temperature series)
NAM.P          # Access the value of _P (precipitation series)
NAM.E          # Access the value of _E (evaporation series)
NAM.Q_obs      # Access the value of _Q_obs (observed discharge)
NAM.U_soil     # Access the value of _U_soil (upper soil layer moisture)
NAM.S_snow     # Access the value of _S_snow (snow storage)
NAM.Q_snow     # Access the value of _Q_snow (snowmelt discharge)
NAM.Q_inter    # Access the value of _Q_inter (interflow discharge)
NAM.E_eal      # Access the value of _E_eal (actual evapotranspiration)
NAM.Q_of       # Access the value of _Q_of (overland flow)
NAM.Q_g        # Access the value of _Q_g (groundwater discharge)
NAM.Q_bf       # Access the value of _Q_bf (baseflow)
NAM.Q_sim      # Access the value of _Q_sim (simulator discharge)
NAM.L_soil     # Access the value of _L_soil (soil moisture)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tj_hyd_nam-1.1.0.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

tj_hyd_nam-1.1.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file tj_hyd_nam-1.1.0.tar.gz.

File metadata

  • Download URL: tj_hyd_nam-1.1.0.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic

File hashes

Hashes for tj_hyd_nam-1.1.0.tar.gz
Algorithm Hash digest
SHA256 a07b242d9b4717a38a966b70b1f676f6870983fc3ef4a260dba67d0ae9e12f6d
MD5 83cd0f63ea7dddaaeb2cf40b3c768978
BLAKE2b-256 3b64c2b8d916bf6719e11d15eeba0a7139eb2cc451b8d830c3debaed11937920

See more details on using hashes here.

File details

Details for the file tj_hyd_nam-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: tj_hyd_nam-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic

File hashes

Hashes for tj_hyd_nam-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ecab740ebffc9af52ce75176419e67942f151284745ca6c6836d0a9997bee8f6
MD5 416b2c39eb5b35a69793604d25e8ab93
BLAKE2b-256 06de017614ac969c52c51a5d086e362f93e84d60e99842b486c2a344d53557d6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page