From 43fa6de0680a2c1a10acf7b662bd2c02149c6e0d Mon Sep 17 00:00:00 2001 From: cyberosa Date: Thu, 21 Dec 2023 17:14:31 +0100 Subject: [PATCH] test 03 without external dependency --- dabest/_dabest_object.py | 4 +- nbs/API/dabest_object.ipynb | 4 +- nbs/tests/data/iris.csv | 302 ++++++------- nbs/tests/data/mocked_data_test_06.py | 56 +++ nbs/tests/data/mocked_data_test_08.py | 15 + nbs/tests/mpl_image_tests/test_03_plotting.py | 397 +++++++++--------- 6 files changed, 432 insertions(+), 346 deletions(-) create mode 100644 nbs/tests/data/mocked_data_test_06.py create mode 100644 nbs/tests/data/mocked_data_test_08.py diff --git a/dabest/_dabest_object.py b/dabest/_dabest_object.py index 5b1be4c8..37654adf 100644 --- a/dabest/_dabest_object.py +++ b/dabest/_dabest_object.py @@ -246,7 +246,7 @@ def __init__( err = "You have only specified `x`. Please also specify `y`." raise ValueError(err) - self.__plot_data = self.get_plot_data(x, y, all_plot_groups) + self.__plot_data = self._get_plot_data(x, y, all_plot_groups) self.__all_plot_groups = all_plot_groups # Check if `id_col` is valid @@ -533,7 +533,7 @@ def _all_plot_groups(self): """ return self.__all_plot_groups - def get_plot_data(self, x, y, all_plot_groups): + def _get_plot_data(self, x, y, all_plot_groups): """ Function to prepare some attributes for plotting """ diff --git a/nbs/API/dabest_object.ipynb b/nbs/API/dabest_object.ipynb index f53f5231..379cf31d 100644 --- a/nbs/API/dabest_object.ipynb +++ b/nbs/API/dabest_object.ipynb @@ -315,7 +315,7 @@ " err = \"You have only specified `x`. Please also specify `y`.\"\n", " raise ValueError(err)\n", "\n", - " self.__plot_data = self.get_plot_data(x, y, all_plot_groups)\n", + " self.__plot_data = self._get_plot_data(x, y, all_plot_groups)\n", " self.__all_plot_groups = all_plot_groups\n", "\n", " # Check if `id_col` is valid\n", @@ -602,7 +602,7 @@ " \"\"\"\n", " return self.__all_plot_groups\n", "\n", - " def get_plot_data(self, x, y, all_plot_groups):\n", + " def _get_plot_data(self, x, y, all_plot_groups):\n", " \"\"\"\n", " Function to prepare some attributes for plotting\n", " \"\"\"\n", diff --git a/nbs/tests/data/iris.csv b/nbs/tests/data/iris.csv index 80511dba..45d1b3b3 100644 --- a/nbs/tests/data/iris.csv +++ b/nbs/tests/data/iris.csv @@ -1,151 +1,151 @@ -sepal_length,sepal_width,petal_length,petal_width,species -5.1,3.5,1.4,0.2,setosa -4.9,3.0,1.4,0.2,setosa -4.7,3.2,1.3,0.2,setosa -4.6,3.1,1.5,0.2,setosa -5.0,3.6,1.4,0.2,setosa -5.4,3.9,1.7,0.4,setosa -4.6,3.4,1.4,0.3,setosa -5.0,3.4,1.5,0.2,setosa -4.4,2.9,1.4,0.2,setosa -4.9,3.1,1.5,0.1,setosa -5.4,3.7,1.5,0.2,setosa -4.8,3.4,1.6,0.2,setosa -4.8,3.0,1.4,0.1,setosa -4.3,3.0,1.1,0.1,setosa -5.8,4.0,1.2,0.2,setosa -5.7,4.4,1.5,0.4,setosa -5.4,3.9,1.3,0.4,setosa -5.1,3.5,1.4,0.3,setosa -5.7,3.8,1.7,0.3,setosa -5.1,3.8,1.5,0.3,setosa -5.4,3.4,1.7,0.2,setosa -5.1,3.7,1.5,0.4,setosa -4.6,3.6,1.0,0.2,setosa -5.1,3.3,1.7,0.5,setosa -4.8,3.4,1.9,0.2,setosa -5.0,3.0,1.6,0.2,setosa -5.0,3.4,1.6,0.4,setosa -5.2,3.5,1.5,0.2,setosa -5.2,3.4,1.4,0.2,setosa -4.7,3.2,1.6,0.2,setosa -4.8,3.1,1.6,0.2,setosa -5.4,3.4,1.5,0.4,setosa -5.2,4.1,1.5,0.1,setosa -5.5,4.2,1.4,0.2,setosa -4.9,3.1,1.5,0.2,setosa -5.0,3.2,1.2,0.2,setosa -5.5,3.5,1.3,0.2,setosa -4.9,3.6,1.4,0.1,setosa -4.4,3.0,1.3,0.2,setosa -5.1,3.4,1.5,0.2,setosa -5.0,3.5,1.3,0.3,setosa -4.5,2.3,1.3,0.3,setosa -4.4,3.2,1.3,0.2,setosa -5.0,3.5,1.6,0.6,setosa -5.1,3.8,1.9,0.4,setosa -4.8,3.0,1.4,0.3,setosa -5.1,3.8,1.6,0.2,setosa -4.6,3.2,1.4,0.2,setosa -5.3,3.7,1.5,0.2,setosa -5.0,3.3,1.4,0.2,setosa -7.0,3.2,4.7,1.4,versicolor -6.4,3.2,4.5,1.5,versicolor -6.9,3.1,4.9,1.5,versicolor -5.5,2.3,4.0,1.3,versicolor -6.5,2.8,4.6,1.5,versicolor -5.7,2.8,4.5,1.3,versicolor -6.3,3.3,4.7,1.6,versicolor -4.9,2.4,3.3,1.0,versicolor -6.6,2.9,4.6,1.3,versicolor -5.2,2.7,3.9,1.4,versicolor -5.0,2.0,3.5,1.0,versicolor -5.9,3.0,4.2,1.5,versicolor -6.0,2.2,4.0,1.0,versicolor -6.1,2.9,4.7,1.4,versicolor -5.6,2.9,3.6,1.3,versicolor -6.7,3.1,4.4,1.4,versicolor -5.6,3.0,4.5,1.5,versicolor -5.8,2.7,4.1,1.0,versicolor -6.2,2.2,4.5,1.5,versicolor -5.6,2.5,3.9,1.1,versicolor -5.9,3.2,4.8,1.8,versicolor -6.1,2.8,4.0,1.3,versicolor -6.3,2.5,4.9,1.5,versicolor -6.1,2.8,4.7,1.2,versicolor -6.4,2.9,4.3,1.3,versicolor -6.6,3.0,4.4,1.4,versicolor -6.8,2.8,4.8,1.4,versicolor -6.7,3.0,5.0,1.7,versicolor -6.0,2.9,4.5,1.5,versicolor -5.7,2.6,3.5,1.0,versicolor -5.5,2.4,3.8,1.1,versicolor -5.5,2.4,3.7,1.0,versicolor -5.8,2.7,3.9,1.2,versicolor -6.0,2.7,5.1,1.6,versicolor -5.4,3.0,4.5,1.5,versicolor -6.0,3.4,4.5,1.6,versicolor -6.7,3.1,4.7,1.5,versicolor -6.3,2.3,4.4,1.3,versicolor -5.6,3.0,4.1,1.3,versicolor -5.5,2.5,4.0,1.3,versicolor -5.5,2.6,4.4,1.2,versicolor -6.1,3.0,4.6,1.4,versicolor -5.8,2.6,4.0,1.2,versicolor -5.0,2.3,3.3,1.0,versicolor -5.6,2.7,4.2,1.3,versicolor -5.7,3.0,4.2,1.2,versicolor -5.7,2.9,4.2,1.3,versicolor -6.2,2.9,4.3,1.3,versicolor -5.1,2.5,3.0,1.1,versicolor -5.7,2.8,4.1,1.3,versicolor -6.3,3.3,6.0,2.5,virginica -5.8,2.7,5.1,1.9,virginica -7.1,3.0,5.9,2.1,virginica -6.3,2.9,5.6,1.8,virginica -6.5,3.0,5.8,2.2,virginica -7.6,3.0,6.6,2.1,virginica -4.9,2.5,4.5,1.7,virginica -7.3,2.9,6.3,1.8,virginica -6.7,2.5,5.8,1.8,virginica -7.2,3.6,6.1,2.5,virginica -6.5,3.2,5.1,2.0,virginica -6.4,2.7,5.3,1.9,virginica -6.8,3.0,5.5,2.1,virginica -5.7,2.5,5.0,2.0,virginica -5.8,2.8,5.1,2.4,virginica -6.4,3.2,5.3,2.3,virginica -6.5,3.0,5.5,1.8,virginica -7.7,3.8,6.7,2.2,virginica -7.7,2.6,6.9,2.3,virginica -6.0,2.2,5.0,1.5,virginica -6.9,3.2,5.7,2.3,virginica -5.6,2.8,4.9,2.0,virginica -7.7,2.8,6.7,2.0,virginica -6.3,2.7,4.9,1.8,virginica -6.7,3.3,5.7,2.1,virginica -7.2,3.2,6.0,1.8,virginica -6.2,2.8,4.8,1.8,virginica -6.1,3.0,4.9,1.8,virginica -6.4,2.8,5.6,2.1,virginica -7.2,3.0,5.8,1.6,virginica -7.4,2.8,6.1,1.9,virginica -7.9,3.8,6.4,2.0,virginica -6.4,2.8,5.6,2.2,virginica -6.3,2.8,5.1,1.5,virginica -6.1,2.6,5.6,1.4,virginica -7.7,3.0,6.1,2.3,virginica -6.3,3.4,5.6,2.4,virginica -6.4,3.1,5.5,1.8,virginica -6.0,3.0,4.8,1.8,virginica -6.9,3.1,5.4,2.1,virginica -6.7,3.1,5.6,2.4,virginica -6.9,3.1,5.1,2.3,virginica -5.8,2.7,5.1,1.9,virginica -6.8,3.2,5.9,2.3,virginica -6.7,3.3,5.7,2.5,virginica -6.7,3.0,5.2,2.3,virginica -6.3,2.5,5.0,1.9,virginica -6.5,3.0,5.2,2.0,virginica -6.2,3.4,5.4,2.3,virginica -5.9,3.0,5.1,1.8,virginica \ No newline at end of file +,sepal_length,sepal_width,petal_length,petal_width,species +0,5.1,3.5,1.4,0.2,setosa +1,4.9,3.0,1.4,0.2,setosa +2,4.7,3.2,1.3,0.2,setosa +3,4.6,3.1,1.5,0.2,setosa +4,5.0,3.6,1.4,0.2,setosa +5,5.4,3.9,1.7,0.4,setosa +6,4.6,3.4,1.4,0.3,setosa +7,5.0,3.4,1.5,0.2,setosa +8,4.4,2.9,1.4,0.2,setosa +9,4.9,3.1,1.5,0.1,setosa +10,5.4,3.7,1.5,0.2,setosa +11,4.8,3.4,1.6,0.2,setosa +12,4.8,3.0,1.4,0.1,setosa +13,4.3,3.0,1.1,0.1,setosa +14,5.8,4.0,1.2,0.2,setosa +15,5.7,4.4,1.5,0.4,setosa +16,5.4,3.9,1.3,0.4,setosa +17,5.1,3.5,1.4,0.3,setosa +18,5.7,3.8,1.7,0.3,setosa +19,5.1,3.8,1.5,0.3,setosa +20,5.4,3.4,1.7,0.2,setosa +21,5.1,3.7,1.5,0.4,setosa +22,4.6,3.6,1.0,0.2,setosa +23,5.1,3.3,1.7,0.5,setosa +24,4.8,3.4,1.9,0.2,setosa +25,5.0,3.0,1.6,0.2,setosa +26,5.0,3.4,1.6,0.4,setosa +27,5.2,3.5,1.5,0.2,setosa +28,5.2,3.4,1.4,0.2,setosa +29,4.7,3.2,1.6,0.2,setosa +30,4.8,3.1,1.6,0.2,setosa +31,5.4,3.4,1.5,0.4,setosa +32,5.2,4.1,1.5,0.1,setosa +33,5.5,4.2,1.4,0.2,setosa +34,4.9,3.1,1.5,0.2,setosa +35,5.0,3.2,1.2,0.2,setosa +36,5.5,3.5,1.3,0.2,setosa +37,4.9,3.6,1.4,0.1,setosa +38,4.4,3.0,1.3,0.2,setosa +39,5.1,3.4,1.5,0.2,setosa +40,5.0,3.5,1.3,0.3,setosa +41,4.5,2.3,1.3,0.3,setosa +42,4.4,3.2,1.3,0.2,setosa +43,5.0,3.5,1.6,0.6,setosa +44,5.1,3.8,1.9,0.4,setosa +45,4.8,3.0,1.4,0.3,setosa +46,5.1,3.8,1.6,0.2,setosa +47,4.6,3.2,1.4,0.2,setosa +48,5.3,3.7,1.5,0.2,setosa +49,5.0,3.3,1.4,0.2,setosa +50,7.0,3.2,4.7,1.4,versicolor +51,6.4,3.2,4.5,1.5,versicolor +52,6.9,3.1,4.9,1.5,versicolor +53,5.5,2.3,4.0,1.3,versicolor +54,6.5,2.8,4.6,1.5,versicolor +55,5.7,2.8,4.5,1.3,versicolor +56,6.3,3.3,4.7,1.6,versicolor +57,4.9,2.4,3.3,1.0,versicolor +58,6.6,2.9,4.6,1.3,versicolor +59,5.2,2.7,3.9,1.4,versicolor +60,5.0,2.0,3.5,1.0,versicolor +61,5.9,3.0,4.2,1.5,versicolor +62,6.0,2.2,4.0,1.0,versicolor +63,6.1,2.9,4.7,1.4,versicolor +64,5.6,2.9,3.6,1.3,versicolor +65,6.7,3.1,4.4,1.4,versicolor +66,5.6,3.0,4.5,1.5,versicolor +67,5.8,2.7,4.1,1.0,versicolor +68,6.2,2.2,4.5,1.5,versicolor +69,5.6,2.5,3.9,1.1,versicolor +70,5.9,3.2,4.8,1.8,versicolor +71,6.1,2.8,4.0,1.3,versicolor +72,6.3,2.5,4.9,1.5,versicolor +73,6.1,2.8,4.7,1.2,versicolor +74,6.4,2.9,4.3,1.3,versicolor +75,6.6,3.0,4.4,1.4,versicolor +76,6.8,2.8,4.8,1.4,versicolor +77,6.7,3.0,5.0,1.7,versicolor +78,6.0,2.9,4.5,1.5,versicolor +79,5.7,2.6,3.5,1.0,versicolor +80,5.5,2.4,3.8,1.1,versicolor +81,5.5,2.4,3.7,1.0,versicolor +82,5.8,2.7,3.9,1.2,versicolor +83,6.0,2.7,5.1,1.6,versicolor +84,5.4,3.0,4.5,1.5,versicolor +85,6.0,3.4,4.5,1.6,versicolor +86,6.7,3.1,4.7,1.5,versicolor +87,6.3,2.3,4.4,1.3,versicolor +88,5.6,3.0,4.1,1.3,versicolor +89,5.5,2.5,4.0,1.3,versicolor +90,5.5,2.6,4.4,1.2,versicolor +91,6.1,3.0,4.6,1.4,versicolor +92,5.8,2.6,4.0,1.2,versicolor +93,5.0,2.3,3.3,1.0,versicolor +94,5.6,2.7,4.2,1.3,versicolor +95,5.7,3.0,4.2,1.2,versicolor +96,5.7,2.9,4.2,1.3,versicolor +97,6.2,2.9,4.3,1.3,versicolor +98,5.1,2.5,3.0,1.1,versicolor +99,5.7,2.8,4.1,1.3,versicolor +100,6.3,3.3,6.0,2.5,virginica +101,5.8,2.7,5.1,1.9,virginica +102,7.1,3.0,5.9,2.1,virginica +103,6.3,2.9,5.6,1.8,virginica +104,6.5,3.0,5.8,2.2,virginica +105,7.6,3.0,6.6,2.1,virginica +106,4.9,2.5,4.5,1.7,virginica +107,7.3,2.9,6.3,1.8,virginica +108,6.7,2.5,5.8,1.8,virginica +109,7.2,3.6,6.1,2.5,virginica +110,6.5,3.2,5.1,2.0,virginica +111,6.4,2.7,5.3,1.9,virginica +112,6.8,3.0,5.5,2.1,virginica +113,5.7,2.5,5.0,2.0,virginica +114,5.8,2.8,5.1,2.4,virginica +115,6.4,3.2,5.3,2.3,virginica +116,6.5,3.0,5.5,1.8,virginica +117,7.7,3.8,6.7,2.2,virginica +118,7.7,2.6,6.9,2.3,virginica +119,6.0,2.2,5.0,1.5,virginica +120,6.9,3.2,5.7,2.3,virginica +121,5.6,2.8,4.9,2.0,virginica +122,7.7,2.8,6.7,2.0,virginica +123,6.3,2.7,4.9,1.8,virginica +124,6.7,3.3,5.7,2.1,virginica +125,7.2,3.2,6.0,1.8,virginica +126,6.2,2.8,4.8,1.8,virginica +127,6.1,3.0,4.9,1.8,virginica +128,6.4,2.8,5.6,2.1,virginica +129,7.2,3.0,5.8,1.6,virginica +130,7.4,2.8,6.1,1.9,virginica +131,7.9,3.8,6.4,2.0,virginica +132,6.4,2.8,5.6,2.2,virginica +133,6.3,2.8,5.1,1.5,virginica +134,6.1,2.6,5.6,1.4,virginica +135,7.7,3.0,6.1,2.3,virginica +136,6.3,3.4,5.6,2.4,virginica +137,6.4,3.1,5.5,1.8,virginica +138,6.0,3.0,4.8,1.8,virginica +139,6.9,3.1,5.4,2.1,virginica +140,6.7,3.1,5.6,2.4,virginica +141,6.9,3.1,5.1,2.3,virginica +142,5.8,2.7,5.1,1.9,virginica +143,6.8,3.2,5.9,2.3,virginica +144,6.7,3.3,5.7,2.5,virginica +145,6.7,3.0,5.2,2.3,virginica +146,6.3,2.5,5.0,1.9,virginica +147,6.5,3.0,5.2,2.0,virginica +148,6.2,3.4,5.4,2.3,virginica +149,5.9,3.0,5.1,1.8,virginica diff --git a/nbs/tests/data/mocked_data_test_06.py b/nbs/tests/data/mocked_data_test_06.py new file mode 100644 index 00000000..29470a3a --- /dev/null +++ b/nbs/tests/data/mocked_data_test_06.py @@ -0,0 +1,56 @@ +import pandas as pd +import numpy as np + + +# Data for tests. +# See: Asheber Abebe. Introduction to Design and Analysis of Experiments +# with the SAS, from Example: Two-way RM Design Pg 137. +# to remove the array wrapping behaviour of black +# fmt: off +hr = [72, 78, 71, 72, 66, 74, 62, 69, 69, 66, 84, 80, 72, 65, 75, 71, + 86, 83, 82, 83, 79, 83, 73, 75, 73, 62, 90, 81, 72, 62, 69, 70] +# fmt: on + +# Add experiment column +e1 = np.repeat("Treatment1", 8).tolist() +e2 = np.repeat("Control", 8).tolist() +experiment = e1 + e2 + e1 + e2 + +# Add a `Drug` column as the first variable +d1 = np.repeat("AX23", 8).tolist() +d2 = np.repeat("CONTROL", 8).tolist() +drug = d1 + d2 + d1 + d2 + +# Add a `Time` column as the second variable +t1 = np.repeat("T1", 16).tolist() +t2 = np.repeat("T2", 16).tolist() +time = t1 + t2 + +# Add an `id` column for paired data plotting. +id_col = [] +for i in range(1, 9): + id_col.append(str(i) + "a") +for i in range(1, 9): + id_col.append(str(i) + "c") +id_col.extend(id_col) + +# Combine samples and gender into a DataFrame. +df_test = pd.DataFrame( + { + "ID": id_col, + "Drug": drug, + "Time": time, + "Experiment": experiment, + "Heart Rate": hr, + } +) + + +df_test_control = df_test[df_test["Experiment"] == "Control"] +df_test_control = df_test_control.pivot(index="ID", columns="Time", values="Heart Rate") + + +df_test_treatment1 = df_test[df_test["Experiment"] == "Treatment1"] +df_test_treatment1 = df_test_treatment1.pivot( + index="ID", columns="Time", values="Heart Rate" +) diff --git a/nbs/tests/data/mocked_data_test_08.py b/nbs/tests/data/mocked_data_test_08.py new file mode 100644 index 00000000..99de0f11 --- /dev/null +++ b/nbs/tests/data/mocked_data_test_08.py @@ -0,0 +1,15 @@ +import pandas as pd + +# Data for tests. +# See Oehlert, G. W. (2000). A First Course in Design +# and Analysis of Experiments (1st ed.). W. H. Freeman. +# from Problem 16.3 Pg 444. + +rep1_yes = [53.4, 54.3, 55.9, 53.8, 56.3, 58.6] +rep1_no = [58.2, 60.4, 62.4, 59.5, 64.5, 64.5] +rep2_yes = [46.5, 57.2, 57.4, 51.1, 56.9, 60.2] +rep2_no = [49.2, 61.6, 57.2, 51.3, 66.8, 62.7] +df_mini_meta = pd.DataFrame( + {"Rep1_Yes": rep1_yes, "Rep1_No": rep1_no, "Rep2_Yes": rep2_yes, "Rep2_No": rep2_no} +) +N = 6 # Size of each group diff --git a/nbs/tests/mpl_image_tests/test_03_plotting.py b/nbs/tests/mpl_image_tests/test_03_plotting.py index 7311aec6..2374c6e1 100644 --- a/nbs/tests/mpl_image_tests/test_03_plotting.py +++ b/nbs/tests/mpl_image_tests/test_03_plotting.py @@ -3,7 +3,10 @@ from scipy.stats import norm import pandas as pd import matplotlib as mpl -mpl.use('Agg') +import os +from pathlib import Path + +mpl.use("Agg") import matplotlib.ticker as Ticker import matplotlib.pyplot as plt @@ -11,12 +14,11 @@ def create_demo_dataset(seed=9999, N=20): - import numpy as np import pandas as pd - from scipy.stats import norm # Used in generation of populations. + from scipy.stats import norm # Used in generation of populations. - np.random.seed(9999) # Fix the seed so the results are replicable. + np.random.seed(9999) # Fix the seed so the results are replicable. # pop_size = 10000 # Size of each population. # Create samples @@ -31,252 +33,283 @@ def create_demo_dataset(seed=9999, N=20): t5 = norm.rvs(loc=3.25, scale=0.4, size=N) t6 = norm.rvs(loc=3.25, scale=0.4, size=N) - # Add a `gender` column for coloring the data. - females = np.repeat('Female', N/2).tolist() - males = np.repeat('Male', N/2).tolist() + females = np.repeat("Female", N / 2).tolist() + males = np.repeat("Male", N / 2).tolist() gender = females + males - # Add an `id` column for paired data plotting. - id_col = pd.Series(range(1, N+1)) + # Add an `id` column for paired data plotting. + id_col = pd.Series(range(1, N + 1)) # Combine samples and gender into a DataFrame. - df = pd.DataFrame({'Control 1' : c1, 'Test 1' : t1, - 'Control 2' : c2, 'Test 2' : t2, - 'Control 3' : c3, 'Test 3' : t3, - 'Test 4' : t4, 'Test 5' : t5, 'Test 6' : t6, - 'Gender' : gender, 'ID' : id_col - }) - - return df -df = create_demo_dataset() - -two_groups_unpaired = load(df, idx=("Control 1", "Test 1")) - -two_groups_paired = load(df, idx=("Control 1", "Test 1"), - paired="baseline", id_col="ID") - -multi_2group = load(df, idx=(("Control 1", "Test 1",), - ("Control 2", "Test 2")) - ) + df = pd.DataFrame( + { + "Control 1": c1, + "Test 1": t1, + "Control 2": c2, + "Test 2": t2, + "Control 3": c3, + "Test 3": t3, + "Test 4": t4, + "Test 5": t5, + "Test 6": t6, + "Gender": gender, + "ID": id_col, + } + ) -multi_2group_paired = load(df, - idx=(("Control 1", "Test 1"), - ("Control 2", "Test 2")), - paired="baseline", id_col="ID") - -shared_control = load(df, idx=("Control 1", "Test 1", - "Test 2", "Test 3", - "Test 4", "Test 5", "Test 6") - ) + return df -multi_groups = load(df, idx=(("Control 1", "Test 1",), - ("Control 2", "Test 2","Test 3"), - ("Control 3", "Test 4","Test 5", "Test 6") - ) - ) -multi_groups_baseline = load(df, idx=(("Control 1", "Test 1",), - ("Control 2", "Test 2","Test 3"), - ("Control 3", "Test 4","Test 5", "Test 6") - ), paired="baseline", id_col="ID" - ) +df = create_demo_dataset() -multi_groups_sequential = load(df, idx=(("Control 1", "Test 1",), - ("Control 2", "Test 2","Test 3"), - ("Control 3", "Test 4","Test 5", "Test 6") - ), paired="sequential", id_col="ID" - ) +two_groups_unpaired = load(df, idx=("Control 1", "Test 1")) +two_groups_paired = load( + df, idx=("Control 1", "Test 1"), paired="baseline", id_col="ID" +) + +multi_2group = load( + df, + idx=( + ( + "Control 1", + "Test 1", + ), + ("Control 2", "Test 2"), + ), +) + +multi_2group_paired = load( + df, + idx=(("Control 1", "Test 1"), ("Control 2", "Test 2")), + paired="baseline", + id_col="ID", +) + +shared_control = load( + df, idx=("Control 1", "Test 1", "Test 2", "Test 3", "Test 4", "Test 5", "Test 6") +) + +multi_groups = load( + df, + idx=( + ( + "Control 1", + "Test 1", + ), + ("Control 2", "Test 2", "Test 3"), + ("Control 3", "Test 4", "Test 5", "Test 6"), + ), +) + +multi_groups_baseline = load( + df, + idx=( + ( + "Control 1", + "Test 1", + ), + ("Control 2", "Test 2", "Test 3"), + ("Control 3", "Test 4", "Test 5", "Test 6"), + ), + paired="baseline", + id_col="ID", +) + +multi_groups_sequential = load( + df, + idx=( + ( + "Control 1", + "Test 1", + ), + ("Control 2", "Test 2", "Test 3"), + ("Control 3", "Test 4", "Test 5", "Test 6"), + ), + paired="sequential", + id_col="ID", +) @pytest.mark.mpl_image_compare(tolerance=10) def test_01_gardner_altman_unpaired_meandiff(): - return two_groups_unpaired.mean_diff.plot(); - + return two_groups_unpaired.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_02_gardner_altman_unpaired_mediandiff(): - return two_groups_unpaired.median_diff.plot(); - + return two_groups_unpaired.median_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_03_gardner_altman_unpaired_hedges_g(): - return two_groups_unpaired.hedges_g.plot(); - + return two_groups_unpaired.hedges_g.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_04_gardner_altman_paired_meandiff(): - return two_groups_paired.mean_diff.plot(); - + return two_groups_paired.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_04_gardner_altman_paired_hedges_g(): - return two_groups_paired.hedges_g.plot(); - + return two_groups_paired.hedges_g.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_05_cummings_two_group_unpaired_meandiff(): - return two_groups_unpaired.mean_diff.plot(fig_size=(4, 6), - float_contrast=False); - + return two_groups_unpaired.mean_diff.plot(fig_size=(4, 6), float_contrast=False) @pytest.mark.mpl_image_compare(tolerance=10) def test_06_cummings_two_group_paired_meandiff(): - return two_groups_paired.mean_diff.plot(fig_size=(6, 6), - float_contrast=False); - + return two_groups_paired.mean_diff.plot(fig_size=(6, 6), float_contrast=False) @pytest.mark.mpl_image_compare(tolerance=10) def test_07_cummings_multi_group_unpaired(): - return multi_2group.mean_diff.plot(); - + return multi_2group.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_08_cummings_multi_group_paired(): - return multi_2group_paired.mean_diff.plot(fig_size=(6, 6)); - + return multi_2group_paired.mean_diff.plot(fig_size=(6, 6)) @pytest.mark.mpl_image_compare(tolerance=10) def test_09_cummings_shared_control(): - return shared_control.mean_diff.plot(); - + return shared_control.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_10_cummings_multi_groups(): - return multi_groups.mean_diff.plot(); - + return multi_groups.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_11_inset_plots(): - # TODO Better remove external dependencies in tests. Tests need to run locally without internet. - # Load the iris dataset. Requires internet access. - iris = pd.read_csv("https://github.com/mwaskom/seaborn-data/raw/master/iris.csv") - iris_melt = pd.melt(iris.reset_index(), - id_vars=["species", "index"], var_name="metric") - - + # Load the iris dataset. + try: + # parent directory of the current working directory + parent = Path(__file__).parent.parent.absolute() + # print(f"parent={parent}") + iris_path = os.path.join(str(parent), "data", "iris.csv") + # print(f"iris_path={iris_path}") + iris = pd.read_csv(iris_path) + print(iris.head()) + except Exception as e: + print(f"Error while loading the iris dataset. Reason {e}") + + iris_melt = pd.melt( + iris.reset_index(), id_vars=["species", "index"], var_name="metric" + ) # Load the above data into `dabest`. - iris_dabest1 = load(data=iris, x="species", y="petal_width", - idx=("setosa", "versicolor", "virginica")) - - iris_dabest2 = load(data=iris, x="species", y="sepal_width", - idx=("setosa", "versicolor")) - - iris_dabest3 = load(data=iris_melt[iris_melt.species=="setosa"], - x="metric", y="value", - idx=("sepal_length", "sepal_width"), - paired="baseline", id_col="index") - - + iris_dabest1 = load( + data=iris, + x="species", + y="petal_width", + idx=("setosa", "versicolor", "virginica"), + ) + + iris_dabest2 = load( + data=iris, x="species", y="sepal_width", idx=("setosa", "versicolor") + ) + + iris_dabest3 = load( + data=iris_melt[iris_melt.species == "setosa"], + x="metric", + y="value", + idx=("sepal_length", "sepal_width"), + paired="baseline", + id_col="index", + ) # Create Figure. - fig, ax = plt.subplots(nrows=2, ncols=2, - figsize=(15, 15), - gridspec_kw={"wspace":0.5}) + fig, ax = plt.subplots( + nrows=2, ncols=2, figsize=(15, 15), gridspec_kw={"wspace": 0.5} + ) - iris_dabest1.mean_diff.plot(ax=ax.flat[0]); + iris_dabest1.mean_diff.plot(ax=ax.flat[0]) - iris_dabest2.mean_diff.plot(ax=ax.flat[1]); + iris_dabest2.mean_diff.plot(ax=ax.flat[1]) - iris_dabest3.mean_diff.plot(ax=ax.flat[2]); + iris_dabest3.mean_diff.plot(ax=ax.flat[2]) - iris_dabest3.mean_diff.plot(ax=ax.flat[3], float_contrast=False); + iris_dabest3.mean_diff.plot(ax=ax.flat[3], float_contrast=False) return fig - @pytest.mark.mpl_image_compare(tolerance=10) def test_12_gardner_altman_ylabel(): - return two_groups_unpaired.mean_diff.plot(swarm_label="This is my\nrawdata", - contrast_label="The bootstrap\ndistribtions!"); - + return two_groups_unpaired.mean_diff.plot( + swarm_label="This is my\nrawdata", contrast_label="The bootstrap\ndistribtions!" + ) @pytest.mark.mpl_image_compare(tolerance=10) def test_13_multi_2group_color(): - return multi_2group.mean_diff.plot(color_col="Gender"); - + return multi_2group.mean_diff.plot(color_col="Gender") @pytest.mark.mpl_image_compare(tolerance=10) def test_14_gardner_altman_paired_color(): - return two_groups_paired.mean_diff.plot(fig_size=(6, 6), - color_col="Gender"); - + return two_groups_paired.mean_diff.plot(fig_size=(6, 6), color_col="Gender") @pytest.mark.mpl_image_compare(tolerance=10) def test_15_change_palette_a(): - return multi_2group.mean_diff.plot(fig_size=(8, 6), - color_col="Gender", - custom_palette="Dark2"); - + return multi_2group.mean_diff.plot( + fig_size=(8, 6), color_col="Gender", custom_palette="Dark2" + ) @pytest.mark.mpl_image_compare(tolerance=10) def test_16_change_palette_b(): - return multi_2group.mean_diff.plot(custom_palette="Paired"); + return multi_2group.mean_diff.plot(custom_palette="Paired") +my_color_palette = { + "Control 1": "blue", + "Test 1": "purple", + "Control 2": "#cb4b16", # This is a hex string. + "Test 2": (0.0, 0.7, 0.2), # This is a RGB tuple. +} -my_color_palette = {"Control 1" : "blue", - "Test 1" : "purple", - "Control 2" : "#cb4b16", # This is a hex string. - "Test 2" : (0., 0.7, 0.2) # This is a RGB tuple. - } @pytest.mark.mpl_image_compare(tolerance=10) def test_17_change_palette_c(): - return multi_2group.mean_diff.plot(custom_palette=my_color_palette); - + return multi_2group.mean_diff.plot(custom_palette=my_color_palette) @pytest.mark.mpl_image_compare(tolerance=10) def test_18_desat(): - return multi_2group.mean_diff.plot(custom_palette=my_color_palette, - swarm_desat=0.75, - halfviolin_desat=0.25); - + return multi_2group.mean_diff.plot( + custom_palette=my_color_palette, swarm_desat=0.75, halfviolin_desat=0.25 + ) @pytest.mark.mpl_image_compare(tolerance=10) def test_19_dot_sizes(): - return multi_2group.mean_diff.plot(raw_marker_size=3, - es_marker_size=12); - + return multi_2group.mean_diff.plot(raw_marker_size=3, es_marker_size=12) @pytest.mark.mpl_image_compare(tolerance=10) def test_20_change_ylims(): - return multi_2group.mean_diff.plot(swarm_ylim=(0, 5), - contrast_ylim=(-2, 2)); - + return multi_2group.mean_diff.plot(swarm_ylim=(0, 5), contrast_ylim=(-2, 2)) @pytest.mark.mpl_image_compare(tolerance=10) def test_21_invert_ylim(): - return multi_2group.mean_diff.plot(contrast_ylim=(2, -2), - contrast_label="More negative is better!"); - + return multi_2group.mean_diff.plot( + contrast_ylim=(2, -2), contrast_label="More negative is better!" + ) @pytest.mark.mpl_image_compare(tolerance=10) def test_22_ticker_gardner_altman(): - f = two_groups_unpaired.mean_diff.plot() rawswarm_axes = f.axes[0] @@ -291,11 +324,9 @@ def test_22_ticker_gardner_altman(): return f - @pytest.mark.mpl_image_compare(tolerance=10) def test_23_ticker_cumming(): - f = multi_2group.mean_diff.plot(swarm_ylim=(0,6), - contrast_ylim=(-3, 1)) + f = multi_2group.mean_diff.plot(swarm_ylim=(0, 6), contrast_ylim=(-3, 1)) rawswarm_axes = f.axes[0] contrast_axes = f.axes[1] @@ -309,95 +340,79 @@ def test_23_ticker_cumming(): return f - np.random.seed(9999) Ns = [20, 10, 21, 20] -c1 = pd.DataFrame({'Control':norm.rvs(loc=3, scale=0.4, size=Ns[0])}) -t1 = pd.DataFrame({'Test 1': norm.rvs(loc=3.5, scale=0.5, size=Ns[1])}) -t2 = pd.DataFrame({'Test 2': norm.rvs(loc=2.5, scale=0.6, size=Ns[2])}) -t3 = pd.DataFrame({'Test 3': norm.rvs(loc=3, scale=0.75, size=Ns[3])}) -wide_df = pd.concat([c1, t1, t2, t3],axis=1) - +c1 = pd.DataFrame({"Control": norm.rvs(loc=3, scale=0.4, size=Ns[0])}) +t1 = pd.DataFrame({"Test 1": norm.rvs(loc=3.5, scale=0.5, size=Ns[1])}) +t2 = pd.DataFrame({"Test 2": norm.rvs(loc=2.5, scale=0.6, size=Ns[2])}) +t3 = pd.DataFrame({"Test 3": norm.rvs(loc=3, scale=0.75, size=Ns[3])}) +wide_df = pd.concat([c1, t1, t2, t3], axis=1) -long_df = pd.melt(wide_df, - value_vars=["Control", "Test 1", "Test 2", "Test 3"], - value_name="value", - var_name="group") -long_df['dummy'] = np.repeat(np.nan, len(long_df)) +long_df = pd.melt( + wide_df, + value_vars=["Control", "Test 1", "Test 2", "Test 3"], + value_name="value", + var_name="group", +) +long_df["dummy"] = np.repeat(np.nan, len(long_df)) @pytest.mark.mpl_image_compare(tolerance=10) def test_24_wide_df_nan(): + wide_df_dabest = load(wide_df, idx=("Control", "Test 1", "Test 2", "Test 3")) - wide_df_dabest = load(wide_df, - idx=("Control", "Test 1", "Test 2", "Test 3") - ) - - return wide_df_dabest.mean_diff.plot(); - + return wide_df_dabest.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_25_long_df_nan(): + long_df_dabest = load( + long_df, x="group", y="value", idx=("Control", "Test 1", "Test 2", "Test 3") + ) - long_df_dabest = load(long_df, x="group", y="value", - idx=("Control", "Test 1", "Test 2", "Test 3") - ) - - return long_df_dabest.mean_diff.plot(); - + return long_df_dabest.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) def test_26_slopegraph_kwargs(): - - return two_groups_paired.mean_diff.plot( - slopegraph_kwargs=dict(linestyle='dotted') - ); - + return two_groups_paired.mean_diff.plot(slopegraph_kwargs=dict(linestyle="dotted")) @pytest.mark.mpl_image_compare(tolerance=10) def test_27_gardner_altman_reflines_kwargs(): - - return two_groups_unpaired.mean_diff.plot( - reflines_kwargs=dict(linestyle='dotted') - ); - + return two_groups_unpaired.mean_diff.plot(reflines_kwargs=dict(linestyle="dotted")) @pytest.mark.mpl_image_compare(tolerance=10) def test_28_unpaired_cumming_reflines_kwargs(): - return two_groups_unpaired.mean_diff.plot( - fig_size=(12,10), - float_contrast=False, - reflines_kwargs=dict(linestyle='dotted', - linewidth=2), - contrast_ylim=(-1, 1) - ); - + fig_size=(12, 10), + float_contrast=False, + reflines_kwargs=dict(linestyle="dotted", linewidth=2), + contrast_ylim=(-1, 1), + ) @pytest.mark.mpl_image_compare(tolerance=10) def test_29_paired_cumming_slopegraph_reflines_kwargs(): + return two_groups_paired.mean_diff.plot( + float_contrast=False, + color_col="Gender", + slopegraph_kwargs=dict(linestyle="dotted"), + reflines_kwargs=dict(linestyle="dashed", linewidth=2), + contrast_ylim=(-1, 1), + ) - return two_groups_paired.mean_diff.plot(float_contrast=False, - color_col="Gender", - slopegraph_kwargs=dict(linestyle='dotted'), - reflines_kwargs=dict(linestyle='dashed', - linewidth=2), - contrast_ylim=(-1, 1) - ); @pytest.mark.mpl_image_compare(tolerance=10) def test_30_sequential_cumming_slopegraph(): - return multi_groups_sequential.mean_diff.plot(); + return multi_groups_sequential.mean_diff.plot() + @pytest.mark.mpl_image_compare(tolerance=10) def test_31_baseline_cumming_slopegraph(): - return multi_groups_baseline.mean_diff.plot(); + return multi_groups_baseline.mean_diff.plot() @pytest.mark.mpl_image_compare(tolerance=10) @@ -405,4 +420,4 @@ def test_99_style_sheets(): # Perform this test last so we don't have to reset the plot style. plt.style.use("dark_background") - return multi_2group.mean_diff.plot(); \ No newline at end of file + return multi_2group.mean_diff.plot()