A package that works with the DHI dfs libraries to facilitate creating, writing and reading dfs, res1d and mesh files.
Project description
mikeio: input/output of MIKE files in python
Facilitate creating, reading and writing dfs0, dfs2, dfs1 and dfs3, dfsu and mesh files. Reading Res1D data.
Requirements
In a future version of mikeio
we will try to include MIKE SDK to avoid having to install this separately.
Installation
pip install mikeio
Or development version:
pip install https://github.com/DHI/mikeio/archive/master.zip
Examples
Reading data from dfs0, dfs1, dfs2, dfsu
Generic read
method to read values, if you need additional features such as coordinates, use specialised classes instead e.g. Dfsu
>>> import mikeio
>>> ds = mikeio.read("random.dfs0")
>>> ds
DataSet(data, time, items)
Number of items: 2
Shape: (1000,)
2017-01-01 00:00:00 - 2017-07-28 03:00:00
>>> ds = mikeio.read("random.dfs1")
>>> ds
DataSet(data, time, items)
Number of items: 1
Shape: (100, 3)
2012-01-01 00:00:00 - 2012-01-01 00:19:48
Reading dfs0 file into Pandas DataFrame
>>> from mikeio import Dfs0
>>> dfs = Dfs0()
>>> ts = dfs.to_dataframe('simple.dfs0')
Create simple timeseries
>>> from datetime import datetime, timedelta
>>> import numpy as np
>>> from mikeio import Dfs0
>>> data = []
>>> d = np.random.random([100])
>>> data.append(d)
>>> dfs = Dfs0()
>>> dfs.create(filename='simple.dfs0',
>>> data=data,
>>> start_time=datetime(2017, 1, 1),
>>> dt=60)
Create timeseries from dataframe
import pandas as pd
import mikeio
>>> df = pd.read_csv(
... "tests/testdata/co2-mm-mlo.csv",
... parse_dates=True,
... index_col="Date",
... na_values=-99.99,
... )
>>> df.to_dfs0("mauna_loa.dfs0")
For more examples on timeseries data see this notebook
Read dfs2 data
>>> from mikeio import Dfs2
>>> ds = dfs.read("tests/testdata/random.dfs2")
>>> ds
DataSet(data, time, items)
Number of items: 1
Shape: (3, 100, 2)
2012-01-01 00:00:00 - 2012-01-01 00:00:24
>>> ds.items
[testing water level <Water Level> (meter)]
Create dfs2
For a complete example of conversion from netcdf to dfs2 see this notebook.
Another example of downloading meteorlogical forecast from the Global Forecasting System and converting it to a dfs2 ready to be used by a MIKE 21 model.
Read Res1D file Return Pandas DataFrame
>>> import res1d as r1d
>>> p1 = r1d.ExtractionPoint()
>>> p1.BranchName = 'branch1'
>>> p1.Chainage = 10.11
>>> p1.VariableType = 'Discharge'
>>> ts = r1d.read('res1dfile.res1d', [p1])
Read dfsu files
>>> import matplotlib.pyplot as plt
>>> from mikeio import Dfsu
>>> dfs = Dfsu()
>>> filename = "HD.dfsu"
>>> res = dfs.read(filename)
>>> idx = dfs.find_closest_element_index(x=608000, y=6907000)
>>> plt.plot(res.time, res.data[0][:,idx])
Items, units
Useful when creating a new dfs file
>>> from mikeio.eum import EUMType, EUMUnit
>>> EUMType.Temperature
<EUMType.Temperature: 100006>
>>> EUMType.Temperature.units
[degree Celsius, degree Fahrenheit, degree Kelvin]
>>> EUMUnit.degree_Kelvin
degree Kelvin
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.