{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial part 1\n", "\n", "In this first part, we'll look at the ``PfLine`` class." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports and example data\n", "\n", "We start by importing the package. In this tutorial we will always be using the ``pf`` alias. We also import ``pandas`` with its common alias ``pd``." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import portfolyo as pf\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For real-life applications, our input data will likely be a ``pandas.Series`` or ``pandas.DataFrame``, read from an Excel workbook, database, or other data service. Before this data can be used, it must often be \"standardized\" so that it has a certain format. That is not part of this tutorial; see [this section](../specialized_topics/dataprep.rst) for more information on standardizing input data.\n", "\n", "In order to get some data \"to play with\", ``portfolyo`` has a few mock functions which we will use in this tutorial. Let's get some example data for 2024 in daily resolution, as a ``pandas.Series``:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2024-01-01 -109.48562536181115\n", "2024-01-02 -117.4094985644938\n", "2024-01-03 -119.41091107114026\n", "2024-01-04 -116.78013138698311\n", "2024-01-05 -119.51185255554175\n", " ... \n", "2024-12-27 -117.70326661059724\n", "2024-12-28 -111.33880609787134\n", "2024-12-29 -98.00848038750523\n", "2024-12-30 -111.01554999345562\n", "2024-12-31 -119.57010826865002\n", "Freq: D, Name: w, Length: 366, dtype: pint[MW]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "index = pd.date_range(\"2024\", freq=\"D\", periods=366)\n", "ts_offtake = -1 * pf.dev.w_offtake(index)\n", "ts_offtake" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The \"w\" in ``w_offtake`` indicates that the timeseries has *power* values, which we can also see by the ``dtype == \"pint[MW]\"``. See [this section on dimensions and units](../specialized_topics/dimensions.rst) for more information.\n", "\n", "(If our data source provides timeseries of floats, i.e., without a unit, we can explicitly set the unit with ``.astype(\"pint[MW]\")``.)\n", "\n", "Sign conventions are a touchy subject for portfolio managers; in this case, the function returns positive values, and we flip the sign to indicate that this volume *leaves* the portfolio.\n", "\n", "## My first portfolio line\n", "\n", "One of the main classes defined by ``portfolyo`` is the ``PfLine`` (portfolio line). \n", "\n", "### Initialisation\n", "\n", "We can initialise one with the offtake timeseries by passing it as a dictionary value. The corresponding key ``\"w\"`` indicates that we are dealing with power values:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PfLine object with volume information.\n", ". Start: 2024-01-01 00:00:00 (incl) . Timezone : none \n", ". End : 2025-01-01 00:00:00 (excl) . Start-of-day: 00:00:00 \n", ". Freq : (366 datapoints)\n", " w q\n", " MW MWh\n", "\n", "2024-01-01 00:00:00 -109.5 -2 628\n", "2024-01-02 00:00:00 -117.4 -2 818\n", "2024-01-03 00:00:00 -119.4 -2 866\n", "2024-01-04 00:00:00 -116.8 -2 803\n", "2024-01-05 00:00:00 -119.5 -2 868\n", "2024-01-06 00:00:00 -110.8 -2 659\n", "2024-01-07 00:00:00 -100.9 -2 422\n", "2024-01-08 00:00:00 -113.4 -2 721\n", "2024-01-09 00:00:00 -117.5 -2 821\n", "2024-01-10 00:00:00 -119.1 -2 858\n", ".. .. ..\n", "2024-12-23 00:00:00 -109.5 -2 628\n", "2024-12-24 00:00:00 -117.4 -2 817\n", "2024-12-25 00:00:00 -115.7 -2 777\n", "2024-12-26 00:00:00 -116.8 -2 803\n", "2024-12-27 00:00:00 -117.7 -2 825\n", "2024-12-28 00:00:00 -111.3 -2 672\n", "2024-12-29 00:00:00 -98.0 -2 352\n", "2024-12-30 00:00:00 -111.0 -2 664\n", "2024-12-31 00:00:00 -119.6 -2 870" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "offtake = pf.PfLine({\"w\": ts_offtake})\n", "offtake" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are 3 kinds of portfolio line. The one above is a volume-only portfolyo line, and this volume is shown both as power ``w`` in [MW] and as energy ``q`` in [MWh].\n", "\n", "We can create a similar portfolio line containing price-only data:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "ts_prices = pf.dev.p_marketprices(index)\n", "prices = pf.PfLine({\"p\": ts_prices})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The third kind is a price-and-volume portfolio line. We can create this, either directly (e.g. by initialising a ``PfLine`` with a dictiory having both an ``'q'`` and ``'r'`` key), or through arithmatic (see below)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's have a look at some of the features of the ``PfLine`` class.\n", "\n", "### Plotting\n", "\n", "A good first look at the data is graphically. For this we can use the ``.plot()`` method:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmgAAADBCAYAAAB7Y0xGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1xklEQVR4nO3deXxcV33//9edubPPSJqRRpstW5JtHe9LbMdrEhsnsZNAQkKgIUBLCJQ0ULYubIWSPmgptLTNt1ughO+vpbTQNl9om/4oCUv4QiBhaQJk4ZCEbGSV90XWMnPv94+RHW0zsuXZZL2fj0cese4cnXPu0SyfOavj+z4iIiIiUj8Cta6AiIiIiIynAE1ERESkzihAExEREakzCtBERERE6owCNBEREZE6owBNREREpM64ta5AOfX3H6n4niHpdJwDBwYqXcycoLYsP7Vpeak9K0PtWn5q0/KqVntmsymn2GPqQTtNrhusdRXOGmrL8lOblpfaszLUruWnNi2vemhPBWgiIiIidUYBmoiIiEidqes5aMaYAPA3wBpgCHiztfbR2tZKREREpLLqvQftlUDUWrsFeB/wydpWR0RERKTy6j1A2w78N4C19h5gQ22rIyIiIlJ5dT3ECTQAh8b8nDfGuNba3FSJ0+l4xVde3Pv0U/zgl09XtIw5Q4PV5ac2LS+1Z2WoXctPbVpWIz/3eOu5m4mHQjWrQ70HaIeB1JifA8WCM6Aqe5b8+Pnn+D8PPlDxcuYC1w2Sy+VrXY2zitq0vNSelaF2LT+1aXkFAw57upbQEktUtJxsNlX0sXof4rwbuBTAGLMZ+GltqyMiIiJSefXeg/Yl4CJjzHcBB7iuxvURERERqbi6DtCstR5wQ63rISIiIlJN9T7EKSIiIjLnKEATERERqTMK0ERERETqjAI0ERERkTqjAE1ERESkzihAExEREakzCtBERERE6owCNBEREZE6owBNREREpM4oQBMRERGpMwrQREREROqMAjQRERGROqMATURERKTOKEATERERqTMK0ERERETqjAI0ERERkTqjAE1ERESkzri1roAxphH4R6ABCAPvsdZ+zxizGbgZyAF3WGtvqmE1RURERKqmHnrQ3gN83Vp7AfBG4K9Hr98CXAtsBzYZY9bVpnoiIiIi1VXzHjTgz4Gh0X+7wKAxpgGIWGsfAzDGfBW4ELivNlUUERERqZ6qBmjGmOuBd0+4fJ219gfGmHYKQ53vojDceXhMmiNA73T5p9NxXDdYptoW8QSVL2MOUVuWn9q0vNSelaF2LT+1afn4nkdLc5JsIlmzOlQ1QLPW3grcOvG6MWYV8AXgt6213xrtQUuNSZICDk6X/4EDA2WqaWm5XL4q5ZztXDeotiwztWl5qT0rQ+1afmrT8goGHPbuOwoDfkXLyWZTRR+r+Rw0Y8xy4F+Ba621XwGw1h4Gho0xi4wxDrAb+HYNqykiIiJSNfUwB+1jQBS42RgDcMhaewVwA/B5IEhhFee9tauiiIiISPXUPEAbDcamun4PsLnK1RERERGpuZoPcYqIiIjIeArQREREROqMAjQRERGROqMATURERKTOKEATERERqTMK0ERERETqjAI0ERERkTqjAE1ERESkzihAExEREakzCtBERERE6owCNBEREZE6owBNREREpM4oQBMRERGpMwrQREREROqMAjQRERGROqMATURERKTOuLWuwAnGmKXAvUCbtXbQGLMZuBnIAXdYa2+qaQVFREREqqQuetCMMQ3AJ4GhMZdvAa4FtgObjDHralE3ERERkWqreYBmjHGATwMfAAZGrzUAEWvtY9ZaH/gqcGHtaikiIiJSPVUd4jTGXA+8e8LlJ4EvWGt/bIw5ca0BODwmzRGgd7r80+k4rhssR1WLe4LKlzGHqC3LT21aXmrPylC7lp/atHx8z6OlOUk2kaxZHaoaoFlrbwVuHXvNGPMocP1o8NYO3AG8HEiNSZYCDk6X/4EDA2Wraym5XL4q5ZztXDeotiwztWl5qT0rQ+1afmrT8goGHPbuOwoDfkXLyWZTRR+r+SIBa+3iE/82xjwBXDy6SGDYGLMI+AWwG9AiAREREZkTah6glXAD8HkgSGEV5701ro+IiIhIVdRVgGat7R7z73uAzbWrjYiIiEht1HwVp4iIiIiMpwBNREREpM4oQBMRERGpMwrQREREROqMAjQRERGROqMATURERKTOKEATERERqTMK0ERERETqjAI0ERERkTqjAE1ERESkzihAExEREakzCtBERERE6owCNBEREZE6UzJAM8b8mjGmo1qVERERERFwp3l8N/BRY8wh4A7gTuAua+3xitdMREREZI4q2YNmrb3WWtsFvBy4H7gKuMcY83VjzHurUD8RERGROeeU5qBZ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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "offtake.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Resampling\n", "\n", "Often we will want to aggregate the data to another frequency. For this we can use the ``.asfreq()`` method, e.g., to get quarterly values:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PfLine object with price information.\n", ". Start: 2024-01-01 00:00:00 (incl) . Timezone : none \n", ". End : 2025-01-01 00:00:00 (excl) . Start-of-day: 00:00:00 \n", ". Freq : (4 datapoints)\n", " p\n", " Eur/MWh\n", "\n", "2024-01-01 00:00:00 120.90\n", "2024-04-01 00:00:00 82.44\n", "2024-07-01 00:00:00 78.99\n", "2024-10-01 00:00:00 117.56" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prices.asfreq(\"QS\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(``portfolyo`` ensures that the values are aggregated correctly. In this case, the price (``p``) values are weighted-averaged (weighted with the duration of each datapoint - in this case a uniform 24h). See [Resampling](../specialized_topics/resampling.rst) for more information.)\n", "\n", "The argument ``\"QS\"`` specifies that we want quarterly values starting from January (same as ``\"QS-JAN\"``). The allowed values, in increasing duration, are following: ``\"15min\"`` (=quarterhourly), ``\"h\"`` (=hourly), ``\"D\"`` (=daily), ``\"MS\"`` (=monthly), ``\"QS\"`` (=quarterly, or ``\"QS-FEB\"``, ``\"QS-MAR\"``, etc.), or ``\"YS\"`` (=yearly, or ``\"YS-FEB\"``, ``\"YS-MAR\"``, etc.).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracting data\n", "\n", "If we want to extract the data in a portfolio line, we have several options.\n", "\n", "Firstly, we can obtain well-known ``pandas.Series``, with the properties ``.w``, ``.q``, ``.p``, ``.r``. For the offtake portfolio line, only ``.w`` and ``.q`` return non-NaN-values; for the price portfolio line, it is only ``.p``:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2024-01-01 134.47496375578058\n", "2024-01-02 133.29093392195819\n", "2024-01-03 129.28921635861454\n", "2024-01-04 125.48318601110948\n", "2024-01-05 124.7388613599846\n", " ... \n", "2024-12-27 123.37095664514214\n", "2024-12-28 126.24882933415036\n", "2024-12-29 130.58180253056403\n", "2024-12-30 133.10705904093814\n", "2024-12-31 131.92302920711575\n", "Freq: D, Name: p, Length: 366, dtype: pint[Eur/MW/h]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prices.p" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As can be seen from the data type, this series includes the unit (using the ``pint`` package), but this can be easily stripped with ``.pint.m``, returning a plain timeseries of floats.\n", "\n", "We can also obtain a ``pandas.DataFrame`` with the ``.df()`` method. Here too the unit is included. In this case, it can be stripped (and inserted as a column level) with ``.pint.dequantify()``, as demonstrated here:" ] }, { "cell_type": "code", "execution_count": 9, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
wq
unitMWMW·h
2024-01-01-109.485625-2627.655009
2024-01-02-117.409499-2817.827966
2024-01-03-119.410911-2865.861866
2024-01-04-116.780131-2802.723153
2024-01-05-119.511853-2868.284461
.........
2024-12-27-117.703267-2824.878399
2024-12-28-111.338806-2672.131346
2024-12-29-98.008480-2352.203529
2024-12-30-111.015550-2664.373200
2024-12-31-119.570108-2869.682598
\n", "

366 rows × 2 columns

\n", "
" ], "text/plain": [ " w q\n", "unit MW MW·h\n", "2024-01-01 -109.485625 -2627.655009\n", "2024-01-02 -117.409499 -2817.827966\n", "2024-01-03 -119.410911 -2865.861866\n", "2024-01-04 -116.780131 -2802.723153\n", "2024-01-05 -119.511853 -2868.284461\n", "... ... ...\n", "2024-12-27 -117.703267 -2824.878399\n", "2024-12-28 -111.338806 -2672.131346\n", "2024-12-29 -98.008480 -2352.203529\n", "2024-12-30 -111.015550 -2664.373200\n", "2024-12-31 -119.570108 -2869.682598\n", "\n", "[366 rows x 2 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "offtake.df().pint.dequantify()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we can export the data to an Excel workbook with the ``.to_excel()`` method, or copy it to the clipboard (to be pasted into e.g. Excel) with the ``.to_clipboard()`` method:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "offtake.to_clipboard()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Arithmatic with portfolio lines\n", "\n", "We can do arithmatic with portfolio line. For details on what is possible and which are the return values, see the table [here](../core/pfline.rst#arithmatic). \n", "\n", "A useful function is ``pf.Q_()``, which returns a single ``pint.Quantity`` and understands various units:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pf.Q_(200.0, \"MW\") == pf.Q_(0.2, \"GW\") == pf.Q_(12.0, \"GJ/min\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Adding / Subtracting fixed value\n", "\n", "We can increase the offtake by a uniform 200 MW like so: (``-`` due to the offtake being negative.)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PfLine object with volume information.\n", ". Start: 2024-01-01 00:00:00 (incl) . Timezone : none \n", ". End : 2025-01-01 00:00:00 (excl) . Start-of-day: 00:00:00 \n", ". Freq : (366 datapoints)\n", " w q\n", " MW MWh\n", "\n", "2024-01-01 00:00:00 -309.5 -7 428\n", "2024-01-02 00:00:00 -317.4 -7 618\n", "2024-01-03 00:00:00 -319.4 -7 666\n", "2024-01-04 00:00:00 -316.8 -7 603\n", "2024-01-05 00:00:00 -319.5 -7 668\n", "2024-01-06 00:00:00 -310.8 -7 459\n", "2024-01-07 00:00:00 -300.9 -7 222\n", "2024-01-08 00:00:00 -313.4 -7 521\n", "2024-01-09 00:00:00 -317.5 -7 621\n", "2024-01-10 00:00:00 -319.1 -7 658\n", ".. .. ..\n", "2024-12-23 00:00:00 -309.5 -7 428\n", "2024-12-24 00:00:00 -317.4 -7 617\n", "2024-12-25 00:00:00 -315.7 -7 577\n", "2024-12-26 00:00:00 -316.8 -7 603\n", "2024-12-27 00:00:00 -317.7 -7 625\n", "2024-12-28 00:00:00 -311.3 -7 472\n", "2024-12-29 00:00:00 -298.0 -7 152\n", "2024-12-30 00:00:00 -311.0 -7 464\n", "2024-12-31 00:00:00 -319.6 -7 670" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "offtake - pf.Q_(0.2, \"GW\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, if we prefer to work with floats, we could also use a dictionary to specify the power, like so: ``offtake - {\"q\": 200}``. In this case, it is assumed that our value is in the default unit.\n", "\n", "### Multiplying / Dividing with fixed factor\n", "\n", "Likewise we can multiply the data with a factor. If the offtake increases to 120%, we get" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PfLine object with volume information.\n", ". Start: 2024-01-01 00:00:00 (incl) . Timezone : none \n", ". End : 2025-01-01 00:00:00 (excl) . Start-of-day: 00:00:00 \n", ". Freq : (366 datapoints)\n", " w q\n", " MW MWh\n", "\n", "2024-01-01 00:00:00 -131.4 -3 153\n", "2024-01-02 00:00:00 -140.9 -3 381\n", "2024-01-03 00:00:00 -143.3 -3 439\n", "2024-01-04 00:00:00 -140.1 -3 363\n", "2024-01-05 00:00:00 -143.4 -3 442\n", "2024-01-06 00:00:00 -132.9 -3 190\n", "2024-01-07 00:00:00 -121.1 -2 906\n", "2024-01-08 00:00:00 -136.1 -3 266\n", "2024-01-09 00:00:00 -141.0 -3 385\n", "2024-01-10 00:00:00 -142.9 -3 429\n", ".. .. ..\n", "2024-12-23 00:00:00 -131.4 -3 153\n", "2024-12-24 00:00:00 -140.9 -3 381\n", "2024-12-25 00:00:00 -138.9 -3 333\n", "2024-12-26 00:00:00 -140.1 -3 363\n", "2024-12-27 00:00:00 -141.2 -3 390\n", "2024-12-28 00:00:00 -133.6 -3 207\n", "2024-12-29 00:00:00 -117.6 -2 823\n", "2024-12-30 00:00:00 -133.2 -3 197\n", "2024-12-31 00:00:00 -143.5 -3 444" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "offtake * 1.2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Arithmatic using timeseries\n", "\n", "We don't have to use uniform values: we can also use other timeseries as operands. For example, if we expect a steady increase of the offtake, we can create a timeseries like this:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2024-01-01 0.000000\n", "2024-01-02 0.002055\n", "2024-01-03 0.004110\n", "2024-01-04 0.006164\n", "2024-01-05 0.008219\n", " ... \n", "2024-12-27 0.741781\n", "2024-12-28 0.743836\n", "2024-12-29 0.745890\n", "2024-12-30 0.747945\n", "2024-12-31 0.750000\n", "Freq: D, Length: 366, dtype: float64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yearfraction = (index - index[0]) / (\n", " index[-1] - index[0]\n", ") # values from 0 at start of index to 1 at end\n", "increase = pd.Series(yearfraction * 0.75, index)\n", "increase" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... which can be multiplied with the offtake in the following way, to increase the offtake with a varying percentage, that ranges from +0% on Jan 01 to +75% on Dec. 31:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "more_offtake = offtake * (1 + increase)\n", "more_offtake.plot();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Combining volume and price\n", "\n", "We can also combine the offtake volume with a price, which gives us a price-and-volume portfolio line. We can use fixed values, like here:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PfLine object with price and volume information.\n", ". Start: 2024-01-01 00:00:00 (incl) . Timezone : none \n", ". End : 2025-01-01 00:00:00 (excl) . Start-of-day: 00:00:00 \n", ". Freq : (366 datapoints)\n", " w q p r\n", " MW MWh Eur/MWh Eur\n", "\n", "2024-01-01 00:00:00 -109.5 -2 628 110.00 -289 042\n", "2024-01-02 00:00:00 -117.4 -2 818 110.00 -309 961\n", "2024-01-03 00:00:00 -119.4 -2 866 110.00 -315 245\n", "2024-01-04 00:00:00 -116.8 -2 803 110.00 -308 300\n", "2024-01-05 00:00:00 -119.5 -2 868 110.00 -315 511\n", "2024-01-06 00:00:00 -110.8 -2 659 110.00 -292 440\n", "2024-01-07 00:00:00 -100.9 -2 422 110.00 -266 384\n", "2024-01-08 00:00:00 -113.4 -2 721 110.00 -299 346\n", "2024-01-09 00:00:00 -117.5 -2 821 110.00 -310 308\n", "2024-01-10 00:00:00 -119.1 -2 858 110.00 -314 336\n", ".. .. .. .. ..\n", "2024-12-23 00:00:00 -109.5 -2 628 110.00 -289 036\n", "2024-12-24 00:00:00 -117.4 -2 817 110.00 -309 903\n", "2024-12-25 00:00:00 -115.7 -2 777 110.00 -305 507\n", "2024-12-26 00:00:00 -116.8 -2 803 110.00 -308 292\n", "2024-12-27 00:00:00 -117.7 -2 825 110.00 -310 737\n", "2024-12-28 00:00:00 -111.3 -2 672 110.00 -293 934\n", "2024-12-29 00:00:00 -98.0 -2 352 110.00 -258 742\n", "2024-12-30 00:00:00 -111.0 -2 664 110.00 -293 081\n", "2024-12-31 00:00:00 -119.6 -2 870 110.00 -315 665" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "offtake * pf.Q_(11.0, \"ctEur/kWh\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "... or timeseries or other ``PfLine`` instances, like here:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "valued_offtake = offtake * prices # multiplying two PfLines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The resulting portfolio lines can again be resampled:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PfLine object with price and volume information.\n", ". Start: 2024-01-01 00:00:00 (incl) . Timezone : none \n", ". End : 2025-01-01 00:00:00 (excl) . Start-of-day: 00:00:00 \n", ". Freq : (4 datapoints)\n", " w q p r\n", " MW MWh Eur/MWh Eur\n", "\n", "2024-01-01 00:00:00 -110.0 -240 325 121.14 -29 111 995\n", "2024-04-01 00:00:00 -85.4 -186 608 83.12 -15 509 925\n", "2024-07-01 00:00:00 -78.5 -173 366 79.27 -13 743 550\n", "2024-10-01 00:00:00 -103.2 -227 849 118.09 -26 907 440" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valued_offtake.asfreq(\"QS\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that, even though ``prices`` and ``valued_offtake`` use the same price values at the daily resolution, the prices at quarterly resolution are slightly different. This is not an error: the values in ``prices`` are simply averaged (or actually, weighted with the duration of each timestamp, but those are uniform), whereas the values in ``valued_offtake`` are weighted with the energy in each timestamp.\n", "\n", "This tutorial is continued [in part 2](part2.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.13 ('pf38')", "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.10.14" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "642a4be8010ca5d45039b988c1d8379a91572488c4d23a0b88e966c6713c7e45" } } }, "nbformat": 4, "nbformat_minor": 2 }