From 85ea73ade8a55d535d38dbd4bfa3303d7b57d244 Mon Sep 17 00:00:00 2001 From: bolade Date: Wed, 22 Oct 2025 15:45:57 +0100 Subject: [PATCH] Refactor analysis notebook: comment out API calls and update CSV file handling; modify page 2 of report for content and structure adjustments --- analysis.ipynb | 201 +++++++++++++++++++---------------------- multi_page_report.pdf | Bin 2753942 -> 2754672 bytes report_gen/page_2.html | 74 +++++++++------ 3 files changed, 135 insertions(+), 140 deletions(-) diff --git a/analysis.ipynb b/analysis.ipynb index 9a63529..21fe407 100644 --- a/analysis.ipynb +++ b/analysis.ipynb @@ -2,102 +2,93 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "id": "b18c1027", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'id': 'gen-1759135172-DIhs7TMuaaVY0h3T2ibV', 'provider': 'Google', 'model': 'google/gemini-2.5-flash-lite', 'object': 'chat.completion', 'created': 1759135172, 'choices': [{'logprobs': None, 'finish_reason': 'stop', 'native_finish_reason': 'STOP', 'index': 0, 'message': {'role': 'assistant', 'content': 'Parameters,Best,LLN,Pred.,%Pred.,ZScore,PRE#1,PRE#2,PRE#3\\nFVC,L,4.24,3.03,3.79,112.0,0.95,4.24,4.17,4.15\\nFEV1,L,3.26,2.53,3.16,103.3,0.28,3.26,3.21,3.14\\nFEV1/FVC%,76.89,72.47,83.78,91.8,-1.05,76.9,77.0,75.7\\nPEF,L/m,684,222,384,178.7,-,444,438,684\\nFEF2575,L/s,2.74,2.15,3.42,80.2,-0.84,2.74,2.68,2.48\\nFEF25,L/s,6.08,-,-,-,6.08,6.0,5.53\\nFEF50,L/s,3.06,-,-,-,3.06,3.1,2.77\\nFEF75,L/s,1.06,0.71,1.41,75.1,-0.72,1.06,1.12,0.94\\nPEFTime,ms,-,-,79,-,79,49,39\\nEvol,mL,-,-,78.0,-,78.0,77.0,197.0\\nFEV6,L,4.22,3.03,3.79,111.4,-,4.22,4.17,4.13', 'refusal': None, 'reasoning': None}}], 'usage': {'prompt_tokens': 1350, 'completion_tokens': 454, 'total_tokens': 1804, 'prompt_tokens_details': {'cached_tokens': 0}, 'completion_tokens_details': {'reasoning_tokens': 0, 'image_tokens': 0}}}\n", - "Content saved to extracted_table.csv\n" - ] - } - ], + "outputs": [], "source": [ "\n", - "import requests\n", - "import json\n", - "import base64\n", - "from pathlib import Path\n", + "# import requests\n", + "# import json\n", + "# import base64\n", + "# from pathlib import Path\n", "\n", - "API_KEY_REF = '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'\n", - "def encode_pdf_to_base64(pdf_path):\n", - " with open(pdf_path, \"rb\") as pdf_file:\n", - " return base64.b64encode(pdf_file.read()).decode('utf-8')\n", + "# API_KEY_REF = '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'\n", + "# def encode_pdf_to_base64(pdf_path):\n", + "# with open(pdf_path, \"rb\") as pdf_file:\n", + "# return base64.b64encode(pdf_file.read()).decode('utf-8')\n", "\n", - "url = \"https://openrouter.ai/api/v1/chat/completions\"\n", - "headers = {\n", - " \"Authorization\": f\"Bearer {API_KEY_REF}\",\n", - " \"Content-Type\": \"application/json\"\n", - "}\n", + "# url = \"https://openrouter.ai/api/v1/chat/completions\"\n", + "# headers = {\n", + "# \"Authorization\": f\"Bearer {API_KEY_REF}\",\n", + "# \"Content-Type\": \"application/json\"\n", + "# }\n", "\n", - "# Read and encode the PDF\n", - "pdf_path = \"data/~Moran~K~19910201~Spirometry Exam~20250729~20250729032843.pdf\"\n", - "base64_pdf = encode_pdf_to_base64(pdf_path)\n", - "data_url = f\"data:application/pdf;base64,{base64_pdf}\"\n", + "# # Read and encode the PDF\n", + "# pdf_path = \"data/~Moran~K~19910201~Spirometry Exam~20250729~20250729032843.pdf\"\n", + "# base64_pdf = encode_pdf_to_base64(pdf_path)\n", + "# data_url = f\"data:application/pdf;base64,{base64_pdf}\"\n", "\n", - "messages = [\n", - " {\n", - " \"role\": \"user\",\n", - " \"content\": [\n", - " {\n", - " \"type\": \"text\",\n", - " \"text\": \"Please extract the Spirometry table from the pdf and return the values in csv format, \"\n", - " \"note that it is the unit of parameter that is beside it and it should not be a column. \"\n", - " \"The '-' Should be treated as empty values.\"\n", - " \"do not add 'csv' at the start or end of the response\"\n", - " },\n", - " {\n", - " \"type\": \"file\",\n", - " \"file\": {\n", - " \"filename\": \"document.pdf\",\n", - " \"file_data\": data_url\n", - " }\n", - " },\n", - " ]\n", - " }\n", - "]\n", + "# messages = [\n", + "# {\n", + "# \"role\": \"user\",\n", + "# \"content\": [\n", + "# {\n", + "# \"type\": \"text\",\n", + "# \"text\": \"Please extract the Spirometry table from the pdf and return the values in csv format, \"\n", + "# \"note that it is the unit of parameter that is beside it and it should not be a column. \"\n", + "# \"The '-' Should be treated as empty values.\"\n", + "# \"do not add 'csv' at the start or end of the response\"\n", + "# },\n", + "# {\n", + "# \"type\": \"file\",\n", + "# \"file\": {\n", + "# \"filename\": \"document.pdf\",\n", + "# \"file_data\": data_url\n", + "# }\n", + "# },\n", + "# ]\n", + "# }\n", + "# ]\n", "\n", - "# Optional: Configure PDF processing engine\n", - "# PDF parsing will still work even if the plugin is not explicitly set\n", - "plugins = [\n", - " {\n", - " \"id\": \"file-parser\",\n", - " \"pdf\": {\n", - " \"engine\": \"pdf-text\" # defaults to \"mistral-ocr\". See Pricing above\n", - " }\n", - " }\n", - "]\n", + "# # Optional: Configure PDF processing engine\n", + "# # PDF parsing will still work even if the plugin is not explicitly set\n", + "# plugins = [\n", + "# {\n", + "# \"id\": \"file-parser\",\n", + "# \"pdf\": {\n", + "# \"engine\": \"pdf-text\" # defaults to \"mistral-ocr\". See Pricing above\n", + "# }\n", + "# }\n", + "# ]\n", "\n", - "payload = {\n", - " \"model\": \"google/gemini-2.5-flash-lite\",\n", - " \"messages\": messages,\n", - "}\n", + "# payload = {\n", + "# \"model\": \"google/gemini-2.5-flash-lite\",\n", + "# \"messages\": messages,\n", + "# }\n", "\n", - "response = requests.post(url, headers=headers, json=payload)\n", - "# Get the response content\n", - "response_data = response.json()\n", - "print(response_data)\n", + "# response = requests.post(url, headers=headers, json=payload)\n", + "# # Get the response content\n", + "# response_data = response.json()\n", + "# print(response_data)\n", "\n", - "# Extract the content from the response\n", - "if 'choices' in response_data and len(response_data['choices']) > 0:\n", - " content = response_data['choices'][0]['message']['content']\n", + "# # Extract the content from the response\n", + "# if 'choices' in response_data and len(response_data['choices']) > 0:\n", + "# content = response_data['choices'][0]['message']['content']\n", " \n", - " # Save to a CSV file\n", - " output_file = \"extracted_table.csv\"\n", - " with open(output_file, 'w', encoding='utf-8') as f:\n", - " f.write(content)\n", + "# # Save to a CSV file\n", + "# output_file = \"extracted_table.csv\"\n", + "# with open(output_file, 'w', encoding='utf-8') as f:\n", + "# f.write(content)\n", " \n", - " print(f\"Content saved to {output_file}\")\n", - "else:\n", - " print(\"No content found in response\")" + "# print(f\"Content saved to {output_file}\")\n", + "# else:\n", + "# print(\"No content found in response\")" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "id": "56a9d655", "metadata": {}, "outputs": [ @@ -107,13 +98,13 @@ "text": [ "FVC Best: 4.24, FVC Pred: 112.0\n", "FEV1 Best: 3.26, FEV1 Pred: 103.3\n", - "FEV1/FVC% Best: 76.89, FEV1/FVC% Pred: 91.8\n" + "FEV1/FVC% Best: 76.9, FEV1/FVC% Pred: 91.8\n" ] } ], "source": [ "import pandas as pd\n", - "spirometry_df = pd.read_csv(\"extracted_table.csv\")\n", + "spirometry_df = pd.read_csv(\"data/spirometry_data.csv\")\n", "\n", "fvc_best = spirometry_df.loc[spirometry_df['Parameters'] == 'FVC', 'Best'].values[0]\n", "fvc_pred = spirometry_df.loc[spirometry_df['Parameters'] == 'FVC', '%Pred.'].values[0]\n", @@ -131,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, "id": "990f4b4f", "metadata": {}, "outputs": [ @@ -155,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 9, "id": "041cbc3d", "metadata": {}, "outputs": [ @@ -171,7 +162,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/tmp/ipykernel_301535/4157056299.py:3: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n", + "/tmp/ipykernel_69398/4157056299.py:3: FutureWarning: errors='ignore' is deprecated and will raise in a future version. Use to_numeric without passing `errors` and catch exceptions explicitly instead\n", " df = df.apply(pd.to_numeric, errors='ignore')\n" ] } @@ -204,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 10, "id": "de7cadd1", "metadata": {}, "outputs": [ @@ -223,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 11, "id": "cb972ed3", "metadata": {}, "outputs": [ @@ -320,7 +311,7 @@ "[1 rows x 147 columns]" ] }, - "execution_count": 24, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -334,7 +325,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 12, "id": "98d9295a", "metadata": {}, "outputs": [ @@ -354,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 13, "id": "cdfeb309", "metadata": {}, "outputs": [ @@ -418,7 +409,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 14, "id": "4420cfea", "metadata": {}, "outputs": [ @@ -476,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 15, "id": "62803668", "metadata": {}, "outputs": [ @@ -561,7 +552,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 16, "id": "07593b56", "metadata": {}, "outputs": [ @@ -572,8 +563,8 @@ "Zone 1 (Active Recovery): 81.7 - 96.7 bpm\n", "Zone 2 (Aerobic Base): 96.7 - 100.5 bpm\n", "Zone 3 (Aerobic): 100.5 - 179.7 bpm\n", - "Zone 4 (Lactate Threshold): 179.7 - 199.7 bpm\n", - "Zone 5 (VO2 Max): 199.7+ bpm\n" + "Zone 4 (Lactate Threshold): 179.7 - 189.7 bpm\n", + "Zone 5 (VO2 Max): 189.7 - 199.7 bpm\n" ] } ], @@ -582,7 +573,8 @@ "zone_2_start = optimal_row['HR(bpm)_smoothed']\n", "zone_3_start = vt1\n", "zone_4_start = vt2['HeartRate'] - 10\n", - "zone_5_start = vt2['HeartRate'] + 10\n", + "zone_5_start = vt2['HeartRate']\n", + "zone_5_end = vt2['HeartRate'] + 10\n", "\n", "zone_1_end = zone_2_start\n", "zone_2_end = vt1['HeartRate']\n", @@ -593,12 +585,12 @@ "print(f\"Zone 2 (Aerobic Base): {zone_2_start:.1f} - {zone_2_end:.1f} bpm\")\n", "print(f\"Zone 3 (Aerobic): {zone_3_start['HeartRate']:.1f} - {zone_3_end:.1f} bpm\")\n", "print(f\"Zone 4 (Lactate Threshold): {zone_4_start:.1f} - {zone_4_end:.1f} bpm\")\n", - "print(f\"Zone 5 (VO2 Max): {zone_5_start:.1f}+ bpm\")" + "print(f\"Zone 5 (VO2 Max): {zone_5_start:.1f} - {zone_5_end:.1f} bpm\")" ] }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 17, "id": "c90415b2", "metadata": {}, "outputs": [ @@ -661,7 +653,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 18, "id": "c3b2cc59", "metadata": {}, "outputs": [ @@ -750,7 +742,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "672d68f3", "metadata": {}, "outputs": [ @@ -779,18 +771,7 @@ "execution_count": null, "id": "fe3b7605", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [] } ], diff --git a/multi_page_report.pdf b/multi_page_report.pdf index 8736fd6956c7b547710a007dd799aab74fc69c39..8ef80b24e7655300f358467b67f630eba19b01ae 100644 GIT binary patch delta 18071 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

qq=v*{fBeuR}F^b-Gbm(avTK{v4ZH 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 delta 17314 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 REcg`=0F#kXT15u){{tx8z|a5y diff --git a/report_gen/page_2.html b/report_gen/page_2.html index 581b88f..cd6a407 100644 --- a/report_gen/page_2.html +++ b/report_gen/page_2.html @@ -1,7 +1,7 @@

-
+
-
+

@@ -12,12 +12,46 @@
+ +
+
+ 4 +
+
+

+ Nutrition Guidelines +

+

+ Ultrasound & Body Composition Assessment +

+

+ Resting Metabolic Rate Assessment +

+
+
+ + +
+
+ 6 +
+
+

+ Nutrition Recommendations +

+
+
+
- 3 + 7

@@ -37,10 +71,10 @@
- 4 + 8
-
-

+
+

Cardio Metrics

@@ -49,26 +83,12 @@

- -
-
- 5 -
-
-

- Fuel Utilization -

-
-
-
- 9 + 11

@@ -82,7 +102,7 @@
- 10 + 12

@@ -96,15 +116,12 @@
- 12 + 14

Next Steps

-
- -

@@ -113,15 +130,12 @@
- 13 + 15

Glossary

-
- -