{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2024-05-24T08:11:52.108373800Z", "start_time": "2024-05-24T08:11:51.773425200Z" }, "collapsed": false, "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "#|hide\n", "#|default_exp reports" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# Maintenance Reports\n", "Parse Maintenance reports from LimeSurvey and legacy spreadsheet formats.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2024-05-24T08:11:55.691434500Z", "start_time": "2024-05-24T08:11:51.783947Z" }, "collapsed": false }, "outputs": [], "source": [ "#|export\n", "import pandas as pd\n", "from pandas._typing import (\n", " FilePath,\n", " ReadCsvBuffer,\n", ")\n", "import datetime as dt\n", "import numpy as np\n", "from toolz import assoc_in\n", "\n", "from pyrnet import utils" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "\n", "## Survey Export\n", "In the following, the functions are designed to work with the survey response export in the .csv format:\n", "* Field separator: \"Semicolon\"\n", "* Responses: \"Answer codes\"\n", "* Headings: \"Question code\"\n", "\n", "The responses can be exported manually from the website ..." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2024-05-24T08:11:55.765230Z", "start_time": "2024-05-24T08:11:55.693427100Z" }, "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
| \n", " | id | \n", "submitdate | \n", "lastpage | \n", "startlanguage | \n", "seed | \n", "startdate | \n", "datestamp | \n", "Q00 | \n", "Q01 | \n", "MainQ01 | \n", "... | \n", "interviewtime | \n", "groupTime57 | \n", "Q00Time | \n", "Q01Time | \n", "groupTime59 | \n", "MainQ01Time | \n", "MainQ02Time | \n", "groupTime58 | \n", "ExtraQ01Time | \n", "ExtraQ02Time | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "1 | \n", "2023-05-01 16:09:06 | \n", "1 | \n", "en | \n", "632878730 | \n", "2023-05-01 16:08:46 | \n", "2023-05-01 16:09:06 | \n", "1 | \n", "222 | \n", "AO02 | \n", "... | \n", "19.89 | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "
| 1 | \n", "2 | \n", "2023-05-08 15:13:33 | \n", "1 | \n", "en | \n", "1428982518 | \n", "2023-05-08 15:02:53 | \n", "2023-05-08 15:13:33 | \n", "1 | \n", "this is a test | \n", "AO01 | \n", "... | \n", "837.45 | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "
| 2 | \n", "3 | \n", "2023-05-08 16:08:20 | \n", "1 | \n", "en | \n", "852861659 | \n", "2023-05-08 16:08:09 | \n", "2023-05-08 16:08:20 | \n", "2 | \n", "222 | \n", "AO03 | \n", "... | \n", "11.13 | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "
| 3 | \n", "4 | \n", "2023-05-08 16:09:06 | \n", "1 | \n", "en | \n", "632878730 | \n", "2023-05-08 16:08:46 | \n", "2023-05-08 16:09:06 | \n", "1 | \n", "222 | \n", "AO02 | \n", "... | \n", "19.89 | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "
| 4 | \n", "5 | \n", "2023-05-18 16:09:06 | \n", "1 | \n", "en | \n", "632878730 | \n", "2023-05-18 16:08:46 | \n", "2023-05-18 16:09:06 | \n", "1 | \n", "222 | \n", "AO02 | \n", "... | \n", "19.89 | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "None | \n", "
5 rows × 27 columns
\n", "| \n", " | datestamp | \n", "Q00 | \n", "Q01 | \n", "MainQ01[comment] | \n", "MainQ02[comment] | \n", "ExtraQ01[comment] | \n", "ExtraQ02[comment] | \n", "MainQ01 | \n", "MainQ02 | \n", "ExtraQ01 | \n", "ExtraQ02 | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "2019-06-17 12:00:00 | \n", "1 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 1 | \n", "2019-06-17 12:00:00 | \n", "4 | \n", "moisture in horizontal pyranometer | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 2 | \n", "2019-06-17 13:00:00 | \n", "4 | \n", "additional note | \n", "\n", " | \n", " | \n", " | \n", " | AO02 | \n", "AO02 | \n", "AO02 | \n", "AO02 | \n", "
| 3 | \n", "2019-06-17 12:00:00 | \n", "5 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 4 | \n", "2019-06-17 12:00:00 | \n", "7 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 5 | \n", "2019-06-17 12:00:00 | \n", "9 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 6 | \n", "2019-06-17 12:00:00 | \n", "10 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 7 | \n", "2019-06-17 12:00:00 | \n", "12 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 8 | \n", "2019-06-17 12:00:00 | \n", "14 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 9 | \n", "2019-06-17 12:00:00 | \n", "15 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 10 | \n", "2019-06-17 12:00:00 | \n", "18 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 11 | \n", "2019-06-17 12:00:00 | \n", "24 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 12 | \n", "2019-06-17 12:00:00 | \n", "25 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 13 | \n", "2019-06-17 12:00:00 | \n", "26 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 14 | \n", "2019-06-17 12:00:00 | \n", "32 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 15 | \n", "2019-06-17 12:00:00 | \n", "33 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 16 | \n", "2019-06-17 12:00:00 | \n", "35 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 17 | \n", "2019-06-17 12:00:00 | \n", "37 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 18 | \n", "2019-06-17 12:00:00 | \n", "38 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 19 | \n", "2019-06-17 12:00:00 | \n", "43 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 20 | \n", "2019-06-17 12:00:00 | \n", "44 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 21 | \n", "2019-06-17 12:00:00 | \n", "46 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 22 | \n", "2019-06-17 12:00:00 | \n", "47 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 23 | \n", "2019-06-17 12:00:00 | \n", "49 | \n", "scratches on horizontal pyranometer | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 24 | \n", "2019-06-17 12:00:00 | \n", "53 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 25 | \n", "2019-06-17 12:00:00 | \n", "54 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 26 | \n", "2019-06-17 12:00:00 | \n", "55 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 27 | \n", "2019-06-17 12:00:00 | \n", "58 | \n", "scratches on tiltet pyranometer | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 28 | \n", "2019-06-17 12:00:00 | \n", "60 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 29 | \n", "2019-06-17 12:00:00 | \n", "86 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "
| 30 | \n", "2019-06-17 12:00:00 | \n", "87 | \n", "nan | \n", "\n", " | \n", " | \n", " | \n", " | AO01 | \n", "AO01 | \n", "AO01 | \n", "AO01 | \n", "