{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dfs0 - Relative time axis\n", "\n", "MIKE IO uses a pandas DatetimeIndex to represent the time dimension in dfs files. If the Dfs file has a relative time axis it will be converted to DatetimeIndex by using 1970-1-1 00:00:00 as start time. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import mikeio" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "dims: (time:504)\n", "time: 1970-01-01 00:00:00 - 1970-01-01 00:00:56.237000 (504 non-equidistant records)\n", "geometry: GeometryUndefined()\n", "items:\n", " 0: Item 1 (undefined)\n", " 1: Item 2 (undefined)\n", " 2: Item 3 (undefined)\n", " 3: Item 4 (undefined)\n", " 4: Item 5 (undefined)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = mikeio.read(\"../tests/testdata/eq_relative.dfs0\")\n", "ds" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Item 1Item 2Item 3Item 4Item 5
1970-01-01 00:00:00.000-0.006862-0.0006110.17704732.484425-304.720428
1970-01-01 00:00:00.112-0.011746-0.0006110.18925732.292774-308.553406
1970-01-01 00:00:00.224-0.006862-0.0006110.18925732.292774-308.553406
1970-01-01 00:00:00.335-0.0019780.0042730.18925732.292774-300.887482
1970-01-01 00:00:00.4470.0029060.0091570.17704732.292774-300.887482
\n", "
" ], "text/plain": [ " Item 1 Item 2 Item 3 Item 4 Item 5\n", "1970-01-01 00:00:00.000 -0.006862 -0.000611 0.177047 32.484425 -304.720428\n", "1970-01-01 00:00:00.112 -0.011746 -0.000611 0.189257 32.292774 -308.553406\n", "1970-01-01 00:00:00.224 -0.006862 -0.000611 0.189257 32.292774 -308.553406\n", "1970-01-01 00:00:00.335 -0.001978 0.004273 0.189257 32.292774 -300.887482\n", "1970-01-01 00:00:00.447 0.002906 0.009157 0.177047 32.292774 -300.887482" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = ds.to_dataframe()\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Correcing the dataframe index by subtracting start time to get relative time axis." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "df.index = (df.index - df.index[0]).total_seconds()\n", "df.index.name = \"Relative time (s)\"" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Item 1Item 2Item 3Item 4Item 5
Relative time (s)
0.000-0.006862-0.0006110.17704732.484425-304.720428
0.112-0.011746-0.0006110.18925732.292774-308.553406
0.224-0.006862-0.0006110.18925732.292774-308.553406
0.335-0.0019780.0042730.18925732.292774-300.887482
0.4470.0029060.0091570.17704732.292774-300.887482
\n", "
" ], "text/plain": [ " Item 1 Item 2 Item 3 Item 4 Item 5\n", "Relative time (s) \n", "0.000 -0.006862 -0.000611 0.177047 32.484425 -304.720428\n", "0.112 -0.011746 -0.000611 0.189257 32.292774 -308.553406\n", "0.224 -0.006862 -0.000611 0.189257 32.292774 -308.553406\n", "0.335 -0.001978 0.004273 0.189257 32.292774 -300.887482\n", "0.447 0.002906 0.009157 0.177047 32.292774 -300.887482" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df['Item 5'].plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## mikecore\n", "\n", "An alternative is to use the underlying library mikecore to read the file." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from mikecore.DfsFileFactory import DfsFileFactory\n", "\n", "dfs = DfsFileFactory.DfsGenericOpen(\"../tests/testdata/eq_relative.dfs0\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the `ReadDfs0DataDouble` method you get the data as a numpy array, with the time axis or other type of as the first column." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "numpy.ndarray" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = dfs.ReadDfs0DataDouble()\n", "\n", "type(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which can be converted to a pandas dataframe. First we extract the name of items (which in this example hapeens to be not very creative)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['time', 'Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "index_name = \"time\"\n", "items = [i.Name for i in dfs.ItemInfo]\n", "items = [index_name] + items\n", "items" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Item 1Item 2Item 3Item 4Item 5
time
0.000000-0.006862-0.0006110.17704732.484425-304.720428
0.111803-0.011746-0.0006110.18925732.292774-308.553406
0.223606-0.006862-0.0006110.18925732.292774-308.553406
0.335409-0.0019780.0042730.18925732.292774-300.887482
0.4472120.0029060.0091570.17704732.292774-300.887482
\n", "
" ], "text/plain": [ " Item 1 Item 2 Item 3 Item 4 Item 5\n", "time \n", "0.000000 -0.006862 -0.000611 0.177047 32.484425 -304.720428\n", "0.111803 -0.011746 -0.000611 0.189257 32.292774 -308.553406\n", "0.223606 -0.006862 -0.000611 0.189257 32.292774 -308.553406\n", "0.335409 -0.001978 0.004273 0.189257 32.292774 -300.887482\n", "0.447212 0.002906 0.009157 0.177047 32.292774 -300.887482" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as df\n", "\n", "df = df.DataFrame(data, columns=items).set_index(index_name)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "767d51c1340bd893661ea55ea3124f6de3c7a262a8b4abca0554b478b1e2ff90" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.1" }, "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 }