{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Accessing data in a DataSet\n", "\n", "After a measurement is completed all the acquired data and metadata around it is accessible via a `DataSet` object. This notebook presents the useful methods and properties of the `DataSet` object which enable convenient access to the data, parameters information, and more. For general overview of the `DataSet` class, refer to [DataSet class walkthrough](DataSet-class-walkthrough.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparation: a DataSet from a dummy Measurement\n", "\n", "In order to obtain a `DataSet` object, we are going to run a `Measurement` storing some dummy data (see notebook on [Performing measurements using qcodes parameters and dataset](Performing-measurements-using-qcodes-parameters-and-dataset.ipynb) notebook for more details)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Logging hadn't been started.\n", "Activating auto-logging. Current session state plus future input saved.\n", "Filename : C:\\Users\\trmorgan\\.qcodes\\logs\\command_history.log\n", "Mode : append\n", "Output logging : True\n", "Raw input log : False\n", "Timestamping : True\n", "State : active\n", "Qcodes Logfile : C:\\Users\\trmorgan\\.qcodes\\logs\\210125-24608-qcodes.log\n" ] } ], "source": [ "import os\n", "import tempfile\n", "\n", "import numpy as np\n", "\n", "from qcodes.dataset import (\n", " Measurement,\n", " initialise_or_create_database_at,\n", " load_or_create_experiment,\n", " plot_dataset,\n", ")\n", "from qcodes.parameters import Parameter" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "db_path = os.path.join(tempfile.gettempdir(), 'data_access_example.db')\n", "initialise_or_create_database_at(db_path)\n", "\n", "exp = load_or_create_experiment(experiment_name='greco', sample_name='draco')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "x = Parameter(name='x', label='Voltage', unit='V',\n", " set_cmd=None, get_cmd=None)\n", "t = Parameter(name='t', label='Time', unit='s',\n", " set_cmd=None, get_cmd=None)\n", "y = Parameter(name='y', label='Voltage', unit='V',\n", " set_cmd=None, get_cmd=None)\n", "y2 = Parameter(name='y2', label='Current', unit='A',\n", " set_cmd=None, get_cmd=None)\n", "q = Parameter(name='q', label='Qredibility', unit='$',\n", " set_cmd=None, get_cmd=None)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting experimental run with id: 6. \n" ] } ], "source": [ "meas = Measurement(exp=exp, name='fresco')\n", "\n", "meas.register_parameter(x)\n", "meas.register_parameter(t)\n", "meas.register_parameter(y, setpoints=(x, t))\n", "meas.register_parameter(y2, setpoints=(x, t))\n", "meas.register_parameter(q) # a standalone parameter\n", "\n", "x_vals = np.linspace(-4, 5, 50)\n", "t_vals = np.linspace(-500, 1500, 25)\n", "\n", "with meas.run() as datasaver:\n", " for xv in x_vals:\n", " for tv in t_vals:\n", " yv = np.sin(2*np.pi*xv)*np.cos(2*np.pi*0.001*tv) + 0.001*tv\n", " y2v = np.sin(2*np.pi*xv)*np.cos(2*np.pi*0.001*tv + 0.5*np.pi) - 0.001*tv\n", " datasaver.add_result((x, xv), (t, tv), (y, yv), (y2, y2v))\n", " q_val = np.max(yv) - np.min(y2v) # a meaningless value\n", " datasaver.add_result((q, q_val))\n", "\n", "dataset = datasaver.dataset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the sake of demonstrating what kind of data we've produced, let's use `plot_dataset` to make some default plots of the data." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([,\n", " ],\n", " [,\n", " ])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " 2021-01-25T16:18:38.890431\r\n", " image/svg+xml\r\n", " \r\n", " \r\n", " Matplotlib v3.3.2, https://matplotlib.org/\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/plain": [ "
" ] }, "metadata": { "needs_background": "light", "transient": {} }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "image/svg+xml": [ "\r\n", "\r\n", "\r\n", "\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " 2021-01-25T16:18:39.274435\r\n", " image/svg+xml\r\n", " \r\n", " \r\n", " Matplotlib v3.3.2, https://matplotlib.org/\r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", " \r\n", "\r\n" ], "text/plain": [ "
" ] }, "metadata": { "needs_background": "light", "transient": {} }, "output_type": "display_data" } ], "source": [ "plot_dataset(dataset)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataSet indentification\n", "\n", "Before we dive into what's in the `DataSet`, let's briefly note how a `DataSet` is identified." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.captured_run_id" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'greco'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.exp_name" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'draco'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.sample_name" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'fresco'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.name" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parameters in the DataSet\n", "\n", "In this section we are getting information about the parameters stored in the given `DataSet`.\n", "\n", "> Why is that important? Let's jump into *data*!\n", "\n", "As it turns out, just \"arrays of numbers\" are not enough to reason about a given `DataSet`. Even comping up with a reasonable deafult plot, which is what `plot_dataset` does, requires information on `DataSet`'s parameters. In this notebook, we first have a detailed look at what is stored about parameters and how to work with this information. After that, we will cover data access methods." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run description\n", "\n", "Every dataset comes with a \"description\" (aka \"run description\"):" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RunDescriber(InterDependencies_(dependencies={ParamSpecBase('y', 'numeric', 'Voltage', 'V'): (ParamSpecBase('x', 'numeric', 'Voltage', 'V'), ParamSpecBase('t', 'numeric', 'Time', 's')), ParamSpecBase('y2', 'numeric', 'Current', 'A'): (ParamSpecBase('x', 'numeric', 'Voltage', 'V'), ParamSpecBase('t', 'numeric', 'Time', 's'))}, inferences={}, standalones=frozenset({ParamSpecBase('q', 'numeric', 'Qredibility', '$')})), Shapes: None)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.description" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The description, an instance of `RunDescriber` object, is intended to describe the details of a dataset. In the future releases of QCoDeS it will likely be expanded. At the moment, it only contains an `InterDependencies_` object under its `interdeps` attribute - which stores all the information about the parameters of the `DataSet`.\n", "\n", "Let's look into this `InterDependencies_` object." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Interdependencies\n", "\n", "`Interdependencies_` object inside the run description contains information about all the parameters that are stored in the `DataSet`. Subsections below explain how the individual information about the parameters as well as their relationships are captured in the `Interdependencies_` object." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "InterDependencies_(dependencies={ParamSpecBase('y', 'numeric', 'Voltage', 'V'): (ParamSpecBase('x', 'numeric', 'Voltage', 'V'), ParamSpecBase('t', 'numeric', 'Time', 's')), ParamSpecBase('y2', 'numeric', 'Current', 'A'): (ParamSpecBase('x', 'numeric', 'Voltage', 'V'), ParamSpecBase('t', 'numeric', 'Time', 's'))}, inferences={}, standalones=frozenset({ParamSpecBase('q', 'numeric', 'Qredibility', '$')}))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interdeps = dataset.description.interdeps\n", "interdeps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Dependencies, inferences, standalones" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Information about every parameter is stored in the form of `ParamSpecBase` objects, and the releationship between parameters is captured via `dependencies`, `inferences`, and `standalones` attributes.\n", "\n", "For example, the dataset that we are inspecting contains no inferences, and one standalone parameter `q`, and two dependent parameters `y` and `y2`, which both depend on independent `x` and `t` parameters:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interdeps.inferences" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "frozenset({ParamSpecBase('q', 'numeric', 'Qredibility', '$')})" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interdeps.standalones" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{ParamSpecBase('y', 'numeric', 'Voltage', 'V'): (ParamSpecBase('x', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('t', 'numeric', 'Time', 's')),\n", " ParamSpecBase('y2', 'numeric', 'Current', 'A'): (ParamSpecBase('x', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('t', 'numeric', 'Time', 's'))}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interdeps.dependencies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`dependencies` is a dictionary of `ParamSpecBase` objects. The keys are dependent parameters (those which depend on other parameters), and the corresponding values in the dictionary are tuples of independent parameters that the dependent parameter in the key depends on. Coloquially, each key-value pair of the `dependencies` dictionary is sometimes referred to as \"parameter tree\".\n", "\n", "`inferences` follows the same structure as `dependencies`.\n", "\n", "`standalones` is a set - an unordered collection of `ParamSpecBase` objects representing \"standalone\" parameters, the ones which do not depend on other parameters, and no other parameter depends on them." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### ParamSpecBase objects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`ParamSpecBase` object contains all the necessary information about a given parameter, for example, its `name` and `unit`:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parameter 'y' is in 'V'\n" ] } ], "source": [ "ps = list(interdeps.dependencies.keys())[0]\n", "print(f'Parameter {ps.name!r} is in {ps.unit!r}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`paramspecs` property returns a tuple of `ParamSpecBase`s for all the parameters contained in the `Interdependencies_` object:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(ParamSpecBase('y', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('x', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('t', 'numeric', 'Time', 's'),\n", " ParamSpecBase('y2', 'numeric', 'Current', 'A'),\n", " ParamSpecBase('q', 'numeric', 'Qredibility', '$'))" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interdeps.paramspecs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a trivial example of iterating through dependent parameters of the `Interdependencies_` object and extracting information about them from the `ParamSpecBase` objects:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parameter 'y' (Voltage, V) depends on:\n", "- 'x' (Voltage, V)\n", "- 't' (Time, s)\n", "Parameter 'y2' (Current, A) depends on:\n", "- 'x' (Voltage, V)\n", "- 't' (Time, s)\n" ] } ], "source": [ "for d in interdeps.dependencies.keys():\n", " print(f'Parameter {d.name!r} ({d.label}, {d.unit}) depends on:')\n", " for i in interdeps.dependencies[d]:\n", " print(f'- {i.name!r} ({i.label}, {i.unit})')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Other useful methods and properties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Interdependencies_` object has a few useful properties and methods which make it easy to work it and with other `Interdependencies_` and `ParamSpecBase` objects.\n", "\n", "For example, `non_dependencies` returns a tuple of all dependent parameters together with standalone parameters:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(ParamSpecBase('q', 'numeric', 'Qredibility', '$'),\n", " ParamSpecBase('y', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('y2', 'numeric', 'Current', 'A'))" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interdeps.non_dependencies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`what_depends_on` method allows to find what parameters depend on a given parameter:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Following parameters depend on 't' (Time, s):\n", "- 'y' (Voltage, V)\n", "- 'y2' (Current, A)\n" ] } ], "source": [ "t_ps = interdeps.paramspecs[2]\n", "t_deps = interdeps.what_depends_on(t_ps)\n", "\n", "print(f'Following parameters depend on {t_ps.name!r} ({t_ps.label}, {t_ps.unit}):')\n", "for t_dep in t_deps:\n", " print(f'- {t_dep.name!r} ({t_dep.label}, {t_dep.unit})')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Shortcuts to important parameters\n", "\n", "For the frequently needed groups of parameters, `DataSet` object itself provides convenient methods and properties.\n", "\n", "For example, use `dependent_parameters` property to get only dependent parameters of a given `DataSet`:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(ParamSpecBase('y', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('y2', 'numeric', 'Current', 'A'))" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.dependent_parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is equivalent to:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(ParamSpecBase('y', 'numeric', 'Voltage', 'V'),\n", " ParamSpecBase('y2', 'numeric', 'Current', 'A'))" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tuple(dataset.description.interdeps.dependencies.keys())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note on inferences\n", "\n", "Inferences between parameters is a feature that has not been used yet within QCoDeS. The initial concepts around `DataSet` included it in order to link parameters that are not directly dependent on each other as \"dependencies\" are. It is very likely that \"inferences\" will be eventually deprecated and removed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Note on ParamSpec's\n", "\n", "> `ParamSpec`s originate from QCoDeS versions prior to `0.2.0` and for now are kept for backwards compatibility. `ParamSpec`s are completely superseded by `InterDependencies_`/`ParamSpecBase` bundle and will likely be deprecated in future versions of QCoDeS together with the `DataSet` methods/properties that return `ParamSpec`s objects.\n", "\n", "In addition to the `Interdependencies_` object, `DataSet` also holds `ParamSpec` objects (not to be confused with `ParamSpecBase` objects from above). Similar to `Interdependencies_` object, the `ParamSpec` objects hold information about parameters and their interdependencies but in a different way: for a given parameter, `ParamSpec` object itself contains information on names of parameters that it depends on, while for the `InterDependencies_`/`ParamSpecBase`s this information is stored only in the `InterDependencies_` object." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`DataSet` exposes `paramspecs` property and `get_parameters()` method, both of which return `ParamSpec` objects of all the parameters of the dataset, and are not recommended for use:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'x': ParamSpec('x', 'numeric', 'Voltage', 'V', inferred_from=[], depends_on=[]),\n", " 't': ParamSpec('t', 'numeric', 'Time', 's', inferred_from=[], depends_on=[]),\n", " 'y': ParamSpec('y', 'numeric', 'Voltage', 'V', inferred_from=[], depends_on=['x', 't']),\n", " 'y2': ParamSpec('y2', 'numeric', 'Current', 'A', inferred_from=[], depends_on=['x', 't']),\n", " 'q': ParamSpec('q', 'numeric', 'Qredibility', '$', inferred_from=[], depends_on=[])}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.paramspecs" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[ParamSpec('x', 'numeric', 'Voltage', 'V', inferred_from=[], depends_on=[]),\n", " ParamSpec('t', 'numeric', 'Time', 's', inferred_from=[], depends_on=[]),\n", " ParamSpec('y', 'numeric', 'Voltage', 'V', inferred_from=[], depends_on=['x', 't']),\n", " ParamSpec('y2', 'numeric', 'Current', 'A', inferred_from=[], depends_on=['x', 't']),\n", " ParamSpec('q', 'numeric', 'Qredibility', '$', inferred_from=[], depends_on=[])]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.get_parameters()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'x,t,y,y2,q'" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To give an example of what it takes to work with `ParamSpec` objects as opposed to `Interdependencies_` object, here's a function that one needs to write in order to find standalone `ParamSpec`s from a given list of `ParamSpec`s:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(ParamSpec('q', 'numeric', 'Qredibility', '$', inferred_from=[], depends_on=[]),)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def get_standalone_parameters(paramspecs):\n", " all_independents = {spec.name\n", " for spec in paramspecs\n", " if len(spec.depends_on_) == 0}\n", " used_independents = {d for spec in paramspecs for d in spec.depends_on_}\n", " standalones = all_independents.difference(used_independents)\n", " return tuple(ps for ps in paramspecs if ps.name in standalones)\n", "\n", "\n", "all_parameters = dataset.get_parameters()\n", "standalone_parameters = get_standalone_parameters(all_parameters)\n", "standalone_parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting data from DataSet\n", "\n", "In this section methods for retrieving the actual data from the `DataSet` are discussed.\n", "\n", "### `get_parameter_data` - the powerhorse\n", "\n", "`DataSet` provides one main method of accessing data - `get_parameter_data`. It returns data for groups of dependent-parameter-and-its-independent-parameters in a form of a nested dictionary of `numpy` arrays:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'q': {'q': array([3. , 2.08558738, 2.259722 , 3.31510822, 3.99537911,\n", " 3.49071755, 2.40188947, 2.02507209, 2.80884137, 3.82017225,\n", " 3.85514276, 2.87212284, 2.04133215, 2.3517716 , 3.43388374,\n", " 3.99948622, 3.375267 , 2.30431745, 2.06153158, 2.93592978,\n", " 3.88659931, 3.78183148, 2.74634542, 2.01281822, 2.4544651 ,\n", " 3.5455349 , 3.98718178, 3.25365458, 2.21816852, 2.11340069,\n", " 3.06407022, 3.93846842, 3.69568255, 2.624733 , 2.00051378,\n", " 2.56611626, 3.6482284 , 3.95866785, 3.12787716, 2.14485724,\n", " 2.17982775, 3.19115863, 3.97492791, 3.59811053, 2.50928245,\n", " 2.00462089, 2.68489178, 3.740278 , 3.91441262, 3. ])},\n", " 'y': {'y': array([-0.5 , -0.41666667, -0.33333333, ..., 1.33333333,\n", " 1.41666667, 1.5 ]),\n", " 'x': array([-4., -4., -4., ..., 5., 5., 5.]),\n", " 't': array([-500. , -416.66666667, -333.33333333, ..., 1333.33333333,\n", " 1416.66666667, 1500. ])},\n", " 'y2': {'y2': array([ 0.5 , 0.41666667, 0.33333333, ..., -1.33333333,\n", " -1.41666667, -1.5 ]),\n", " 'x': array([-4., -4., -4., ..., 5., 5., 5.]),\n", " 't': array([-500. , -416.66666667, -333.33333333, ..., 1333.33333333,\n", " 1416.66666667, 1500. ])}}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.get_parameter_data()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Avoid excessive calls to loading data\n", "\n", "Note that this call actually reads the data of the `DataSet` and in case of a `DataSet` with a lot of data can take noticable amount of time. Hence, it is recommended to limit the number of times the same data gets loaded in order to speed up the user's code." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Loading data of selected parameters\n", "\n", "Sometimes data only for a particular parameter or parameters needs to be loaded. For example, let's assume that after inspecting the `InterDependencies_` object from `dataset.description.interdeps`, we concluded that we want to load data of the `q` parameter and the `y2` parameter. In order to do that, we just pass the names of these parameters, or their `ParamSpecBase`s to `get_parameter_data` call:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ParamSpecBase('q', 'numeric', 'Qredibility', '$')" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q_param_spec = list(interdeps.standalones)[0]\n", "q_param_spec" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ParamSpecBase('y2', 'numeric', 'Current', 'A')" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y2_param_spec = interdeps.non_dependencies[-1]\n", "y2_param_spec" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'q': {'q': array([3. , 2.08558738, 2.259722 , 3.31510822, 3.99537911,\n", " 3.49071755, 2.40188947, 2.02507209, 2.80884137, 3.82017225,\n", " 3.85514276, 2.87212284, 2.04133215, 2.3517716 , 3.43388374,\n", " 3.99948622, 3.375267 , 2.30431745, 2.06153158, 2.93592978,\n", " 3.88659931, 3.78183148, 2.74634542, 2.01281822, 2.4544651 ,\n", " 3.5455349 , 3.98718178, 3.25365458, 2.21816852, 2.11340069,\n", " 3.06407022, 3.93846842, 3.69568255, 2.624733 , 2.00051378,\n", " 2.56611626, 3.6482284 , 3.95866785, 3.12787716, 2.14485724,\n", " 2.17982775, 3.19115863, 3.97492791, 3.59811053, 2.50928245,\n", " 2.00462089, 2.68489178, 3.740278 , 3.91441262, 3. ])},\n", " 'y2': {'y2': array([ 0.5 , 0.41666667, 0.33333333, ..., -1.33333333,\n", " -1.41666667, -1.5 ]),\n", " 'x': array([-4., -4., -4., ..., 5., 5., 5.]),\n", " 't': array([-500. , -416.66666667, -333.33333333, ..., 1333.33333333,\n", " 1416.66666667, 1500. ])}}" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset.get_parameter_data(q_param_spec, y2_param_spec)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `to_pandas_dataframe_dict` and `to_pandas_dataframe` - for `pandas` fans\n", "\n", "`DataSet` provides two methods for accessing data with `pandas` - `to_pandas_dataframe` and `to_pandas_dataframe_dict`. The method `to_pandas_dataframe_dict` returns data for groups of dependent-parameter-and-its-independent-parameters in a form of a dictionary of `pandas.DataFrame` s, while `to_pandas_dataframe` returns a concatendated `pandas.DataFrame` for groups of dependent-parameter-and-its-independent-parameters:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DataFrame for parameter q\n", "-----------------------------\n", " q\n", "0 3.000000\n", "1 2.085587\n", "2 2.259722\n", "3 3.315108\n", "4 3.995379\n", "\n", "DataFrame for parameter y\n", "-----------------------------\n", " y\n", "x t \n", "-4.0 -500.000000 -0.500000\n", " -416.666667 -0.416667\n", " -333.333333 -0.333333\n", " -250.000000 -0.250000\n", " -166.666667 -0.166667\n", "\n", "DataFrame for parameter y2\n", "-----------------------------\n", " y2\n", "x t \n", "-4.0 -500.000000 0.500000\n", " -416.666667 0.416667\n", " -333.333333 0.333333\n", " -250.000000 0.250000\n", " -166.666667 0.166667\n", "\n" ] } ], "source": [ "df_dict = dataset.to_pandas_dataframe_dict()\n", "\n", "# For the sake of making this article more readable,\n", "# we will print the contents of the `dfs` dictionary\n", "# manually by calling `.head()` on each of the DataFrames\n", "for parameter_name, df in df_dict.items():\n", " print(f\"DataFrame for parameter {parameter_name}\")\n", " print(\"-----------------------------\")\n", " print(f\"{df.head()!r}\")\n", " print(\"\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternativly to concatinate the DataSet data into a single pandas Dataframe run the following:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'q': array([3. , 2.08558738, 2.259722 , 3.31510822, 3.99537911,\n", " 3.49071755, 2.40188947, 2.02507209, 2.80884137, 3.82017225,\n", " 3.85514276, 2.87212284, 2.04133215, 2.3517716 , 3.43388374,\n", " 3.99948622, 3.375267 , 2.30431745, 2.06153158, 2.93592978,\n", " 3.88659931, 3.78183148, 2.74634542, 2.01281822, 2.4544651 ,\n", " 3.5455349 , 3.98718178, 3.25365458, 2.21816852, 2.11340069,\n", " 3.06407022, 3.93846842, 3.69568255, 2.624733 , 2.00051378,\n", " 2.56611626, 3.6482284 , 3.95866785, 3.12787716, 2.14485724,\n", " 2.17982775, 3.19115863, 3.97492791, 3.59811053, 2.50928245,\n", " 2.00462089, 2.68489178, 3.740278 , 3.91441262, 3. ])}\n", "{'y': array([-0.5 , -0.41666667, -0.33333333, ..., 1.33333333,\n", " 1.41666667, 1.5 ]), 'x': array([-4., -4., -4., ..., 5., 5., 5.]), 't': array([-500. , -416.66666667, -333.33333333, ..., 1333.33333333,\n", " 1416.66666667, 1500. ])}\n", "{'y2': array([ 0.5 , 0.41666667, 0.33333333, ..., -1.33333333,\n", " -1.41666667, -1.5 ]), 'x': array([-4., -4., -4., ..., 5., 5., 5.]), 't': array([-500. , -416.66666667, -333.33333333, ..., 1333.33333333,\n", " 1416.66666667, 1500. ])}\n", " q y y2\n", "0 3.000000 NaN NaN\n", "1 2.085587 NaN NaN\n", "2 2.259722 NaN NaN\n", "3 3.315108 NaN NaN\n", "4 3.995379 NaN NaN\n" ] } ], "source": [ "df = dataset.to_pandas_dataframe()\n", "print(f\"{df.head()!r}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similar to `get_parameter_data`, `to_pandas_dataframe_dict` and `to_pandas_dataframe_dict` also supports retrieving data for a given parameter(s), as well as `start`/`stop` arguments.\n", "\n", "Both `to_pandas_dataframe` and `to_pandas_dataframe_dict` is implemented based on `get_parameter_data`, hence the performance considerations mentioned above for `get_parameter_data` apply to these methods as well.\n", "\n", "For more details on `to_pandas_dataframe` refer to [Working with pandas and xarray article](Working-With-Pandas-and-XArray.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exporting to other file formats\n", "\n", "The dataset support exporting to netcdf and csv via the `dataset.export` method. See [Exporting QCoDes Datasets](./Exporting-data-to-other-file-formats.ipynb) for more information.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data extraction into \"other\" formats\n", "\n", "If the user desires to export a QCoDeS `DataSet` into a format that is not readily supported by `DataSet` methods, we recommend to use `to_pandas_dataframe_dict` or `to_pandas_dataframe_dict` first, and then convert the resulting `DataFrame` s into a the desired format. This is becuase `pandas` package already implements converting `DataFrame` to various popular formats including comma-separated text file (`.csv`), HDF (`.hdf5`), xarray, Excel (`.xls`, `.xlsx`), and more; refer to [Working with pandas and xarray article](Working-With-Pandas-and-XArray.ipynb), and [`pandas` documentation](https://pandas.pydata.org/pandas-docs/stable/reference/frame.html#serialization-io-conversion) for more information.\n", "\n", "Refer to the docstrings of those methods for more information on how to use them." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }