From 62547f3f3ca803069005e659b91be1d5a83005d6 Mon Sep 17 00:00:00 2001 From: "j.niesser" Date: Mon, 4 Dec 2023 15:47:37 +0100 Subject: [PATCH] add additional example --- README.md | 2 +- ...Pipeline_with_larger_example_dataset.ipynb | 160 ++++++++++++++++++ ...model_selection_example_larger_dataset.png | Bin 0 -> 7583 bytes notebooks/pipeline_example.png | Bin 12791 -> 10611 bytes notebooks/pipeline_example_larger_dataset.png | Bin 0 -> 5697 bytes 5 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 notebooks/Ex3_Pipeline_with_larger_example_dataset.ipynb create mode 100644 notebooks/model_selection_example_larger_dataset.png create mode 100644 notebooks/pipeline_example_larger_dataset.png diff --git a/README.md b/README.md index b4f7d6e..1dfd094 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Since model selection is a computationally demanding and time consuming process, If an error occured in the middle of a batch run, then you can use the `pipeline_restart` function in the `pipeline` module to create a new batch which will analyze only those samples, which have not been analyzed previously. ### The model parameters don't converge and/or the fit does not describe the raw data well. -Check the separate file `How to adapt PeakPerformance to you data`. +Check the separate file `How to adapt PeakPerformance to your data`. # How to contribute If you encounter bugs while using PeakPerformance, please bring them to our attention by opening an issue. When doing so, describe the problem in detail and add screenshots/code snippets and whatever other helpful material you can provide. diff --git a/notebooks/Ex3_Pipeline_with_larger_example_dataset.ipynb b/notebooks/Ex3_Pipeline_with_larger_example_dataset.ipynb new file mode 100644 index 0000000..f81a984 --- /dev/null +++ b/notebooks/Ex3_Pipeline_with_larger_example_dataset.ipynb @@ -0,0 +1,160 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Example 3: Example with a larger experimental data set" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas\n", + "import numpy as np\n", + "import arviz as az\n", + "from pathlib import Path\n", + "from peak_performance import pipeline as pl" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## User information" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this example with a larger data set, the general paths within the `PeakPerformance` repository have already been formulated below (it is recommended to clone the repository on your local machine)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "path_raw_data = Path(\"..\") / \"example/example_larger_dataset\"\n", + "path_template = Path(\"..\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use the `prepare_model_selection()` function to create a copy of `Template.xlsx` in the directory stored in the `path_raw_data` variable. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "pl.prepare_model_selection(path_raw_data, path_template)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Automated model selection (optional)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Perform automated model selection with the following settings:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](model_selection_example_larger_dataset.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "result, model_dict = pl.model_selection(path_raw_data)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pipeline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Start the data analysis pipeline with the following settings:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](pipeline_example_larger_dataset.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = pl.pipeline(\n", + " path_raw_data = path_raw_data,\n", + " raw_data_file_format = \".npy\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pm530", + "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.10.12" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/model_selection_example_larger_dataset.png b/notebooks/model_selection_example_larger_dataset.png new file mode 100644 index 0000000000000000000000000000000000000000..2e656adc1f768c31e22657767a1ae7c375aff41e GIT binary patch literal 7583 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 A!TVT-{yJd|5y}&c)994?A}OzyeZtV+wqK(p}; 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� z^$Pzh3KbqvU&t9}kKjHDGc9x|nsdGJ)O?sI z2VFx=orj3_+nGzRRUB)h-Cre|0ku-x?r>M6J#z+fl)HS4jd)wc8~C^X-j3)Aq4oC9 z!=hZ_G^Vc zO(@_M4b-uPCe0@vh~K2qqI!C2o#{_L&DL6oXe7r9ni1l)P<19nql4iRJ#&HE2{fx$ zbyqV)SFn*G?;8Wq5Q*Ha`!M?cgXL~qxp2V;$n>&3+*pTLmH^d2_0!MIRliD8Lz$Si z0Y!(zztV5Sk^Rg`pL+Gzi}4QdW^FsNz2+RE6MYY~5~=T9dnlJOWIbeKL<&$qFUAAq z57lbRckUbKz{ADj6R9G0Yqg5B1!b>L9X0@#lM1~$g|8Vduu7@4cr!8m&Vi53^fjIF ziMrUVFL)@qhtuk({*`^$*;2maYUA)e#fYnjKrjzO=a+NQ@GdN>vPf@&vM)PZBB8_p zbcsEETY;6r#Qd^=3cvnP4M$$JDD`{eN#QsjrVZO&2x)i|V}K_A;5^uLawS#}@$K__ z!vyJXiQkYTpC$Y}RLm=*&Jb4uf|1gL4?=sHnC#UcDQdPHgI()VAPKgI1WG3$jGDvO}*uKc5mag}H0;ad=gS)LIGVDw*r29LXYzx=MzB_%Z#}Fm@oE@)s z-N;&w)EiCmbM=?^A3@w3>OvKBVz9AvX78%Y*~NR@sV)r;FIgzqG@e_-U>h7`rkXvU zJe1a;Vjt<`7HFs%HYvPSh8p&AK5fO3t645cnJE^mJp^Y9vXF`OT{{!k%&f%S03|tJ z5_p$|nz+ck1M--se=EXpllmWVCZCG!F!KcLUrjr`=ES${QJmpl8N%~B*eF*ew0{)S zU&o1y$JRA8gv1KQl78PFk)$&EqDhY`$a~39)RJV1)PnxEovoZu6t- zZ^YB!_RX}ycP0Y{KH6K)ILuwOal1?c%vV2QotP#g+8=v7GSqcGLO?OlSqG9aTDK9L zprv!#tF!Mr_6LR?t*0H@t|o+y%Gq{-;YLv)2)U5|FOKoKKEAx*ADg9hK_S*U+E@Hj z;f{$6yyu`Y|l|Gk<5>_lx~~w4}Iyk3W1g! zarW#FD1S$5J_EkN(k%llO~P{5tl;v|W$?Tz09PTmXU~7c0Rftg#clgG%ZMuwT{eaH z;U6U@Tga!xPW{Y%+Uv(rXE2zQSV8-4v3yW1gWy2@!;#5m9kF*NQb%s3XVV@5*2DP# zOST$o?4h&Jc*a6x1VQ%k^=m%WL1L+M30>iWZI`W7(~^?N5CD1q-V~@%Be$G- zHNa%gM{oh%>~Cui7*%<^;FT+}^y&K?^3ojzq!n&#Jop`>Y(c~=f6(}3t-5AT}@`bxp}|tqmL?;C}7rYu_SG6m&Ukl>m+)PVe*O$ zkV45@ojGcJW#zDa@Joiu39m5zS`F<)nalj9B93`;dHk&Ts4cg&9M+JpQ@;sc_vu@v zF2#Fy&!hbp{~2rT`hYzx-5bYqQqA?NE!WqP(j~(sO8+@Rhc}?U{jLHtD*A|6c&i*w1m`{UX{jwhdPq zdztS>{15q7)p>)MiYm@oyJYJ0H6MP5XiXAZprO4BLTflw}aQJjaH zy-xXeeb|g%e~#vNfhKx)!hpd9`|7qqxPp69)M!*6-B@9D5dx$Lh$o&AH|$UAna9>T z1*>irOCxpQm>NcEqvL7?U9_dIR@oVr2fo(xPS!XA{Uyg zXqs8NjA6{8jOC;J?%C&m=0caPlb(pbU)pUvXE`Ya+v;Fe z`*!JN8&=$}8iX2)8XZaWU6#}90~#Bv-(W~sSlD=TV7er(Qv2q%ZyJqfZb{5lTetrZ z`4-vI`AKPhlVkm{^`Rq{+hdbYJJz){0gygzI!1FIhW?n&+$GTdsEeEN>s^Vu?&qin z)hpK0g<-1FC5SttX!^(}_C>UYdKJ&22-Tu3G+%%7BZJVXXL2Ii)f;TdiVo)b`s2#P z_wF4HUyMH`&~gF`sBF~(-S4`jd^kPrP+7oM8s8aWvR<$D!ZcH`C-LlyB34;LH$&#< zL$~(j^$ckL%33$Zsc