1046 lines
374 KiB
Text
1046 lines
374 KiB
Text
|
|
{
|
||
|
|
"cells": [
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 1,
|
||
|
|
"id": "082de01c-5271-479e-a491-c6849725dd1e",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"#Phase 7 ATR (60D05) "
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 18,
|
||
|
|
"id": "272d85eb-2a89-4002-9dd5-b4cf35bfecd7",
|
||
|
|
"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",
|
||
|
|
"from scipy.stats import wilcoxon, shapiro, ttest_rel"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 2,
|
||
|
|
"id": "bf4d6257-9a9c-44ab-8788-868423d472f9",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"text/plain": [
|
||
|
|
"'2.1.0'"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"execution_count": 2,
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "execute_result"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"etho.__version__"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 20,
|
||
|
|
"id": "43fdfbf9-d164-4708-9943-8b0f89f9341f",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"meta = '/home/rdingjin/UASxGal4_ATR_2026-05-10/metadata_phase7_60D_pulse.csv' \n",
|
||
|
|
"local = '/mnt/ethoscope_results'"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 21,
|
||
|
|
"id": "134f43e0-0b2c-4adb-b1c5-eb03dabe56d7",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"metadata = etho.link_meta_index(meta, local)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 22,
|
||
|
|
"id": "15ade560-4ff5-4355-a634-649b23cf98c7",
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": true
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Loading ROI_1 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_2 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_3 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_4 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_5 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_6 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_7 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_8 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_9 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_10 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_11 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_12 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_13 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_14 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_15 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_16 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_17 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_18 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_19 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_20 from ETHOSCOPE_130\n",
|
||
|
|
"Loading ROI_1 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_2 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_3 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_4 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_5 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_6 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_7 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_8 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_9 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_10 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_11 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_12 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_13 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_14 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_15 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_16 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_17 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_18 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_19 from ETHOSCOPE_302\n",
|
||
|
|
"Loading ROI_20 from ETHOSCOPE_302\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"data = etho.load_ethoscope(metadata, reference_hour = 9.0, FUN = etho.sleep_annotation)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 23,
|
||
|
|
"id": "fe07151b-0b01-4695-8c00-4ca3120f5735",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"df = etho.behavpy(data, metadata, check = True)"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 36,
|
||
|
|
"id": "50c5c0bc-5eb9-4c34-9d0a-7ee9429df571",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"df.to_pickle('/home/rdingjin/UASxGal4_ATR_2026-05-10/phase7(60D)1.pkl')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 37,
|
||
|
|
"id": "94ee2ec0-407d-4dea-b746-98ca9ca1186e",
|
||
|
|
"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",
|
||
|
|
"from scipy.stats import wilcoxon, shapiro, ttest_rel\n",
|
||
|
|
"df = pd.read_pickle('/home/rdingjin/UASxGal4_ATR_2026-05-10/phase7(60D)1.pkl')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 26,
|
||
|
|
"id": "e02f49df-5062-497d-a068-5b25269bab1a",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"df = df.baseline(column = 'baseline')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 27,
|
||
|
|
"id": "e469178c-93d4-4182-9d4f-6a58403eb0f8",
|
||
|
|
"metadata": {
|
||
|
|
"scrolled": true
|
||
|
|
},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"\n",
|
||
|
|
" ==== METADATA ====\n",
|
||
|
|
"\n",
|
||
|
|
" date machine_name region_id \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|01 2026-05-10 ETHOSCOPE_130 1 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|02 2026-05-10 ETHOSCOPE_130 2 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|03 2026-05-10 ETHOSCOPE_130 3 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|04 2026-05-10 ETHOSCOPE_130 4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|05 2026-05-10 ETHOSCOPE_130 5 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|06 2026-05-10 ETHOSCOPE_130 6 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|07 2026-05-10 ETHOSCOPE_130 7 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|08 2026-05-10 ETHOSCOPE_130 8 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|09 2026-05-10 ETHOSCOPE_130 9 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|10 2026-05-10 ETHOSCOPE_130 10 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|11 2026-05-10 ETHOSCOPE_130 11 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|12 2026-05-10 ETHOSCOPE_130 12 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|13 2026-05-10 ETHOSCOPE_130 13 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|14 2026-05-10 ETHOSCOPE_130 14 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|15 2026-05-10 ETHOSCOPE_130 15 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|16 2026-05-10 ETHOSCOPE_130 16 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|17 2026-05-10 ETHOSCOPE_130 17 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|18 2026-05-10 ETHOSCOPE_130 18 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|19 2026-05-10 ETHOSCOPE_130 19 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 2026-05-10 ETHOSCOPE_130 20 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 2026-05-10 ETHOSCOPE_302 1 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|02 2026-05-10 ETHOSCOPE_302 2 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|03 2026-05-10 ETHOSCOPE_302 3 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|04 2026-05-10 ETHOSCOPE_302 4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|05 2026-05-10 ETHOSCOPE_302 5 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|06 2026-05-10 ETHOSCOPE_302 6 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|07 2026-05-10 ETHOSCOPE_302 7 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|08 2026-05-10 ETHOSCOPE_302 8 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|09 2026-05-10 ETHOSCOPE_302 9 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|10 2026-05-10 ETHOSCOPE_302 10 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|11 2026-05-10 ETHOSCOPE_302 11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|12 2026-05-10 ETHOSCOPE_302 12 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|13 2026-05-10 ETHOSCOPE_302 13 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|14 2026-05-10 ETHOSCOPE_302 14 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|15 2026-05-10 ETHOSCOPE_302 15 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|16 2026-05-10 ETHOSCOPE_302 16 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|17 2026-05-10 ETHOSCOPE_302 17 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|18 2026-05-10 ETHOSCOPE_302 18 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|19 2026-05-10 ETHOSCOPE_302 19 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|20 2026-05-10 ETHOSCOPE_302 20 \n",
|
||
|
|
"\n",
|
||
|
|
" sleep_deprived species \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|01 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|02 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|03 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|04 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|05 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|06 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|07 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|08 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|09 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|10 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|11 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|12 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|13 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|14 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|15 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|16 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|17 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|18 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|19 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|02 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|03 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|04 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|05 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|06 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|07 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|08 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|09 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|10 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|11 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|12 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|13 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|14 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|15 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|16 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|17 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|18 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|19 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|20 True UAS_ChRmine_attP5 x 60D05_Gal4 \n",
|
||
|
|
"\n",
|
||
|
|
" food baseline sex time \n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|01 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|02 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|03 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|04 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|05 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|06 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|07 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|08 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|09 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|10 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|11 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|12 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|13 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|14 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|15 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|16 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|17 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|18 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|19 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 ATR 0 male 20-03-44 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|02 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|03 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|04 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|05 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|06 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|07 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|08 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|09 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|10 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|11 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|12 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|13 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|14 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|15 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|16 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|17 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|18 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|19 ATR 0 male 19-33-11 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|20 ATR 0 male 19-33-11 \n",
|
||
|
|
" ====== DATA ======\n",
|
||
|
|
"\n",
|
||
|
|
" t x y w \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 37990 104.882353 26.882353 29.235294 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 38000 82.825000 25.000000 28.450000 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 38010 41.731707 24.902439 11.292683 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 38020 35.000000 25.000000 8.000000 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 38030 35.000000 25.000000 8.000000 \n",
|
||
|
|
"... ... ... ... ... \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 464590 NaN NaN NaN \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 464600 108.000000 34.000000 31.000000 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 464610 151.933333 33.066667 35.133333 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 464620 430.888889 30.055556 63.833333 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 464630 451.947368 24.052632 58.421053 \n",
|
||
|
|
"\n",
|
||
|
|
" h phi max_velocity \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 14.235294 130.705882 112.948052 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 14.000000 104.725000 1.330083 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 6.512195 39.170732 11.638011 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 5.000000 18.000000 11.399315 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 5.000000 18.000000 11.399315 \n",
|
||
|
|
"... ... ... ... \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 NaN NaN NaN \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 10.200000 75.100000 11.191254 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 10.133333 65.000000 203.178966 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 6.333333 149.000000 29.571867 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 5.105263 9.315789 54.184959 \n",
|
||
|
|
"\n",
|
||
|
|
" mean_velocity dist has_interacted \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 11.500973 0.586550 0.0 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 0.812331 0.097480 0.0 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 10.005065 1.230623 0.0 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 11.399315 1.436314 0.0 \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 11.399315 1.402116 0.0 \n",
|
||
|
|
"... ... ... ... \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 NaN NaN NaN \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 7.258459 0.217754 0.0 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 33.002480 1.485112 0.0 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 5.502794 0.297151 0.0 \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 29.940530 1.706610 0.0 \n",
|
||
|
|
"\n",
|
||
|
|
" beam_cross moving micro walk \\\n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 0.0 True False True \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 0.0 True True False \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 0.0 True False True \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 0.0 True False True \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 0.0 True False True \n",
|
||
|
|
"... ... ... ... ... \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 NaN False NaN NaN \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 0.0 True False True \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 0.0 True False True \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 0.0 True False True \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 0.0 True False True \n",
|
||
|
|
"\n",
|
||
|
|
" is_interpolated asleep \n",
|
||
|
|
"id \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 False False \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 False False \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 False False \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 False False \n",
|
||
|
|
"2026-05-10_19-33-11_30232c|01 False False \n",
|
||
|
|
"... ... ... \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 True True \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 False False \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 False False \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 False False \n",
|
||
|
|
"2026-05-10_20-03-44_13005e|20 False False \n",
|
||
|
|
"\n",
|
||
|
|
"[1702361 rows x 16 columns]\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"df.display()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 29,
|
||
|
|
"id": "596ea36d-2ce7-4b10-904c-eb869eaae6ae",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"#define dead and/or escaped flies\n",
|
||
|
|
"dead_flies = ['2026-05-10_20-03-44_13005e|20', \n",
|
||
|
|
" '2026-05-10_19-33-11_30232c|06'\n",
|
||
|
|
" ]"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 30,
|
||
|
|
"id": "3e536fd1-fcae-4d5c-a8fb-b5b7ebc0be66",
|
||
|
|
"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 750x380 with 2 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"start_hour = 0\n",
|
||
|
|
"end_hour = 96\n",
|
||
|
|
"fig = df.remove('id', *dead_flies).t_filter(start_time=start_hour, end_time=end_hour).heatmap(variable = 'asleep')\n",
|
||
|
|
"fig.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 40,
|
||
|
|
"id": "5c084cf8-92d7-4579-8c93-cd761ed821f7",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stderr",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"Task was destroyed but it is pending!\n",
|
||
|
|
"task: <Task pending name='Task-314' 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-315' 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:266: RuntimeWarning: coroutine 'Kernel.shell_main' was never awaited\n",
|
||
|
|
" self._pickled_cids = set()\n",
|
||
|
|
"Task was destroyed but it is pending!\n",
|
||
|
|
"task: <Task pending name='Task-315' coro=<Kernel.shell_main() running at /srv/venv/lib/python3.12/site-packages/ipykernel/kernelbase.py:597> cb=[Task.task_wakeup()]>\n"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "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
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 1133.33x466.667 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"start_hour = 0\n",
|
||
|
|
"end_hour = 96\n",
|
||
|
|
"\n",
|
||
|
|
"# Generate plot from Ethoscopy\n",
|
||
|
|
"fig = df.remove('id', *dead_flies).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",
|
||
|
|
"# Add shading stimulus shading\n",
|
||
|
|
"# Draw a vertical span from ZT 48 to ZT 72\n",
|
||
|
|
"ax.axvspan(48, 72, color='#ff4c4c', alpha=0.3, zorder=1)\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(\"atr_60D_pulse.png\", dpi=600, bbox_inches='tight')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 32,
|
||
|
|
"id": "e17495bc-5b2e-427e-8a2c-2d744b91ecb4",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"--- Individual Fly Sleep (Baseline: 0h to 48h, Averaged per day) ---\n",
|
||
|
|
" Fly_Label Base_Sleep_24h Base_Day_12h Base_Night_12h\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 01 8.330556 4.204380 6.063889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 02 12.173611 6.252469 8.802778\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 03 10.338889 3.417526 8.497222\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 04 6.101389 2.692143 4.650000\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 05 7.873611 2.944611 6.286111\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 06 6.755556 4.423358 4.370833\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 07 9.901389 4.214684 7.629167\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 08 10.769444 4.382138 8.406944\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 09 9.006944 3.887505 6.911111\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 10 10.034722 4.972091 7.354167\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 11 9.383333 4.309278 7.061111\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 12 9.583333 3.408330 7.745833\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 13 11.769444 5.400644 8.859722\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 14 9.820833 6.928234 6.088889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 15 9.693056 4.338561 7.355556\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 16 9.266667 4.708208 6.730556\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 17 4.447222 1.889581 3.429167\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 18 5.704167 3.008378 4.083333\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 19 8.129167 1.185567 7.490278\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 01 5.820833 3.735592 3.727778\n",
|
||
|
|
"... (Showing first 20 rows)\n",
|
||
|
|
"\n",
|
||
|
|
"--- Grand Summary Statistics (Baseline: 0h to 48h) ---\n",
|
||
|
|
"Total Flies Analyzed: n = 38\n",
|
||
|
|
"\n",
|
||
|
|
"[ OVERALL SLEEP (Scaled to 24h Baseline Average) ]\n",
|
||
|
|
"Mean ± SEM: 8.78 ± 0.33 hours\n",
|
||
|
|
"Median: 9.11 hours\n",
|
||
|
|
"\n",
|
||
|
|
"[ DAY TIME (ZT 0-12, Averaged to 12h blocks) ]\n",
|
||
|
|
"Mean ± SEM: 3.80 ± 0.22 hours\n",
|
||
|
|
"Median: 4.14 hours\n",
|
||
|
|
"\n",
|
||
|
|
"[ NIGHT TIME (ZT 12-24, Averaged to 12h blocks) ]\n",
|
||
|
|
"Mean ± SEM: 6.69 ± 0.26 hours\n",
|
||
|
|
"Median: 6.98 hours\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# BASELINE\n",
|
||
|
|
"\n",
|
||
|
|
"# Define baseline time period\n",
|
||
|
|
"start_hour = 0\n",
|
||
|
|
"end_hour = 48\n",
|
||
|
|
"\n",
|
||
|
|
"# Filter the dataset to ONLY include data within specific baseline window\n",
|
||
|
|
"base_df = df.t_filter(start_time=start_hour, end_time=end_hour).copy()\n",
|
||
|
|
"\n",
|
||
|
|
"# Exclude dead flies\n",
|
||
|
|
"base_df = base_df[~base_df.index.get_level_values('id').isin(dead_flies)]\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate Overall 24h Baseline Average\n",
|
||
|
|
"sleep_hours = (base_df.groupby('id')['asleep'].sum() * 10) / 3600\n",
|
||
|
|
"\n",
|
||
|
|
"# (72 - 0) / 24 evaluates to exactly 3 days. \n",
|
||
|
|
"# Dividing total sleep by 3 to average the 72 hours into a single 24-hour metric\n",
|
||
|
|
"days_tracked = (end_hour - start_hour) / 24 \n",
|
||
|
|
"base_overall = (sleep_hours / days_tracked).reset_index(name='Base_Sleep_24h')\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate Day/Night 12h Baseline Averages\n",
|
||
|
|
"base_df['zt_hour'] = (base_df['t'] / 3600) % 24\n",
|
||
|
|
"base_df['Phase'] = np.where(base_df['zt_hour'] < 12, 'Day', 'Night')\n",
|
||
|
|
"\n",
|
||
|
|
"base_phase = base_df.groupby(['id', 'Phase']).agg(\n",
|
||
|
|
" total_sleep_epochs=('asleep', 'sum'),\n",
|
||
|
|
" total_tracking_epochs=('t', 'count')\n",
|
||
|
|
").reset_index()\n",
|
||
|
|
"\n",
|
||
|
|
"# Tracking_Hours will be ~24 for Day and ~24 for Night \n",
|
||
|
|
"# Dividing sleep by tracking hours and multiplying by 12 averages it to a single 12h block.\n",
|
||
|
|
"base_phase['Sleep_Hours'] = (base_phase['total_sleep_epochs'] * 10) / 3600\n",
|
||
|
|
"base_phase['Tracking_Hours'] = (base_phase['total_tracking_epochs'] * 10) / 3600\n",
|
||
|
|
"base_phase['Base_Sleep_12h'] = (base_phase['Sleep_Hours'] / base_phase['Tracking_Hours']) * 12\n",
|
||
|
|
"\n",
|
||
|
|
"base_pivot = base_phase.pivot(index='id', columns='Phase', values='Base_Sleep_12h').reset_index()\n",
|
||
|
|
"# Rename columns\n",
|
||
|
|
"base_pivot.columns = ['id', 'Base_Day_12h', 'Base_Night_12h']\n",
|
||
|
|
"\n",
|
||
|
|
"# Merge and clean up data\n",
|
||
|
|
"merged_df = pd.merge(base_overall, base_pivot, on='id')\n",
|
||
|
|
"\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",
|
||
|
|
"clean_table = merged_df.dropna(subset=['Machine']).sort_values(by=['Machine', 'Tube'])\n",
|
||
|
|
"baseline_stats = clean_table[['Fly_Label', 'Base_Sleep_24h', 'Base_Day_12h', 'Base_Night_12h']]\n",
|
||
|
|
"\n",
|
||
|
|
"# PRINT RESULTS\n",
|
||
|
|
"print(f\"--- Individual Fly Sleep (Baseline: {start_hour}h to {end_hour}h, Averaged per day) ---\")\n",
|
||
|
|
"print(baseline_stats.head(20).to_string(index=False)) \n",
|
||
|
|
"print(\"... (Showing first 20 rows)\\n\")\n",
|
||
|
|
"\n",
|
||
|
|
"print(f\"--- Grand Summary Statistics (Baseline: {start_hour}h to {end_hour}h) ---\")\n",
|
||
|
|
"print(f\"Total Flies Analyzed: n = {len(baseline_stats)}\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 1. OVERALL 24H STATS\n",
|
||
|
|
"print(\"\\n[ OVERALL SLEEP (Scaled to 24h Baseline Average) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {baseline_stats['Base_Sleep_24h'].mean():.2f} ± {baseline_stats['Base_Sleep_24h'].sem():.2f} hours\")\n",
|
||
|
|
"print(f\"Median: {baseline_stats['Base_Sleep_24h'].median():.2f} hours\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 2. DAY TIME STATS\n",
|
||
|
|
"print(f\"\\n[ DAY TIME (ZT 0-12, Averaged to 12h blocks) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {baseline_stats['Base_Day_12h'].mean():.2f} ± {baseline_stats['Base_Day_12h'].sem():.2f} hours\")\n",
|
||
|
|
"print(f\"Median: {baseline_stats['Base_Day_12h'].median():.2f} hours\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 3. NIGHT TIME STATS\n",
|
||
|
|
"print(f\"\\n[ NIGHT TIME (ZT 12-24, Averaged to 12h blocks) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {baseline_stats['Base_Night_12h'].mean():.2f} ± {baseline_stats['Base_Night_12h'].sem():.2f} hours\")\n",
|
||
|
|
"print(f\"Median: {baseline_stats['Base_Night_12h'].median():.2f} hours\")"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 33,
|
||
|
|
"id": "9e18111e-18d4-4001-8685-cc5f0e69170f",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"--- Individual Fly Sleep (Stimulus: 48h to 72h) ---\n",
|
||
|
|
" Fly_Label Stim_Sleep_24h Stim_Day_12h Stim_Night_12h\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 01 2.975000 2.286111 0.688889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 02 6.741667 3.083333 3.658333\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 03 1.472222 1.280556 0.191667\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 04 4.850000 1.758333 3.091667\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 05 1.886111 1.800000 0.086111\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 06 4.158333 2.783333 1.375000\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 07 3.380556 1.758333 1.622222\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 08 8.033333 4.669444 3.363889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 09 2.952778 2.863889 0.088889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 10 11.197222 5.591667 5.605556\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 11 4.472222 3.925000 0.547222\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 12 1.333333 0.000000 1.333333\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 13 9.127778 6.138889 2.988889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 14 1.886111 0.341667 1.544444\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 15 3.272222 1.908333 1.363889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 16 2.900000 2.505556 0.394444\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 17 7.744444 3.736111 4.008333\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 18 0.350000 0.183333 0.166667\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 19 0.727778 0.316667 0.411111\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 01 0.194444 0.000000 0.194444\n",
|
||
|
|
"... (Showing first 20 rows)\n",
|
||
|
|
"\n",
|
||
|
|
"--- Grand Summary Statistics (Stimulus: 48h to 72h) ---\n",
|
||
|
|
"Total Flies Analyzed: n = 38\n",
|
||
|
|
"\n",
|
||
|
|
"[ OVERALL SLEEP (24h Stimulus Block) ]\n",
|
||
|
|
"Mean ± SEM: 4.92 ± 0.59 hours\n",
|
||
|
|
"Median: 4.40 hours\n",
|
||
|
|
"\n",
|
||
|
|
"[ DAY TIME (ZT 0-12 during Stimulus) ]\n",
|
||
|
|
"Mean ± SEM: 2.34 ± 0.29 hours\n",
|
||
|
|
"Median: 2.27 hours\n",
|
||
|
|
"\n",
|
||
|
|
"[ NIGHT TIME (ZT 12-24 during Stimulus) ]\n",
|
||
|
|
"Mean ± SEM: 2.58 ± 0.36 hours\n",
|
||
|
|
"Median: 1.89 hours\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# Define stimulus time period\n",
|
||
|
|
"start_hour = 48\n",
|
||
|
|
"end_hour = 72\n",
|
||
|
|
"\n",
|
||
|
|
"# Filter the dataset to ONLY include data within specific stimulus window\n",
|
||
|
|
"stim_df = df.t_filter(start_time=start_hour, end_time=end_hour).copy()\n",
|
||
|
|
"\n",
|
||
|
|
"# Exclude dead flies\n",
|
||
|
|
"stim_df = stim_df[~stim_df.index.get_level_values('id').isin(dead_flies)]\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate Overall 24h Stimulus Average\n",
|
||
|
|
"sleep_hours = (stim_df.groupby('id')['asleep'].sum() * 10) / 3600\n",
|
||
|
|
"days_tracked = (end_hour - start_hour) / 24 \n",
|
||
|
|
"stim_overall = (sleep_hours / days_tracked).reset_index(name='Stim_Sleep_24h')\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate Day/Night 12h Stimulus Averages\n",
|
||
|
|
"stim_df['zt_hour'] = (stim_df['t'] / 3600) % 24\n",
|
||
|
|
"stim_df['Phase'] = np.where(stim_df['zt_hour'] < 12, 'Day', 'Night')\n",
|
||
|
|
"\n",
|
||
|
|
"stim_phase = stim_df.groupby(['id', 'Phase']).agg(\n",
|
||
|
|
" total_sleep_epochs=('asleep', 'sum'),\n",
|
||
|
|
" total_tracking_epochs=('t', 'count')\n",
|
||
|
|
").reset_index()\n",
|
||
|
|
"\n",
|
||
|
|
"# Tracking_Hours will now be ~12 for Day and ~12 for Night\n",
|
||
|
|
"# Dividing sleep by tracking hours and multiplying by 12 averages it to a single 12h block.\n",
|
||
|
|
"stim_phase['Sleep_Hours'] = (stim_phase['total_sleep_epochs'] * 10) / 3600\n",
|
||
|
|
"stim_phase['Tracking_Hours'] = (stim_phase['total_tracking_epochs'] * 10) / 3600\n",
|
||
|
|
"stim_phase['Stim_Sleep_12h'] = (stim_phase['Sleep_Hours'] / stim_phase['Tracking_Hours']) * 12\n",
|
||
|
|
"\n",
|
||
|
|
"stim_pivot = stim_phase.pivot(index='id', columns='Phase', values='Stim_Sleep_12h').reset_index()\n",
|
||
|
|
"# Rename columns \n",
|
||
|
|
"stim_pivot.columns = ['id', 'Stim_Day_12h', 'Stim_Night_12h']\n",
|
||
|
|
"\n",
|
||
|
|
"# Merge and clean up data\n",
|
||
|
|
"merged_df = pd.merge(stim_overall, stim_pivot, on='id')\n",
|
||
|
|
"\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",
|
||
|
|
"clean_table = merged_df.dropna(subset=['Machine']).sort_values(by=['Machine', 'Tube'])\n",
|
||
|
|
"stim_stats = clean_table[['Fly_Label', 'Stim_Sleep_24h', 'Stim_Day_12h', 'Stim_Night_12h']]\n",
|
||
|
|
"\n",
|
||
|
|
"# PRINT RESULTS\n",
|
||
|
|
"print(f\"--- Individual Fly Sleep (Stimulus: {start_hour}h to {end_hour}h) ---\")\n",
|
||
|
|
"print(stim_stats.head(20).to_string(index=False)) \n",
|
||
|
|
"print(\"... (Showing first 20 rows)\\n\")\n",
|
||
|
|
"\n",
|
||
|
|
"print(f\"--- Grand Summary Statistics (Stimulus: {start_hour}h to {end_hour}h) ---\")\n",
|
||
|
|
"print(f\"Total Flies Analyzed: n = {len(stim_stats)}\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 1. OVERALL 24H STATS\n",
|
||
|
|
"print(\"\\n[ OVERALL SLEEP (24h Stimulus Block) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {stim_stats['Stim_Sleep_24h'].mean():.2f} ± {stim_stats['Stim_Sleep_24h'].sem():.2f} hours\")\n",
|
||
|
|
"print(f\"Median: {stim_stats['Stim_Sleep_24h'].median():.2f} hours\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 2. DAY TIME STATS\n",
|
||
|
|
"print(f\"\\n[ DAY TIME (ZT 0-12 during Stimulus) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {stim_stats['Stim_Day_12h'].mean():.2f} ± {stim_stats['Stim_Day_12h'].sem():.2f} hours\")\n",
|
||
|
|
"print(f\"Median: {stim_stats['Stim_Day_12h'].median():.2f} hours\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 3. NIGHT TIME STATS\n",
|
||
|
|
"print(f\"\\n[ NIGHT TIME (ZT 12-24 during Stimulus) ]\")\n",
|
||
|
|
"print(f\"Mean ± SEM: {stim_stats['Stim_Night_12h'].mean():.2f} ± {stim_stats['Stim_Night_12h'].sem():.2f} hours\")\n",
|
||
|
|
"print(f\"Median: {stim_stats['Stim_Night_12h'].median():.2f} hours\")"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 34,
|
||
|
|
"id": "18d0e98f-6db2-4ffd-a20f-798737e82a06",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"\n",
|
||
|
|
"--- 24h Total Statistical Analysis ---\n",
|
||
|
|
"Shapiro-Wilk P-value (Normality of differences): 0.3132\n",
|
||
|
|
"Result: Data is normal. Used Paired T-test.\n",
|
||
|
|
"P-value: 1.7753e-08\n",
|
||
|
|
"Significance: ****\n",
|
||
|
|
"\n",
|
||
|
|
"--- Daytime Statistical Analysis ---\n",
|
||
|
|
"Shapiro-Wilk P-value (Normality of differences): 0.3388\n",
|
||
|
|
"Result: Data is normal. Used Paired T-test.\n",
|
||
|
|
"P-value: 1.2184e-05\n",
|
||
|
|
"Significance: ****\n",
|
||
|
|
"\n",
|
||
|
|
"--- Nighttime Statistical Analysis ---\n",
|
||
|
|
"Shapiro-Wilk P-value (Normality of differences): 0.2020\n",
|
||
|
|
"Result: Data is normal. Used Paired T-test.\n",
|
||
|
|
"P-value: 2.3083e-13\n",
|
||
|
|
"Significance: ****\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# STATISTICS\n",
|
||
|
|
"\n",
|
||
|
|
"# Merge Baseline and Stimulus data on Fly_Label\n",
|
||
|
|
"paired_df = pd.merge(baseline_stats, stim_stats, on='Fly_Label')\n",
|
||
|
|
"\n",
|
||
|
|
"def run_paired_stats(df, base_col, stim_col, label):\n",
|
||
|
|
" # Calculate the differences for the paired test\n",
|
||
|
|
" diffs = df[stim_col] - df[base_col]\n",
|
||
|
|
" \n",
|
||
|
|
" # 2. Shapiro-Wilk Test for Normality\n",
|
||
|
|
" _, p_shapiro = shapiro(diffs)\n",
|
||
|
|
" \n",
|
||
|
|
" print(f\"\\n--- {label} Statistical Analysis ---\")\n",
|
||
|
|
" print(f\"Shapiro-Wilk P-value (Normality of differences): {p_shapiro:.4f}\")\n",
|
||
|
|
" \n",
|
||
|
|
" # 3. Determine Test: If P > 0.05, data is normal (use t-test). If P < 0.05, use Wilcoxon.\n",
|
||
|
|
" if p_shapiro > 0.05:\n",
|
||
|
|
" stat, p_val = ttest_rel(df[base_col], df[stim_col])\n",
|
||
|
|
" print(f\"Result: Data is normal. Used Paired T-test.\")\n",
|
||
|
|
" else:\n",
|
||
|
|
" stat, p_val = wilcoxon(df[base_col], df[stim_col])\n",
|
||
|
|
" print(f\"Result: Data is not normal. Used Wilcoxon Signed-Rank test.\")\n",
|
||
|
|
" \n",
|
||
|
|
" print(f\"P-value: {p_val:.4e}\")\n",
|
||
|
|
" if p_val < 0.0001: print(\"Significance: ****\")\n",
|
||
|
|
" elif p_val < 0.001: print(\"Significance: ***\")\n",
|
||
|
|
" elif p_val < 0.01: print(\"Significance: **\")\n",
|
||
|
|
" elif p_val < 0.05: print(\"Significance: *\")\n",
|
||
|
|
" else: print(\"Significance: ns\")\n",
|
||
|
|
"\n",
|
||
|
|
"# Run for all three metrics\n",
|
||
|
|
"run_paired_stats(paired_df, 'Base_Sleep_24h', 'Stim_Sleep_24h', '24h Total')\n",
|
||
|
|
"run_paired_stats(paired_df, 'Base_Day_12h', 'Stim_Day_12h', 'Daytime')\n",
|
||
|
|
"run_paired_stats(paired_df, 'Base_Night_12h', 'Stim_Night_12h', 'Nighttime')"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 54,
|
||
|
|
"id": "52a71c00-97dd-4ef8-a7a6-1a6ea55f78b6",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"data": {
|
||
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqwAAAJICAYAAACkF7akAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAArDJJREFUeJzs3XlcVPX+P/DXzADDvoMgCAgiIioK7mui1y0tl6zUtMWlPdPqZt2+1b23utbNVluuaa4tlmkumam45L4jiggIsm/DPsAwMMvvD2N+jqDCMMMZZl7Px+M+Ludzzpx5YyO++JzPItJqtVoQEREREZkpsdAFEBERERHdCQMrEREREZk1BlYiIiIiMmsMrERERERk1hhYiYiIiMisMbASERERkVljYCUiIiIis8bASkRERERmjYGViIiIiMyajdAF3CwrKwtr1qzBxYsXkZaWhtDQUOzatUvvGoVCgS+//BK7d+9GSUkJ/Pz8MG3aNCxYsAA2Nmb17RARERGREZhVwktLS8Phw4cRHR0NjUaD5naN/de//oW9e/di6dKlCAsLQ0JCAj777DMoFAosWbJEgKqJiIiIyJRE2uZSoUA0Gg3E4hujFJYtW4bLly/r9bBqNBrExMRg/vz5eP7553Xtr776Ks6dO4f9+/e3e81EREREZFpmNYa1MazejlarhUqlgouLi167i4tLs72xRERERNTxmVVgvRuJRILp06dj06ZNSExMRE1NDY4fP47t27fjkUceEbo8IiIiIjIBsxrD2hJvvfUW3nrrLcycOVPX9uSTT+Lxxx+/4+vGjBlz23PFxcWIjo7Gpk2bjFYnERERERlHhwusH374IQ4dOoR33nkHISEhSEhIwBdffAFXV1csWLDAoHuq1WoUFBQYuVIiIiIiMoYOFVhTU1Px7bff4quvvkJcXBwAYMCAAVCpVPj000/x8MMPw9nZudnXxsfH3/a+d+p9JSIiIiJhdagxrNeuXQMAREZG6rX37NkT9fX1KCoqEqIsIiIiIjKhDhVYAwICAABJSUl67ZcvX4ZIJELnzp2FKIuIiIiITMishgQoFAocPnwYAJCXl4fq6mrs2bMHADBw4ED06tULvXr1wltvvYXS0lIEBQUhMTERq1atwowZM+Dg4CBk+URERERkAma1cUBubu5tx5Nu2LABgwYNgkwmw6efforjx4+jtLQUfn5+mDx5MhYuXAh7e3uD3rfxPe80zpWIiIiIhGFWgVUoDKxERERE5qtDjWElIiIiIuvDwEpEREREZo2BlYiIiIjMGgMrEREREZk1BlYiIiIiMmsMrERERERk1hhYiYiIiMisMbASERERkVljYCUiIiIis8bASkRERERmjYGViIiIiMwaAysRERERmTUGViIiIiIyawysRERERGTWGFiJiIiIyKwxsBIRERGRWWNgJSIiIiKzxsBKRERERGaNgZWIiIiIzBoDKxERERGZNQZWIiIiIjJrDKxEREREZNYYWImIiIjIrDGwEhEREZFZY2AlIiIiIrPGwEpEREREZo2BlYiIiIjMGgMrEREREZk1BlYiIiIiMmsMrERERERk1hhYiYiIiMisMbASERERkVljYCUiIiIis8bASkRERERmjYGViIiIiMwaAysRERERmTUGViIiIiIyawysRERERGTWGFiJiIiIyKwxsBIRERGRWWNgJSIiIiKzxsBKRERERGaNgZWIiIiIzBoDKxERERGZNQZWIiIiIjJrDKxEREREZNZshC7gZllZWVizZg0uXryItLQ0hIaGYteuXU2uq6qqwmeffYY9e/agsrISnTp1wuzZs/HEE08IUDURERERmZJZBda0tDQcPnwY0dHR0Gg00Gq1Ta6pra3F3LlzIZFI8Prrr8PLywuZmZmorq4WoGIiIiIiMjWzCqxxcXEYO3YsAGDZsmW4fPlyk2tWrVqFmpoa7NixA46OjgCAQYMGtWudRERERNR+zGoMq1h893K2bNmCGTNm6MIqEREREVk2swqsd5ObmwuZTAYPDw889dRT6NWrFwYOHIg33ngDNTU1QpdHRERERCZgVkMC7qakpAQA8P7772PcuHH45ptvkJmZiRUrVqC2thYfffTRbV87ZsyY254rKCiAv7+/0eslIiIiorbrUIFVo9EAALp27Yr3338fADBkyBDY2NjgjTfewJIlS9ClSxchSyQiIiIiI+tQgdXNzQ1A00lWgwcPBnBjlYHbBdb4+Pjb3vdOva9EREREJKwONYa1S5cusLOzu+15pVLZjtUQERERUXvoUIHVzs4Ow4YNw4kTJ/Tajx8/DgCIiooSoiwiIiIiMiGzGhKgUChw+PBhAEBeXh6qq6uxZ88eAMDAgQPh6emJ5557Dg8//DBeeuklTJs2DVlZWVixYgWmTJmCoKAgIcsnIiIiIhMQaZvbTkogubm5tx1PumHDBt3Y1RMnTuDDDz9Eamoq3NzcMGXKFCxZsuSOwwXupPE97zTOlYiIiIiEYVaBVSgMrERERETmq0ONYSUiIiIi68PASkRERERmjYGViIiIiMwaAysRERERmTUGViIiIiIyawysRERERGTWGFiJiIiIyKwxsBIRERGRWWNgJSIiIiKzxsBKRERERGaNgZWIiIiIzBoDKxERERGZNQZWIiIiIjJrDKxEREREZNYYWImIiIjIrDGwEhEREZFZY2AlIiIiIrPGwEpEREREZo2BlYiIiIjMGgMrEREREZk1BlYiIiIiMmsMrERERERk1hhYiYiIiMisMbASERERkVljYCUiIiIis8bASkRERERmjYGViIiIiMwaAysRERERmTUGViIiIiIyawysRERERGTWGFiJiIiIyKwxsBIRERGRWWNgJSIiIiKzxsBKRERERGaNgZWIiIiIzBoDKxERERGZNQZWIiIiIjJrDKxEREREZNYYWImIiIjIrDGwEhEREZFZY2AlIiIiIrPGwEpEREREZo2BlYiIiIjMGgMrEREREZk1BlYyilOnTmHZsmW3PR8XF3fH13/++efYunXrbc/n5uZi7ty5BtdHloGfM2ov/KwRmRcGVjKYXC5HQkJCk/aqqipcvHgRx48fh1qtbnL+yJEjAIDU1FQUFRU1OZ+RkYHc3FyoVCqcOHGiyXmlUonTp0+3/RugDoGfM2ov/KwRmS+zCqxZWVl48803cf/996Nnz56YPHnyHa/fv38/IiIi7nodmUZeXh5effVVvPPOO6itrQUA/PHHH5g2bRouXLiAn376CQ8++CCuXr0KAMjJycH8+fOxdu1a1NTUIDU1FQ899BB++OEHaLVaqFQqfPnll1i4cCFyc3NRUlKCDz74AC+99BLKysoA3Oj1mDZtGg4ePCjY903ti58zai/8rBGZL5FWq9UKXUSj/fv349///jeio6Nx/fp1aLVa7Nq1q9lr6+rqMGnSJCiVSnh4eNz2upYYM2YMACA+Pt7ge1ir+vp6bNy4EevWrUN1dTVGjRqFV155BQEBAQCAs2fP4r///S+SkpLQrVs3PP/887o/bwAoKyvDJ598gt9++w02NjZ4+OGH8eSTT8LR0REAoNFosG3bNvzvf/9DUVERYmNjsWzZMnTv3l2Q75eEwc8ZtRd+1ojMk1n1sMbFxeHw4cP47LPPEBUVdcdr//e//6Fz584YMWJEO1VHzRGJRBCLxRCJRLrjxq9vd3wrsVh82/ON97/d/cg68HNG7YWfNSLzZFaB9ea/xHeSnZ2NtWvX4o033jBxRXQnKSkpuO+++5CXl4d//vOfGD9+PMaPH4+5c+di/fr1eOmll/Dee+/h7bffhq+vLz7//HNs2rQJTzzxBGpqarB7927MmDED3bt3x6OPPoqXXnoJtra2mDJlCk6ePImioiI88MADOHr0KD788EP06dMHixYtwgsvvIAPPvhA6G+f2gk/Z9Re+FkjMmNaM/Xqq69q77333mbPLVq0SPvmm2/e9bqWiouL08bFxbXpHtaoqqpKe+HCBa1Wq9WePHlS++qrr2q1Wq22srJSm5CQoD169KhWpVJptVqtdvTo0brXHT58WKvVarUpKSnawsJCrVar1X722Wf
|
||
|
|
"text/plain": [
|
||
|
|
"<Figure size 700x600 with 1 Axes>"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
"metadata": {},
|
||
|
|
"output_type": "display_data"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"# 1. PREPARE DATA & CALCULATE STATS\n",
|
||
|
|
"combined = pd.merge(baseline_stats, stim_stats, on='Fly_Label')\n",
|
||
|
|
"\n",
|
||
|
|
"# Calculate the paired statistics for the brackets\n",
|
||
|
|
"p_values = {}\n",
|
||
|
|
"metrics = {\n",
|
||
|
|
" '24h': ('Base_Sleep_24h', 'Stim_Sleep_24h'),\n",
|
||
|
|
" 'Day': ('Base_Day_12h', 'Stim_Day_12h'),\n",
|
||
|
|
" 'Night': ('Base_Night_12h', 'Stim_Night_12h')\n",
|
||
|
|
"}\n",
|
||
|
|
"\n",
|
||
|
|
"for phase, (base_col, stim_col) in metrics.items():\n",
|
||
|
|
" diffs = combined[stim_col] - combined[base_col]\n",
|
||
|
|
" _, p_shapiro = shapiro(diffs)\n",
|
||
|
|
" \n",
|
||
|
|
" if p_shapiro > 0.05:\n",
|
||
|
|
" _, p_val = ttest_rel(combined[base_col], combined[stim_col])\n",
|
||
|
|
" else:\n",
|
||
|
|
" _, p_val = wilcoxon(combined[base_col], combined[stim_col])\n",
|
||
|
|
" p_values[phase] = p_val\n",
|
||
|
|
"\n",
|
||
|
|
"plot_df = combined.melt(id_vars=['Fly_Label'], var_name='Variable', value_name='Hours')\n",
|
||
|
|
"plot_df['Condition'] = plot_df['Variable'].apply(lambda x: '24h' if '24h' in x else ('Day' if 'Day' in x else 'Night'))\n",
|
||
|
|
"plot_df['State'] = plot_df['Variable'].apply(lambda x: 'Baseline' if 'Base' in x else 'Stimulus')\n",
|
||
|
|
"\n",
|
||
|
|
"# 2. GENERATE PLOT\n",
|
||
|
|
"plt.figure(figsize=(7, 6))\n",
|
||
|
|
"sns.set_theme(style=\"ticks\")\n",
|
||
|
|
"\n",
|
||
|
|
"order = ['24h', 'Day', 'Night']\n",
|
||
|
|
"hue_order = ['Baseline', 'Stimulus']\n",
|
||
|
|
"palette = {'Baseline': '#cccccc', 'Stimulus': '#ff4c4c'}\n",
|
||
|
|
"\n",
|
||
|
|
"# Boxplot\n",
|
||
|
|
"sns.boxplot(\n",
|
||
|
|
" data=plot_df, x='Condition', y='Hours', hue='State', \n",
|
||
|
|
" order=order, hue_order=hue_order, palette=palette,\n",
|
||
|
|
" width=0.6, gap=0.2, boxprops={'edgecolor': 'black', 'alpha': 0.7},\n",
|
||
|
|
" medianprops={'color': 'black', 'linewidth': 1.5}, showfliers=False\n",
|
||
|
|
")\n",
|
||
|
|
"\n",
|
||
|
|
"# Stripplot\n",
|
||
|
|
"sns.stripplot(\n",
|
||
|
|
" data=plot_df, x='Condition', y='Hours', hue='State', \n",
|
||
|
|
" order=order, hue_order=hue_order, dodge=True,\n",
|
||
|
|
" palette=['black', 'black'], alpha=0.5, size=4, jitter=0.05,\n",
|
||
|
|
" legend=False\n",
|
||
|
|
")\n",
|
||
|
|
"\n",
|
||
|
|
"# 3. ADD MEDIAN LABELS\n",
|
||
|
|
"ax = plt.gca()\n",
|
||
|
|
"medians = plot_df.groupby(['Condition', 'State'], sort=False)['Hours'].median()\n",
|
||
|
|
"\n",
|
||
|
|
"offsets = {'Baseline': -0.4, 'Stimulus': 0.4}\n",
|
||
|
|
"\n",
|
||
|
|
"for i, cond in enumerate(order):\n",
|
||
|
|
" for state in hue_order:\n",
|
||
|
|
" val = medians[(cond, state)]\n",
|
||
|
|
" ax.text(i + offsets[state], val, f\"{val:.1f}h\", \n",
|
||
|
|
" ha='center', va='bottom', fontsize=10)\n",
|
||
|
|
"\n",
|
||
|
|
"# 4. ADD SIGNIFICANCE BRACKETS\n",
|
||
|
|
"y_max = plot_df['Hours'].max()\n",
|
||
|
|
"y_line = y_max + 1.0 \n",
|
||
|
|
"h = 0.4 \n",
|
||
|
|
"\n",
|
||
|
|
"for i, cond in enumerate(order):\n",
|
||
|
|
" p = p_values[cond]\n",
|
||
|
|
" \n",
|
||
|
|
" if p < 0.0001: star = '****'\n",
|
||
|
|
" elif p < 0.001: star = '***'\n",
|
||
|
|
" elif p < 0.01: star = '**'\n",
|
||
|
|
" elif p < 0.05: star = '*'\n",
|
||
|
|
" else: star = 'ns'\n",
|
||
|
|
" \n",
|
||
|
|
" x1, x2 = i - 0.2, i + 0.2\n",
|
||
|
|
" plt.plot([x1, x1, x2, x2], [y_line, y_line+h, y_line+h, y_line], lw=1.5, c='k')\n",
|
||
|
|
" plt.text((x1+x2)*.5, y_line+h, star, ha='center', va='bottom', fontsize=12)\n",
|
||
|
|
"\n",
|
||
|
|
"# 5. FORMATTING\n",
|
||
|
|
"sns.despine()\n",
|
||
|
|
"plt.ylabel('Sleep Duration (Hours)', fontsize=12)\n",
|
||
|
|
"plt.xlabel('')\n",
|
||
|
|
"plt.xlim(-0.6, 2.5) \n",
|
||
|
|
"\n",
|
||
|
|
"plt.ylim(0, max(18, y_line + h + 1.5)) \n",
|
||
|
|
"\n",
|
||
|
|
"# Legend moved outside the plot to the right\n",
|
||
|
|
"plt.legend(title='', frameon=False, loc='center left', bbox_to_anchor=(1, 0.5))\n",
|
||
|
|
"plt.tight_layout()\n",
|
||
|
|
"\n",
|
||
|
|
"plt.savefig(\"plot_atr_60D_pulse.png\", dpi=600, bbox_inches='tight')\n",
|
||
|
|
"plt.show()"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 46,
|
||
|
|
"id": "83159d99-663d-4bed-a270-d58744697b60",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [
|
||
|
|
{
|
||
|
|
"name": "stdout",
|
||
|
|
"output_type": "stream",
|
||
|
|
"text": [
|
||
|
|
"--- Delta Sleep (Stimulus - Baseline) per Fly ---\n",
|
||
|
|
" Fly_Label Delta_24h Delta_Day Delta_Night\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 01 -5.355556 -1.918268 -5.375000\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 02 -5.431944 -3.169136 -5.144444\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 03 -8.866667 -2.136970 -8.305556\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 04 -1.251389 -0.933809 -1.558333\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 05 -5.987500 -1.144611 -6.200000\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 06 -2.597222 -1.640024 -2.995833\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 07 -6.520833 -2.456351 -6.006944\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 08 -2.736111 0.287306 -5.043056\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 09 -6.054167 -1.023616 -6.822222\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 10 1.162500 0.619576 -1.748611\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 11 -4.911111 -0.384278 -6.513889\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 12 -8.250000 -3.408330 -6.412500\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 13 -2.641667 0.738244 -5.870833\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 14 -7.934722 -6.586567 -4.544444\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 15 -6.420833 -2.430227 -5.991667\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 16 -6.366667 -2.202652 -6.336111\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 17 3.297222 1.846530 0.579167\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 18 -5.354167 -2.825045 -3.916667\n",
|
||
|
|
"ETHOSCOPE_130 - Fly 19 -7.401389 -0.868900 -7.079167\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 01 -5.626389 -3.735592 -3.533333\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 02 -2.469444 -1.103987 -3.059722\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 03 -5.173611 -0.460215 -4.959722\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 04 -0.930556 0.111704 -3.231944\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 05 -5.545833 -2.714315 -4.025000\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 07 -9.468056 -4.694898 -6.837500\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 08 1.900000 0.862354 -0.909722\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 09 -8.577778 -4.734559 -5.925000\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 10 -3.951389 -0.273420 -4.645833\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 11 -6.609722 -3.008856 -5.918056\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 12 1.312500 -0.742952 0.202778\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 13 -3.479167 -2.209806 -2.580556\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 14 -0.563889 -0.801971 -1.552778\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 15 -3.473611 -1.221051 -3.809722\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 16 1.912500 -0.453268 0.331944\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 17 -2.919444 -0.842370 -4.343056\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 18 0.127778 0.966598 -2.220833\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 19 -1.648611 -1.157461 -1.126389\n",
|
||
|
|
"ETHOSCOPE_302 - Fly 20 -1.713889 0.538269 -2.912500\n",
|
||
|
|
"\n",
|
||
|
|
"==================================================\n",
|
||
|
|
"\n",
|
||
|
|
"--- Average Change (Delta) across all flies ---\n",
|
||
|
|
"Delta_24h: -3.86 ± 0.54 hours\n",
|
||
|
|
"Delta_Day: -1.46 ± 0.29 hours\n",
|
||
|
|
"Delta_Night: -4.11 ± 0.37 hours\n"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"source": [
|
||
|
|
"#DELTA\n",
|
||
|
|
"\n",
|
||
|
|
"# 1. Ensure have the merged paired data\n",
|
||
|
|
"combined = pd.merge(baseline_stats, stim_stats, on='Fly_Label')\n",
|
||
|
|
"\n",
|
||
|
|
"# 2. Calculate the Delta (Stimulus - Baseline) for each fly\n",
|
||
|
|
"combined['Delta_24h'] = combined['Stim_Sleep_24h'] - combined['Base_Sleep_24h']\n",
|
||
|
|
"combined['Delta_Day'] = combined['Stim_Day_12h'] - combined['Base_Day_12h']\n",
|
||
|
|
"combined['Delta_Night'] = combined['Stim_Night_12h'] - combined['Base_Night_12h']\n",
|
||
|
|
"\n",
|
||
|
|
"# 3. Print the Delta for each individual fly\n",
|
||
|
|
"print(\"--- Delta Sleep (Stimulus - Baseline) per Fly ---\")\n",
|
||
|
|
"delta_table = combined[['Fly_Label', 'Delta_24h', 'Delta_Day', 'Delta_Night']]\n",
|
||
|
|
"print(delta_table.to_string(index=False))\n",
|
||
|
|
"print(\"\\n\" + \"=\"*50 + \"\\n\")\n",
|
||
|
|
"\n",
|
||
|
|
"# 4. Calculate and print the group averages\n",
|
||
|
|
"print(\"--- Average Change (Delta) across all flies ---\")\n",
|
||
|
|
"avg_delta = delta_table[['Delta_24h', 'Delta_Day', 'Delta_Night']].mean()\n",
|
||
|
|
"sem_delta = delta_table[['Delta_24h', 'Delta_Day', 'Delta_Night']].sem()\n",
|
||
|
|
"\n",
|
||
|
|
"for metric in ['Delta_24h', 'Delta_Day', 'Delta_Night']:\n",
|
||
|
|
" print(f\"{metric}: {avg_delta[metric]:.2f} ± {sem_delta[metric]:.2f} hours\")"
|
||
|
|
]
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"cell_type": "code",
|
||
|
|
"execution_count": 55,
|
||
|
|
"id": "9213acfd-7208-4f46-aa8a-a3561ad8fe66",
|
||
|
|
"metadata": {},
|
||
|
|
"outputs": [],
|
||
|
|
"source": [
|
||
|
|
"#export to csv\n",
|
||
|
|
"delta_table['Condition'] = 'Red'\n",
|
||
|
|
"delta_table.to_csv('delta_60D_phase7.csv', index=False)"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"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
|
||
|
|
}
|