652 lines
240 KiB
Text
652 lines
240 KiB
Text
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 19,
|
||
|
|
"id": "17f64a96-e544-4da1-9d6e-e452b9ef8730",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"import ethoscopy as etho\n",
|
||
|
|
"import pandas as pd\n",
|
||
|
|
"from scipy.stats import mannwhitneyu\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"import numpy as np\n",
|
||
|
|
"import seaborn as sns"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 20,
|
||
|
|
"id": "73799ce2-3d1b-4808-b44a-9284595e639e",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"'2.1.0'"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 20,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"etho.__version__"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 5,
|
||
|
|
"id": "72bde469-46ad-4722-b4e5-4acdc7066975",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"meta = '/home/rdingjin/ChRmine_2026-04-10/metadata_ChRmine-attP2_2026-04-10.csv'\n",
|
||
|
|
"local = '/mnt/ethoscope_results'"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 6,
|
||
|
|
"id": "97bcb76d-3eef-4dbd-844b-c74f30bbd593",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Ethoscopes ('ETHOSCOPE_278', 'ETHOSCOPE_278') have multiple files for their day, the largest file has been kept. If you want all files for that day please add a time column\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"metadata = etho.link_meta_index(meta, local)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 7,
|
||
|
|
"id": "978acb6d-856e-4495-8083-d1a1e39b7def",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Loading ROI_1 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_2 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_3 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_4 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_5 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_6 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_7 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_8 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_9 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_10 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_11 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_12 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_13 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_14 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_15 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_16 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_17 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_18 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_19 from ETHOSCOPE_278\n",
|
||
|
|
"Loading ROI_20 from ETHOSCOPE_278\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"data = etho.load_ethoscope(metadata, reference_hour = 9.0, FUN = etho.sleep_annotation)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 8,
|
||
|
|
"id": "09078fb6-c15d-4621-8811-86ecbf36e843",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"df = etho.behavpy(data, metadata, check = True)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 9,
|
||
|
|
"id": "31b1de86-344c-4dc2-9d0d-f00ef58fe52f",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"df.to_pickle('/home/rdingjin/ChRmine_2026-04-10/phase3_attP2.pkl')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 21,
|
||
|
|
"id": "96f482fb-8697-47b4-84a2-8883a75e5720",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"import ethoscopy as etho\n",
|
||
|
|
"import pandas as pd\n",
|
||
|
|
"from scipy.stats import mannwhitneyu\n",
|
||
|
|
"import matplotlib.pyplot as plt\n",
|
||
|
|
"import numpy as np\n",
|
||
|
|
"import seaborn as sns\n",
|
||
|
|
"df = pd.read_pickle('/home/rdingjin/ChRmine_2026-04-10/phase3_attP2.pkl')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 11,
|
||
|
|
"id": "6fb12546-e7f2-4d86-b073-6e5c780662ac",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"df = df.baseline(column = 'baseline')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 12,
|
||
|
|
"id": "6985f68c-0932-4a0d-bce2-69464dbdafbb",
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": true
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"\n",
|
||
|
|
" ==== METADATA ====\n",
|
||
|
|
"\n",
|
||
|
|
" date machine_name region_id \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 2026-04-10 ETHOSCOPE_278 1 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|02 2026-04-10 ETHOSCOPE_278 2 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|03 2026-04-10 ETHOSCOPE_278 3 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|04 2026-04-10 ETHOSCOPE_278 4 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|05 2026-04-10 ETHOSCOPE_278 5 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|06 2026-04-10 ETHOSCOPE_278 6 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|07 2026-04-10 ETHOSCOPE_278 7 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|08 2026-04-10 ETHOSCOPE_278 8 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|09 2026-04-10 ETHOSCOPE_278 9 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|10 2026-04-10 ETHOSCOPE_278 10 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|11 2026-04-10 ETHOSCOPE_278 11 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|12 2026-04-10 ETHOSCOPE_278 12 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|13 2026-04-10 ETHOSCOPE_278 13 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|14 2026-04-10 ETHOSCOPE_278 14 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|15 2026-04-10 ETHOSCOPE_278 15 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|16 2026-04-10 ETHOSCOPE_278 16 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|17 2026-04-10 ETHOSCOPE_278 17 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|18 2026-04-10 ETHOSCOPE_278 18 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|19 2026-04-10 ETHOSCOPE_278 19 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 2026-04-10 ETHOSCOPE_278 20 \n",
|
||
|
|
"\n",
|
||
|
|
" sleep_deprived species food \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|02 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|03 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|04 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|05 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|06 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|07 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|08 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|09 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|10 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|11 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|12 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|13 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|14 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|15 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|16 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|17 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|18 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|19 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 False UAS_ChRmine_attP2 normal_food \n",
|
||
|
|
"\n",
|
||
|
|
" baseline sex time \n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|02 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|03 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|04 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|05 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|06 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|07 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|08 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|09 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|10 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|11 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|12 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|13 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|14 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|15 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|16 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|17 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|18 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|19 0 male 13-39-38 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0 male 13-39-38 \n",
|
||
|
|
" ====== DATA ======\n",
|
||
|
|
"\n",
|
||
|
|
" t x y w \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 16780 59.111111 47.444444 21.444444 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 16790 179.525000 45.837500 26.137500 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 16800 188.000000 46.000000 26.038961 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 16810 188.000000 46.000000 25.906667 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 16820 188.160000 45.986667 25.666667 \n",
|
||
|
|
"... ... ... ... ... \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 278920 397.000000 20.000000 23.777778 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 278930 397.000000 20.000000 23.934783 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 278940 397.000000 20.000000 23.869565 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 278950 397.000000 20.000000 23.789474 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 278960 397.000000 20.000000 23.785714 \n",
|
||
|
|
"\n",
|
||
|
|
" h phi max_velocity \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 7.222222 115.777778 38.448442 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 9.212500 98.412500 9.974215 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 9.233766 68.324675 0.816354 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 9.373333 48.680000 0.792280 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 9.746667 87.320000 0.983736 \n",
|
||
|
|
"... ... ... ... \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 9.355556 37.644444 0.968008 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 9.282609 17.956522 0.868718 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 9.239130 33.065217 0.864726 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 9.342105 53.131579 0.868718 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 9.428571 83.392857 0.854828 \n",
|
||
|
|
"\n",
|
||
|
|
" mean_velocity dist has_interacted \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 8.486037 0.229123 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 1.462570 0.351017 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.692391 0.159942 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.685665 0.154275 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.700724 0.157663 0.0 \n",
|
||
|
|
"... ... ... ... \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.702433 0.094828 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.700876 0.096721 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.727397 0.100381 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.725332 0.082688 0.0 \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.719535 0.060441 0.0 \n",
|
||
|
|
"\n",
|
||
|
|
" beam_cross moving micro walk \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.0 True False True \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.0 True False True \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.0 False False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.0 False False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 0.0 False False False \n",
|
||
|
|
"... ... ... ... ... \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.0 False False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.0 False False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.0 False False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.0 False False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 0.0 False False False \n",
|
||
|
|
"\n",
|
||
|
|
" is_interpolated asleep \n",
|
||
|
|
"id \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|01 False False \n",
|
||
|
|
"... ... ... \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 False False \n",
|
||
|
|
"2026-04-10_13-39-38_278441|20 False False \n",
|
||
|
|
"\n",
|
||
|
|
"[523664 rows x 16 columns]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"df.display()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 26,
|
||
|
|
"id": "201fdbdd-2a61-47a6-bf17-ee0d8c5c96f5",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stderr",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"/srv/venv/lib/python3.12/site-packages/ethoscopy/behavpy_core.py:1611: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n",
|
||
|
|
" tdf.groupby(\"id\", group_keys=False).apply(\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 600x200 with 2 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"#Heatmap of UAS-ChRmine-attP2 sleep\n",
|
||
|
|
"start_hour = 0\n",
|
||
|
|
"end_hour = 72\n",
|
||
|
|
"fig = df.t_filter(start_time=start_hour, end_time=end_hour).heatmap(variable = 'asleep')\n",
|
||
|
|
"fig.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 40,
|
||
|
|
"id": "f0a9181a-0298-45e9-ab7e-96e0bad52bd8",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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duDTn/40Zmdn8bGPfQymaeLGG2/s+Nr3v//9OHDgAP7oj/4IGzduxN13340PfehD0DQNv/M7v3OCvgFBEARBEARBrCynVAB/2223oVqt4jOf+QzGxsYAAIwxfPjDH8Z1112H9evXh75ufn4eDzzwAP76r/8ab3jDGwAAl1xyCR577DF897vfpQCeIAiCIAiCOG04pSQ0d999Ny655JIgeAeA17zmNeCc49577418neu6AIDh4eGmv+dyOQghVuRYCYIgCIIgCOJkcEoF8AcOHMDOnTub/jYyMoLJyUkcOHAg8nUbN27EZZddhs9+9rPYt28fKpUKvve97+Hee+/FW97ylpU+bIIgCIIgCII4YZxSEppSqYSRkZG2v4+OjqJYLHZ87ac//WnccMMNeN3rXgcA0DQNf/Znf4ZXvepVka+58sorIx87fvw4NmzYgFqtFvPoCYIgCIIgCKJ/hBBQFKXr806pAL5fhBD47//9v+PQoUP4+Mc/jsnJSdx333346Ec/itHR0SCo7xXbtrF79+4BHy1BEARBEARBtGPbNlKpVNfnnVIB/MjICMrlctvfi8UiRkdHI1/305/+FHfccQduv/12nHPOOQCAiy++GIuLi/jYxz4WGcDfeeedke955ZVXQgiB8847r8dvQRAEQRAEQRC9k0wmYz3vlArgd+7c2aZ1L5fLmJ+fb9PGN7Jv3z5omoazzz676e/nnXce/vVf/xWGYSCTyfR8PIqiIJvN9vw6giAIgiAIguiVOPIZ4BQrYr388stx3333oVQqBX+74447oKoqLr300sjXbd68GYwxPP30001/f+KJJ7BmzZq+gneCIAiCIAiCOBVZVgZ+z549uOuuu3Ds2DEAMpC+/PLLAxlLr1xzzTW49dZbcf311+O6667D7OwsbrrpJlxzzTVNHvDXXnstpqen8aMf/QiADPw3bdqE973vfbj++uuxbt063HPPPfiP//gPvPe9713OVyQIgiAIgiCIU4q+AnjbtnHjjTfiW9/6FoQQUFWZyOec42//9m9x1VVX4X/9r/8VW8fjMzo6ii9/+cv4yEc+guuvvx5DQ0P4rd/6Ldxwww1Nz+OcgzEW/DuXy+GWW27BJz7xCfyf//N/UC6XsWXLFnzwgx/EW9/61n6+IkEQBEEQBEGckiiij05Hf/VXf4Vbb70Vb37zm/HWt74V27Ztg6IomJqawq233oqvfvWreNvb3ob/+T//50oc8wnBt5jsVOhKEARBEARBEIMibvzZlwb+9ttvx9VXX40bb7wRO3fuhK7r0DQNO3fuxF/8xV/gqquuwu23397PWxMEQRAEQRAE0YG+AnjXdXHhhRdGPv7c5z63SeJCEARBEARBEMRg6CuAv+yyy3DPPfdEPv6zn/2so2sMQRAEQRAEQRD90VcA//73vx9Hjx7Fe97zHtx///04duwYjh07hvvuuw/XX389pqen8f73vx+FQqHpfwRBEARBEARBLI++XGhe+9rXApA2kq0ie78mNqz76e7du/v5OIIgCIIgCIIgPPoK4K+//vrYnaIIgiAIgiAIghgcfQXw1ByJIAiCIAiCIE4OfWngWymXy+Q6QxAEQRAEQRAngL4D+MceewzvfOc7ceGFF+Liiy/GL37xCwBAPp/Hu9/9bjzwwAMDO0iCIAiCIAiCICR
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 866.667x433.333 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# Generate plot from Ethoscopy\n",
|
||
|
|
"start_hour = 24\n",
|
||
|
|
"end_hour = 72\n",
|
||
|
|
"fig = df.t_filter(start_time=start_hour, end_time=end_hour).plot_overtime(variable='asleep', avg_window=30, grids=True)\n",
|
||
|
|
"\n",
|
||
|
|
"# Extract the main axis from the figure\n",
|
||
|
|
"ax = fig.axes[0]\n",
|
||
|
|
"\n",
|
||
|
|
"# Set custom labels\n",
|
||
|
|
"ax.set_xlabel(\"Zeitgeber Time (Hours)\", fontsize=12)\n",
|
||
|
|
"ax.set_ylabel(\"Fraction of Time Asleep\", fontsize=12)\n",
|
||
|
|
"\n",
|
||
|
|
"# Show plot\n",
|
||
|
|
"fig.show()\n",
|
||
|
|
"\n",
|
||
|
|
"# Save as a high-resolution PNG\n",
|
||
|
|
"plt.savefig(\"Figure_4-attP2.png\", dpi=600, bbox_inches='tight')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 27,
|
||
|
|
"id": "2704b7f8-e8ee-403e-9ec7-464458c93f86",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"--- Individual Fly Average (Entire Recording Period) ---\n",
|
||
|
|
" Fly_Label Avg_Sleep_Per_24h Day_Sleep_12h Night_Sleep_12h\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 01 8.023796 5.707394 2.795370\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 02 4.464296 1.800543 2.962963\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 03 5.272949 3.484892 2.109259\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 04 9.550810 5.930827 4.210185\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 05 3.597119 1.523178 2.313889\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 06 2.349416 1.544680 0.948148\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 07 9.229247 5.868908 4.006481\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 08 5.001182 3.644585 1.654630\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 09 8.926473 5.365898 4.118519\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 10 4.890798 3.082931 2.120370\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 11 7.932641 5.621238 2.790741\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 12 9.267548 5.704977 4.141667\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 13 7.652037 5.155777 2.961111\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 14 7.490703 4.574791 3.387037\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 15 7.511615 4.438679 3.543519\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 16 9.953758 5.805048 4.785185\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 17 11.442621 6.639225 5.547222\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 18 8.474686 4.278481 4.743519\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 19 5.100335 3.884152 1.585185\n",
|
||
|
|
"ETHOSCOPE_278 - Fly 20 7.159736 4.408052 3.211111\n",
|
||
|
|
"... (Showing first 20 rows)\n",
|
||
|
|
"\n",
|
||
|
|
"--- Grand Summary Statistics (Entire Recording Period) ---\n",
|
||
|
|
"Total Flies Analyzed: n = 20\n",
|
||
|
|
"\n",
|
||
|
|
"[ OVERALL SLEEP (Scaled to 24h) ]\n",
|
||
|
|
"Mean ± SEM: 7.16 ± 0.53 hours/24h\n",
|
||
|
|
"Median: 7.58 hours/24h\n",
|
||
|
|
"Minimum: 2.35 hours/24h\n",
|
||
|
|
"Maximum: 11.44 hours/24h\n",
|
||
|
|
"\n",
|
||
|
|
"[ DAY TIME (ZT 0-12, 9am-9pm, Scaled to 12h) ]\n",
|
||
|
|
"Mean ± SEM: 4.42 ± 0.34 hours/12h\n",
|
||
|
|
"Median: 4.51 hours/12h\n",
|
||
|
|
"Minimum: 1.52 hours/12h\n",
|
||
|
|
"Maximum: 6.64 hours/12h\n",
|
||
|
|
"\n",
|
||
|
|
"[ NIGHT TIME (ZT 12-24, 9pm-9am, Scaled to 12h) ]\n",
|
||
|
|
"Mean ± SEM: 3.20 ± 0.27 hours/12h\n",
|
||
|
|
"Median: 3.09 hours/12h\n",
|
||
|
|
"Minimum: 0.95 hours/12h\n",
|
||
|
|
"Maximum: 5.55 hours/12h\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"filtered_df = df.copy()\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate Overall 24h Average\n",
|
||
|
|
"# Calculate exact duration each fly was tracked (in days) based on its maximum timestamp\n",
|
||
|
|
"days_tracked = filtered_df.groupby('id')['t'].max() / 86400\n",
|
||
|
|
"sleep_hours = (filtered_df.groupby('id')['asleep'].sum() * 10) / 3600\n",
|
||
|
|
"\n",
|
||
|
|
"overall_sleep = (sleep_hours / days_tracked).reset_index(name='Avg_Sleep_Per_24h')\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate Day/Night 12h Averages\n",
|
||
|
|
"filtered_df['zt_hour'] = (filtered_df['t'] / 3600) % 24\n",
|
||
|
|
"filtered_df['Phase'] = np.where(filtered_df['zt_hour'] < 12, 'Day', 'Night')\n",
|
||
|
|
"\n",
|
||
|
|
"phase_summary = filtered_df.groupby(['id', 'Phase']).agg(\n",
|
||
|
|
" total_sleep_epochs=('asleep', 'sum'),\n",
|
||
|
|
" total_tracking_epochs=('t', 'count')\n",
|
||
|
|
").reset_index()\n",
|
||
|
|
"\n",
|
||
|
|
"phase_summary['Sleep_Hours'] = (phase_summary['total_sleep_epochs'] * 10) / 3600\n",
|
||
|
|
"phase_summary['Tracking_Hours'] = (phase_summary['total_tracking_epochs'] * 10) / 3600\n",
|
||
|
|
"phase_summary['Avg_Sleep_Per_12h'] = (phase_summary['Sleep_Hours'] / phase_summary['Tracking_Hours']) * 12\n",
|
||
|
|
"\n",
|
||
|
|
"pivot_df = phase_summary.pivot(index='id', columns='Phase', values='Avg_Sleep_Per_12h').reset_index()\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"# Merge the overall 24h table and the Day/Night table together using the fly 'id'\n",
|
||
|
|
"merged_df = pd.merge(overall_sleep, pivot_df, on='id')\n",
|
||
|
|
"\n",
|
||
|
|
"# Clean up the labels\n",
|
||
|
|
"merged_df['Machine'] = merged_df['id'].map(df.meta['machine_name'])\n",
|
||
|
|
"merged_df['Tube'] = merged_df['id'].apply(lambda x: str(x).split('|')[-1])\n",
|
||
|
|
"merged_df['Fly_Label'] = merged_df['Machine'] + \" - Fly \" + merged_df['Tube']\n",
|
||
|
|
"\n",
|
||
|
|
"# Drop invalid rows, sort, and select final columns\n",
|
||
|
|
"clean_table = merged_df.dropna(subset=['Machine']).sort_values(by=['Machine', 'Tube'])\n",
|
||
|
|
"final_table = clean_table[['Fly_Label', 'Avg_Sleep_Per_24h', 'Day', 'Night']]\n",
|
||
|
|
"final_table.columns = ['Fly_Label', 'Avg_Sleep_Per_24h', 'Day_Sleep_12h', 'Night_Sleep_12h']\n",
|
||
|
|
"\n",
|
||
|
|
"\n",
|
||
|
|
"# PRINT RESULTS\n",
|
||
|
|
"print(\"--- Individual Fly Average (Entire Recording Period) ---\")\n",
|
||
|
|
"# Show the first 20 rows of the combined table\n",
|
||
|
|
"print(final_table.head(20).to_string(index=False)) \n",
|
||
|
|
"print(\"... (Showing first 20 rows)\\n\")\n",
|
||
|
|
"\n",
|
||
|
|
"print(\"--- Grand Summary Statistics (Entire Recording Period) ---\")\n",
|
||
|
|
"print(f\"Total Flies Analyzed: n = {len(final_table)}\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 1. OVERALL 24H STATS\n",
|
||
|
|
"print(\"\\n[ OVERALL SLEEP (Scaled to 24h) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {final_table['Avg_Sleep_Per_24h'].mean():.2f} ± {final_table['Avg_Sleep_Per_24h'].sem():.2f} hours/24h\")\n",
|
||
|
|
"print(f\"Median: {final_table['Avg_Sleep_Per_24h'].median():.2f} hours/24h\")\n",
|
||
|
|
"print(f\"Minimum: {final_table['Avg_Sleep_Per_24h'].min():.2f} hours/24h\")\n",
|
||
|
|
"print(f\"Maximum: {final_table['Avg_Sleep_Per_24h'].max():.2f} hours/24h\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 2. DAY TIME STATS\n",
|
||
|
|
"print(\"\\n[ DAY TIME (ZT 0-12, 9am-9pm, Scaled to 12h) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {final_table['Day_Sleep_12h'].mean():.2f} ± {final_table['Day_Sleep_12h'].sem():.2f} hours/12h\")\n",
|
||
|
|
"print(f\"Median: {final_table['Day_Sleep_12h'].median():.2f} hours/12h\")\n",
|
||
|
|
"print(f\"Minimum: {final_table['Day_Sleep_12h'].min():.2f} hours/12h\")\n",
|
||
|
|
"print(f\"Maximum: {final_table['Day_Sleep_12h'].max():.2f} hours/12h\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 3. NIGHT TIME STATS\n",
|
||
|
|
"print(\"\\n[ NIGHT TIME (ZT 12-24, 9pm-9am, Scaled to 12h) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {final_table['Night_Sleep_12h'].mean():.2f} ± {final_table['Night_Sleep_12h'].sem():.2f} hours/12h\")\n",
|
||
|
|
"print(f\"Median: {final_table['Night_Sleep_12h'].median():.2f} hours/12h\")\n",
|
||
|
|
"print(f\"Minimum: {final_table['Night_Sleep_12h'].min():.2f} hours/12h\")\n",
|
||
|
|
"print(f\"Maximum: {final_table['Night_Sleep_12h'].max():.2f} hours/12h\")"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 39,
|
||
|
|
"id": "1ef1aae2-dcfd-450a-9931-759500dd6881",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stderr",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Task was destroyed but it is pending!\n",
|
||
|
|
"task: <Task pending name='Task-705' coro=<_async_in_context.<locals>.run_in_context() done, defined at /srv/venv/lib/python3.12/site-packages/ipykernel/utils.py:57> wait_for=<Task pending name='Task-706' coro=<Kernel.shell_main() running at /srv/venv/lib/python3.12/site-packages/ipykernel/kernelbase.py:597> cb=[Task.task_wakeup()]> cb=[ZMQStream._run_callback.<locals>._log_error() at /srv/venv/lib/python3.12/site-packages/zmq/eventloop/zmqstream.py:563]>\n",
|
||
|
|
"/srv/venv/lib/python3.12/site-packages/matplotlib/cbook.py:259: RuntimeWarning: coroutine 'Kernel.shell_main' was never awaited\n",
|
||
|
|
" def __init__(self, exception_handler=_exception_printer, *, signals=None):\n",
|
||
|
|
"Task was destroyed but it is pending!\n",
|
||
|
|
"task: <Task pending name='Task-706' coro=<Kernel.shell_main() running at /srv/venv/lib/python3.12/site-packages/ipykernel/kernelbase.py:597> cb=[Task.task_wakeup()]>\n",
|
||
|
|
"Task was destroyed but it is pending!\n",
|
||
|
|
"task: <Task pending name='Task-759' coro=<_async_in_context.<locals>.run_in_context() done, defined at /srv/venv/lib/python3.12/site-packages/ipykernel/utils.py:57> wait_for=<Task pending name='Task-760' coro=<Kernel.shell_main() running at /srv/venv/lib/python3.12/site-packages/ipykernel/kernelbase.py:597> cb=[Task.task_wakeup()]> cb=[ZMQStream._run_callback.<locals>._log_error() at /srv/venv/lib/python3.12/site-packages/zmq/eventloop/zmqstream.py:563]>\n",
|
||
|
|
"Task was destroyed but it is pending!\n",
|
||
|
|
"task: <Task pending name='Task-760' coro=<Kernel.shell_main() running at /srv/venv/lib/python3.12/site-packages/ipykernel/kernelbase.py:597> cb=[Task.task_wakeup()]>\n",
|
||
|
|
"/tmp/ipykernel_41383/1926494263.py:19: FutureWarning: \n",
|
||
|
|
"\n",
|
||
|
|
"Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.\n",
|
||
|
|
"\n",
|
||
|
|
" sns.boxplot(\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAJICAYAAACwmJfxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAATsBJREFUeJzt3XlcVdX+//H3QQUFRMQZcULLMT2ZY5KmlgpqaWVq2mg3UbN5sHu/pZZTg3UrTfrWLbPUi2lpqZhJxnUoswxLcSYMBMVEGQQD5Pz+8Of5xgUUNxvOPvB6Ph73cT1rD+dDpW/X2mutbXM4HA4BAACX8nB1AQAAgEAGAMASCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyguqsL+KujR4/qX//6l3bv3q1Dhw4pODhYa9eudR7PysrShx9+qJiYGCUkJMjT01OdO3fW448/rrZt27qwcgAAysZSPeRDhw4pJiZGLVq0UOvWrYscT05OVmRkpPr06aN//vOfeumll5SZmanRo0fryJEjLqgYAABz2Ky0l3VBQYE8PC78HWHatGnas2dPoR5ydna2bDabatWq5Ww7e/asBgwYoGHDhun555+v8JoBADCDpYasL4ZxSby9vYu0+fj4qHnz5kpNTS2vsgAAKHeWGrI2IiMjw/m8GQAAd2WpHrIRr776qmw2m8aOHXvJ8wYOHFjisdTUVHXp0kWffPKJ2eUBAFAqbh3Iq1at0ooVKzRv3jw1btzY8H3Onz+vlJQUEysDAODKuG0gx8TE6IUXXtDkyZM1cuTIy54fHR1d4rFL9Z4BAKgIbvkMOTY2Vo8++qhGjBihRx991NXlAABQZm4XyIcPH9bEiRPVq1cvzZw509XlAABgCksNWefk5CgmJkaSdOzYMWVlZWnDhg2SpB49esjhcGjChAny8vLSvffeqz179jiv9fX1VZs2bVxSNwAAZWWpjUGSkpJKfJ67ZMkSSdI999xT7PEePXro448/NvS9F7/zUs+ZAQAoT5bqIQcFBenAgQOXPOdyxwEAcEdu9wwZAIDKiEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACzAUoF89OhRvfDCC7r11lvVoUMHDRs2rNjzPv30Uw0ePFjXXHONbrnlFm3evLmCKwUAwFyWCuRDhw4pJiZGLVq0UOvWrYs9Z926dXr++ecVGhqq9957T3a7XQ8//LBiY2MrtlgAAExkczgcDlcXcVFBQYE8PC78HWHatGnas2eP1q5dW+icwYMHq1OnTpo/f76zbcyYMapdu7bee+89Q987cOBASVJ0dLTBygEAKBtL9ZAvhnFJEhMTlZCQoNDQ0ELtYWFh+u6775Sbm1ue5QEAUG4sFciXEx8fL0lq1apVofbWrVsrLy9PiYmJrigLAIAyq+7qAq5Eenq6JMnPz69Q+8XPF48X5+KwdHFSUlLUpEkTEyoEAMAYt+ohAwBQWblVD7lOnTqSpMzMTDVo0MDZnpGRUeh4cS41YetSvWcAACqCW/WQg4ODJf3fs+SL4uPjVaNGDTVr1swVZQEAUGZuFcjNmjVTy5YttWHDhkLt69evV+/eveXp6emiygAAKBtLDVnn5OQoJiZGknTs2DFlZWU5w7dHjx4KCAjQ1KlT9dRTT6l58+bq2bOn1q9fr19++UWffPKJK0sHAKBMLLUxSFJSUonPc5csWaKePXtKurB15nvvvafk5GS1atVKTzzxhPr372/4e9kYBADgapYKZFchkAEAruZWz5ABAKisCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALIBABgDAAghkAAAsgEAGAMACCGQAACyAQAYAwAIIZAAALKDMgfznn38qNzfXjFoAAKiyql/pBTt27FB0dLR27dqlI0eO6Ny5c5KkmjVrqnXr1rr22mt10003qWfPnqYXCwBAZWVzOByOy52Ul5enyMhIffjhhzp27Jjq1Kmjjh07KigoSHXq1JHD4VBGRoaSkpK0d+9epaenKzAwUA888IBGjx6tGjVqVMTPYtjAgQMlSdHR0S6uBABQVZWqhzxo0CDl5eVpxIgRCg0NVceOHS95/p49e7RhwwZFRETogw8+0DfffGNKsQAAVFalCuSJEyfqtttuk6enZ6lu2qlTJ3Xq1EmPPPKIPvvsszIVCABAVVCqIevKjiFrAICrmbrsKTc3V9nZ2WbeEgCAKsFQIK9bt05z5swp1LZgwQJ17dpV3bt315QpU3T27FlTCgQAoCowFMgffPCBcnJynJ937dqlBQsWKCQkRPfee6+2bNmiiIgI04oEAKCyu+J1yJKUmJiokSNHOj+vXbtW9evX14IFC1S9enU5HA5t3LhRTz75pGmFAgBQmRnqIefm5srLy8v5edu2berbt6+qV7+Q761bt9bx48fNqRAAgCrAUCAHBQVp+/btkqRff/1VR48e1Q033OA8furUKXl7e5tTIQAAVYChIevRo0dr9uzZOnz4sE6cOKHGjRurf//+zuO7du1SmzZtTCsSAIDKzlAg33333fLy8lJMTIw6deqkBx98UDVr1pQknTlzRidPntTYsWNNLRQAgMrsijcGycvL05EjR+Tv76/GjRuXV10Vio1BAACudsXPkD08PHT77bdr48aN5VEPAABV0hUHcrVq1RQYGMg7kAEAMJGhWdbjx4/XihUrdObMGZPLAQCgajI0qaugoECenp66+eabNXjwYDVt2tQ5qesim82m++67z4waAQCo9Ay97aldu3aXv7HNpn379hkqqqIxqQsA4GqGesgEFwAA5jIUyE2bNjW7DgAAqjRT34cMAACMMdRDHjBggGw22yXPsdls2rRpk6GiAACoagwFco8ePYoE8vnz55WcnKxdu3bpqquuUocOHUwpEACAqsBQIM+bN6/EY/v379eECRM0fPhww0UBAFDVmP4MuV27dho9erRee+01s28NAEClVS6TuurVq6fDhw+Xx60BAKiUTA/k06dPa9WqVZXmTVAAAFQEQ8+Q77nnnmLbMzMzFR8fr7y8PL3yyitlKgwAgKrEUCAXt9umzWZTUFCQevfurdtvv12tW7cuc3EAAFQVhgL5448/NrsOAACqNHbqAgDAAgz1kCUpKytLixcv1rfffqvk5GRJUmBgoG688Ubdd9998vX1Na1IAAAqO0M95BMnTmjEiBFasGCBsrOz1bVrV3Xt2lU5OTlasGCBRo4cqdTUVLNrBQCg0jLUQ37ttdf0xx9/6N1331W/fv0KHYuJidFjjz2m+fPn6+WXXzalSAAAKjtDPeQtW7bo3nvvLRLGktSvXz/dfffdiomJKXNxAABUFYYCOScnR/Xq1SvxeP369ZWTk2O4KAAAqhpDgdy6dWutW7dOubm5RY7l5eVp3bp1rEMGAOAKGHqG/Le//U2PP/64Ro0apbvuukstW7aUJP3
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 500x600 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# 1. Prepare data for plotting\n",
|
||
|
|
"plot_df = final_table.melt(\n",
|
||
|
|
" id_vars=['Fly_Label'], \n",
|
||
|
|
" value_vars=['Day_Sleep_12h', 'Night_Sleep_12h'],\n",
|
||
|
|
" var_name='Phase', \n",
|
||
|
|
" value_name='Sleep_Hours'\n",
|
||
|
|
")\n",
|
||
|
|
"\n",
|
||
|
|
"plot_df['Phase'] = plot_df['Phase'].replace({\n",
|
||
|
|
" 'Day_Sleep_12h': 'Day',\n",
|
||
|
|
" 'Night_Sleep_12h': 'Night'\n",
|
||
|
|
"})\n",
|
||
|
|
"\n",
|
||
|
|
"# 2. Generate plot\n",
|
||
|
|
"plt.figure(figsize=(5, 6))\n",
|
||
|
|
"sns.set_theme(style=\"ticks\")\n",
|
||
|
|
"\n",
|
||
|
|
"# Draw the Box Plot\n",
|
||
|
|
"sns.boxplot(\n",
|
||
|
|
" data=plot_df, \n",
|
||
|
|
" x='Phase', \n",
|
||
|
|
" y='Sleep_Hours', \n",
|
||
|
|
" palette=['#f1c232', '#3c78d8'], \n",
|
||
|
|
" width=0.4,\n",
|
||
|
|
" boxprops={'edgecolor': 'black', 'alpha': 0.6},\n",
|
||
|
|
" medianprops={'color': 'black', 'linewidth': 1},\n",
|
||
|
|
" showfliers=False \n",
|
||
|
|
")\n",
|
||
|
|
"\n",
|
||
|
|
"# Draw the Strip Plot\n",
|
||
|
|
"sns.stripplot(\n",
|
||
|
|
" data=plot_df, \n",
|
||
|
|
" x='Phase', \n",
|
||
|
|
" y='Sleep_Hours', \n",
|
||
|
|
" color='black', \n",
|
||
|
|
" alpha=0.6, \n",
|
||
|
|
" size=5, \n",
|
||
|
|
" jitter=True\n",
|
||
|
|
")\n",
|
||
|
|
"\n",
|
||
|
|
"# 3. Add labels for the median\n",
|
||
|
|
"# Calculate the exact median for Day and Night\n",
|
||
|
|
"medians = plot_df.groupby('Phase', sort=False)['Sleep_Hours'].median()\n",
|
||
|
|
"\n",
|
||
|
|
"# Grab the current plot axes\n",
|
||
|
|
"ax = plt.gca()\n",
|
||
|
|
"\n",
|
||
|
|
"# Loop through the two phases (0 = Day, 1 = Night)\n",
|
||
|
|
"for i, phase in enumerate(medians.index):\n",
|
||
|
|
" median_val = medians[phase]\n",
|
||
|
|
" \n",
|
||
|
|
" # Place text slightly to the right of the box (i + 0.3)\n",
|
||
|
|
" ax.text(\n",
|
||
|
|
" i + 0.3, # X-coordinate\n",
|
||
|
|
" median_val, # Y-coordinate (exactly on the median line)\n",
|
||
|
|
" f\"{median_val:.1f}h\", # The text to display\n",
|
||
|
|
" ha='left', # Align text to the left of this anchor point\n",
|
||
|
|
" va='center', # Center vertically exactly on the line\n",
|
||
|
|
" color='black',\n",
|
||
|
|
" fontsize=11\n",
|
||
|
|
" )\n",
|
||
|
|
"\n",
|
||
|
|
"# 4. Formatting\n",
|
||
|
|
"sns.despine()\n",
|
||
|
|
"\n",
|
||
|
|
"plt.xlabel('') \n",
|
||
|
|
"plt.ylabel('Average time spent asleep (hours)', fontsize=12)\n",
|
||
|
|
"plt.ylim(0, 12) \n",
|
||
|
|
"\n",
|
||
|
|
"plt.tight_layout()\n",
|
||
|
|
"\n",
|
||
|
|
"# Export high resolution image\n",
|
||
|
|
"plt.savefig(\"ChRmine-attP2\", dpi=600, bbox_inches='tight')\n",
|
||
|
|
"\n",
|
||
|
|
"plt.show()"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"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.12.3"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"nbformat": 4,
|
||
|
|
"nbformat_minor": 5
|
||
|
|
}
|