diff --git a/notebooks/scmensemble.ipynb b/notebooks/scmensemble.ipynb new file mode 100644 index 00000000..9ee4c529 --- /dev/null +++ b/notebooks/scmensemble.ipynb @@ -0,0 +1,4003 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ScmEnsemble\n", + "\n", + "In this notebook we provide an overview of the capabilities provided by scmdata's `ScmEnsemble` class.\n", + "This class acts as a container for one or more `ScmRun` objects which allows for the joining of data across different timebases." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# NBVAL_IGNORE_OUTPUT\n", + "from scmdata import ScmEnsemble, ScmRun" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading data\n", + "\n", + "`ScmEnsemble`'s can read many different data types and be loaded in many different ways.\n", + "For a full explanation, see the docstring of `ScmEnsemble`'s `__init__` method." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + " Parameters\n", + " ----------\n", + " runs : list of ScmRun\n", + " \n" + ] + } + ], + "source": [ + "print(ScmEnsemble.__init__.__doc__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we load data from a file.\n", + "\n", + "*Note:* here we load RCP26 emissions data. This originally came from http://www.pik-potsdam.de/~mmalte/rcps/ and has since been re-written into a format which can be read by scmdata using the [pymagicc](https://github.com/openclimatedata/pymagicc) library. We are not currently planning on importing Pymagicc's readers into scmdata by default, please raise an issue [here](https://github.com/openscm/scmdata/issues) if you would like us to consider doing so." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "rcp26 = ScmRun(\"rcp26_emissions.csv\", lowercase_cols=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Timeseries\n", + "\n", + "`ScmDataFrame` is ideally suited to working with timeseries data.\n", + "The `timeseries` method allows you to easily get the data back in wide format as a *pandas* `DataFrame`.\n", + "Here 'wide' format refers to representing timeseries as a row with metadata being contained in the row labels." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "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", + " \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", + " \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", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|BCMt BC / yr0.0000000.1069980.1333830.1598470.1863930.2130240.2397420.2665500.2934500.320446...3.35783.35783.35783.35783.35783.35783.35783.35783.35783.3578
Emissions|C2F6kt C2F6 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.08570.08570.08570.08570.08570.08570.08570.08570.08570.0857
Emissions|C6F14kt C6F14 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.08870.08870.08870.08870.08870.08870.08870.08870.08870.0887
Emissions|CCl4kt CCl4 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.00000.00000.00000.00000.00000.00000.00000.00000.00000.0000
Emissions|CF4kt CF4 / yr0.0107630.0107520.0107480.0107440.0107400.0107360.0107310.0107270.0107230.010719...1.09201.09201.09201.09201.09201.09201.09201.09201.09201.0920
\n", + "

5 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.000000 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010763 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.106998 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010752 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.133383 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010748 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.159847 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010744 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.186393 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010740 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.213024 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010736 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.239742 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010731 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.266550 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010727 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.293450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010723 \n", + "\n", + "time 1774-01-01 00:00:00 ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.320446 ... \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 ... \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 ... \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 ... \n", + " Emissions|CF4 kt CF4 / yr 0.010719 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "[5 rows x 736 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.timeseries().head()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(rcp26.timeseries())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operations with scalars\n", + "\n", + "Basic operations with scalars are easily performed." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "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", + " \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", + " \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", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|BCMt BC / yr0.0000000.1069980.1333830.1598470.1863930.2130240.2397420.2665500.2934500.320446...3.35783.35783.35783.35783.35783.35783.35783.35783.35783.3578
Emissions|C2F6kt C2F6 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.08570.08570.08570.08570.08570.08570.08570.08570.08570.0857
Emissions|C6F14kt C6F14 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.08870.08870.08870.08870.08870.08870.08870.08870.08870.0887
Emissions|CCl4kt CCl4 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.00000.00000.00000.00000.00000.00000.00000.00000.00000.0000
Emissions|CF4kt CF4 / yr0.0107630.0107520.0107480.0107440.0107400.0107360.0107310.0107270.0107230.010719...1.09201.09201.09201.09201.09201.09201.09201.09201.09201.0920
\n", + "

5 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.000000 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010763 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.106998 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010752 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.133383 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010748 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.159847 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010744 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.186393 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010740 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.213024 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010736 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.239742 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010731 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.266550 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010727 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.293450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.010723 \n", + "\n", + "time 1774-01-01 00:00:00 ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.320446 ... \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 ... \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 ... \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 ... \n", + " Emissions|CF4 kt CF4 / yr 0.010719 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 0.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 0.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 0.0000 \n", + " Emissions|CF4 kt CF4 / yr 1.0920 \n", + "\n", + "[5 rows x 736 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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", + " \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", + " \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", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|BCMt BC / yr2.0000002.1069982.1333832.1598472.1863932.2130242.2397422.2665502.2934502.320446...5.35785.35785.35785.35785.35785.35785.35785.35785.35785.3578
Emissions|C2F6kt C2F6 / yr2.0000002.0000002.0000002.0000002.0000002.0000002.0000002.0000002.0000002.000000...2.08572.08572.08572.08572.08572.08572.08572.08572.08572.0857
Emissions|C6F14kt C6F14 / yr2.0000002.0000002.0000002.0000002.0000002.0000002.0000002.0000002.0000002.000000...2.08872.08872.08872.08872.08872.08872.08872.08872.08872.0887
Emissions|CCl4kt CCl4 / yr2.0000002.0000002.0000002.0000002.0000002.0000002.0000002.0000002.0000002.000000...2.00002.00002.00002.00002.00002.00002.00002.00002.00002.0000
Emissions|CF4kt CF4 / yr2.0107632.0107522.0107482.0107442.0107402.0107362.0107312.0107272.0107232.010719...3.09203.09203.09203.09203.09203.09203.09203.09203.09203.0920
\n", + "

5 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.000000 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010763 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.106998 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010752 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.133383 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010748 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.159847 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010744 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.186393 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010740 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.213024 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010736 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.239742 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010731 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.266550 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010727 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.293450 \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 \n", + " Emissions|CF4 kt CF4 / yr 2.010723 \n", + "\n", + "time 1774-01-01 00:00:00 ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 2.320446 ... \n", + " Emissions|C2F6 kt C2F6 / yr 2.000000 ... \n", + " Emissions|C6F14 kt C6F14 / yr 2.000000 ... \n", + " Emissions|CCl4 kt CCl4 / yr 2.000000 ... \n", + " Emissions|CF4 kt CF4 / yr 2.010719 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 5.3578 \n", + " Emissions|C2F6 kt C2F6 / yr 2.0857 \n", + " Emissions|C6F14 kt C6F14 / yr 2.0887 \n", + " Emissions|CCl4 kt CCl4 / yr 2.0000 \n", + " Emissions|CF4 kt CF4 / yr 3.0920 \n", + "\n", + "[5 rows x 736 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(rcp26 + 2).head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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", + " \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", + " \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", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|BCMt BC / yr0.0000000.0267490.0333460.0399620.0465980.0532560.0599350.0666370.0733620.080112...0.8394500.8394500.8394500.8394500.8394500.8394500.8394500.8394500.8394500.839450
Emissions|C2F6kt C2F6 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.0214250.0214250.0214250.0214250.0214250.0214250.0214250.0214250.0214250.021425
Emissions|C6F14kt C6F14 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.0221750.0221750.0221750.0221750.0221750.0221750.0221750.0221750.0221750.022175
Emissions|CCl4kt CCl4 / yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
Emissions|CF4kt CF4 / yr0.0026910.0026880.0026870.0026860.0026850.0026840.0026830.0026820.0026810.002680...0.2730000.2730000.2730000.2730000.2730000.2730000.2730000.2730000.2730000.273000
\n", + "

5 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.000000 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002691 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.026749 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002688 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.033346 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002687 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.039962 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002686 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.046598 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002685 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.053256 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002684 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.059935 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002683 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.066637 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002682 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.073362 \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.002681 \n", + "\n", + "time 1774-01-01 00:00:00 ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.080112 ... \n", + " Emissions|C2F6 kt C2F6 / yr 0.000000 ... \n", + " Emissions|C6F14 kt C6F14 / yr 0.000000 ... \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 ... \n", + " Emissions|CF4 kt CF4 / yr 0.002680 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.839450 \n", + " Emissions|C2F6 kt C2F6 / yr 0.021425 \n", + " Emissions|C6F14 kt C6F14 / yr 0.022175 \n", + " Emissions|CCl4 kt CCl4 / yr 0.000000 \n", + " Emissions|CF4 kt CF4 / yr 0.273000 \n", + "\n", + "[5 rows x 736 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(rcp26 / 4).head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`ScmRun` instances also support operations with [Pint](https://github.com/hgrecco/pint) scalars, permitting automatic unit conversion and error raising. For interested readers, the scmdata package uses the [OpenSCM-Units](https://openscm-units.readthedocs.io/) unit registry." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "to_add = 500 * ur(\"MtCO2 / yr\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we try to add 0.5 GtC / yr to all the timeseries, we'll get a `DimensionalityError`." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "pint.errors.DimensionalityError: Cannot convert from 'BC * megametric_ton / a' ([black_carbon] * [mass] / [time]) to 'megatCO2 / a' ([carbon] * [mass] / [time])\n" + ] + } + ], + "source": [ + "try:\n", + " rcp26 + to_add\n", + "except DimensionalityError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, if we filter things correctly, this operation is perfectly valid." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jared/code/uom/scmdata/venv/lib/python3.7/site-packages/numpy/core/_asarray.py:83: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|CO2|MAGICC AFOLUC * gigametric_ton / a0.1363640.1417020.147040.1523790.1577170.1630550.1683930.1737320.179070.184408...0.1363640.1363640.1363640.1363640.1363640.1363640.1363640.1363640.1363640.136364
\n", + "

1 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.141702 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.14704 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.152379 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.157717 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.163055 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.168393 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.173732 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.17907 \n", + "\n", + "time 1774-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.184408 \n", + "\n", + "time ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU C * gigametric_ton / a 0.136364 \n", + "\n", + "[1 rows x 736 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(rcp26.filter(variable=\"Emissions|CO2|MAGICC AFOLU\") + to_add).head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This can be compared to the raw data as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|CO2|MAGICC AFOLUGt C / yr0.00.0053380.0106770.0160150.0213530.0266910.032030.0373680.0427060.048045...0.00.00.00.00.00.00.00.00.00.0
\n", + "

1 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.005338 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.010677 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.016015 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.021353 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.026691 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.03203 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.037368 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.042706 \n", + "\n", + "time 1774-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.048045 \n", + "\n", + "time ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0 \n", + "\n", + "[1 rows x 736 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.filter(variable=\"Emissions|CO2|MAGICC AFOLU\").head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Unit conversion\n", + "\n", + "The scmdata package uses the [OpenSCM-Units](https://openscm-units.readthedocs.io/) unit registry and uses the [Pint](https://github.com/hgrecco/pint) library to handle unit conversion.\n", + "\n", + "Calling the `convert_unit` method of an `ScmRun` returns a new `ScmRun` instance with converted units." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|BCMt BC / yr0.00.1069980.1333830.1598470.1863930.2130240.2397420.266550.293450.320446...3.35783.35783.35783.35783.35783.35783.35783.35783.35783.3578
\n", + "

1 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.0 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.106998 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.133383 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.159847 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.186393 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.213024 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.239742 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.26655 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.29345 \n", + "\n", + "time 1774-01-01 00:00:00 ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 0.320446 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC Mt BC / yr 3.3578 \n", + "\n", + "[1 rows x 736 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.filter(variable=\"Emissions|BC\").timeseries()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|BCkg BC / day0.0292944.558522365181.6564437636.605065510316.112252583227.186858656376.947296729772.785763803422.313484877333.360712...9.193155e+069.193155e+069.193155e+069.193155e+069.193155e+069.193155e+069.193155e+069.193155e+069.193155e+069.193155e+06
\n", + "

1 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 0.0 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 292944.558522 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 365181.6564 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 437636.605065 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 510316.112252 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 583227.186858 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 656376.947296 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 729772.785763 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 803422.313484 \n", + "\n", + "time 1774-01-01 00:00:00 ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 877333.360712 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|BC kg BC / day 9.193155e+06 \n", + "\n", + "[1 rows x 736 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.filter(variable=\"Emissions|BC\").convert_unit(\"kg BC / day\").timeseries()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that you must filter your data first as the unit conversion is applied to all available variables. If you do not, you will receive `DimensionalityError`'s." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "pint.errors.DimensionalityError: Cannot convert from 'C * gigametric_ton / a' ([carbon] * [mass] / [time]) to 'BC * kilogram / day' ([black_carbon] * [mass] / [time])\n" + ] + } + ], + "source": [ + "try:\n", + " rcp26.convert_unit(\"kg BC / day\").timeseries()\n", + "except DimensionalityError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Having said this, thanks to Pint's idea of contexts, we are able to trivially convert to CO2 equivalent units (as long as we restrict our conversion to variables which have a CO2 equivalent)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunit
IMAGERCP26WorldEmissions|CH4Mt CH4 / yr0.0001.9632622.4364482.9111053.3872783.8650154.3443624.8253725.3080945.792582...142.0527142.0527142.0527142.0527142.0527142.0527142.0527142.0527142.0527142.0527
Emissions|CO2|MAGICC AFOLUGt C / yr0.0000.0053380.0106770.0160150.0213530.0266910.0320300.0373680.0427060.048045...0.00000.00000.00000.00000.00000.00000.00000.00000.00000.0000
Emissions|CO2|MAGICC Fossil and IndustrialGt C / yr0.0030.0030000.0030000.0030000.0030000.0030000.0040000.0040000.0040000.004000...-0.9308-0.9308-0.9308-0.9308-0.9308-0.9308-0.9308-0.9308-0.9308-0.9308
Emissions|N2OMt N2ON / yr0.0000.0051910.0101170.0150430.0199690.0248960.0298220.0347500.0396770.044605...5.28235.28235.28235.28235.28235.28235.28235.28235.28235.2823
\n", + "

4 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 0.000 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003 \n", + " Emissions|N2O Mt N2ON / yr 0.000 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 1.963262 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.005338 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n", + " Emissions|N2O Mt N2ON / yr 0.005191 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 2.436448 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.010677 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n", + " Emissions|N2O Mt N2ON / yr 0.010117 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 2.911105 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.016015 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n", + " Emissions|N2O Mt N2ON / yr 0.015043 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 3.387278 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.021353 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n", + " Emissions|N2O Mt N2ON / yr 0.019969 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 3.865015 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.026691 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.003000 \n", + " Emissions|N2O Mt N2ON / yr 0.024896 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 4.344362 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.032030 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n", + " Emissions|N2O Mt N2ON / yr 0.029822 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 4.825372 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.037368 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n", + " Emissions|N2O Mt N2ON / yr 0.034750 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 5.308094 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.042706 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n", + " Emissions|N2O Mt N2ON / yr 0.039677 \n", + "\n", + "time 1774-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 5.792582 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.048045 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr 0.004000 \n", + " Emissions|N2O Mt N2ON / yr 0.044605 \n", + "\n", + "time ... \\\n", + "model scenario region variable unit ... \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr ... \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr ... \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr ... \n", + " Emissions|N2O Mt N2ON / yr ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit \n", + "IMAGE RCP26 World Emissions|CH4 Mt CH4 / yr 142.0527 \n", + " Emissions|CO2|MAGICC AFOLU Gt C / yr 0.0000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Gt C / yr -0.9308 \n", + " Emissions|N2O Mt N2ON / yr 5.2823 \n", + "\n", + "[4 rows x 736 columns]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.filter(variable=[\"*CO2*\", \"*CH4*\", \"*N2O*\"]).timeseries()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "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", + " \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", + " \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", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunitunit_context
IMAGERCP26WorldEmissions|CH4Mt CO2 / yrAR4GWP1000.049.08154760.91120272.77762584.68195596.625365108.609062120.634295132.702345144.814540...3551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.317500
Emissions|CO2|MAGICC AFOLUMt CO2 / yrAR4GWP1000.019.57375339.14750858.72126078.29501297.868767117.442519137.016271156.590027176.163779...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
Emissions|CO2|MAGICC Fossil and IndustrialMt CO2 / yrAR4GWP10011.011.00000011.00000011.00000011.00000011.00000014.66666614.66666614.66666614.666666...-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333
Emissions|N2OMt CO2 / yrAR4GWP1000.02.4309114.7375597.0443309.35122711.65825413.96541716.27271718.58016120.887751...2473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.625629
\n", + "

4 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 0.0 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.0 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.0 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 0.0 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 49.081547 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 19.573753 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2.430911 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 60.911202 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 39.147508 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 4.737559 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 72.777625 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 58.721260 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 7.044330 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 84.681955 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 78.295012 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 9.351227 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 96.625365 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 97.868767 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 11.658254 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 108.609062 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 117.442519 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 13.965417 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 120.634295 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 137.016271 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 16.272717 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 132.702345 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 156.590027 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 18.580161 \n", + "\n", + "time 1774-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 144.814540 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 176.163779 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 20.887751 \n", + "\n", + "time ... \\\n", + "model scenario region variable unit unit_context ... \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 ... \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 ... \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 ... \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "[4 rows x 736 columns]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.filter(variable=[\"*CO2*\", \"*CH4*\", \"*N2O*\"]).convert_unit(\n", + " \"Mt CO2 / yr\", context=\"AR4GWP100\"\n", + ").timeseries()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Without the context, a `DimensionalityError` is once again raised." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "pint.errors.DimensionalityError: Cannot convert from 'BC * megametric_ton / a' ([black_carbon] * [mass] / [time]) to 'CO2 * megametric_ton / a' ([carbon] * [mass] / [time])\n" + ] + } + ], + "source": [ + "try:\n", + " rcp26.convert_unit(\"Mt CO2 / yr\").timeseries()\n", + "except DimensionalityError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition, when we do a conversion with contexts, the context information is automatically added to the metadata. This ensures we can't accidentally use a different context for further conversions." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "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", + " \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", + " \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", + "
time1765-01-01 00:00:001766-01-01 00:00:001767-01-01 00:00:001768-01-01 00:00:001769-01-01 00:00:001770-01-01 00:00:001771-01-01 00:00:001772-01-01 00:00:001773-01-01 00:00:001774-01-01 00:00:00...2491-01-01 00:00:002492-01-01 00:00:002493-01-01 00:00:002494-01-01 00:00:002495-01-01 00:00:002496-01-01 00:00:002497-01-01 00:00:002498-01-01 00:00:002499-01-01 00:00:002500-01-01 00:00:00
modelscenarioregionvariableunitunit_context
IMAGERCP26WorldEmissions|CH4Mt CO2 / yrAR4GWP1000.049.08154760.91120272.77762584.68195596.625365108.609062120.634295132.702345144.814540...3551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.3175003551.317500
Emissions|CO2|MAGICC AFOLUMt CO2 / yrAR4GWP1000.019.57375339.14750858.72126078.29501297.868767117.442519137.016271156.590027176.163779...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
Emissions|CO2|MAGICC Fossil and IndustrialMt CO2 / yrAR4GWP10011.011.00000011.00000011.00000011.00000011.00000014.66666614.66666614.66666614.666666...-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333-3412.933333
Emissions|N2OMt CO2 / yrAR4GWP1000.02.4309114.7375597.0443309.35122711.65825413.96541716.27271718.58016120.887751...2473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.6256292473.625629
\n", + "

4 rows × 736 columns

\n", + "
" + ], + "text/plain": [ + "time 1765-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 0.0 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.0 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.0 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 0.0 \n", + "\n", + "time 1766-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 49.081547 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 19.573753 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2.430911 \n", + "\n", + "time 1767-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 60.911202 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 39.147508 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 4.737559 \n", + "\n", + "time 1768-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 72.777625 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 58.721260 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 7.044330 \n", + "\n", + "time 1769-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 84.681955 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 78.295012 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 9.351227 \n", + "\n", + "time 1770-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 96.625365 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 97.868767 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 11.000000 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 11.658254 \n", + "\n", + "time 1771-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 108.609062 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 117.442519 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 13.965417 \n", + "\n", + "time 1772-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 120.634295 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 137.016271 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 16.272717 \n", + "\n", + "time 1773-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 132.702345 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 156.590027 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 18.580161 \n", + "\n", + "time 1774-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 144.814540 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 176.163779 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 14.666666 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 20.887751 \n", + "\n", + "time ... \\\n", + "model scenario region variable unit unit_context ... \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 ... \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 ... \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 ... \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 ... \n", + "\n", + "time 2491-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2492-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2493-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2494-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2495-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2496-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2497-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2498-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2499-01-01 00:00:00 \\\n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "time 2500-01-01 00:00:00 \n", + "model scenario region variable unit unit_context \n", + "IMAGE RCP26 World Emissions|CH4 Mt CO2 / yr AR4GWP100 3551.317500 \n", + " Emissions|CO2|MAGICC AFOLU Mt CO2 / yr AR4GWP100 0.000000 \n", + " Emissions|CO2|MAGICC Fossil and Industrial Mt CO2 / yr AR4GWP100 -3412.933333 \n", + " Emissions|N2O Mt CO2 / yr AR4GWP100 2473.625629 \n", + "\n", + "[4 rows x 736 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ar4gwp100_converted = rcp26.filter(\n", + " variable=[\"*CO2*\", \"*CH4*\", \"*N2O*\"]\n", + ").convert_unit(\"Mt CO2 / yr\", context=\"AR4GWP100\")\n", + "ar4gwp100_converted.timeseries()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Trying to convert without a context, or with a different context, raises an error." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "ValueError: Existing unit conversion context(s), `['AR4GWP100']`, doesn't match input context, `None`, drop `unit_context` metadata before doing conversion\n" + ] + } + ], + "source": [ + "try:\n", + " ar4gwp100_converted.convert_unit(\"Mt CO2 / yr\")\n", + "except ValueError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "ValueError: Existing unit conversion context(s), `['AR4GWP100']`, doesn't match input context, `AR5GWP100`, drop `unit_context` metadata before doing conversion\n" + ] + } + ], + "source": [ + "try:\n", + " ar4gwp100_converted.convert_unit(\"Mt CO2 / yr\", context=\"AR5GWP100\")\n", + "except ValueError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metadata handling\n", + "\n", + "`ScmRun` instances are strict with respect to metadata handling. If you either try to either a) instantiate an `ScmRun` instance with duplicate metadata or b) change an existing `ScmRun` instance so that it has duplicate metadata then you will receive a `NonUniqueMetadataError`." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "scmdata.errors.NonUniqueMetadataError: Duplicate metadata (numbers show how many times the given metadata is repeated).\n", + " variable unit model scenario region repeats\n", + "0 Emissions Gt idealised idealised World 3\n" + ] + } + ], + "source": [ + "try:\n", + " ScmRun(\n", + " data=np.arange(6).reshape(2, 3),\n", + " index=[10, 20],\n", + " columns={\n", + " \"variable\": \"Emissions\",\n", + " \"unit\": \"Gt\",\n", + " \"model\": \"idealised\",\n", + " \"scenario\": \"idealised\",\n", + " \"region\": \"World\",\n", + " },\n", + " )\n", + "except NonUniqueMetadataError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "scmdata.errors.NonUniqueMetadataError: Duplicate metadata (numbers show how many times the given metadata is repeated).\n", + " model scenario region variable unit repeats\n", + "0 IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Gt C / yr 2\n", + "4 IMAGE RCP26 World Emissions|CO2|MAGICC AFOLU Mt N / yr 2\n" + ] + } + ], + "source": [ + "# NBVAL_IGNORE_OUTPUT\n", + "try:\n", + " rcp26[\"variable\"] = \"Emissions|CO2|MAGICC AFOLU\"\n", + "except NonUniqueMetadataError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `meta` attribute provides `Timeseries` specific metadata. There is also a `metadata` attribute which provides metadata for the `ScmRun` instance.\n", + "\n", + "These metadata can be used to store information about the collection of runs as a whole, such as the file where the data are stored or longer-form information about a particular dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'filename': 'rcp26_emissions.csv'}" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.metadata[\"filename\"] = \"rcp26_emissions.csv\"\n", + "rcp26.metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convenience methods\n", + "\n", + "Below we showcase a few convenience methods of `ScmRun`. These will grow over time, please add a pull request adding more where they are useful!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### get_unique_meta\n", + "\n", + "This method helps with getting the unique metadata values in an `ScmRun`. Here we show how it can be useful. Check out its docstring for full details. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By itself, it doesn't do anything special, just returns the unique metadata values as a list." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Emissions|CO2|MAGICC AFOLU']" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.get_unique_meta(\"variable\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, it can be useful if you expect there to only be one unique metadata value. In such a case, you can use the `no_duplicates` argument to ensure that you only get a single value as its native type (not a list) and that an error will be raised if this isn't the case." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'IMAGE'" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rcp26.get_unique_meta(\"model\", no_duplicates=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Traceback (most recent call last):\n", + "ValueError: `unit` column is not unique (found values: ['Mt BC / yr', 'kt C2F6 / yr', 'kt C6F14 / yr', 'kt CCl4 / yr', 'kt CF4 / yr', 'kt CFC11 / yr', 'kt CFC113 / yr', 'kt CFC114 / yr', 'kt CFC115 / yr', 'kt CFC12 / yr', 'kt CH3Br / yr', 'kt CH3CCl3 / yr', 'kt CH3Cl / yr', 'Mt CH4 / yr', 'Mt CO / yr', 'Gt C / yr', 'kt HCFC141b / yr', 'kt HCFC142b / yr', 'kt HCFC22 / yr', 'kt HFC125 / yr', 'kt HFC134a / yr', 'kt HFC143a / yr', 'kt HFC227ea / yr', 'kt HFC23 / yr', 'kt HFC245fa / yr', 'kt HFC32 / yr', 'kt HFC4310 / yr', 'kt Halon1202 / yr', 'kt Halon1211 / yr', 'kt Halon1301 / yr', 'kt Halon2402 / yr', 'Mt N2ON / yr', 'Mt N / yr', 'Mt NMVOC / yr', 'Mt OC / yr', 'kt SF6 / yr', 'Mt S / yr'])\n" + ] + } + ], + "source": [ + "try:\n", + " rcp26.get_unique_meta(\"unit\", no_duplicates=True)\n", + "except ValueError:\n", + " traceback.print_exc(limit=0, chain=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.6" + }, + "pycharm": { + "stem_cell": { + "cell_type": "raw", + "metadata": { + "collapsed": false + }, + "source": [] + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/scmdata/__init__.py b/src/scmdata/__init__.py index cce9b11c..90ead036 100644 --- a/src/scmdata/__init__.py +++ b/src/scmdata/__init__.py @@ -8,6 +8,7 @@ from scmdata.run import ScmRun, run_append # noqa: F401, E402 +from scmdata.ensemble import ScmEnsemble, ensemble_append # noqa: F401, E402 # TODO: remove in next major release REQUIRED_COLS = ScmRun.required_cols # noqa diff --git a/src/scmdata/ensemble.py b/src/scmdata/ensemble.py new file mode 100644 index 00000000..5f3e3f42 --- /dev/null +++ b/src/scmdata/ensemble.py @@ -0,0 +1,226 @@ +""" +:class:`ScmEnsemble` provides a container for holding data from different model runs. +""" + +import warnings + +import numpy as np +import pandas as pd + +from scmdata.plotting import inject_plotting_methods +from scmdata.run import BaseScmRun + + +class ScmEnsemble: + """ + Container for holding multiple :obj:`ScmRun` objects + """ + + meta_col = "run_id" + """ + str: Name of meta containing a unique identifer for each run + + If no value is provided, then an implicit value is create. This ensures that every timeseries + has unique metadata + """ + + def __init__(self, runs=None): + """ + + Parameters + ---------- + runs : list of ScmRun + """ + + if runs is None: + runs = [] + + self._runs = runs + self._run_ids = np.arange(len(runs)) + + def __len__(self): + return self.num_timeseries + + @property + def num_timeseries(self): + if not self.num_runs: + return 0 + return sum([len(r) for r in self._runs]) + + @property + def num_runs(self): + return len(self._runs) + + @property + def run_ids(self): + """ + Run identifier + + Currently ranges from 0 -> num_runs - 1. These run ids are not preserved + when appending + + Returns + ------- + list of int + """ + return self._run_ids.tolist() + + def __repr__(self): + return "".format( + self.num_runs, self.num_timeseries + ) + + def __iter__(self): + return zip(self._run_ids, self._runs) + + def __getitem__(self, item): + # Convert to multiindex? + + if item in ["time", "year"]: + # Drop duplicate years + res = ( + pd.concat([r[item] for r in self._runs]) + .drop_duplicates() + .reset_index(drop=True) + ) + else: + items = [] + for r in self._runs: + try: + items.append(r[item]) + except KeyError: + continue + if not len(items): + raise KeyError("[{}] is not in metadata".format(item)) + + res = pd.concat(items) + + return res + + def get_unique_meta(self, meta, no_duplicates=False): + """ + Get unique values in a metadata column. + + Parameters + ---------- + meta + Column to retrieve metadata for + + no_duplicates + Should I raise an error if there is more than one unique value in the + metadata column? + + Raises + ------ + ValueError + There is more than one unique value in the metadata column and + ``no_duplicates`` is ``True``. + + Returns + ------- + [List[Any], Any] + List of unique metadata values. If ``no_duplicates`` is ``True`` the + metadata value will be returned (rather than a list). + """ + vals = self[meta].unique().tolist() + if no_duplicates: + if len(vals) != 1: + raise ValueError( + "`{}` column is not unique (found values: {})".format(meta, vals) + ) + + return vals[0] + + return vals + + def copy(self, deep=True): + if deep: + runs = [r.copy() for r in self.runs] + else: + runs = self.runs + return ScmEnsemble(runs) + + @property + def runs(self): + # copy so not directly modifiable + return self._runs[:] + + def filter(self, inplace=False, keep=True, **kwargs): + if inplace: + for r in self._runs: + r.filter(inplace=True, keep=keep, **kwargs) + else: + return ScmEnsemble( + [r.filter(inplace=False, keep=keep, **kwargs) for r in self.runs] + ) + + def timeseries(self, **kwargs): + if not len(self.runs): + return pd.DataFrame() + + unique_keys = set( + [l for r in self.runs for l in r.meta_attributes] + [self.meta_col] + ) + unique_keys = sorted(unique_keys) + + def _get_timeseries(run_id, r): + df = r.timeseries(**kwargs) + if self.meta_col in df.index.names: + warnings.warn("Overriding {} meta column") + df = df.reset_index(self.meta_col) + + df[self.meta_col] = run_id + df = df.set_index(self.meta_col, append=True) + + # Add in missing levels as needed + for l in unique_keys: + if l not in df.index.names: + df[l] = pd.NA + df = df.set_index(l, append=True) + + # reorder columns so they are in alphabetical order + df.index = df.index.reorder_levels(unique_keys) + return df + + return pd.concat([_get_timeseries(run_id, r) for run_id, r in self]) + + def append( + self, run, inplace=False, + ): + return ensemble_append([self, run], inplace=inplace) + + +def ensemble_append(ensemble_or_runs, inplace=False): + if not isinstance(ensemble_or_runs, list): + raise TypeError("ensemble_or_runs is not a list") + + if not len(ensemble_or_runs): + raise ValueError("Nothing to append") + + first = ensemble_or_runs[0] + if inplace: + if not isinstance(first, ScmEnsemble): + raise TypeError("Can only append inplace to an ScmEnsemble") + ret = first + else: + if isinstance(first, ScmEnsemble): + ret = first.copy() + elif isinstance(first, BaseScmRun): + ret = ScmEnsemble([first]) + else: + raise TypeError("Cannot handle appending type {}".format(type(first))) + + for run in ensemble_or_runs[1:]: + if isinstance(run, ScmEnsemble): + for r_id, r in run: + ret._runs.append(r) + elif isinstance(run, BaseScmRun): + ret._runs.append(run) + else: + raise TypeError("Cannot handle appending type {}".format(type(run))) + ret._run_ids = np.arange(ret.num_runs) + if not inplace: + return ret + + +inject_plotting_methods(ScmEnsemble) diff --git a/tests/conftest.py b/tests/conftest.py index 89ff6632..83266211 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -159,6 +159,10 @@ TEST_RUN_TS = np.array([[1, 6.0, 6], [0.5, 3, 3]]).T +class CustomScmRun(BaseScmRun): + required_cols = ["variable", "unit", "scenario", "model"] + + @pytest.fixture def test_data_path(): return TEST_DATA @@ -265,6 +269,20 @@ def base_scm_run(): ) +@pytest.fixture(scope="function") +def custom_scm_run(): + yield CustomScmRun( + np.arange(12).reshape(3, 4), + index=[2000, 2010, 2020], + columns={ + "variable": ["variable_a", "variable_b", "variable_a", "variable_b"], + "unit": "unspecified", + "scenario": ["scenario_a", "scenario_a", "scenario_b", "scenario_b"], + "model": "model", + }, + ) + + _misru = [ "a_model", "a_iam", diff --git a/tests/unit/test_ensemble.py b/tests/unit/test_ensemble.py new file mode 100644 index 00000000..13c82c94 --- /dev/null +++ b/tests/unit/test_ensemble.py @@ -0,0 +1,272 @@ +import datetime as dt +import re + +import numpy as np +import numpy.testing as npt +import pandas as pd +import pandas.testing as pdt +import pytest + +from scmdata.ensemble import ScmEnsemble, ensemble_append +from scmdata.run import ScmRun + +inplace_param = pytest.mark.parametrize("inplace", [True, False]) + + +@pytest.fixture(scope="function") +def ensemble(scm_run): + return ScmEnsemble( + [ + scm_run, + scm_run.filter(variable="Primary Energy").interpolate( + [dt.datetime(y, 1, 1) for y in range(2010, 2026, 5)] + ), + ] + ) + + +def test_ensemble(scm_run): + ensemble = ScmEnsemble([scm_run, scm_run]) + + assert len(ensemble) == len(scm_run) * 2 + assert ensemble.num_timeseries == len(scm_run) * 2 + assert ensemble.num_runs == 2 + + +def test_ensemble_num_timeseries(ensemble): + assert ScmEnsemble().num_timeseries == 0 + + assert ensemble.num_timeseries == sum([len(r) for r in ensemble.runs]) + assert ensemble.num_timeseries > 0 + + +def test_ensemble_repr(ensemble): + res = repr(ensemble) + + assert "scmdata.ensemble.ScmEnsemble" in res + assert "runs: {}".format(ensemble.num_runs) in res + assert "timeseries: {}".format(ensemble.num_timeseries) in res + + +def test_ensemble_copy(ensemble): + ensemble_copy = ensemble.copy(deep=False) + assert id(ensemble) != id(ensemble_copy) + + for l, r in zip(ensemble.runs, ensemble_copy.runs): + assert id(l) == id(r) + + ensemble_copy = ensemble.copy(deep=True) + assert id(ensemble) != id(ensemble_copy) + + for l, r in zip(ensemble.runs, ensemble_copy.runs): + assert id(l) != id(r) + + +@pytest.mark.parametrize("item", ("time", "year", "scenario", "variable")) +def test_ensemble_getitem(ensemble, item): + if item == "year": + assert isinstance(ensemble[item], pd.Series) + npt.assert_array_almost_equal(ensemble["year"], [2005, 2010, 2015, 2020, 2025]) + elif item == "time": + assert isinstance(ensemble[item], pd.Series) + assert np.all( + ensemble["time"] + == [dt.datetime(y, 1, 1) for y in [2005, 2010, 2015, 2020, 2025]] + ) + else: + assert isinstance(ensemble[item], pd.Series) + exp = pd.concat([r[item] for r in ensemble.runs]) + pdt.assert_series_equal(ensemble[item], exp) + + +def test_ensemble_timeseries(ensemble): + res = ensemble.timeseries() + + npt.assert_array_almost_equal(ensemble.runs[0]["year"], [2005, 2010, 2015]) + npt.assert_array_almost_equal(ensemble.runs[1]["year"], [2010, 2015, 2020, 2025]) + npt.assert_array_almost_equal(res.columns.year, [2005, 2010, 2015, 2020, 2025]) + + # index should be in order + assert res.index.names == sorted(res.index.names) + + def _get_timeseries(idx, r): + ts = r.timeseries() + ts["run_id"] = idx + ts = ts.set_index("run_id", append=True) + + return ts + + exp = pd.concat([_get_timeseries(run_id, r) for run_id, r in ensemble]) + exp.index = exp.index.reorder_levels(sorted(exp.index.names)) + + pd.testing.assert_frame_equal(res, exp) + + assert np.all(np.isnan(exp.xs(0, level="run_id").loc[:, "2020-01-01":"2025-01-01"])) + + # Check that subset is the same + pdt.assert_frame_equal( + ensemble.runs[0].timeseries().reset_index(), + res.xs(0, level="run_id").dropna(how="all", axis="columns").reset_index(), + check_like=True, # To remove once #97 is resolved + ) + + +def test_ensemble_timeseries_empty(): + res = ScmEnsemble().timeseries() + assert res.empty + + +def test_ensemble_timeseries_overlapping(ensemble): + ensemble.runs[0]["run_id"] = 72 + with pytest.warns(UserWarning,): + res = ensemble.timeseries() + + run_ids = res.index.get_level_values(level="run_id") + pdt.assert_index_equal(run_ids, pd.Index([0, 0, 0, 1, 1], name="run_id")) + + ensemble.meta_col = "ensemble_member" + with pytest.warns(None) as record: + res = ensemble.timeseries() + assert len(record) == 0 + + run_ids = res.index.get_level_values(level="run_id") + pdt.assert_index_equal( + run_ids, + pd.Index([72, 72, 72, pd.NA, pd.NA], name="run_id"), + exact=False, + check_exact=False, + ) + run_ids = res.index.get_level_values(level="ensemble_member") + pdt.assert_index_equal(run_ids, pd.Index([0, 0, 0, 1, 1], name="ensemble_member")) + + +@inplace_param +def test_ensemble_filter_basic(ensemble, inplace): + res = ensemble.filter(scenario="a_scenario2", inplace=inplace) + + if inplace: + assert res is None + res = ensemble + else: + assert id(res) != id(ensemble) + assert len(res) != id(ensemble) + + assert np.all(res["scenario"] == "a_scenario2") + + +@inplace_param +def test_ensemble_append(ensemble, scm_run, inplace): + orig = ensemble.copy() + res = ensemble_append([ensemble, ensemble.copy()], inplace=inplace) + + if inplace: + assert res is None + res = ensemble + else: + assert id(res) != id(ensemble) + + assert isinstance(res, ScmEnsemble) + + assert len(res) == len(orig) * 2 + + +def test_ensemble_append_wrong_first(ensemble, scm_run): + with pytest.raises(TypeError, match="Can only append inplace to an ScmEnsemble"): + ensemble_append([scm_run, ensemble], inplace=True) + + +def test_ensemble_append_mixed(ensemble, scm_run): + res = ensemble_append([ensemble, ensemble]) + assert isinstance(res, ScmEnsemble) + assert res.num_runs == 4 + + res = ensemble_append([ensemble, scm_run]) + assert isinstance(res, ScmEnsemble) + assert res.num_runs == 3 + + res = ensemble.append(scm_run) + assert isinstance(res, ScmEnsemble) + assert res.num_runs == 3 + + res = ensemble_append([scm_run]) + assert isinstance(res, ScmEnsemble) + assert res.num_runs == 1 + + +def test_ensemble_append_empty(): + with pytest.raises(ValueError, match="Nothing to append"): + ensemble_append([]) + + +def test_ensemble_append_nonlist(): + with pytest.raises(TypeError, match="ensemble_or_runs is not a list"): + ensemble_append(1) + + +@pytest.mark.parametrize( + "obj", ["a", 1, np.asarray([1, 2, 3]), pd.DataFrame([[1, 2, 3]])] +) +def test_ensemble_append_unknown(ensemble, scm_run, obj): + with pytest.raises(TypeError, match="Cannot handle appending type"): + ensemble_append([obj]) + + with pytest.raises(TypeError, match="Cannot handle appending type"): + ensemble_append([scm_run, obj]) + + +def test_ensemble_append_custom_run(custom_scm_run): + res = ensemble_append([custom_scm_run, custom_scm_run]) + assert len(res) == len(custom_scm_run) * 2 + + assert res.run_ids == [0, 1] + + # TODO: fix inconcistency with columns type of timeseries + # pandas coerces this to a DataTimeIndex + exp_ts = custom_scm_run.timeseries() + exp_ts.columns = exp_ts.columns.astype(object) + + pdt.assert_frame_equal(res.timeseries().xs(0, level="run_id"), exp_ts) + pdt.assert_frame_equal(res.timeseries().xs(1, level="run_id"), exp_ts) + + +@pytest.fixture("function") +def ensemble_unique_meta(scm_run): + other_run = ScmRun( + np.arange(3), + index=[1900, 1910, 1920], + columns={ + "variable": "Example", + "unit": "unspecified", + "region": "World", + "model": "b_iam", + "scenario": "a_scenario", + }, + ) + return ScmEnsemble([scm_run, other_run]) + + +def test_ensemble_unique_meta(ensemble_unique_meta): + exp = ["Primary Energy", "Primary Energy|Coal", "Example"] + assert ensemble_unique_meta.get_unique_meta("variable") == exp + + assert ensemble_unique_meta.get_unique_meta("model") == ["a_iam", "b_iam"] + assert ensemble_unique_meta.get_unique_meta("climate_model") == ["a_model"] + + +def test_ensemble_unique_meta_missing(ensemble_unique_meta): + res = ensemble_unique_meta.get_unique_meta("climate_model") + assert res == ["a_model"] + + with pytest.raises(KeyError, match=re.escape("[non_existent] is not in metadata")): + ensemble_unique_meta.get_unique_meta("non_existent") + + # Empty Ensembles also raise KeyError + with pytest.raises(KeyError, match=re.escape("[test] is not in metadata")): + ScmEnsemble([]).get_unique_meta("test") + + +def test_ensemble_unique_meta_no_duplicates(ensemble_unique_meta): + assert ensemble_unique_meta.get_unique_meta("region", no_duplicates=True) == "World" + + with pytest.raises(ValueError, match="`variable` column is not unique"): + ensemble_unique_meta.get_unique_meta("variable", no_duplicates=True)