From 3a31af37f0e5f769040f7c23327efd24fefc6b55 Mon Sep 17 00:00:00 2001 From: janeoa <5373400+janeoa@users.noreply.github.com> Date: Sat, 14 Mar 2026 11:48:48 +0100 Subject: [PATCH] init --- .gitignore | 209 ++++++++++ README.md | 16 + Tc pH assay siderite.xlsx | Bin 0 -> 31494 bytes hehe1.ipynb | 771 +++++++++++++++++++++++++++++++++++++ requirements.txt | 2 + 5 files changed, 998 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 Tc pH assay siderite.xlsx create mode 100644 hehe1.ipynb create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc18fb2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,209 @@ +# Created by https://www.toptal.com/developers/gitignore/api/macos,python +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,python + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### Python Patch ### +# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration +poetry.toml + +# ruff +.ruff_cache/ + +# LSP config files +pyrightconfig.json + +# End of https://www.toptal.com/developers/gitignore/api/macos,python diff --git a/README.md b/README.md new file mode 100644 index 0000000..e9a720c --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Setup + +Install dependencies: + +```bash +pip install -r requirements.txt +``` + +## Run + +Open the notebook in Jupyter: + +```bash +jupyter notebook +``` + diff --git a/Tc pH assay siderite.xlsx b/Tc pH assay siderite.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e5ff07a12f09c76c0a3b951c70548f3aeb1a264f GIT binary patch literal 31494 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� z7l2jwDE1wj7_;<6!R_oOTr=j17ZAImNA{CsSQgi2jouT7_O#S+Vhb5<`mGCss*-!~q zpK^aY$Jv9F+Pttw&e#04%J;0M?lN!j+eU4qwm{XD2C~~~vaNf934&?FuF&O|>321Q z=PtwL>6#BDQMP8vXirx$JB+|d`){6{ZL4(62VCj^AWx-0 zYi9!zu9gxs7e+Qh=V2<9F+)(`6fs)S%jB0hJX(A{_+92m$7&glxI0;MbabRvDESx5 zRG|z&h$=CdMBSQ>wb0^P_XI8HkQUB-fl$!ab_DAuwA_(Gk80*Ot2u;V)kvnUA7wEV zn#U`9;?!18qB_&W3c*b3Qua6ApQeeW&ArLqz%vS{oGz|FMJ;uF7MNIAnIj$T>V}1I zk!pC;B2gF<%g7U;25+5W1|cP{&FU&B!#A5jb(kR`ovseMfq!*x$vU~ee3dwb5fl;& zO724Rp$qlXwu==VQa^~SxDx)m<9M#4f=7!Bxs(sRTWp})3xMz!01y8U+pfF*;!JNK zPx)&a-hk2rt;_#jYW08qVgK{`FNIeXW&R29&#I39L-^};9{81iP2=xbdrkPd(%m1@ zM<90uE{MO^pL$LF&!Sa-NI^h80=2O~;=jK5?-2ib5wEKe{Xtp|3-Noy6_s{wG-qYfKH%795^I@Tq0kSzIKE7Lwc+B7wK!Kh}Q_O&24`WrgdJA z!M_^cUIV_iUi|@_)%{-p|Jbr#1HQHe{Q;cU`wjSa&i5~tq1Sk?tqp(h`V4;Ky|Oj@ ztL@=6=xgQHAJ8(>{|o4ERo83K*IWHRpyw99LI1Jwe@*>QS^f_#2#CB52*`g)_OHqR zDPjGc{MPPoP1iZT#DCilzD2OT5?XeF}v^sD#(0B}ep Ay8r+H literal 0 HcmV?d00001 diff --git a/hehe1.ipynb b/hehe1.ipynb new file mode 100644 index 0000000..95301b6 --- /dev/null +++ b/hehe1.ipynb @@ -0,0 +1,771 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f5257869", + "metadata": {}, + "source": [ + "# Step 1 is to import Data. \n", + "Seems like it is possible to import ur Excel directly:" + ] + }, + { + "cell_type": "markdown", + "id": "003d5178", + "metadata": {}, + "source": [ + "## Here are the import. Not that important" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "7594a3a3", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from dataclasses import dataclass\n", + "from datetime import date, datetime" + ] + }, + { + "cell_type": "markdown", + "id": "c276e1f8", + "metadata": {}, + "source": [ + "## Here is the data" + ] + }, + { + "cell_type": "markdown", + "id": "6ee960c6", + "metadata": {}, + "source": [ + "### \"LSC raw data\" sheet has two tables" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "87639af2-44c8-425f-bd0d-37348e1fbaa3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PositionSample_IDCPMEfficiencyDPM im VialBq im VialError 2S%Lumi %TDCR
0A01blank68.34NaNNaNNaN7.6534.0390.278
1A02Tc stock 10e-4M65636.100.97567331.401122.1900.2520.0190.972
2A03Tc_sid_20min_4a7069.880.9757250.55120.8420.7510.0730.972
3A04Tc_sid_20min_5a7887.320.9778075.90134.5980.7110.0690.974
4A05Tc_sid_20min_6a-17.610.8020.000.0008.8826.6630.757
\n", + "
" + ], + "text/plain": [ + " Position Sample_ID CPM Efficiency DPM im Vial Bq im Vial \\\n", + "0 A01 blank 68.34 NaN NaN NaN \n", + "1 A02 Tc stock 10e-4M 65636.10 0.975 67331.40 1122.190 \n", + "2 A03 Tc_sid_20min_4a 7069.88 0.975 7250.55 120.842 \n", + "3 A04 Tc_sid_20min_5a 7887.32 0.977 8075.90 134.598 \n", + "4 A05 Tc_sid_20min_6a -17.61 0.802 0.00 0.000 \n", + "\n", + " Error 2S% Lumi % TDCR \n", + "0 7.653 4.039 0.278 \n", + "1 0.252 0.019 0.972 \n", + "2 0.751 0.073 0.972 \n", + "3 0.711 0.069 0.974 \n", + "4 8.882 6.663 0.757 " + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LSC_raw_data_part1 = pd.read_excel(\"Tc pH assay siderite.xlsx\", sheet_name=\"LSC raw data\", nrows=14)\n", + "LSC_raw_data_part1.head()" + ] + }, + { + "cell_type": "markdown", + "id": "09585c9a", + "metadata": {}, + "source": [ + "The second table starts at 18th row, so I had to skip some rows and also the column A for table 2 is empty, so I did the `usecols` range" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "ba4cf093", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 1Unnamed: 2Unnamed: 3Unnamed: 4Unnamed: 5Unnamed: 6Unnamed: 7Unnamed: 8Unnamed: 9Unnamed: 10
0Sample_IDCPMEfficiencyDPM im VialLSC, mLTc aliquot, mLVial, Bq/mlSample, Bq/mlSample [99Tc], mMSample [99Tc], mM
1Tc stock 10e-4M65636.10.97567331.450.2215.8057695610.950.0895470.00009
\n", + "
" + ], + "text/plain": [ + " Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 \\\n", + "0 Sample_ID CPM Efficiency DPM im Vial LSC, mL \n", + "1 Tc stock 10e-4M 65636.1 0.975 67331.4 5 \n", + "\n", + " Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9 \\\n", + "0 Tc aliquot, mL Vial, Bq/ml Sample, Bq/ml Sample [99Tc], mM \n", + "1 0.2 215.805769 5610.95 0.089547 \n", + "\n", + " Unnamed: 10 \n", + "0 Sample [99Tc], mM \n", + "1 0.00009 " + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LSC_raw_data_part2 = pd.read_excel(\"Tc pH assay siderite.xlsx\", sheet_name=\"LSC raw data\",skiprows=16, usecols=\"B:K\")\n", + "LSC_raw_data_part2.head()" + ] + }, + { + "cell_type": "markdown", + "id": "9f781886", + "metadata": {}, + "source": [ + "### LSC data" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "0849ddc0", + "metadata": {}, + "outputs": [], + "source": [ + "@dataclass\n", + "class LSC_data:\n", + " description: str\n", + " measured_date: date\n", + " data_blank: pd.DataFrame = None\n", + " data_stock: pd.DataFrame = None\n", + " data_20min: pd.DataFrame = None" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "28c3d5a6", + "metadata": {}, + "outputs": [], + "source": [ + "LSC_data_TC_11_03_26 = LSC_data(\n", + " description=\"1E-5 M Tc with 1.3 g/L of siderite, after 30 min\",\n", + " measured_date=datetime.strptime(\"11.03.2026\", \"%d.%m.%Y\").date(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "d6ee04cb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PositionsSample IDcpmLSC, mL
0A01blank68.345
\n", + "
" + ], + "text/plain": [ + " Positions Sample ID cpm LSC, mL\n", + "0 A01 blank 68.34 5" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LSC_data_TC_11_03_26.data_blank = pd.read_excel(\"Tc pH assay siderite.xlsx\", sheet_name=\"LSC data\",nrows=1, skiprows=4, usecols=\"A:C, F\")\n", + "LSC_data_TC_11_03_26.data_blank" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "64965457", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PositionsSample IDcpmEfficiencyDPM in vialLSC, mLTc aliquot, mLVial, Bq/mlSample, Bq/mlSample [99Tc], MLSC waste, Bq/mLBq, solid waste
0A02Tc stock 10e-4M65636.10.97567331.450.2215.8057695610.950.00009215.80576928054.75
\n", + "
" + ], + "text/plain": [ + " Positions Sample ID cpm Efficiency DPM in vial LSC, mL \\\n", + "0 A02 Tc stock 10e-4M 65636.1 0.975 67331.4 5 \n", + "\n", + " Tc aliquot, mL Vial, Bq/ml Sample, Bq/ml Sample [99Tc], M \\\n", + "0 0.2 215.805769 5610.95 0.00009 \n", + "\n", + " LSC waste, Bq/mL Bq, solid waste \n", + "0 215.805769 28054.75 " + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LSC_data_TC_11_03_26.data_stock = pd.read_excel(\"Tc pH assay siderite.xlsx\", sheet_name=\"LSC data\", skiprows=[0,1,2,3,5], nrows=1)\n", + "LSC_data_TC_11_03_26.data_stock" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "6a867236", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PositionsSample IDcpmEfficiencyDPM in vialLSC, mLTc aliquot, mLVial, Bq/mlSample, Bq/mlSample [99Tc], MLSC waste, Bq/mLBq, solid waste
0A03Tc_sid_20min_4a7069.880.9757250.55050.223.238942604.2125009.642853e-0623.238942-215.587500
1A04Tc_sid_20min_5a7887.320.9778075.90050.225.884295672.9916671.074053e-0525.884295-559.483333
2A05Tc_sid_20min_6a-17.610.8020.00050.20.0000000.0000000.000000e+000.0000002805.475000
3A06Tc_sid_20min_6b1760.910.9701814.95050.25.817147151.2458332.413789e-065.8171472049.245833
4B01Tc_sid_20min_8a93.140.886105.15050.20.3370198.7625001.398440e-070.3370192761.662500
5B02Tc_sid_20min_8b425.420.900472.84850.21.51553839.4040006.288632e-071.5155382608.455000
6B03Tc_sid_20min_10a64.610.91870.41250.20.2256795.8676679.364429e-080.2256792776.136667
7B04Tc_sid_20min_10b-38.330.7910.00050.20.0000000.0000000.000000e+000.0000002805.475000
8B05Tc_sid_20min_12a205.380.930220.94450.20.70815418.4120002.938440e-070.7081542713.415000
9B06Tc_sid_20min_12b-30.530.7820.00050.20.0000000.0000000.000000e+000.0000002805.475000
\n", + "
" + ], + "text/plain": [ + " Positions Sample ID cpm Efficiency DPM in vial LSC, mL \\\n", + "0 A03 Tc_sid_20min_4a 7069.88 0.975 7250.550 5 \n", + "1 A04 Tc_sid_20min_5a 7887.32 0.977 8075.900 5 \n", + "2 A05 Tc_sid_20min_6a -17.61 0.802 0.000 5 \n", + "3 A06 Tc_sid_20min_6b 1760.91 0.970 1814.950 5 \n", + "4 B01 Tc_sid_20min_8a 93.14 0.886 105.150 5 \n", + "5 B02 Tc_sid_20min_8b 425.42 0.900 472.848 5 \n", + "6 B03 Tc_sid_20min_10a 64.61 0.918 70.412 5 \n", + "7 B04 Tc_sid_20min_10b -38.33 0.791 0.000 5 \n", + "8 B05 Tc_sid_20min_12a 205.38 0.930 220.944 5 \n", + "9 B06 Tc_sid_20min_12b -30.53 0.782 0.000 5 \n", + "\n", + " Tc aliquot, mL Vial, Bq/ml Sample, Bq/ml Sample [99Tc], M \\\n", + "0 0.2 23.238942 604.212500 9.642853e-06 \n", + "1 0.2 25.884295 672.991667 1.074053e-05 \n", + "2 0.2 0.000000 0.000000 0.000000e+00 \n", + "3 0.2 5.817147 151.245833 2.413789e-06 \n", + "4 0.2 0.337019 8.762500 1.398440e-07 \n", + "5 0.2 1.515538 39.404000 6.288632e-07 \n", + "6 0.2 0.225679 5.867667 9.364429e-08 \n", + "7 0.2 0.000000 0.000000 0.000000e+00 \n", + "8 0.2 0.708154 18.412000 2.938440e-07 \n", + "9 0.2 0.000000 0.000000 0.000000e+00 \n", + "\n", + " LSC waste, Bq/mL Bq, solid waste \n", + "0 23.238942 -215.587500 \n", + "1 25.884295 -559.483333 \n", + "2 0.000000 2805.475000 \n", + "3 5.817147 2049.245833 \n", + "4 0.337019 2761.662500 \n", + "5 1.515538 2608.455000 \n", + "6 0.225679 2776.136667 \n", + "7 0.000000 2805.475000 \n", + "8 0.708154 2713.415000 \n", + "9 0.000000 2805.475000 " + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LSC_data_TC_11_03_26.data_20min = pd.read_excel(\"Tc pH assay siderite.xlsx\", sheet_name=\"LSC data\",skiprows=[0,1,2,3,5,6], nrows=10)\n", + "LSC_data_TC_11_03_26.data_20min" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "ca670fd3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LSC waste, Bq/mL 57.726776\n", + "Bq, solid waste 20550.269167\n", + "dtype: float64" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "LSC_data_TC_11_03_26.data_20min[[\"LSC waste, Bq/mL\", \"Bq, solid waste\"]].sum()\n" + ] + }, + { + "cell_type": "markdown", + "id": "d01c706b", + "metadata": {}, + "source": [ + "# Step 2: Do data anal" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0bb6ad81", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d658c450", + "metadata": {}, + "source": [ + "# Step 3: Plot the data" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "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.14.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2f5b8d3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pandas +openpyxl \ No newline at end of file