Files
bio-performx/notebook.ipynb
T

155 lines
133 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "code",
"execution_count": 19,
"id": "63f43af5",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "b0ee2af1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['T(sec)', 'PHASE', 'HR(bpm)', 'VO2(ml/min)', 'VCO2(ml/min)', 'RER',\n",
" 'VE(l/min)', 'FEO2', 'FECO2', 'FETO2', 'FETCO2', 'PETO2 (mmHg)',\n",
" 'PETCO2(mmHg)', 'FIO2', 'FICO2', 'VT(l)', 'BF(bpm)', 'EE(kcal/day)',\n",
" 'EE(kcal/min)', 'CARBS(kcal)', 'CARBS(%)', 'FAT(kcal)', 'FAT(%)', 'MET',\n",
" 'CUMULATIVE EE(kcal)', 'BP(kPa)', 'Watts', 'Speed'],\n",
" dtype='object')"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('data/Pnoe_20250729_1550-Moran_Keirstyn.csv', delimiter=';')\n",
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "98da3827",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Phase transition times: [3.0, 54.0, 233.0, 1733.0]\n"
]
}
],
"source": [
"first_unique_phase = df.drop_duplicates(subset='PHASE')\n",
"phase_times = first_unique_phase['T(sec)'].tolist()\n",
"print(f\"Phase transition times: {phase_times}\")"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "ef8bc7ac",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABeAAAAHWCAYAAAAfLimnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXeYJFW9/t+qzjM9OW5OhA0ssOQkoCKgGBDBK6iABL1XzPfCFb1KUhFQMMBPQJRVEVRQZBVB8pJZ4uacd3Zy6uncFX5/VJ2qU9XVcTrM7Hw/z7MPzEx31+kKp0695z3vV1BVVQVBEARBEARBEARBEARBEARBECVFrHYDCIIgCIIgCIIgCIIgCIIgCOJAhAR4giAIgiAIgiAIgiAIgiAIgigDJMATBEEQBEEQBEEQBEEQBEEQRBkgAZ4gCIIgCIIgCIIgCIIgCIIgygAJ8ARBEARBEARBEARBEARBEARRBkiAJwiCIAiCIAiCIAiCIAiCIIgyQAI8QRAEQRAEQRAEQRAEQRAEQZQBEuAJgiAIgiAIgiAIgiAIgiAIogyQAE8QBEEQBEEQBEEQBEEQBEEQZYAEeIIgCIIgCIKYZAiCgOuvv77azSAIgiAIgiAIIgckwBMEQRAEQRCEjeXLl0MQBOOf2+3GjBkzcOmll6Krq6vazSsLr776Kq6//nqMjIxUuykEQRAEQRAEccDgrnYDCIIgCIIgCGKicuONN2LevHmIx+N4/fXXsXz5crz88stYt24d/H5/1doVi8Xgdpd2KP/qq6/ihhtuwKWXXorGxsaSfjZBEARBEARBTFVIgCcIgiAIgiCIDHz4wx/GMcccAwC44oor0NrailtuuQUrVqzApz/96aq1Kx/xPxKJoLa2tgKtyYyqqojH4wgEAlVtB0EQBEEQBEFUC4qgIQiCIAiCIIg8ed/73gcA2L59u/G7TZs24fzzz0dzczP8fj+OOeYYrFixwvK+VCqFG264AQcffDD8fj9aWlpwyimn4OmnnzZec+mllyIYDGLHjh0466yzUFtbi+nTp+PGG2+EqqqWz7NnwF9//fUQBAEbNmzARRddhKamJpxyyikAgDVr1uDSSy/F/Pnz4ff70dnZicsuuwyDg4OW91999dUAgHnz5hnRO7t27QIASJKEm266CQsWLIDP58PcuXPxne98B4lEwtKuuXPn4qMf/Sj+/e9/45hjjkEgEMA999yD0047DUcccYTjPj300ENx1lln5bP7CYIgCIIgCGLSQQ54giAIgiAIgsgTJkg3NTUBANavX4+TTz4ZM2bMwLe//W3U1tbiL3/5C84991z89a9/xSc/+UkAmsB9880344orrsBxxx2HUCiEt956C++88w4+9KEPGZ8vyzLOPvtsnHDCCbj11lvx5JNP4rrrroMkSbjxxhtztu+CCy7AwQcfjB/96EeGaP/0009jx44d+MIXvoDOzk6sX78e9957L9avX4/XX38dgiDgvPPOw5YtW/DQQw/hjjvuQGtrKwCgra0NgOb+/93vfofzzz8f//3f/4033ngDN998MzZu3IhHH33U0obNmzfjwgsvxJe+9CVceeWVOPTQQxEMBnHllVdi3bp1OOyww4zXvvnmm9iyZQv+7//+r8gjQhAEQRAEQRATGxLgCYIgCIIgCCIDo6OjGBgYQDwexxtvvIEbbrgBPp8PH/3oRwEAX//61zF79my8+eab8Pl8AIAvf/nLOOWUU/C///u/hgD/+OOP4yMf+QjuvfferNuLx+M4++yz8Ytf/ML4rI997GO45ZZb8LWvfc0QxjNxxBFH4MEHH7T87stf/jL++7//2/K7E044ARdeeCFefvllvO9978Phhx+Oo446Cg899BDOPfdczJ0713jt6tWr8bvf/Q5XXHEFfv3rXxuf2d7ejp/85Cd4/vnn8f73v994/bZt2/Dkk09aXO3Lli3DV7/6VTzwwAP48Y9/bPz+gQceQG1tLc4777ys34sgCIIgCIIgJisUQUMQBEEQBEEQGTjjjDPQ1taGWbNm4fzzz0dtbS1WrFiBmTNnYmhoCM899xw+/elPY2xsDAMDAxgYGMDg4CDOOussbN26FV1dXQCAxsZGrF+/Hlu3bs25za985SvG/wuCgK985StIJpN45plncr73P//zP9N+x+evx+NxDAwM4IQTTgAAvPPOOzk/81//+hcA4Fvf+pbl90zUf/zxxy2/nzdvXlqkTENDAz7xiU/goYceMpz5sizjz3/+M84999yqZ9UTBEEQBEEQRLkgAZ4gCIIgCIIgMnDXXXfh6aefxiOPPIKPfOQjGBgYMJzu27Ztg6qq+N73voe2tjbLv+uuuw4A0NfXBwC48cYbMTIygkMOOQRLly7F1VdfjTVr1qRtTxRFzJ8/3/K7Qw45BIAZf5ONefPmpf1uaGgIX//619HR0YFAIIC2tjbjdaOjozk/c/fu3RBFEQcddJDl952dnWhsbMTu3btztgEALr74YuzZswcvvfQSAOCZZ55Bb28vPv/5z+dsA0EQBEEQBEFMViiChiAIgiAIgiAycNxxx+GYY44BAJx77rk45ZRTcNFFF2Hz5s1QFAUA8D//8z8Zi4gy0frUU0/F9u3b8dhjj+Gpp57CfffdhzvuuAN33303rrjiipK1l3e7Mz796U/j1VdfxdVXX40jjzwSwWAQiqLg7LPPNr5DPgiCUHQbAOCss85CR0cHHnjgAZx66ql44IEH0NnZiTPOOCPvNhAEQRAEQRDEZIMEeIIgCIIgCILIA5fLhZtvvhnvf//7ceedd+Kyyy4DAHg8nrxE5ObmZnzhC1/AF77wBYTDYZx66qm4/vrrLQK8oijYsWOH4XoHgC1btgCAJZc9X4aHh/Hss8/ihhtuwPe//33j905ROJkE9jlz5kBRFGzduhWLFi0yft/b24uRkRHMmTMnr7a4XC5cdNFFWL58OW655Rb8/e9/x5VXXgmXy1XgtyIIgiAIgiCIyQNF0BAEQRAEQRBEnpx++uk47rjj8LOf/Qz19fU4/fTTcc8996C7uzvttf39/cb/Dw4OWv4WDAZx0EEHIZFIpL3vzjvvNP5fVVXceeed8Hg8+OAHP1hwe5m4zXLXGT/72c/SXsty2EdGRiy//8hHPuL4nttvvx0AcM455+Tdns9//vMYHh7Gl770JYTDYXzuc5/L+70EQRAEQRAEMRkhBzxBEARBEARBFMDVV1+NCy64AMuXL8ddd92FU045BUuXLsWVV16J+fPno7e3F6+99hr27duH1atXAwAWL16M008/HUcffTSam5vx1ltv4ZFHHrEUXAUAv9+PJ598EpdccgmOP/54PPHEE3j88cfxne98B21tbQW3tb6+HqeeeipuvfVWpFIpzJgxA0899RR27tyZ9tqjjz4aAPDd734Xn/nMZ+DxePCxj30MRxxxBC655BLce++9GBkZwWmnnYZVq1bhd7/7Hc4991y8//3vz7s9y5Ytw2GHHYaHH34YixYtwlFHHVXwdyIIgiAIgiCIyQQJ8ARBEARBEARRAOeddx4WLFiAn/zkJ7jyyivx1ltv4YYbbsDy5csxODiI9vZ2LFu2zBL58rWvfQ0rVqzAU089hUQigTlz5uAHP/gBrr76astnu1wuPPnkk/iv//ovXH311airq8N1111n+axCefDBB/HVr34Vd911F1RVxZlnnoknnngC06dPt7zu2GOPxU033YS7774bTz75JBRFwc6dO1FbW4v77rsP8+fPx/Lly/Hoo4+is7MT1157rVFsthAuvvhiXHPNNVR8lSAIgiAIgpgSCKp9PSpBEARBEARBEBXn0ksvxSOPPIJwOFztppSVn//85/jmN7+JXbt2Yfbs2dVuDkEQBEEQBEGUFcqAJwiCIAiCIAiiIqiqit/85jc47bTTSHwnCIIgCIIgpgQUQUMQBEEQBEEQRFmJRCJYsWIFnn/+eaxduxaPPfZYtZtEEARBEARBEBWBBHiCIAiCIAiCIMpKf38/LrroIjQ2NuI73/kOPv7xj1e7SQRBEARBEARRESgDniAIgiAIgiAIgiAIgiAIgiDKAGXAEwR
"text/plain": [
"<Figure size 1800x500 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(18, 5))\n",
"ax1 = plt.subplot()\n",
"\n",
"# Plot VT with step-like appearance\n",
"line1 = sns.lineplot(data=df, x='T(sec)', y='VT(l)', label='VT (L)')\n",
"ax1.set_xlabel('Time (sec)')\n",
"ax1.set_ylabel('VT (L)')\n",
"ax1.set_title('Respiratory')\n",
"ax1.grid(True, alpha=0.1)\n",
"\n",
"# Plot speed as step function on secondary y-axis\n",
"ax2 = ax1.twinx()\n",
"ax1.set_xticks(np.arange(0, df['T(sec)'].max() + 200, 200))\n",
"line2 = sns.lineplot(data=df, x='T(sec)', y='Speed', color='green', ax=ax2, \n",
" drawstyle='steps-post', linewidth=2, label='Speed')\n",
"ax2.set_ylabel('Speed')\n",
"\n",
"# Remove default legends first\n",
"ax1.get_legend().remove()\n",
"ax2.get_legend().remove()\n",
"\n",
"# Combine legends from both axes in the top left\n",
"lines1, labels1 = ax1.get_legend_handles_labels()\n",
"lines2, labels2 = ax2.get_legend_handles_labels()\n",
"ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')\n",
"\n",
"# Add colored background regions if you have phase information\n",
"ax1.axvspan(0, phase_times[1], alpha=0.2, color='lightblue')\n",
"ax1.axvspan(phase_times[1], phase_times[2], alpha=0.2, color='purple')\n",
"ax1.axvspan(phase_times[2], phase_times[3], alpha=0.2, color='lightgreen')\n",
"ax1.axvspan(phase_times[3], df['T(sec)'].max(), alpha=0.2, color='blue')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "241194e6",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "b7f4e117",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "report_generation",
"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
}