You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

679 lines
172 KiB

{
"cells": [
{
"cell_type": "markdown",
"id": "28a0673e-96b5-43f2-8a8b-bd033bf851b0",
"metadata": {},
"source": [
"# The IoT Project begins!!\n",
"\n",
"## The AI Carer\n",
"\n",
"A model that can estimate if an elderly person is safe in their home.\n",
"\n",
"## Data Curation Part 1\n",
"\n",
"Today we'll begin our scrubbing and curating our dataset..\n",
"\n",
"The training dataset is here: \n",
"data/training_data.json\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 105,
"id": "67cedf85-8125-4322-998e-9375fe745597",
"metadata": {},
"outputs": [],
"source": [
"# imports\n",
"\n",
"import os\n",
"from dotenv import load_dotenv\n",
"from huggingface_hub import login\n",
"from datasets import load_dataset, Dataset, DatasetDict\n",
"import matplotlib.pyplot as plt\n",
"import json\n",
"import numpy as np\n",
"import random\n",
"from collections import Counter, defaultdict\n",
"import pickle"
]
},
{
"cell_type": "code",
"execution_count": 106,
"id": "7390a6aa-79cb-4dea-b6d7-de7e4b13e472",
"metadata": {},
"outputs": [],
"source": [
"# environment\n",
"\n",
"load_dotenv()\n",
"os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY', 'your-key-if-not-using-env')\n",
"os.environ['ANTHROPIC_API_KEY'] = os.getenv('ANTHROPIC_API_KEY', 'your-key-if-not-using-env')\n",
"os.environ['HF_TOKEN'] = os.getenv('HF_TOKEN', 'your-key-if-not-using-env')"
]
},
{
"cell_type": "code",
"execution_count": 107,
"id": "0732274a-aa6a-44fc-aee2-40dc8a8e4451",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Note: Environment variable`HF_TOKEN` is set and is the current active token independently from the token you've just configured.\n"
]
}
],
"source": [
"# Log in to HuggingFace\n",
"\n",
"hf_token = os.environ['HF_TOKEN']\n",
"login(hf_token, add_to_git_credential=True)"
]
},
{
"cell_type": "code",
"execution_count": 108,
"id": "b5521526-0da9-42d7-99e3-f950fab71662",
"metadata": {},
"outputs": [],
"source": [
"# One more import - the Item class\n",
"# If you get an error that you need to agree to Meta's terms when you run this, then follow the link it provides you and follow their instructions\n",
"# You should get approved by Meta within minutes\n",
"# Any problems - message me or email me!\n",
"\n",
"from items import Item"
]
},
{
"cell_type": "code",
"execution_count": 109,
"id": "1adcf323-de9d-4c24-a9c3-d7ae554d06ca",
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 110,
"id": "049885d4-fdfa-4ff0-a932-4a2ed73928e2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'input': [{'timestamp': 1737806400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737806460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737806700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737807000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737807300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737807600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737807660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737808200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737808500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737808800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737810000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737811200, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737811800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737811860, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1737828000, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737828060, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737828120, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737828180, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737829200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737831600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737831660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737835200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737838800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737838860, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737839400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737849600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737849660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737850800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737852000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737852060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737855600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737859200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737859260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737859800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'The data reflects a consistent daily routine, including medication times, meal preparation, and relaxation periods. No unusual activity is detected.'}, {'input': [{'timestamp': 1737892800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737892860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737893100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737893400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737893700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737894000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737894060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737894600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737894900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737895200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737896400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737897600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737898200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737898260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1737914400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737914460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737914520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737914580, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737915600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737918000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737918060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737921600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737925200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737925260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737925800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737936000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737936060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737937200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737938400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737938460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737942000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737945600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737945660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737946200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'The data shows a consistent routine similar to Day 1, with no deviations. All activities align with expected behavior.'}, {'input': [{'timestamp': 1737979200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737979260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737979500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737979800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737980100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737980400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737980460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737981000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737981300, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737981600, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737982800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737984000, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737984600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737984660, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738000800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738000860, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738000920, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738000980, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738002000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738004400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738004460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738008000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738011600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738011660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738012200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738022400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738022460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738023600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738024800, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738024860, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738028400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738032000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738032060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738032600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'The data shows a typical day with all expected activities occurring at regular times.'}, {'input': [{'timestamp': 1738065600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738065660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738065900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738066200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738066500, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738066800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067100, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067700, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068300, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068900, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069500, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}], 'result': 'anomalous', 'reason': 'High humidity persists in the bathroom with no movement or room transitions for over 45 minutes, suggesting a potential fall during shower.'}, {'input': [{'timestamp': 1738152000, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738152060, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738152900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738153200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738153260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738153800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738154100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738154400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738155600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738156800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738173600, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738184400, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738195200, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738206000, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}], 'result': 'anomalous', 'reason': 'Person left home in the morning but did not return, missing all subsequent daily activities including medications and meals.'}, {'input': [{'timestamp': 1738238400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738238460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738238700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738239000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738239300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738239600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738239660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738240200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738240500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738240800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738242000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738243200, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738243800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738243860, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738260000, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738260060, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738260120, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738260180, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738261200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738263600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738263660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738267200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738270800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738270860, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738271400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738281600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738281660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738282800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738284000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738284060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738287600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738291200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738291260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738291800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'All activities follow the expected pattern with normal timing and sequence.'}, {'input': [{'timestamp': 1738324800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738324860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738325700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738326600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738327200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738328400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738329600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738346400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738347600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738350000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738350060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738353600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738357200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738357260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738357800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738368000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738369200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738370400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738370460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738374000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738377600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738377660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738378200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'No fridge activity detected throughout the entire day despite multiple kitchen visits, suggesting potential eating issues or forgetfulness.'}, {'input': [{'timestamp': 1738411200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738411260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738412100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738412400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738412460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738413000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738413300, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738413600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738417200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738420800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738424400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738428000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738431600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738435200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738438800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738442400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738446000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738449600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738453200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738456800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738460400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738464000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738467600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738471200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738474800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}], 'result': 'anomalous', 'reason': 'Person remains in bedroom all day after breakfast, missing meals, medications, and normal daily activities. This could indicate illness or other health issues.'}, {'input': [{'timestamp': 1738497600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738497660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738497900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738498200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738498500, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738498800, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738498860, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738499400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738499700, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738500000, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738501200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738502400, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738503000, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738503060, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738519200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738519260, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738519320, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738519380, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738520400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738522800, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738522860, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738526400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738530000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738530060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738530600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738540800, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738540860, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738542000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738543200, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738543260, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738546800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738550400, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738550460, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738551000, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'All activities follow the expected daily routine with normal timing and sequence.'}, {'input': [{'timestamp': 1738584000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738584900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738585200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738585260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738585800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738586100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738586400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738587600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738588800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738605600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605660, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605720, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738605780, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738606800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738609200, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738609260, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738612800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738616400, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738617000, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738627200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738627260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738628400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738629600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738629660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738633200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738636800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738637400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'All three daily medications were missed (morning, afternoon, and evening), while other activities remained normal. This suggests a serious deviation in medication adherence.'}, {'input': [{'timestamp': 1738670400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738670460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738670700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738671300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738671600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738672200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738672500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738672800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738672860, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672920, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672980, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673040, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673100, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673160, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673220, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673280, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673340, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673460, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673520, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673580, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673640, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738673700, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738674000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738677600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738681200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738684800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738688400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}], 'result': 'anomalous', 'reason': 'Unusual rapid transitions between rooms followed by extended bedroom stay suggests potential confusion or disorientation. Missing subsequent daily activities and medications adds to the concern.'}, {'input': [{'timestamp': 1738756800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738756860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738757100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738757400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738757700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738758000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738758060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738758600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738758900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738759200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738760400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738761600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738762200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738762260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738778400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738778460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738778520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738778580, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738779600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738782000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738782060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738785600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738789200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738789260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738789800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738800000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738800060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738801200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738802400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738802460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738806000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738809600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738809660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738810200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'All activities follow the expected daily routine with normal timing and sequence.'}, {'input': [{'timestamp': 1738843200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738843260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738844100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844760, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844820, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844880, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844940, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738845000, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738845060, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738875600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738875660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738876200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'Unusually frequent kitchen visits and fridge openings throughout the day suggest potential memory issues or compulsive behavior. While other activities remain normal, the repeated kitchen pattern is concerning.'}, {'input': [{'timestamp': 1738929600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738929660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738929900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930200, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930260, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930320, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930380, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930440, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930560, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944000, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944060, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944120, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944180, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738952400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738952460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738953000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957600, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957660, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957720, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957780, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738962000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738962060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738962600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'Unusually frequent bathroom visits throughout the day, with multiple entries and exits in short succession. While other activities remain normal, this pattern suggests potential health issues requiring attention.'}, {'input': [{'timestamp': 1737806400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737806460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737806700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737807000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737807300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737807600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737807660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737808200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737808500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737808800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737810000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737811200, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737811800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737811860, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1737828000, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737828060, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737828120, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737828180, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737829200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737831600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737831660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737835200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737838800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737838860, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737839400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737849600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737849660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737850800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737852000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737852060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737855600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737859200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737859260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737859800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'The data reflects a consistent daily routine, including medication times, meal preparation, and relaxation periods. No unusual activity is detected.'}, {'input': [{'timestamp': 1737892800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737892860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737893100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737893400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737893700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737894000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737894060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737894600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737894900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737895200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737896400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737897600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737898200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737898260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1737914400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737914460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737914520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737914580, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737915600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737918000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737918060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737921600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737925200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737925260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737925800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737936000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737936060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737937200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737938400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737938460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737942000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737945600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737945660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737946200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'The data shows a consistent routine similar to Day 1, with no deviations. All activities align with expected behavior.'}, {'input': [{'timestamp': 1737979200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737979260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737979500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737979800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737980100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737980400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737980460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737981000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737981300, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737981600, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737982800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737984000, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737984600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737984660, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738000800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738000860, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738000920, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738000980, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738002000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738004400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738004460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738008000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738011600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738011660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738012200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738022400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738022460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738023600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738024800, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738024860, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738028400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738032000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738032060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738032600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'The data shows a typical day with all expected activities occurring at regular times.'}, {'input': [{'timestamp': 1738065600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738065660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738065900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738066200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738066500, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738066800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067100, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067700, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068300, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068900, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069500, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}], 'result': 'anomalous', 'reason': 'High humidity persists in the bathroom with no movement or room transitions for over 45 minutes, suggesting a potential fall during shower.'}, {'input': [{'timestamp': 1738152000, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738152060, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738152900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738153200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738153260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738153800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738154100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738154400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738155600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738156800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738173600, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738184400, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738195200, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738206000, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}], 'result': 'anomalous', 'reason': 'Person left home in the morning but did not return, missing all subsequent daily activities including medications and meals.'}, {'input': [{'timestamp': 1738238400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738238460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738238700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738239000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738239300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738239600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738239660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738240200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738240500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738240800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738242000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738243200, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738243800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738243860, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738260000, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738260060, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738260120, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738260180, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738261200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738263600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738263660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738267200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738270800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738270860, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738271400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738281600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738281660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738282800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738284000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738284060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738287600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738291200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738291260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738291800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'All activities follow the expected pattern with normal timing and sequence.'}, {'input': [{'timestamp': 1738324800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738324860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738325700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738326600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738327200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738328400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738329600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738346400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738347600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738350000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738350060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738353600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738357200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738357260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738357800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738368000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738369200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738370400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738370460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738374000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738377600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738377660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738378200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'No fridge activity detected throughout the entire day despite multiple kitchen visits, suggesting potential eating issues or forgetfulness.'}, {'input': [{'timestamp': 1738411200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738411260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738412100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738412400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738412460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738413000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738413300, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738413600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738417200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738420800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738424400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738428000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738431600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738435200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738438800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738442400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738446000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738449600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738453200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738456800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738460400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738464000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738467600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738471200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738474800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}], 'result': 'anomalous', 'reason': 'Person remains in bedroom all day after breakfast, missing meals, medications, and normal daily activities. This could indicate illness or other health issues.'}, {'input': [{'timestamp': 1738497600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738497660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738497900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738498200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738498500, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738498800, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738498860, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738499400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738499700, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738500000, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738501200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738502400, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738503000, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738503060, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738519200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738519260, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738519320, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738519380, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738520400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738522800, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738522860, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738526400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738530000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738530060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738530600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738540800, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738540860, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738542000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738543200, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738543260, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738546800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738550400, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738550460, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738551000, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'All activities follow the expected daily routine with normal timing and sequence.'}, {'input': [{'timestamp': 1738584000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738584900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738585200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738585260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738585800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738586100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738586400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738587600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738588800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738605600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605660, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605720, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738605780, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738606800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738609200, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738609260, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738612800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738616400, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738617000, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738627200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738627260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738628400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738629600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738629660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738633200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738636800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738637400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'All three daily medications were missed (morning, afternoon, and evening), while other activities remained normal. This suggests a serious deviation in medication adherence.'}, {'input': [{'timestamp': 1738670400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738670460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738670700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738671300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738671600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738672200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738672500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738672800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738672860, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672920, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672980, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673040, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673100, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673160, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673220, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673280, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673340, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673460, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673520, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673580, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673640, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738673700, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738674000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738677600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738681200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738684800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738688400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}], 'result': 'anomalous', 'reason': 'Unusual rapid transitions between rooms followed by extended bedroom stay suggests potential confusion or disorientation. Missing subsequent daily activities and medications adds to the concern.'}, {'input': [{'timestamp': 1738756800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738756860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738757100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738757400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738757700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738758000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738758060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738758600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738758900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738759200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738760400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738761600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738762200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738762260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738778400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738778460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738778520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738778580, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738779600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738782000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738782060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738785600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738789200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738789260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738789800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738800000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738800060, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738801200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738802400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738802460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738806000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738809600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738809660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738810200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'normal', 'reason': 'All activities follow the expected daily routine with normal timing and sequence.'}, {'input': [{'timestamp': 1738843200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738843260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738844100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844760, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844820, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844880, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844940, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738845000, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738845060, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738875600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738875660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738876200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'Unusually frequent kitchen visits and fridge openings throughout the day suggest potential memory issues or compulsive behavior. While other activities remain normal, the repeated kitchen pattern is concerning.'}, {'input': [{'timestamp': 1738929600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738929660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738929900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930200, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930260, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930320, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930380, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930440, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930560, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944000, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944060, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944120, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944180, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738952400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738952460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738953000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957600, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957660, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957720, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957780, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738962000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738962060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738962600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}], 'result': 'anomalous', 'reason': 'Unusually frequent bathroom visits throughout the day, with multiple entries and exits in short succession. While other activities remain normal, this pattern suggests potential health issues requiring attention.'}]\n"
]
}
],
"source": [
"# Load in our dataset\n",
"# Open and read the JSON file\n",
"with open('data/all_data.json', 'r') as file:\n",
" dataset = json.load(file)\n",
"\n",
"# Print the data\n",
"print(dataset)"
]
},
{
"cell_type": "code",
"execution_count": 111,
"id": "cde08860-b393-49b8-a620-06a8c0990a64",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of Situations: 28\n"
]
}
],
"source": [
"print(f\"Number of Situations: {len(dataset):,}\")"
]
},
{
"cell_type": "code",
"execution_count": 112,
"id": "3e29a5ab-ca61-41cc-9b33-22d374681b85",
"metadata": {},
"outputs": [],
"source": [
"# Investigate a particular datapoint\n",
"datapoint = dataset[2]\n"
]
},
{
"cell_type": "code",
"execution_count": 113,
"id": "40a4e10f-6710-4780-a95e-6c0030c3fb87",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'timestamp': 1737979200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1737979260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737979500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737979800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1737980100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737980400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737980460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1737981000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737981300, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1737981600, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737982800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1737984000, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737984600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1737984660, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738000800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738000860, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738000920, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738000980, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738002000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738004400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738004460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738008000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738011600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738011660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738012200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738022400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738022460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738023600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738024800, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738024860, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738028400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738032000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738032060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738032600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n",
"normal\n",
"The data shows a typical day with all expected activities occurring at regular times.\n"
]
},
{
"data": {
"text/plain": [
"{'input': [{'timestamp': 1737979200,\n",
" 'room': 'pillbox',\n",
" 'nodeId': 1,\n",
" 'onOff': True},\n",
" {'timestamp': 1737979260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1737979500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1737979800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500},\n",
" {'timestamp': 1737980100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1737980400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1737980460, 'room': 'kitchen', 'event': 'fridge_opened'},\n",
" {'timestamp': 1737981000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1737981300, 'room': 'livingroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1737981600, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1737982800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1737984000, 'room': 'hall', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1737984600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1737984660, 'room': 'hall', 'nodeId': 1, 'occupancy': 0},\n",
" {'timestamp': 1738000800, 'room': 'porch', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1738000860, 'room': 'hall', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1738000920, 'room': 'kitchen', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1738000980, 'room': 'kitchen', 'event': 'fridge_opened'},\n",
" {'timestamp': 1738002000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1738004400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1738004460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1738008000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1738011600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1738011660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True},\n",
" {'timestamp': 1738012200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1738022400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1738022460, 'room': 'kitchen', 'event': 'fridge_opened'},\n",
" {'timestamp': 1738023600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1738024800, 'room': 'livingroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1738024860, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1},\n",
" {'timestamp': 1738028400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False},\n",
" {'timestamp': 1738032000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True},\n",
" {'timestamp': 1738032060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True},\n",
" {'timestamp': 1738032600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}],\n",
" 'result': 'normal',\n",
" 'reason': 'The data shows a typical day with all expected activities occurring at regular times.'}"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Investigate\n",
"\n",
"print(datapoint[\"input\"])\n",
"print(datapoint[\"result\"])\n",
"print(datapoint[\"reason\"])\n",
"datapoint"
]
},
{
"cell_type": "code",
"execution_count": 114,
"id": "89078cb1-9679-4eb0-b295-599b8586bcd1",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxUAAAJOCAYAAADBIyqKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAATupJREFUeJzt3XlcVHX////nyDIoAoo7iaDmLmKamsulYBa5oHZlLqWidaWVWW5lXqWimaZXmkumVubSYlm5Vm4laG6Zmtpibrl9MiVNQTFR4f37oy/zc2QROOCAPO6329xunvd5n3Nec2Yc5jnnfc6xGWOMAAAAACCHiri6AAAAAAAFG6ECAAAAgCWECgAAAACWECoAAAAAWEKoAAAAAGAJoQIAAACAJYQKAAAAAJYQKgAAAABYQqgAAAAAYAmhAiik+vTpI5vNpqNHj7q6lFyxdu1aNW/eXCVLlpTNZlPnzp1dXVK+Fx0dLZvNptjYWFeXgiwoTK+XzWZTWFiYq8vIsqNHj8pms6lPnz6uLgVwGUIFYFHqHxObzaaIiIh0+2zbto0/OHno6NGj6tSpk3777Tf17dtXo0ePVvfu3TNdJvULms1m06JFi9Lt8+STTxaaL3H53cKFCx2v1/fff+/qcpBNx48f19NPP61q1arJy8tLxYsXV+XKldW+fXtNnDhRiYmJN12Hq38ICQ4OVnBwsEu2DRQE7q4uALidrF27VuvXr1fr1q1dXUqh8vXXX+vy5cuaPHmyHnnkkWwv//LLL6tLly7y8PDIg+qQG+bOnSubzSZjjN577z01atTI1SUhi/bs2aOwsDCdP39ezZs3V9u2bVW8eHEdP35c3377rb766is99NBDuvPOOx3L7Nu3T8WKFXNh1dlzxx13aN++ffLz83N1KYDLECqAXBIcHKzjx49r+PDh2r59u2w2m6tLKjROnjwpSQoICMj2slWrVtXhw4c1e/ZsDRw4MLdLQy44ePCgNm7cqI4dO+rXX3/VokWLNGXKFBUtWtTVpSELhgwZovPnz2vhwoXq1atXmvlbt25V6dKlndpq1qx5q8rLFR4eHgWuZiC3MfwJyCU1atRQr169tGPHDi1evDhLy2R2OD0sLCxNMLl+TPW8efMUEhKiokWLqnLlypo+fbokyRijyZMnq0aNGvLy8lK1atW0cOHCDGtISUnRpEmTHMMSKleurLFjx+rq1avp9t+4caMiIyNVunRp2e12VatWTS+//LIuXbrk1C82NlY2m03R0dHasmWL7r//fpUoUSLLYeunn35S165dVbZsWdntdlWuXFmDBg3S2bNnHX1Sh56NHj1akhQeHu4YIpPVIUtDhw5VyZIlNW7cOF24cCFLy0jSypUrFR4eLj8/PxUtWlShoaGaMmWKrl275tTv+rHW+/bt04MPPqhSpUo5hnHMnz9fNptN8+fP18qVK9WkSRMVK1ZMd9xxh0aOHKmUlBRJ0oIFCxQaGqqiRYuqUqVK+t///pemppMnT2r06NG65557HPstODhYTz/9tOLi4rL83NJz5513ysfHJ83rnKpjx46y2Ww6cOCApH/eV++++64aN24sf39/FS1aVBUrVlRkZGS2h5O99957kqTevXurV69eio+P12effZZu39QhMkeOHNH06dNVs2ZN2e12BQUFacyYMY79eb1r165pypQpjv3r5+en8PBwrVy5Mk3f/Pp6ZfX9eP3/yxtldF7AwYMH1bdvX1WuXFl2u13+/v4KDQ3VoEGDZIy5aW1bt25ViRIl0g0UktS0aVOVKFHCqe3GcyqCg4O1YMECSVLlypUd/89T+9zsnIb0ztHYuXOnnnnmGdWtW9ex30JCQvTaa685ff6lrvvYsWM6duyYY9vX78fMtn/s2DE9/vjjuuOOO+Tp6amKFSvq8ccf1/Hjx9P0Tf3cv3r1qqKjoxUcHCy73a7q1avrrbfeStM/9QhtaGio/Pz85O3treDgYHXt2lV79uxJd18AeYUjFUAuGjt2rD7++GO9/PLL+ve//51nw2mmTp2q2NhYderUSa1bt9bnn3+u5557TsWKFdMPP/ygzz//XB06dNC9996rjz/+WFFRUQoODlbLli3TrGvQoEHavHmzunbtquLFi2vlypUaPXq09u7dm+aL26xZszRgwACVKFFCkZGRKlu2rHbs2KFXX31VMTExiomJkaenp9MyW7Zs0fjx4xUeHq5+/fql+4f0Rps2bVJERISuXLmiLl26KDg4WFu3btW0adP0xRdfaNu2bSpdurRKlCih0aNHKzY2Vhs2bHA8T0lZHvtcsmRJvfjiixo+fLhef/11jRkz5qbLTJkyRUOHDpW/v78eeeQReXt7a8WKFRo6dKi+/fZbLVmyJE14OnTokO655x6FhISoT58+Onv2rNO+Wrp0qdauXavOnTurefPm+vLLLzVu3DgZY+Tn56dx48apU6dOCgsL0+eff64XXnhB5cqVU+/evR3r2LhxoyZPnqx7771XTZo0kYeHh3744QfNmjVLa9as0a5du3I8PKNnz54aM2aMli1blmaI2ZkzZ7R69Wo1adJE1atXlySNGDFCkyZNUtWqVfXII4/Ix8dHv//+uzZt2qSvv/46yyfhJicna8GCBSpZsqQ6dOigu+++W6NGjdLcuXMz/JIqSc8//7w2bNigDh06KCIiQsuWLVN0dLSuXLmiV1991dHPGKMuXbpo+fLlql69ugYMGKDExER98skn6tixo6ZMmaLBgwenWX9+er1y8n7MqpMnT6px48ZKTExU+/bt1a1bNyUmJurgwYN666239Prrr8vdPfOvEqVKldKpU6d08uTJHB1NlP75nJo/f7727Nmj5557zhFCrJzj8M4772jlypVq2bKl2rVrp0uXLik2NlYjRozQ999/r88//1ySHJ8zU6dOddSS6mbv4wMHDqhFixb6888/FRkZqTp16uinn37Se++9p5UrV2rTpk2O/zPX69Gjh7Zv3662bdvKzc1Nixcv1oABA+Th4aEnnnjC0S8qKkqLFy9WvXr11LdvX9ntdp04cUIxMTH6/vvvFRoamuP9A2SbAWDJkSNHjCQTERFhjDFm2LBhRpKZMWOGo8/WrVuNJBMVFeW0bFBQkAkKCkp3va1atTI3/hcdPXq0kWT8/f3N4cOHHe3Hjx83np6exs/Pz1SvXt3ExcU55m3bts1IMpGRkU7rioqKMpJMmTJlzIkTJxztSUlJpmXLlkaS+eyzzxztP//8s3F3dzehoaHmzJkzTuuaMGGCkWRef/11R1tMTIyRZCSZ9957L93nmJ7k5GRTtWpVI8msXr3aad7zzz9vJJnHHnss3f0SExOT5e2kLrNo0SLz999/m8DAQOPt7W1OnTrl6NO/f/806z106JBxd3c3ZcuWNcePH3e0X7582bRo0cJIMgsXLnS0p74/JJlRo0alqWPevHlGkvHw8DDbt293tCckJJiyZcuaYsWKmfLly6f7eoeEhDit6/Tp0+bChQtptrFgwQIjyYwbNy7dfZCV/Xbw4EEjybRt2zbNvBkzZhhJ5s0333S0+fv7m4CAAJOYmJim/9mzZ2+6vVQrVqwwkkz//v0dbS1btjQ2m80cPHgwTf/U93XlypXNyZMnHe1//vmnKVGihPHx8TFJSUmO9tR906pVK6f2Y8eOmdKlSxt3d3enfZ/fXq/svh9T/1+OHj06zXZT36vXf05Nnz7dSDJTp05N0z+rr+OQIUMcr8nEiRPNli1b0n1fXC/1Nble6mt75MiRLNV+s/UdO3bMXLt2zaktJSXFPPbYY0aS2bRpk9O8zD6vM9p+eHi4kWTmzJnj1D5z5kwjybRu3dqpPfVzv0mTJiY+Pt7R/uuvvxp3d3dTo0YNR9v58+eNzWYzDRs2TPM8rl27Zs6dO5durUBeYfgTkMv++9//qkSJEnrllVd08eLFPNnGc889pypVqjimAwMD1aJFC8XHx+ull15SmTJlHPOaNGmiKlWqZHgo/LnnnlPFihUd056eno5fcufPn+9onzNnjq5du6YZM2aoVKlSTut44YUXVKZMmXSvotSgQQP17ds3y89t8+bNOnz4sNq2bZvmalqjRo2Sv7+/PvroI125ciXL67wZLy8vjRkzRomJiTc9UvHRRx/p2rVrGjp0qAIDAx3tdrtdEydOlOS831KVL19eL730Uobr7dmzp9PJxz4+PurQoYMuXbqkp556Kt3X+5dffnEa3lK2bFkVL148zbp79eolX19fff3115k+t8zceeedatq0qdatW5dmaM77778vDw8PdevWzand09NTbm5uadbl7++f5e3OnTtXkpx+4e/du7fjhO2MjBw5UhUqVHBMly5dWp06ddKFCxe0f/9+R3vqkJpJkyY5HTmqVKmSBg8erGvXrunDDz9Ms/788nrl9P2YXemdv5LV1/HVV19Vnz59dOzYMQ0fPlzNmjWTr6+vGjZsqHHjxun8+fOW68uJSpUqpXl/2mw2DRgwQJIs/X+R/rniVUxMjGrXru10dEH658pyNWvW1Pr163XixIk0y06YMEG+vr6O6Ro1aqh58+bav3+/Y5hm6oULvLy8VKSI89c5Nze3NEPKgLxGqAByWepwmri4OL3++ut5so369eunaUv9ApXRvNSTmW/0r3/9K01b06ZN5e7urh9++MHRtm3bNknSmjVrFB0d7fQYO3asPDw89Ouvv6ZZV3av0pO6zfSGFRQvXlx33323Ll++7PTFMDdERUWpTp06euedd3To0KEc1de0aVN5eXlp9+7daeaFhoamGRp2vZy8psnJyTp9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1oQJEzLc/pkzZ3T58uWb1ir9cyJ4eHi4fv755zQXFXj77be1b98+tW7dOsPhdzfz559/6qeffkrTfu7cOSUlJWXptQFyE8OfgDzUsWNHtWjRIs0frlTPPPOM5s2bp//85z9at26dypQpo2+//Vbnz59XaGjoLbl50T333KPQ0FB169ZN3t7eWrlypfbv369///vfeuihhxz96tatq7feektPPfWUatSooXbt2qlq1aq6cOGCfvvtN23YsEF9+vTR7NmzLdVTpEgRzZ8/XxEREWrXrp0efvhhBQUFaevWrYqNjVXVqlUdX0TyyoQJE7RixQrHr5nXq1q1qiZOnKihQ4eqXr166tq1q9N+69Spk3r27Jmn9aWnSJEievrppx03woqMjFRCQoJWrVqloKCgHN8f4EZ2u11du3bVnDlzNG/ePAUFBaW5/8nff/+t5s2bq3r16mrYsKEqVaqkixcv6osvvtCpU6c0bNgw2e32DLeRkJCgTz/9VN7e3pmO2e/Tp48mTJiguXPnatiwYTl6Pr169dKSJUu0fPly1atXTx06dHDcp+Kvv/7S5MmTna7klFty6/XK7vvR09NTAwcO1Pjx49WgQQPHFbFWrlypVq1apXnPv//++5ozZ45atmypqlWrytfXV7/88ou++uor+fv7Z+nKblOmTFF0dLTuvvtuNWzYUP7+/jp79qxiYmJ04MABlSpVSpMnT77pelq3bq3XX39d/fr100MPPSRvb28FBQU5Qu3QoUPVr18/NW3aVA8//LBSUlK0atWqdC8W0bhxYzVu3FiLFy/WH3/8oXvuuUfHjx/XihUr1L59+3Rvrti6dWvt2LFDbdu21b/+9S95enqqZcuW6d7/J9WsWbPUokULPfHEE1q5cqVq166tn3/+WStWrFCZMmU0a9asmz7vjPz++++66667FBoaqnr16umOO+7Q2bNntXz5cl29ejXH/yeAHHPRpWyB28aN96m40ebNmx33KUjvGurr1683TZo0MXa73ZQqVcr06tXLnD59OtP7VKR3X4HMruGe3rpS+x8+fNi89tpr5s477zSenp4mKCjIREdHO12z/3rbt2833bt3NwEBAcbDw8OULl3aNGjQwLz44otm3759jn6ZXQ8/K/bu3Wu6dOliSpcubTw8PExQUJB57rnnzJ9//pmmr9X7VKSnX79+jtctvfUuX77c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twMAAAAg63J8pOKjjz5SVFSUJk2a5NRetmxZTZw4UadPn9b777+vV155xXKRqbZs2aJOnTqpffv2kqTg4GAtWrRI27dvz7VtAAAAAMieHB+p+OOPP9SkSZMM5zdp0kSnTp3K6erT1axZM33zzTc6cOCAJGnPnj3atGmT2rZtm6vbAQAAAJB1OT5SUbFiRcXGxurJJ59Md/6GDRtUsWLFHBeWnhdffFEJCQmqWbOm3NzclJycrFdffVWPPvpohsskJSUpKSnJMZ2QkJCrNQEAAACFXY6PVERFRWnx4sV68skntX//fiUnJyslJUX79+/XU089pU8//VR9+vTJxVKlxYsX68MPP9RHH32kXbt2acGCBXr99de1YMGCDJeZMGGC/Pz8HI/AwMBcrQkAAAAo7GzGGJOTBZOTk/X4449r4cKFstlsKlLkn3ySkpIiY4yioqI0d+5cR3tuCAwM1IsvvqgBAwY42saNG6cPPvhAv/76a7rLpHekIjAwUPHx8fL19c212rIrclGky7YNAJK0ssdKV5eQ/0XyWQ3AxVa69rM6ISFBfn5+N/3unOPhT25ubpo/f76GDBmir776yuk+Fe3atVO9evVyuuoMXbp0KU1IcXNzy/Tu3na7XXa7PddrAQAAAPCPbIWKy5cva9CgQapTp44GDhwoSapXr16aADF9+nTNnj1b06ZNy9X7VERGRurVV19VpUqVVKdOHf3www+aMmWKHnvssVzbBgAAAIDsyVaoePvttzV//nz98ssvmfZr3769XnjhBYWEhOipp56yVOD1ZsyYoZEjR+rpp59WXFycAgIC1L9/f40aNSrXtgEAAAAge7J1wsPixYv10EMPqUqVKpn2q1q1qh5++GEtWrTIUnE38vHx0dSpU3Xs2DH9/fffOnz4sMaNGydPT89c3Q4AAACArMtWqPjxxx/VokWLLPVt1qyZ9u7dm6OiAAAAABQc2QoVV65cyfJRAU9PT6erLgEAAAC4PWUrVAQEBOinn37KUt+ffvpJAQEBOSoKAAAAQMGRrVDRpk0bLVy4UHFxcZn2i4uL08KFC3XfffdZKg4AAABA/petUDF8+HBdvnxZrVu31nfffZdun++++0733nuvLl++rOeffz5XigQAAACQf2XrkrJVqlTR4sWL1aNHDzVr1kxVqlRRSEiIfHx8dOHCBf300086fPiwihUr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jNP9XC5evKh27drpm2++0Q8//KAHHnhAkZGROn78+K3aFQCQ5xITEzVkyBDt2LFD33zzjYoUKaIHH3xQKSkpjj4vvfSShg0bpt27d6t69erq0aOHrl27JknauXOnunbtqu7du+vHH39UdHS0Ro4cqfnz5ztt54033lDz5s31ww8/qH379urVq5d69+6tnj17ateuXapatap69+6t1Cv3X758WQ0bNtSXX36pn376Sf369VOvXr20ffv2DJ9Lnz59tGPHDq1YsUJbt26VMUbt2rXT1atXs7Qvrl27ps6dO6tVq1bau3evtm7dqn79+slms2VzrwJZYADkmVatWpkWLVo4tTVq1MgMHz7crF271ri5uZnjx4875v38889Gktm+fbsxxpjRo0cbDw8PExcX57QOSebll192TG/dutVIMnPnznW0LVq0yHh5eWVaX506dcyMGTMc00FBQeaNN97I9vMEgPzqzz//NJLMjz/+aI4cOWIkmXfffdcxP/Vzd9++fcYYYx555BFz3333Oa3j+eefN7Vr13ZMBwUFmZ49ezqm//jjDyPJjBw50tGW+rn8xx9/ZFhb+/btzdChQx3TrVq1Ms8995wxxpgDBw4YSWbz5s2O+WfOnDFFixY1ixcvNsb88zciNDTUaZ1vvPGGCQoKMsYYc/bsWSPJxMbGZraLgFzBkQogj9WrV89pukKFCoqLi9O+ffsUGBiowMBAx7zatWurRIkS2rdvn6MtKChIZcqUyXS95cqVkySFhIQ4tV2+fFkJCQmS/jlSMWzYMNWqVUslSpRQ8eLFtW/fPo5UALitHDx4UD169FCVKlXk6+vrGAp0/Wfd9Z+fFSpUkCTFxcVJkvbt26fmzZs7rbN58+Y6ePCgkpOT011HRp/B1683OTlZr7zyikJCQuTv76/ixYtrzZo1GX4G79u3T+7u7mrSpImjrVSpUqpRo4bT34jM+Pv7q0+fPoqIiFBkZKSmTZumP/74I0vLAtlFqADymIeHh9O0zWZzOgx/M97e3jddb+qh7PTaUrc1bNgwLV26VOPHj9e3336r3bt3KyQkhJO/AdxWIiMj9ddff+mdd97Rd999p++++06S84UuMvuszKrsfgb/73//07Rp0zR8+HDFxMRo9+7dioiIsPQZXKRIEcfwqlQ3Do2aN2+etm7dqmbNmumTTz5R9erVtW3bthxvE8gIoQJwkVq1aunEiRM6ceKEo+2XX37R+fPnVbt27Vzf3ubNm9WnTx89+OCDCgkJUfny5XX06NFc3w4AuMrZs2e1f/9+vfzyy7r33ntVq1YtnTt3LlvrqFWrljZv3uzUtnnzZlWvXl1ubm45rm3z5s3q1KmTevbsqdDQUFWpUkUHDhzItI5r1645QpH0/z+/1L8RZcqU0alTp5yCxfXn3qW66667NGLECG3ZskV169bVRx99lOPnAWSEUAG4SJs2bRQSEqJHH31Uu3bt0vbt29W7d2+1atVKd999d65vr1q1ao6Tvffs2aNHHnkk27/MAUB+VrJkSZUqVUpvv/22Dh06pPXr12vIkCHZWsfQoUP1zTff6JVXXtGBAwe0YMECvfnmmxo2bJil2qpVq6Z169Zpy5Yt2rdvn/r37+90tb/0+nfq1ElPPPGENm3apD179qhnz56644471KlTJ0n/XGHwzz//1KRJk3T48GHNnDlTq1atcqzjyJEjGjFihLZu3apjx45p7dq1OnjwoGrVqmXpuQDpIVQALmKz2bR8+XKVLFlSLVu2VJs2bVSlShV98sknebK9KVOmqGTJkmrWrJkiIyMVERGhBg0a5Mm2AMAVihQpoo8//lg7d+5U3bp1NXjwYP3vf//L1joaNGigxYsX6+OPP1bdunU1atQojR07Vn369LFU28svv6wGDRooIiJCYWFhKl++vDp37pzpMvPmzVPDhg3VoUMHNW3aVMYYffXVV45hVrVq1dJbb72lmTNnKjQ0VNu3b3cKP8WKFdOvv/6qhx56SNWrV1e/fv00YMAA9e/f39JzAdJjMzcOxgMAAACAbOBIBQAAAABLCBUAAAAALCFUAAAAALCEUAEAAADAEkIFAAAAAEsIFQAAAAAsIVQAAAAAsIRQAQAAAMASQgUA3GaCg4Mt3/03L/Tp00fBwcGuLgMAkAcIFQBQQPz444/q0qWLgoKC5OXlpTvuuEP33XefZsyYkelyv/zyi6Kjo3X06NE8r/HkyZOKjo7W7t2783xbWREWFiabzXbTR3R0tKtLBYACzWaMMa4uAgCQuS1btig8PFyVKlVSVFSUypcvrxMnTmjbtm06fPiwDh065OiblJSkIkWKyMPDQ5L02Wef6eGHH1ZMTIzCwsLytM4dO3aoUaNGmjdvXpqjJVevXlVKSorsdnue1nC9devW6fTp047p77//XtOnT9d///tf1apVy9Fer1491atX75bVBQC3G3dXFwAAuLlXX31Vfn5++v7771WiRAmneXFxcU7Tt/JLe3akhpxb6b777nOa9vLy0vTp03XfffflecACgMKE4U8AUAAcPnxYderUSRMoJKls2bJO09efUzF//nw9/PDDkqTw8HDHcJ/Y2FhJynDoz43nZfz1118aNmyYQkJCVLx4cfn6+qpt27bas2ePo09sbKwaNWokSerbt69jW/Pnz5eU/jkViYmJGjp0qAIDA2W321WjRg29/vrruvEgus1m0zPPPKNly5apbt26stvtqlOnjlavXn2TPZe5efPmyWaz6Ycffkgzb/z48XJzc9Pvv/8u6Z+hVHXr1tXOnTvVrFkzFS1aVJUrV9bs2bPTLJuUlKTRo0frzjvvlN1uV2BgoF544QUlJSVZqhcA8itCBQAUAEFBQdq5c6d++umnbC3XsmVLPfvss5Kk//73v3r//ff1/vvvOw39yYrffvtNy5YtU4cOHTRlyhQ9//zz+vHHH9WqVSudPHlSklSrVi2NHTtWktSvXz/Htlq2bJnuOo0x6tixo9544w098MADmjJlimrUqKHnn39eQ4YMSdN/06ZNevrpp9W9e3dNmjRJly9f1kMPPaSzZ89m67lcr0uXLipatKg+/PDDNPM+/PBDhYWF6Y477nC0nTt3Tu3atVPDhg01adIkVaxYUU899ZTee+89R5+UlBR17NhRr7/+uiIjIzVjxgx17txZb7zxhrp165bjWgEgXzMAgHxv7dq1xs3Nzbi5uZmmTZuaF154waxZs8ZcuXIlTd+goCATFRXlmP7000+NJBMTE5OmryQzevTom67j8uXLJjk52anPkSNHjN1uN2PHjnW0ff/990aSmTdvXpp1RkVFmaCgIMf0smXLjCQzbtw4p35dunQxNpvNHDp0yKlOT09Pp7Y9e/YYSWbGjBlptpWR9PZFjx49TEBAgNPz27VrV5rn0apVKyPJTJ482dGWlJRk6tevb8qWLet4Ld5//31TpEgR8+233zpte/bs2UaS2bx5c5brBYCCgiMVAFAA3Hfffdq6das6duyoPXv2aNKkSYqIiNAdd9yhFStW5Pn27Xa7ihT5509GcnKyzp49q+LFi6tGjRratWtXjtb51Vdfyc3NzXEkJdXQoUNljNGqVauc2tu0aaOqVas6puvVqydfX1/99ttvOdp+qt69e+vkyZOKiYlxtH344YcqWrSoHnroIae+7u7u6t+/v2Pa09NT/fv3V1xcnHbu3ClJ+vTTT1WrVi3VrFlTZ86ccTxat24tSU7bAYDbBaECAAqIRo0aacmSJTp37py2b9+uESNG6MKFC+rSpYt++eWXPN12SkqK3njjDVWrVk12u12lS5dWmTJltHfvXsXHx+donceOHVNAQIB8fHyc2lOHZh07dsypvVKlSmnWUbJkSZ07dy5H20913333qUKFCo4hUCkpKVq0aJE6deqUpraAgAB5e3s7tVWvXl2SHJfsPXjwoH7++WeVKVPG6ZHa78YT6wHgdsDVnwCggPH09FSjRo3UqFEjVa9eXX379tWnn36q0aNH59o2kpOTnabHjx+vkSNH6rHHHtMrr7wif39/FSlSRIMGDVJKSkqubTczbm5u6bYbi1dGd3Nz0yOPPKJ33nlHb731ljZv3qyTJ0+qZ8+eOVpfSkqKQkJCNGXKlHTnBwYGWikXAPIlQgUAFGB33323JOmPP/7IsI/NZstwXsmSJXX+/HmntitXrqRZ32effabw8HDNnTvXqf38+fMqXbp0lrZ1o6CgIH399de6cOGC0xGBX3/91TH/Vundu7cmT56slStXatWqVSpTpowiIiLS9Dt58qQSExOdjlYcOHBAkhxXtqpatar27Nmje++9N1v7AwAKMoY/AUABEBMTk+4v8l999ZUkqUaNGhkum/oF+MbwIP3zBXjjxo1ObW+//XaaIxVubm5ptv/pp586LrealW3dqF27dkpOTtabb77p1P7GG2/IZrOpbdu2N11Hbkm9+d27776rzz//XN27d5e7e9rf3a5du6Y5c+Y4pq9cuaI5c+aoTJkyatiwoSSpa9eu+v333/XOO++kWf7vv/9WYmJi3j0RAHARjlQAQAEwcOBAXbp0SQ8++KBq1qypK1euaMuWLfrkk08UHBysvn37Zrhs/fr15ebmpokTJyo+Pl52u12tW7dW2bJl9Z///EdPPvmkHnroId13333as2eP1qxZ43T0QZI6dOigsWPHqm/fvmrWrJl+/PFHffjhh6pSpYpTv6pVq6pEiRKaPXu2fHx85O3trSZNmqhy5cpp6oqMjFR4eLheeuklHT16VKGhoVq7dq2WL1+uQYMGOZ2UfSv07t1bw4YNk6QMhz4FBARo4sSJOnr0qKpXr65PPvlEu3fv1ttvv+24uV+vXr20ePFiPfnkk4qJiVHz5s2VnJysX3/9VYsXL9aaNWscR5gA4Lbh2otPAQCyYtWqVeaxxx4zNWvWNMWLFzeenp7mzjvvNAMHDjSnT5926nvj5WCNMeadd94xVapUMW5ubk6XVE1OTjbDhw83pUuXNsWKFTMRERHm0KFD6V5SdujQoaZChQqmaNGipnnz5mbr1q2mVatWplWrVk7bWr58ualdu7Zxd3d3uizrjZeUNcaYCxcumMGDB5uAgADj4eFhqlWrZv73v/+ZlJQUp36SzIABA9Lsl/Sea2Yyu7zuH3/8Ydzc3Ez16tXTXbZVq1amTp06ZseOHaZp06bGy8vLBAUFmTfffDNN3ytXrpiJEyeaOnXqGLvdbkqWLGkaNmxoxowZY+Lj47NcLwAUFDZjLJ7hBgDAbeDMmTOqUKGCRo0apZEjR6aZHxYWpjNnzmT7BoQAUBhwTgUAAJLmz5+v5ORk9erVy9WlAECBwzkVAIBCbf369frll1/06quvqnPnzo6rOAEAso5QAQAo1MaOHastW7aoefPmmjFjhqvLAYACiXMqAAAAAFjCORUAAAAALCFUAAAAALCEUAEAAADAEkIFAAAAAEsIFQAAAAAsIVQAAAAAsIRQAQAAAMASQgUAAAAASwgVAAAAACz5/wB2OpoU/8GT9QAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot the distribution of results\n",
"\n",
"# Count the occurrences of \"normal\" and \"anomalous\" results\n",
"situation_counts = {\"normal\": 0, \"anomalous\": 0}\n",
"for entry in dataset:\n",
" result = entry.get(\"result\", \"unknown\").lower()\n",
" if result in situation_counts:\n",
" situation_counts[result] += 1\n",
"\n",
"# Extract keys and values for the bar chart\n",
"labels = list(situation_counts.keys())\n",
"counts = list(situation_counts.values())\n",
"\n",
"# Plot the bar chart\n",
"plt.figure(figsize=(8, 6))\n",
"plt.bar(labels, counts, color=['green', 'red'], alpha=0.7)\n",
"\n",
"# Add labels and title\n",
"plt.xlabel(\"Situation Type\", fontsize=12)\n",
"plt.ylabel(\"Count\", fontsize=12)\n",
"plt.title(\"Number of Normal vs Anomalous Situations\", fontsize=14)\n",
"\n",
"# Annotate bars with counts\n",
"for i, count in enumerate(counts):\n",
" plt.text(i, count + 0.2, str(count), ha='center', fontsize=10)\n",
"\n",
"# Display the plot\n",
"plt.tight_layout()\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 115,
"id": "eabc7c61-0cd2-41f4-baa1-b85400bbf87f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'timestamp': 1738065600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738065660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738065900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738066200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738066500, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738066800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067100, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067700, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068300, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068900, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069500, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}]\n",
"[{'timestamp': 1738152000, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738152060, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738152900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738153200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738153260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738153800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738154100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738154400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738155600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738156800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738173600, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738184400, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738195200, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738206000, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}]\n",
"[{'timestamp': 1738324800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738324860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738325700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738326600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738327200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738328400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738329600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738346400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738347600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738350000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738350060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738353600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738357200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738357260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738357800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738368000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738369200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738370400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738370460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738374000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738377600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738377660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738378200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738411200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738411260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738412100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738412400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738412460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738413000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738413300, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738413600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738417200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738420800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738424400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738428000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738431600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738435200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738438800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738442400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738446000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738449600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738453200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738456800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738460400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738464000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738467600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738471200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738474800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}]\n",
"[{'timestamp': 1738584000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738584900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738585200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738585260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738585800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738586100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738586400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738587600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738588800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738605600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605660, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605720, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738605780, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738606800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738609200, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738609260, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738612800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738616400, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738617000, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738627200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738627260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738628400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738629600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738629660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738633200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738636800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738637400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738670400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738670460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738670700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738671300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738671600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738672200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738672500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738672800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738672860, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672920, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672980, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673040, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673100, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673160, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673220, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673280, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673340, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673460, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673520, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673580, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673640, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738673700, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738674000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738677600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738681200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738684800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738688400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}]\n",
"[{'timestamp': 1738843200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738843260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738844100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844760, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844820, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844880, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844940, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738845000, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738845060, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738875600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738875660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738876200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738929600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738929660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738929900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930200, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930260, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930320, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930380, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930440, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930560, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944000, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944060, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944120, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944180, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738952400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738952460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738953000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957600, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957660, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957720, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957780, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738962000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738962060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738962600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738065600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738065660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738065900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738066200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738066500, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738066800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067100, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738067700, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068300, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738068900, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069200, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}, {'timestamp': 1738069500, 'room': 'bathroom', 'nodeId': 3, 'humidity': 7500}]\n",
"[{'timestamp': 1738152000, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738152060, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738152600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738152900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738153200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738153260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738153800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738154100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738154400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738155600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738156800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738157460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738173600, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738184400, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738195200, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738206000, 'room': 'porch', 'nodeId': 1, 'occupancy': 0}]\n",
"[{'timestamp': 1738324800, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738324860, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325100, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738325400, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738325700, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738326600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738326900, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738327200, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738328400, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738329600, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330200, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738330260, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738346400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346460, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738346520, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738347600, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738350000, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738350060, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738353600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738357200, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738357260, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738357800, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738368000, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738369200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738370400, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738370460, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738374000, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738377600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738377660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738378200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738411200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738411260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738411800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738412100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738412400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738412460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738413000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738413300, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738413600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738417200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738420800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738424400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738428000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738431600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738435200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738438800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738442400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738446000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738449600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738453200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738456800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738460400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738464000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738467600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738471200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738474800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}]\n",
"[{'timestamp': 1738584000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584300, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738584600, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738584900, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738585200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738585260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738585800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738586100, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738586400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738587600, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738588800, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589400, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738589460, 'room': 'hall', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738605600, 'room': 'porch', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605660, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738605720, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738605780, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738606800, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738609200, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738609260, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738612800, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738616400, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738617000, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738627200, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738627260, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738628400, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738629600, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738629660, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738633200, 'room': 'livingroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738636800, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738637400, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738670400, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738670460, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738670700, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671000, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738671300, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738671600, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738671660, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738672200, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738672500, 'room': 'livingroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738672800, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 0}, {'timestamp': 1738672860, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672920, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738672980, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673040, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673100, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673160, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673220, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673280, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673340, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673400, 'room': 'livingroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673460, 'room': 'kitchen', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673520, 'room': 'hall', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673580, 'room': 'bathroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738673640, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738673700, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738674000, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738677600, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738681200, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738684800, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}, {'timestamp': 1738688400, 'room': 'bedroom', 'nodeId': 1, 'occupancy': 1}]\n",
"[{'timestamp': 1738843200, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738843260, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738843800, 'room': 'bathroom', 'nodeId': 3, 'humidity': 6500}, {'timestamp': 1738844100, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844760, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738844820, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738844880, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738844940, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738845000, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738845060, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738866580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738866640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738866700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738875600, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738875660, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738876200, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888520, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738888580, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738888640, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738888700, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}]\n",
"[{'timestamp': 1738929600, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738929660, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738929900, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930200, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930260, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930320, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930380, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930440, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738930500, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738930560, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944000, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944060, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738944120, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738944180, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738952400, 'room': 'kitchen', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738952460, 'room': 'kitchen', 'event': 'fridge_opened'}, {'timestamp': 1738953000, 'room': 'kitchen', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957600, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957660, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738957720, 'room': 'bathroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738957780, 'room': 'bathroom', 'nodeId': 2, 'onOff': False}, {'timestamp': 1738962000, 'room': 'bedroom', 'nodeId': 2, 'onOff': True}, {'timestamp': 1738962060, 'room': 'pillbox', 'nodeId': 1, 'onOff': True}, {'timestamp': 1738962600, 'room': 'bedroom', 'nodeId': 2, 'onOff': False}]\n"
]
}
],
"source": [
"# So what are the anomalous items??\n",
"\n",
"for datapoint in dataset:\n",
" try:\n",
" result = datapoint[\"result\"]\n",
" if result == \"anomalous\":\n",
" print(datapoint['input'])\n",
" except ValueError as e:\n",
" pass"
]
},
{
"cell_type": "markdown",
"id": "a0d02f58-23f6-4f81-a779-7c0555afd13d",
"metadata": {},
"source": [
"## Now it's time to curate our dataset\n",
"\n",
"We select all items\n",
"\n",
"We will be create Item instances, which truncate the input and reasoning to fit within 180 tokens using the right Tokenizer\n",
"\n",
"And will create a prompt to be used during Training.\n",
"\n",
"Items will be rejected if they don't have sufficient characters.\n",
"\n",
"## But why 180 tokens??\n",
"\n",
"This is an example of a \"hyper-parameter\". In other words, it's basically trial and error! We want a sufficiently large number of tokens so that we have enough useful information to gauge the price. But we also want to keep the number low so that we can train efficiently. \n",
"\n",
"I started with a number that seemed reasonable, and experimented with a few variations before settling on 180. If you have time, you should do the same! You might find that you can beat my results by finding a better balance. This kind of trial-and-error might sound a bit unsatisfactory, but it's a crucial part of the data science R&D process.\n",
"\n",
"There's another interesting reason why we might favor a lower number of tokens in the training data. When we eventually get to use our model at inference time, we'll want to provide new products and have it estimate a price. And we'll be using short descriptions of products - like 1-2 sentences. For best performance, we should size our training data to be similar to the inputs we will provide at inference time.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 116,
"id": "430b432f-b769-41da-9506-a238cb5cf1b6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There are 28 items\n"
]
}
],
"source": [
"# Create an Item object for each with a result\n",
"\n",
"items = []\n",
"for datapoint in dataset:\n",
" try:\n",
" result = datapoint[\"result\"]\n",
" if result == 'normal' or result == 'anomalous':\n",
" item = Item(datapoint, result)\n",
" if item.include:\n",
" items.append(item)\n",
" except ValueError as e:\n",
" pass\n",
"\n",
"print(f\"There are {len(items):,} items\")"
]
},
{
"cell_type": "code",
"execution_count": 117,
"id": "0d570794-6f1d-462e-b567-a46bae3556a1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<$normal>"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Look at the first item\n",
"\n",
"items[1]"
]
},
{
"cell_type": "code",
"execution_count": 118,
"id": "70219e99-22cc-4e08-9121-51f9707caef0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"How would you classify this sensor data - normal or anomalous?\n",
"\n",
"[{\"timestamp\": 1737892800, \"room\": \"pillbox\", \"nodeId\": 1, \"onOff\": true}, {\"timestamp\": 1737892860, \"room\": \"bedroom\", \"nodeId\": 2, \"onOff\": true}, {\"timestamp\": 1737893100, \"room\": \"bathroom\", \"nodeId\": 2, \"onOff\": true}, {\"timestamp\": 1737893400, \"room\": \"bathroom\", \"nodeId\": 3, \"humidity\": 6500}, {\"timestamp\": 1737893700, \"room\": \"bathroom\", \"nodeId\": 2, \"onOff\": false}, {\"timestamp\": 1737894000, \"room\": \"\n",
"\n",
"Result is normal\n"
]
}
],
"source": [
"# Investigate the prompt that will be used during training - the model learns to complete this\n",
"\n",
"print(items[1].prompt)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"id": "d9998b8d-d746-4541-9ac2-701108e0e8fb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"How would you classify this sensor data - normal or anomalous?\n",
"\n",
"[{\"timestamp\": 1737892800, \"room\": \"pillbox\", \"nodeId\": 1, \"onOff\": true}, {\"timestamp\": 1737892860, \"room\": \"bedroom\", \"nodeId\": 2, \"onOff\": true}, {\"timestamp\": 1737893100, \"room\": \"bathroom\", \"nodeId\": 2, \"onOff\": true}, {\"timestamp\": 1737893400, \"room\": \"bathroom\", \"nodeId\": 3, \"humidity\": 6500}, {\"timestamp\": 1737893700, \"room\": \"bathroom\", \"nodeId\": 2, \"onOff\": false}, {\"timestamp\": 1737894000, \"room\": \"\n",
"\n",
"Result is \n"
]
}
],
"source": [
"# Investigate the prompt that will be used during testing - the model has to complete this\n",
"\n",
"print(items[1].test_prompt())"
]
},
{
"cell_type": "code",
"execution_count": 120,
"id": "7a116369-335a-412b-b70c-2add6675c2e3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABNAAAAI4CAYAAACr9RQwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAS71JREFUeJzt3XeUFeX9P/DP0hYUduksKE1UsIHY+BJUUJAiQbFEQGPA2AVUUGNMVMSjIbFg5aspX0EN1lhQIyogYEMjKhoLKIRioagEFhAWZef3h4f787owwgrsCq/XOfcc5plnZj5z99nL5c0zMzlJkiQBAAAAAGxQhbIuAAAAAADKMwEaAAAAAKQQoAEAAABACgEaAAAAAKQQoAEAAABACgEaAAAAAKQQoAEAAABACgEaAAAAAKQQoAEAAABACgEaAJQjOTk5MWjQoLIuA7ZL8+bNi5ycnBgzZkxqvzFjxkROTk5Mnz79B/fZqVOn6NSpU6nq6dSpU+y7776l2hYA2LYEaADwI+Xk5GzSa8qUKWVd6nbl6aefjquuumqbHzMnJycaNWoUxcXF2/TY33XttdfGMcccEw0aNIicnJyNvg/NmjXb6HjcY489SvRfvHhxnH322bHLLrtE1apVo1mzZnH66advcl1vvvlmHHPMMVG7du3YaaedYt99941bb721tKfJVvDZZ5/FVVddFTNmzNik/itXroxhw4ZF9+7do3bt2qkBZNrn31FHHZXVd+HChXHWWWdF8+bNo1q1atGiRYsYOnRofPnllz/yDAFg66hU1gUAwE/dvffem7V8zz33xIQJE0q077XXXtuyrO3e008/HaNGjdqmIdrYsWOjWbNmMW/evHj++eejS5cu2+zY33X55ZdHQUFBtG3bNp599tmN9rv55ptj5cqVWW3z58+Pyy+/PLp27ZrV/vHHH0eHDh0iIuKcc86JXXbZJT777LP417/+tUk1Pffcc9GrV69o27ZtXHHFFVG9evWYM2dOfPLJJ5t5dj8tzz33XFmXsFk+++yzGD58eDRr1iz233//H+z/xRdfxNVXXx1NmjSJNm3apP5HwPc/8yIipk+fHrfcckvWeFu5cmW0b98+Vq1aFeedd140btw43n777bj99ttj8uTJ8cYbb0SFCv6fH4DyRYAGAD/SL3/5y6zlV199NSZMmFCinZ+2VatWxbhx42LEiBExevToGDt2bJkFaHPnzo1mzZrFF198EfXq1dtov969e5dou+aaayIi4pRTTslqP/vss6NSpUrx+uuvR506dTarnsLCwvjVr34VPXv2jH/84x87VPhRpUqVsi5hq2rYsGEsXLgwCgoKYvr06XHwwQdvtO+GPvOmTJkSOTk50a9fv0zbE088EfPnz4+nnnoqevbsmWmvXbt2XH311fH2229H27Ztt+yJAMCPtON8uwGAMrRq1aq46KKLonHjxpGbmxstW7aMG264IZIk+cFtr7nmmqhQoULcdtttmbbx48fHYYcdFjvvvHPUqFEjevbsGe+9917WdgMGDIjq1avHp59+Gr17947q1atHvXr14uKLL45169ZtUt3jx4+Pjh07Ro0aNSIvLy8OPvjguO+++7L6PPzww3HggQdGtWrVom7duvHLX/4yPv3006w+G7tP1IABA6JZs2aZ5fX3qLrhhhviL3/5S7Ro0SJyc3Pj4IMPjtdffz1ru1GjRkVE9mVj6z3wwANx4IEHZureb7/94pZbbsk69pw5c2LOnDmb9D5ERDz22GOxevXq+MUvfhF9+/aNRx99NNasWZNZv++++8YRRxxRYrvi4uLYZZdd4sQTT8y0ffnll3HqqadGXl5e1KxZM/r37x9vv/32Jt2fKyKy3rPNdd9990Xz5s3jZz/7WaZt5syZMX78+LjkkkuiTp06sWbNmvj66683a5+LFy+Oa6+9NipUqBCrVq3arEtcX3zxxfjFL34RTZo0idzc3GjcuHEMGTIkVq9endVvc8b0smXLYsCAAZGfn595j5ctW7bJNUVEFBUVxdChQ6NevXqx8847x3HHHReff/55Vp8Nje358+fHMcccEzvvvHPUr18/hgwZEs8+++xGL+V+//3344gjjoiddtopdtlll7juuus2WMuwYcNi9913z7xHv/nNb6KoqCir34QJE+LQQw+NmjVrRvXq1aNly5bxu9/9LiK+DbPWB2CnnXZa5vcmbczl5uZGQUHBJrxbJRUVFcUjjzwSHTt2jF133TXTXlhYGBERDRo0yOrfsGHDiIioVq1aqY4HAFuTAA0AtrIkSeKYY46Jm266Kbp37x4jR46Mli1bxiWXXBJDhw5N3fbyyy+PK6+8Mv785z/H4MGDI+Lby6R69uwZ1atXjz/96U9xxRVXxPvvvx+HHnpozJs3L2v7devWRbdu3aJOnTpxww03RMeOHePGG2+Mv/zlLz9Y95gxY6Jnz56xdOnSuOyyy+KPf/xj7L///vHMM89k9TnppJOiYsWKMWLEiDjzzDPj0UcfjUMPPXSzw4rvuu++++L666+Ps88+O6655pqYN29eHH/88ZlQ5+yzz87cU+nee+/NvCK+DRD69esXtWrVij/96U/xxz/+MTp16hQvv/xy1jE6d+4cnTt33uSaxo4dG0cccUQUFBRE3759Y8WKFfHkk09m1vfp0ydeeOGFWLRoUdZ2L730Unz22WfRt2/fiPg2UOvVq1fcf//90b9//7j22mtj4cKF0b9//81/ozbTW2+9FR988EGcfPLJWe0TJ06MiG8Djc6dO0e1atWiWrVq0aNHjxJjakMmTpwYeXl58emnn0bLli2jevXqkZeXF+eee25WyLgxDz/8cHz11Vdx7rnnxm233RbdunWL2267LX71q1+V6LspYzpJkjj22GPj3nvvjV/+8pdxzTXXxCeffLLZ7/HgwYPj7bffjmHDhsW5554bTz755A8+5GPVqlVx5JFHxsSJE+P888+P3//+9/HKK6/EpZdeusH+//3vf6N79+7Rpk2buPHGG6NVq1Zx6aWXxvjx4zN9iouL45hjjokbbrghevXqFbfddlv07t07brrppujTp0+m33vvvRc///nPo6ioKK6++uq48cYb45hjjsmM/b322iuuvvrqiIg466yzMr83hx9++Ga9L5vq6aefjmXLlpWY7Xj44YdHhQoV4oILLohXX301Pvnkk3j66afj2muvjd69e0erVq22Sj0A8KMkAMAWNXDgwOS7f8U+/vjjSUQk11xzTVa/E088McnJyUlmz56daYuIZODAgUmSJMlFF12UVKhQIRkzZkxm/YoVK5KaNWsmZ555Zta+Fi1alOTn52e19+/fP4mI5Oqrr87q27Zt2+TAAw9MPYdly5YlNWrUSNq1a5esXr06a11xcXGSJEmydu3apH79+sm+++6b1eepp55KIiK58sorM20dO3ZMOnbsWOI4/fv3T5o2bZpZnjt3bhIRSZ06dZKlS5dm2seNG5dERPLkk09m2r7/Pq93wQUXJHl5eck333yTeo5NmzbNOnaaxYsXJ5UqVUr++te/Ztp+9rOfJccee2xmedasWUlEJLfddlvWtuedd15SvXr15KuvvkqSJEkeeeSRJCKSm2++OdNn3bp1yZFHHplERDJ69OhNqilJkuTzzz9PIiIZNmzYJvW/6KKLkohI3n///az2888/P/O+d+/ePXnwwQeT66+/PqlevXrSokWLZNWqVan7bd26dbLTTjslO+20UzJ48ODkkUceSQYPHpxERNK3b98frGv9e/NdI0aMSHJycpL58+dn2jZ1TK//nbvuuusybd98801y2GGHbdJ7PHr06CQiki5dumTGe5IkyZAhQ5KKFSsmy5Yty7R9f2zfeOONSUQkjz/+eKZt9erVSatWrZKISCZPnpy1bUQk99xzT6atqKgoKSgoSE444YRM27333ptUqFAhefHFF7PqvPPOO5OISF5++eUkSZLkpptuSiIi+fzzzzd6bq+//vpmj7PSbnvCCSckubm5yX//+98S6/72t78lNWvWTCIi8+rfv3/y9ddfb3ZdALAtmIEGAFvZ008/HRUrVozzzz8/q/2iiy6KJEmyZppEfDt7ZtCgQXHLLbfE3//+96xZMxMmTIhly5ZFv3794osvvsi8KlasGO3atYvJkyeXOP4555yTtXzYYYfFf/7zn9SaJ0yYECtWrIjf/va3UbVq1ax16y+VnD59eixZsiTOO++8rD49e/aMVq1axT//+c/UY6Tp06dP1KpVK6vmiPjBuiMiatasGatWrYoJEyak9ps3b94mza6K+PaS0AoVKsQJJ5yQaevXr1+MHz8+/vvf/0ZExJ577hn7779/PPjgg5k+69ati3/84x/Rq1evzGVpzzzzTFSuXDnOPPPMTL8KFSrEwIEDN6mW0iouLo4HHngg2rZtW+KBFusfNFBQUBD//Oc/46STToqLL744/vrXv8acOXNKXLb7fStXroyvvvoqfvWrX8Wtt94axx9/fNx6661x9tlnxwMPPBAfffRR6vbfvWRv1apV8cUXX8TPfvazSJIk3nrrrRL9f2hMP/3001GpUqU499xzM20VK1bMzOLcVGeddVbWpcGHHXZYrFu3LubPn7/RbZ555pnYZZdd4phjjsm0Va1aNevn/V3Vq1fPundYlSpV4pBDDsk6n4cffjj22muvaNWqVdbv/ZFHHhkRkfm9r1mzZkREjBs3rkyfEhvx7WWa//znP+Poo4/O1PVdu+yySxxyyCFx8803x2OPPRZDhw6NsWPHxm9/+9ttXywAbAIBGgBsZfPnz49GjRpFjRo1strXhxjf/8f4PffcE6NGjYrbbrst68bbEZEJIo488sioV69e1uu5556LJUuWZPWvWrVqiZvM16pVKxP6bMz6e4Ptu+++qecVEdGyZcsS61q1apUaMvyQJk2aZC2vD9N+qO6IiPPOOy/23HPP6NGjR+y6667x61//Ouuy09L4+9//Hoccckh8+eWXMXv27Jg9e3a0bds21q5dGw8//HCmX58+feLll1/O3ANuypQpsWTJkqzL7ObPnx8NGzaMnXbaKesYu++++4+q8YdMnTo1Pv300xKX00X8/wDrpJNOynoAwC9+8YuoVKlSvPLKK6n7Xr/998fr+ktFp02blrr9ggULYsCAAVG7du3Mfc06duwYERHLly/P6rspY3r9e1y9evWsfhsaq2lKMw7nz58fLVq0yAreIjb+8911111L9P3++Xz00Ufx3nvvlfid33PPPSMiMr/3ffr0iQ4dOsQZZ5wRDRo0iL59+8ZDDz1UJmHaI488EmvWrNngeHv55Zfj5z//eVx77bVxwQUXRO/evePGG2+Myy+/PEaOHBnvv//+Nq8XAH6Ip3ACQDnToUOHmDFjRtx+++1x0kknRe3atTPr1v9D+N57793gjb0rVcr+q71ixYpbt9hNlJOTs8EHJmzsYQYbq3tD+/i++vXrx4wZM+LZZ5+N8ePHx/jx42P06NHxq1/9Ku6+++7NKzy+DS/WP8Bgjz32KLF+7NixcdZZZ0XEtwHGZZddFg8//HBceOGF8dBDD0V+fn507959s4+7pY0dOzYqVKhQIuSKiGjUqFFElLype8WKFaNOnTo/GFw2atQo3nvvvRLb169fPyLSA6d169bFUUcdFUuXLo1LL700WrVqFTvvvHN8+umnMWDAgBLhz7Yc0z9mHG7JYxQXF8d+++0XI0eO3GDfxo0bR8S3QeYLL7wQkydPjn/+85/xzDPPxIMPPhhHHnlkPPfcc9v0vRs7dmzk5+fHz3/+8xLr/vznP0eDBg3ioIMOymo/5phj4qqrropXXnkl9t57721VKgBsEgEaAGxlTZs2jYkTJ8aKFSuyZqHNnDkzs/67dt9997juuuuiU6dO0b1795g0aVJmuxYtWkTEt8FEly5dtlrN64/z7rvvbnTmzPq6Z82albmUbL1Zs2ZlnVetWrU2ePnlj5ml9v1ZO99VpUqV6NWrV/Tq1SuKi4vjvPPOiz//+c9xxRVXbPZMr7Fjx0blypXj3nvvLRFAvPTSS3HrrbfGggULokmTJtG8efM45JBD4sEHH4xBgwbFo48+Gr17947c3NzMNk2bNo3JkyfHV199lTULbfbs2ZtV1+ZY/zTETp06ZcKy7zrwwAMjIko8PXXt2rXxxRdflJjxtaHtJ0yYkHmIwHqfffZZRETq9v/+97/jww8/jLvvvjvroQE/dAlumqZNm8akSZNi5cqVWbPQZs2aVep9bs6x33///UiSJGuM/pifb4sWLeLtt9+Ozp07p477iG8vB17/gIyRI0fGH/7wh/j9738fkydPji5duvzg9lvCwoULY/LkyTFgwICssb/e4sWLNxier39IyDfffLPVawSAzeUSTgDYyo4++uhYt25d3H777VntN910U+Tk5ESPHj1KbNO6det4+umn44MPPohevXrF6tWrIyKiW7dukZeXF3/4wx8y/9j8rs8//3yL1Ny1a9eoUaNGjBgxosRTFNfPjDnooIOifv36ceedd0ZRUVFm/fjx4+ODDz6Inj17ZtpatGgRM2fOzKrv7bffLvFkzM2x8847R0SUeNrnl19+mbVcoUKFaN26dUREVp1z5szJXKqaZuzYsXHYYYdFnz594sQTT8x6XXLJJRERcf/992f69+nTJ1599dW466674osvvsi6fDPi25/h119/HX/9618zbcXFxTFq1KhNOOvS2djTENfr1KlT1K9fP8aOHZv18x4zZkxmhth6X3zxRcycOTO++uqrTNtJJ50UERH/93//l7Xfv/3tb1GpUqXo1KnTRmtbH0p+d8ZVkiRxyy23bPoJfs/RRx8d33zzTdxxxx2ZtnXr1sVtt91W6n1uqm7dusWnn34aTzzxRKZtzZo1WT/vzXXSSSfFp59+usF9rF69OlatWhUREUuXLi2xfv/994+I/z/2N/Z7syU98MADUVxcvNHxtueee8bixYtjypQpWe3rf4/atm271WoDgNIyAw0AtrJevXrFEUccEb///e9j3rx50aZNm3juuedi3LhxceGFF2Zme33f//zP/8S4cePi6KOPjhNPPDEef/zxyMvLizvuuCNOPfXUOOCAA6Jv375Rr169WLBgQfzzn/+MDh06lAjqSiMvLy9uuummOOOMM+Lggw+Ok08+OWrVqhVvv/12fPXVV3H33XdH5cqV409/+lOcdtpp0bFjx+jXr18sXrw4brnllmjWrFkMGTIks79f//rXMXLkyOjWrVucfvrpsWTJkrjzzjtjn332icLCwlLVuH7W1Pnnnx/dunWLihUrRt++feOMM86IpUuXxpFHHhm77rprzJ8/P2677bbYf//9s26e37lz54iI1AcJvPbaazF79uwYNGjQBtfvsssuccABB8TYsWPj0ksvjYjI3ID/4osvjtq1a5eYKdi7d+845JBD4qKLLorZs2dHq1at4oknnsiEH5syQ+jee++N+fPnZ0KsF154Ia655pqIiDj11FNLzGocO3Zs5ObmZj0E4btyc3Pj+uuvj/79+8fhhx8ep556aixYsCBuueWWOOyww+L444/P9L399ttj+PDhMXny5Eww1rZt2/j1r38dd911V3zzzTfRsWPHmDJlSjz88MNx2WWXbXDW23qtWrWKFi1axMUXXxyffvpp5OXlxSOPPLJJ97vbmF69ekWHDh3it7/9bcybNy/23nvvePTRR0vcT21rOPvss+P222+Pfv36xQUXXBANGzaMsWPHZh60UZoZYKeeemo89NBDcc4558TkyZOjQ4cOsW7dupg5c2Y89NBD8eyzz8ZBBx0UV199dbzwwgvRs2fPaNq0aSxZsiT+93//N3bdddc49NBDI+LbMLtmzZpx5513Ro0aNWLnnXeOdu3aRfPmzTd6/Ntvvz2WLVuWmVH45JNPxieffBIREYMHD478/Pys/mPHjo1GjRptNDgdNGhQjB49Onr16hWDBw+Opk2bxtSpU+P++++Po446Ktq1a7fZ7xEAbHVl9PRPANhuDRw4MPn+X7ErVqxIhgwZkjRq1CipXLlyssceeyTXX399UlxcnNUvIpKBAwdmtY0bNy6pVKlS0qdPn2TdunVJkiTJ5MmTk27duiX5+flJ1apVkxYtWiQDBgxIpk+fntmuf//+yc4771yivmHDhpWob2OeeOKJ5Gc/+1lSrVq1JC8vLznkkEOS+++/P6vPgw8+mLRt2zbJzc1NateunZxyyinJJ598UmJff//735PddtstqVKlSrL//vsnzz77bNK/f/+kadOmmT5z585NIiK5/vrrS2wfEcmwYcMyy998800yePDgpF69eklOTk7mnP7xj38kXbt2TerXr59UqVIladKkSXL22WcnCxcuzNpf06ZNs469IYMHD04iIpkz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oqKizHJhYWE0btw4li9fHnl5eVuldgAA2FQ5w3O2yXGSYeXiaz4AlCuFhYWRn5+/2TlRuZiBNmjQoHjqqafihRdeSA3PIiLatWsXEbHRAC03Nzdyc3O3Sp0AAAAA7HjKNEBLkiQGDx4cjz32WEyZMiWaN2/+g9vMmDEjIiIaNmy4lasDAAAAgDIO0AYOHBj33XdfjBs3LmrUqBGLFi2KiIj8/PyoVq1azJkzJ+677744+uijo06dOvHOO+/EkCFD4vDDD4/WrVuXZekAAAAA7CDKNEC74447IiKiU6dOWe2jR4+OAQMGRJUqVWLixIlx8803x6pVq6Jx48ZxwgknxOWXX14G1QIAAACwIyrzSzjTNG7cOKZOnbqNqgEAAACAkiqUdQEAAAAAUJ4J0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFII0AAAAAAghQANAAAAAFKUaYA2YsSIOPjgg6NGjRpRv3796N27d8yaNSurz5o1a2LgwIFRp06dqF69epxwwgmxePHiMqoYAAAAgB1NmQZoU6dOjYEDB8arr74aEyZMiK+//jq6du0aq1atyvQZMmRIPPnkk/Hwww/H1KlT47PPPovjjz++DKsGAAAAYEeSkyRJUtZFrPf5559H/fr1Y+rUqXH44YfH8uXLo169enHffffFiSeeGBERM2fOjL322iumTZsW//M///OD+ywsLIz8/PxYvnx55OXlbe1TAACAVDnDc7bJcZJh5eZrPgCUG6XNicrVPdCWL18eERG1a9eOiIg33ngjvv766+jSpUumT6tWraJJkyYxbdq0De6jqKgoCgsLs14AAAAAUFrlJkArLi6OCy+8MDp06BD77rtvREQsWrQoqlSpEjVr1szq26BBg1i0aNEG9zNixIjIz8/PvBo3bry1SwcAAABgO1ZuArSBAwfGu+++Gw888MCP2s9ll10Wy5cvz7w+/vjjLVQhAAAAADuiSmVdQETEoEGD4qmnnooXXnghdt1110x7QUFBrF27NpYtW5Y1C23x4sVRUFCwwX3l5uZGbm7u1i4ZAAAAgB1Emc5AS5IkBg0aFI899lg8//zz0bx586z1Bx54YFSuXDkmTZqUaZs1a1YsWLAg2rdvv63LBQAAAGAHVKYz0AYOHBj33XdfjBs3LmrUqJG5r1l+fn5Uq1Yt8vPz4/TTT4+hQ4dG7dq1Iy8vLwYPHhzt27ffpCdwAgAAAMCPVaYB2h133BEREZ06dcpqHz16dAwYMCAiIm666aaoUKFCnHDCCVFUVBTdunWL//3f/93GlQIAAACwo8pJkiQp6yK2psLCwsjPz4/ly5dHXl5eWZcDAMAOLmd4zjY5TjJsu/6aDwClUtqcqNw8hRMAAAAAyiMBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQAoBGgAAAACkEKABAAAAQIpSBWi77bZbfPnllyXaly1bFrvtttuPLgoAAAAAyotSBWjz5s2LdevWlWgvKiqKTz/99EcXBQAAAADlRaXN6fzEE09k/vzss89Gfn5+ZnndunUxadKkaNas2RYrDgAAAADK2mYFaL17946IiJycnOjfv3/WusqVK0ezZs3ixhtv3GLFAQAAAEBZ26wArbi4OCIimjdvHq+//nrUrVt3qxQFAAAAAOXFZgVo682dO3dL1wEAAAAA5VKpArSIiEmTJsWkSZNiyZIlmZlp6911110/ujAAAAAAKA9KFaANHz48rr766jjooIOiYcOGkZOTs6XrAgAAAIByoVQB2p133hljxoyJU089dUvXAwAAAADlSoXSbLR27dr42c9+9qMP/sILL0SvXr2iUaNGkZOTE48//njW+gEDBkROTk7Wq3v37j/6uAAAAACwqUoVoJ1xxhlx3333/eiDr1q1Ktq0aROjRo3aaJ/u3bvHwoULM6/777//Rx8XAAAAADZVqS7hXLNmTfzlL3+JiRMnRuvWraNy5cpZ60eOHLlJ++nRo0f06NEjtU9ubm4UFBSUpkwAAAAA+NFKFaC98847sf/++0dExLvvvpu1bks/UGDKlClRv379qFWrVhx55JFxzTXXRJ06dTbav6ioKIqKijLLhYWFW7QeAAAAAHYspQrQJk+evKXr2KDu3bvH8ccfH82bN485c+bE7373u+jRo0dMmzYtKlasuMFtRowYEcOHD98m9QEAAACw/ctJkiQp6yIivp259thjj0Xv3r032uc///lPtGjRIiZOnBidO3feYJ8NzUBr3LhxLF++PPLy8rZ02QAAsFlyhm/ZKzY2JhlWLr7mA0C5UlhYGPn5+ZudE5VqBtoRRxyReqnm888/X5rd/qDddtst6tatG7Nnz95ogJabmxu5ublb5fgAAAAA7HhKFaCtv//Zel9//XXMmDEj3n333ejfv/+WqGuDPvnkk/jyyy+jYcOGW+0YAAAAAPBdpQrQbrrppg22X3XVVbFy5cpN3s/KlStj9uzZmeW5c+fGjBkzonbt2lG7du0YPnx4nHDCCVFQUBBz5syJ3/zmN7H77rtHt27dSlM2AAAAAGy2CltyZ7/85S/jrrvu2uT+06dPj7Zt20bbtm0jImLo0KHRtm3buPLKK6NixYrxzjvvxDHHHBN77rlnnH766XHggQfGiy++6BJNAAAAALaZUs1A25hp06ZF1apVN7l/p06dIu0ZBs8+++yWKAsAAAAASq1UAdrxxx+ftZwkSSxcuDCmT58eV1xxxRYpDAAAAADKg1IFaPn5+VnLFSpUiJYtW8bVV18dXbt23SKFAQAAAEB5UKoAbfTo0Vu6DgAAAAAol37UPdDeeOON+OCDDyIiYp999sk8DAAAAAAAthelCtCWLFkSffv2jSlTpkTNmjUjImLZsmVxxBFHxAMPPBD16tXbkjUCAAAAQJmpUJqNBg8eHCtWrIj33nsvli5dGkuXLo133303CgsL4/zzz9/SNQIAAABAmSnVDLRnnnkmJk6cGHvttVembe+9945Ro0Z5iAAAAAAA25VSzUArLi6OypUrl2ivXLlyFBcX/+iiAAAAAKC8KFWAduSRR8YFF1wQn332Wabt008/jSFDhkTnzp23WHEAAAAAUNZKFaDdfvvtUVhYGM2aNYsWLVpEixYtonnz5lFYWBi33Xbblq4RAAAAAMpMqe6B1rhx43jzzTdj4sSJMXPmzIiI2GuvvaJLly5btDgAAAAAKGubNQPt+eefj7333jsKCwsjJycnjjrqqBg8eHAMHjw4Dj744Nhnn33ixRdf3Fq1AgAAAMA2t1kB2s033xxnnnlm5OXllViXn58fZ599dowcOXKLFQcAAAAAZW2zArS33347unfvvtH1Xbt2jTfeeONHFwUAAAAA5cVmBWiLFy+OypUrb3R9pUqV4vPPP//RRQEAAABAebFZAdouu+wS77777kbXv/POO9GwYcMfXRQAAAAAlBebFaAdffTRccUVV8SaNWtKrFu9enUMGzYsfv7zn2+x4gAAAACgrOUkSZJsaufFixfHAQccEBUrVoxBgwZFy5YtIyJi5syZMWrUqFi3bl28+eab0aBBg61W8OYqLCyM/Pz8WL58+QYffgAAANtSzvCcbXKcZNgmf80HgB1GaXOiSptzkAYNGsQrr7wS5557blx22WWxPnvLycmJbt26xahRo8pVeAYAAAAAP9ZmBWgREU2bNo2nn346/vvf/8bs2bMjSZLYY489olatWlujPgAAAAAoU5sdoK1Xq1atOPjgg7dkLQAAAABQ7mzWQwQAAAAAYEcjQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFAI0AAAAAEghQAMAAACAFGUaoL3wwgvRq1evaNSoUeTk5MTjjz+etT5JkrjyyiujYcOGUa1atejSpUt89NFHZVMsAAAAADukMg3QVq1aFW3atIlRo0ZtcP11110Xt956a9x5553x2muvxc477xzdunWLNWvWbONKAQAAANhRVSrLg/fo0SN69OixwXVJksTNN98cl19+eRx77LEREXHPPfdEgwYN4vHHH4++fftuy1IBAAAA2EGV23ugzZ07NxYtWhRdunTJtOXn50e7du1i2rRpZVgZAAAAADuSMp2BlmbRokUREdGgQYOs9gYNGmTWbUhRUVEUFRVllgsLC7dOgQAAAADsEMrtDLTSGjFiROTn52dejRs3LuuSAAAAAPgJK7cBWkFBQURELF68OKt98eLFmXUbctlll8Xy5cszr48//nir1gkAAADA9q3cBmjNmzePgoKCmDRpUqatsLAwXnvttWjfvv1Gt8vNzY28vLysFwAAAACUVpneA23lypUxe/bszPLcuXNjxowZUbt27WjSpElceOGFcc0118Qee+wRzZs3jyuuuCIaNWoUvXv3LruiAQAAANihlGmANn369DjiiCMyy0OHDo2IiP79+8eYMWPiN7/5TaxatSrOOuusWLZsWRx66KHxzDPPRNWqVcuqZAAAAAB2MDlJkiRl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oEGD4qmnnorJkyfHrrvummnflO8kBQUFG/yMX78OytrGxveGtGvXLiIi6zPc+Ka8qlKlSuy+++5x4IEHxogRI6JNmzZxyy23bPPPbgFaOVSlSpU48MADY9KkSZm24uLimDRpUrRv374MK4Mfb+XKlTFnzpxo2LBhHHjggVG5cuWssT5r1qxYsGCBsc5PTvPmzaOgoCBrPBcWFsZrr72WGc/t27ePZcuWxRtvvJHp8/zzz0dxcXHmiyz8VHzyySfx5ZdfRsOGDSPC+KZ8S5IkBg0aFI899lg8//zz0bx586z1m/KdpH379vHvf/87KyieMGFC5OXlxd57771tTgQ24IfG94bMmDEjIiLrM9z45qeiuLg4ioqKtv1n95Z4AgJb3gMPPJDk5uYmY8aMSd5///3krLPOSmrWrJn15Aj4KbjooouSKVOmJHPnzk1efvnlpEuXLkndunWTJUuWJEmSJOecc07SpEmT5Pnnn0+mT5+etG/fPmnfvn0ZVw0btmLFiuStt95K3nrrrSQikpEjRyZvvfVWMn/+/CRJkuSPf/xjUrNmzWTcuHHJO++8kxx77LFJ8+bNk9WrV2f20b1796Rt27bJa6+9lrz00kvJHnvskfTr16+sTgky0sb3ihUrkosvvjiZNm1aMnfu3GTixInJAQcckOyxxx7JmjVrMvswvimvzj333CQ/Pz+ZMmVKsnDhwszrq6++yvT5oe8k33zzTbLvvvsmXbt2TWbMmJE888wzSb169ZLLLrusLE4JMn5ofM+ePTu5+uqrk+nTpydz585Nxo0bl+y2227J4YcfntmH8U159dvf/jaZOnVqMnfu3OSdd95Jfvvb3yY5OTnJc889lyTJtv3sFqCVY7fddlvSpEmTpEqVKskhhxySvPrqq2VdEmy2Pn36JA0bNkyqVKmS7LLLLkmfPn2S2bNnZ9avXr06Oe+885JatWolO+20U3LcccclCxcuLMOKYeMmT56cRESJV//+/ZMkSZLi4uLkiiuuSBo0aJDk5uYmnTt3TmbNmpW1jy+//DLp169fUr169SQvLy857bTTkhUrVpTB2UC2tPH91VdfJV27dk3q1auXVK5cOWnatGly5plnlviPPeOb8mpDYzsiktGjR2f6bMp3knnz5iU9evRIqlWrltStWze56KKLkq+//nobnw1k+6HxvWDBguTwww9PateuneTm5ia77757cskllyTLly/P2o/xTXn061//OmnatGlSpUqVpF69eknnzp0z4VmSbNvP7pwkSZLNm7MGAAAAADsO90ADAAAAgBQCNAAAAABIIUADAAAAgBQCNAAAAABIIUADAAAAgBQCNAAAAABIIUADAAAAgBQCNACAn5gBAwZE7969S7Xt4YcfHvfdd9+PriEnJycef/zxH72f0li7dm00a9Yspk+fXibHBwB2PAI0AIAN+DEh1ZYyb968yMnJiRkzZmyR/T3xxBOxePHi6Nu3b6atLIOw0qpSpUpcfPHFcemll5Z1KQDADkKABgCwg7j11lvjtNNOiwoVfvpfAU855ZR46aWX4r333ivrUgCAHcBP/9sTAEAZePfdd6NHjx5RvXr1aNCgQZx66qnxxRdfZNZ36tQpzj///PjNb34TtWvXjoKCgrjqqquy9jFz5sw49NBDo2rVqrH33nvHxIkTs2aENW/ePCIi2rZtGzk5OdGpU6es7W+44YZo2LBh1KlTJwYOHBhff/31Ruv9/PPP4/nnn49evXpl2po1axYREccdd1zk5ORkliMi7rjjjmjRokVUqVIlWrZsGffee2/q+zFs2LBo2LBhvPPOOxER8dJLL8Vhhx0W1apVi8aNG8f5558fq1atyjr2H/7wh/j1r38dNWrUiCZNmsRf/vKXzPq1a9fGoEGDomHDhlG1atVo2rRpjBgxIrO+Vq1a0aFDh3jggQdS6wIA2BIEaAAAm2nZsmVx5JFHRtu2bWP69OnxzDPPxOLFi+Okk07K6nf33XfHzjvvHK+99lpcd911cfXVV8eECRMiImLdunXRu3fv2GmnneK1116Lv/zlL/H73/8+a/t//etfERExceLEWLhwYTz66KOZdZMnT445c+bE5MmT4+67744xY8bEmDFjNlrzSy+9FDvttFPstddembbXX389IiJGjx4dCxcuzCw/9thjccEFF8RFF10U7777bpx99tlx2mmnxeTJk0vsN0mSGDx4cNxzzz3x4osvRuvWrWPOnDnRvXv3OOGEE+Kdd96JBx98MF566aUYNGhQ1rY33nhjHHTQQfHWW2/FeeedF+eee27MmjUrIr6dLffEE0/EQw89FLNmzYqxY8dmBXwREYcccki8+OKLGz1nAIAtpVJZFwAA8FNz++23R9u2beMPf/hDpu2uu+6Kxo0bx4cffhh77rlnRES0bt06hg0bFhERe+yxR9x+++0xadKkOOqoo2LChAkxZ86cmDJlShQUFERExLXXXhtHHXVUZp/16tWLiIg6depk+qxXq1atuP3226NixYrRqlWr6NmzZ0yaNCnOPPPMDdY8f/78aNCgQdblm+v3X7Nmzaz933DDDTFgwIA477zzIiJi6NCh8eqrr8YNN9wQRxxxRKbfN998E7/85S/jrbfeipdeeil22WWXiIgYMWJEnHLKKXHhhRdmzv3WW2+Njh07xh133BFVq1aNiIijjz46c4xLL700brrpppg8eXK0bNkyFixYEHvssUcceuihkZOTE02bNi1xTo0aNYr58+dv8HwBALYkM9AAADbT22+/HZMnT47q1atnXq1atYqIiDlz5mT6tW7dOmu7hg0bxpIlSyIiYtasWdG4ceOs4OqQQw7Z5Br22WefqFix4gb3vSGrV6/OBFc/5IMPPogOHTpktXXo0CE++OCDrLYhQ4bEa6+9Fi+88EImPIv49v0ZM2ZM1vvTrVu3KC4ujrlz52b6fff9ycnJiYKCgsw5DBgwIGbMmBEtW7aM888/P5577rkSdVarVi2++uqrTTonAIAfwww0AIDNtHLlyujVq1f86U9/KrGuYcOGmT9Xrlw5a11OTk4UFxdvkRo2d99169aN//73v1vk2OsdddRRcf/998ezzz4bp5xySqZ95cqVcfbZZ8f5559fYpsmTZpk/px2DgcccEDMnTs3xo8fHxMnToyTTjopunTpEv/4xz8y/ZcuXZqZRQcAsDUJ0AAANtMBBxwQjzzySDRr1iwqVSrd16mWLVvGxx9/HIsXL44GDRpExP+/J9l6VapUiYhv75f2Y7Vt2zYWLVoU//3vf6NWrVqZ9sqVK5fY/1577RUvv/xy9O/fP9P28ssvx957753V75hjjolevXrFySefHBUrVoy+fftGxLfvz/vvvx+77777j6o5Ly8v+vTpE3369IkTTzwxunfvHkuXLo3atWtHxLcPcmjbtu2POgYAwKZwCScAwEYsX748ZsyYkfX6+OOPY+DAgbF06dLo169fvP766zFnzpx49tln47TTTtvksOuoo46KFi1aRP/+/eOdd96Jl19+OS6//PKI+HYmVkRE/fr1o1q1apmHFCxfvrzU59K2bduoW7duvPzyy1ntzZo1i0mTJmXCtYiISy65JMaMGRN33HFHfPTRRzFy5Mh49NFH4+KLLy6x3+OOOy7uvffeOO200zKzwy699NJ45ZVXYtCgQTFjxoz46KOPYty4cSUeIpBm5MiRcf/998fMmTPjww8/jIcffjgKCgqiZs2amT4vvvhidO3atRTvBgDA5hGgAQBsxJQpU6Jt27ZZr+HDh0ejRo3i5ZdfjnXr1kXXrl1jv/32iwsvvDBq1qyZdZP+NBUrVozHH388Vq5cGQcffHCcccYZmadwrr9XWaVKleLWW2+NP//5z9GoUaM49thjS30uFStWjNNOOy3Gjh2b1X7jjTfGhAkTonHjxpnZXL17945bbrklbrjhhthnn33iz3/+c4wePTo6deq0wX2feOKJcffdd8epp54ajz76aLRu3TqmTp0aH374YRx22GHRtm3buPLKK6NRo0abXG+NGjXiuuuui4MOOigOPvjgmDdvXjz99NOZ93fatGmxfPnyOPHEE0v3hgAAbIacJEmSsi4CAIBvL5M89NBDY/bs2dGiRYstvv9FixbFPvvsE2+++eYGn2r5U9KnT59o06ZN/O53vyvrUgCAHYB7oAEAlJHHHnssqlevHnvssUfMnj07LrjggujQocNWCc8iIgoKCuL//u//YsGCBT/pAG3t2rWx3377xZAhQ8q6FABgB2EGGgBAGbnnnnvimmuuiQULFkTdunWjS5cuceONN0adOnXKujQAAL5DgAYAAAAAKTxEAAAAAABSCNAAAAAAIIUADQAAAABSCNAAAAAAIIUADQAAAABSCNAAAAAAIIUADQAAAABSCNAAAAAAIIUADQAAAABS/D/gvsVXMQoQgAAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 1500x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot the distribution of token counts\n",
"\n",
"tokens = [item.token_count for item in items]\n",
"plt.figure(figsize=(15, 6))\n",
"plt.title(f\"Token counts: Avg {sum(tokens)/len(tokens):,.1f} and highest {max(tokens):,}\\n\")\n",
"plt.xlabel('Length (tokens)')\n",
"plt.ylabel('Count')\n",
"plt.hist(tokens, rwidth=0.7, color=\"green\", bins=range(0, 300, 10))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "2b58dc61-747f-46f7-b9e0-c205db4f3e5e",
"metadata": {},
"source": [
"## Sidenote\n",
"\n",
"If you like the variety of colors that matplotlib can use in its charts, you should bookmark this:\n",
"\n",
"https://matplotlib.org/stable/gallery/color/named_colors.html\n",
"\n",
"## Todos for you:\n",
"\n",
"- Review the Item class and check you're comfortable with it\n",
"- Examine some Item objects, look at the training prompt with `item.prompt` and test prompt with `item.test_prompt()`\n",
"- Make some more histograms to better understand the data\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "45d18625-f9a6-4571-ac62-8ef04b8ec411",
"metadata": {},
"source": [
"# Finally\n",
"- Its time to break down our data into a training, test and validation dataset.\n",
"- Its typical to use 5%-10% of your data for testing purposes, but actually we have far more than we need at this point. Well take 400,000 points for training, and we'll reserve 2,000 for testing, although we won't use all of them.\n",
"\n",
"\n",
"Craft a dataset which is more balanced in terms of results. Try to balance out the categories - fewer anomalous items."
]
},
{
"cell_type": "code",
"execution_count": 121,
"id": "79cc7c1d-b3ae-458b-b576-78421e01209c",
"metadata": {},
"outputs": [],
"source": [
"# Create a dict with a key of each result from normal to anomalous\n",
"# And in the result, put a list of items with that result (\n",
"\n",
"slots = defaultdict(list)\n",
"for item in items:\n",
" slots[item.result].append(item)"
]
},
{
"cell_type": "code",
"execution_count": 122,
"id": "4affb0a3-f178-4946-b55d-c673ebde94d0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>,\n",
" <$normal>]"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"slots['normal']"
]
},
{
"cell_type": "code",
"execution_count": 123,
"id": "69d4ca90-9b62-49f1-8a45-1dc0f5cbd1b4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There are 100 items in the sample\n"
]
}
],
"source": [
"# Create a dataset called \"sample\" which tries to more evenly take from the range of results\n",
"# And gives more weight to items from categories other than Anomalous\n",
"# Set random seed for reproducibility\n",
"\n",
"# Note: we are duplicating data here to increase our training and test data.\n",
"\n",
"np.random.seed(42)\n",
"random.seed(42)\n",
"size=50\n",
"sample = []\n",
"for i in ['normal', 'anomalous']:\n",
" slot = slots[i]\n",
" weights = np.array([1 if item.result=='Normal' else 2 for item in slot])\n",
" weights = weights / np.sum(weights)\n",
" selected_indices = np.random.choice(len(slot), size=size, replace=True, p=weights)\n",
" selected = [slot[i] for i in selected_indices]\n",
" sample.extend(selected)\n",
"\n",
"print(f\"There are {len(sample):,} items in the sample\")"
]
},
{
"cell_type": "code",
"execution_count": 124,
"id": "18fbb4cd-3359-4cd9-96d2-09b03c6458f9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Divided into a training set of 80 items and test set of 20 items\n"
]
}
],
"source": [
"random.seed(42)\n",
"random.shuffle(sample)\n",
"train = sample[:80]\n",
"test = sample[80:100]\n",
"print(f\"Divided into a training set of {len(train):,} items and test set of {len(test):,} items\")"
]
},
{
"cell_type": "code",
"execution_count": 125,
"id": "83eaf1df-e5eb-4ac0-b8db-6f3b3676212a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[<$normal>, <$normal>, <$anomalous>, <$normal>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$normal>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$anomalous>, <$anomalous>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$normal>, <$normal>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$normal>, <$anomalous>, <$normal>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$anomalous>, <$anomalous>, <$normal>, <$normal>, <$normal>, <$normal>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$anomalous>, <$normal>, <$normal>, <$anomalous>, <$normal>, <$normal>, <$anomalous>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$normal>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$normal>, <$anomalous>, <$normal>, <$normal>, <$anomalous>, <$anomalous>, <$anomalous>, <$anomalous>, <$anomalous>, <$normal>, <$anomalous>, <$anomalous>, <$anomalous>]\n"
]
}
],
"source": [
"print(train)"
]
},
{
"cell_type": "code",
"execution_count": 126,
"id": "a5509145-390c-48c3-95c3-1c6e35277e67",
"metadata": {},
"outputs": [],
"source": [
"# One more thing!\n",
"# Let's pickle the training and test dataset so we don't have to execute all this code next time!\n",
"\n",
"with open('train.pkl', 'wb') as file:\n",
" pickle.dump(train, file)\n",
"\n",
"with open('test.pkl', 'wb') as file:\n",
" pickle.dump(test, file)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "10bb88e5-fbd2-403b-9f61-2962db90d123",
"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.11.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}