From 915066ed14e6915c0b598ccca48b39ab3a23701a Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Wed, 10 Jul 2024 23:45:21 +0200 Subject: [PATCH 01/22] starting Safety Signal (All drugs) --- docs/SymptomsCausedByDrugs/index.html | 229 ++++++++++++++++++ .../js/PageInitializer.js | 37 +++ .../js/PrrByKey2CsvConverter.js | 41 ++++ .../SymptomsCausedByDrugs/js/PrrByKeyTable.js | 109 +++++++++ .../js/PrrByKeyTableView.js | 44 ++++ .../js/PrrBySymptomTableView.js | 25 ++ .../js/PrrByVaccineProvider.js | 10 + .../js/PrrByVaccineTableView.js | 25 ++ src/HowBadIsMyBatch.ipynb | 139 +++++++++++ src/SymptomsCausedByVaccines/HtmlUtils.py | 4 +- 10 files changed, 662 insertions(+), 1 deletion(-) create mode 100644 docs/SymptomsCausedByDrugs/index.html create mode 100644 docs/SymptomsCausedByDrugs/js/PageInitializer.js create mode 100644 docs/SymptomsCausedByDrugs/js/PrrByKey2CsvConverter.js create mode 100644 docs/SymptomsCausedByDrugs/js/PrrByKeyTable.js create mode 100644 docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js create mode 100644 docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js create mode 100644 docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js create mode 100644 docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js diff --git a/docs/SymptomsCausedByDrugs/index.html b/docs/SymptomsCausedByDrugs/index.html new file mode 100644 index 00000000000..87fbd2148b0 --- /dev/null +++ b/docs/SymptomsCausedByDrugs/index.html @@ -0,0 +1,229 @@ + + + + + + + + + + Safety Signal (All drugs) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + +
+
+
+
+

Safety Signal (All drugs)

+ +
+
+
+
+
+
+
+

Worst Vaccines

+
+
+
+
+ + +
+ + + + + + + +
VaccineLower Confidence Limit of Proportional Reporting Ratio
+ +
+
+
+
+
+
+

Strongest Symptoms

+
+
+
+
+ + +
+ + + + + + + +
SymptomLower Confidence Limit of Proportional Reporting Ratio >= 2
+ +
+
+
+
+
+
+
+
+ + + +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/SymptomsCausedByDrugs/js/PageInitializer.js b/docs/SymptomsCausedByDrugs/js/PageInitializer.js new file mode 100644 index 00000000000..914e5b52283 --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PageInitializer.js @@ -0,0 +1,37 @@ +class PageInitializer { + + static initializePage({ symptom, vaccine }) { + PageInitializer.#configureSymptom(symptom); + PageInitializer.#configureVaccine(vaccine); + } + + static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton }) { + const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton); + PageInitializer.#initializeSelectElement( + { + selectElement: symptomSelectElement, + onValueSelected: symptom => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(symptom), + minimumInputLength: 4 + }); + } + + static #configureVaccine({ vaccineSelectElement, prrBySymptomTableElement, downloadPrrBySymptomTableButton }) { + const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton); + PageInitializer.#initializeSelectElement( + { + selectElement: vaccineSelectElement, + onValueSelected: vaccine => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(vaccine), + minimumInputLength: 0 + }); + } + + static #initializeSelectElement({ selectElement, onValueSelected, minimumInputLength }) { + selectElement.select2({ minimumInputLength: minimumInputLength }); + selectElement.on( + 'select2:select', + function (event) { + const value = event.params.data.id; + onValueSelected(value); + }); + } +} diff --git a/docs/SymptomsCausedByDrugs/js/PrrByKey2CsvConverter.js b/docs/SymptomsCausedByDrugs/js/PrrByKey2CsvConverter.js new file mode 100644 index 00000000000..65272b118b4 --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PrrByKey2CsvConverter.js @@ -0,0 +1,41 @@ +class PrrByKey2CsvConverter { + + static convertPrrByKey2Csv( + { + heading, + columns: { keyColumn, prrColumn }, + prrByKey + } + ) { + return heading + '\n\n' + + PrrByKey2CsvConverter.#convert2Csv( + { + prrByKey: PrrByKey2CsvConverter.#quoteKeys(prrByKey), + keyColumn: PrrByKey2CsvConverter.#quote(keyColumn), + prrColumn: PrrByKey2CsvConverter.#quote(prrColumn) + }); + } + + static #quoteKeys(prrByKey) { + return Object.fromEntries( + Object + .entries(prrByKey) + .map(([key, prr]) => [PrrByKey2CsvConverter.#quote(key), prr])) + } + + static #quote(str) { + return '"' + str + '"'; + } + + static #convert2Csv({ prrByKey, keyColumn, prrColumn }) { + const header = `${keyColumn},${prrColumn}`; + return `${header}\n${PrrByKey2CsvConverter.#convertDict2Csv(prrByKey)}`; + } + + static #convertDict2Csv(dict) { + return Object + .entries(dict) + .map(([key, value]) => `${key},${value}`) + .join('\n'); + } +} diff --git a/docs/SymptomsCausedByDrugs/js/PrrByKeyTable.js b/docs/SymptomsCausedByDrugs/js/PrrByKeyTable.js new file mode 100644 index 00000000000..ee0ac57e839 --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PrrByKeyTable.js @@ -0,0 +1,109 @@ +class PrrByKeyTable { + + #tableElement; + #table; + #sumPrrs; + #prrByKey; + #keyColumnName; + #prrColumnName; + #shallMarkRowIfPrrTooHigh; + + constructor({ tableElement, keyColumnName, prrColumnName, shallMarkRowIfPrrTooHigh }) { + this.#tableElement = tableElement; + this.#keyColumnName = keyColumnName; + this.#prrColumnName = prrColumnName; + this.#shallMarkRowIfPrrTooHigh = shallMarkRowIfPrrTooHigh; + } + + initialize() { + this.#table = this.#createEmptyTable(); + } + + display(prrByKey) { + this.#prrByKey = prrByKey; + const key_prr_pairs = Object.entries(prrByKey); + this.#setTableRows(key_prr_pairs); + } + + getDisplayedTableAsCsv(heading) { + return PrrByKey2CsvConverter.convertPrrByKey2Csv( + { + heading: heading, + columns: { + keyColumn: this.#keyColumnName, + prrColumn: this.#prrColumnName + }, + prrByKey: this.#prrByKey + }); + } + + #createEmptyTable() { + return this.#tableElement.DataTable( + { + search: + { + return: false + }, + processing: true, + deferRender: true, + order: [[this.#getColumnIndex(this.#prrColumnName), "desc"]], + columnDefs: + [ + { + searchable: false, + targets: [this.#getColumnIndex(this.#prrColumnName)] + }, + { + render: (prr, type, row, meta) => + (type === 'sort' || type === 'type') ? + parseFloat(prr) : + NumberWithBarElementFactory + .createNumberWithBarElement( + { + number: prr, + barLenInPercent: prr / this.#sumPrrs * 100 + }) + .outerHTML, + targets: [this.#getColumnIndex(this.#prrColumnName)] + } + ], + createdRow: (row, data) => { + if (this.#shallMarkRowIfPrrTooHigh) { + this.#markRowIfPrrTooHigh( + { + prr: data[this.#getColumnIndex(this.#prrColumnName)], + row: row + }); + } + } + }); + } + + #markRowIfPrrTooHigh({ prr, row }) { + if (prr >= 2.0) { + $(row).addClass('prrTooHigh'); + } + } + + #getColumnIndex(columnName) { + switch (columnName) { + case this.#keyColumnName: + return 0; + case this.#prrColumnName: + return 1; + } + } + + #setTableRows(key_prr_pairs) { + this.#sumPrrs = this.#getSumPrrs(key_prr_pairs); + this.#table + .clear() + .rows.add(key_prr_pairs) + .draw(); + } + + #getSumPrrs(key_prr_pairs) { + const prrs = key_prr_pairs.map(key_prr_pair => key_prr_pair[1]) + return Utils.sum(prrs); + } +} diff --git a/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js b/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js new file mode 100644 index 00000000000..9694a94125b --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js @@ -0,0 +1,44 @@ +class PrrByKeyTableView { + + #prrByKeyTable; + #downloadPrrByKeyTableButton; + #value; + #valueName; + #prrByKeyProvider; + + constructor(prrByKeyTable, downloadPrrByKeyTableButton, valueName, prrByKeyProvider) { + this.#prrByKeyTable = prrByKeyTable; + this.#prrByKeyTable.initialize(); + this.#initializeButton(downloadPrrByKeyTableButton); + this.#valueName = valueName; + this.#prrByKeyProvider = prrByKeyProvider; + } + + displayPrrByKeyTable4Value(value) { + UIUtils.disableButton(this.#downloadPrrByKeyTableButton); + this.#prrByKeyProvider(value) + .then(prrByKey => { + this.#value = value; + this.#prrByKeyTable.display(prrByKey); + UIUtils.enableButton(this.#downloadPrrByKeyTableButton); + }); + } + + #initializeButton(downloadPrrByKeyTableButton) { + this.#downloadPrrByKeyTableButton = downloadPrrByKeyTableButton; + UIUtils.disableButton(downloadPrrByKeyTableButton); + downloadPrrByKeyTableButton.addEventListener( + 'click', + () => this.#downloadPrrByKey()) + } + + #downloadPrrByKey() { + UIUtils.downloadUrlAsFilename( + window.URL.createObjectURL( + new Blob( + [this.#prrByKeyTable.getDisplayedTableAsCsv(`# ${this.#valueName}: ${this.#value}`)], + { type: 'text/csv' })), + this.#value + ); + } +} diff --git a/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js b/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js new file mode 100644 index 00000000000..e41f4d3c998 --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js @@ -0,0 +1,25 @@ +class PrrBySymptomTableView { + + #delegate; + + constructor(prrBySymptomTableElement, downloadPrrBySymptomTableButton) { + this.#delegate = new PrrByKeyTableView( + this.#createPrrBySymptomTable(prrBySymptomTableElement), + downloadPrrBySymptomTableButton, + 'Vaccine', + PrrByVaccineProvider.getPrrBySymptom); + } + + displayPrrBySymptomTable4Vaccine(vaccine) { + this.#delegate.displayPrrByKeyTable4Value(vaccine); + } + + #createPrrBySymptomTable(tableElement) { + return new PrrByKeyTable({ + tableElement: tableElement, + keyColumnName: 'Symptom', + prrColumnName: 'Lower Confidence Limit of Proportional Reporting Ratio >= 2', + shallMarkRowIfPrrTooHigh: false + }); + } +} diff --git a/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js b/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js new file mode 100644 index 00000000000..5f7cff61a54 --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js @@ -0,0 +1,10 @@ +class PrrByVaccineProvider { + + static getPrrByVaccine(symptom) { + return fetch(`./data/ProportionalReportingRatios/symptoms/${symptom}.json`).then(response => response.json()); + } + + static getPrrBySymptom(vaccine) { + return fetch(`./data/ProportionalReportingRatios/vaccines/${vaccine}.json`).then(response => response.json()); + } +} \ No newline at end of file diff --git a/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js b/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js new file mode 100644 index 00000000000..bd55ea1792e --- /dev/null +++ b/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js @@ -0,0 +1,25 @@ +class PrrByVaccineTableView { + + #delegate; + + constructor(prrByVaccineTableElement, downloadPrrByVaccineTableButton) { + this.#delegate = new PrrByKeyTableView( + this.#createPrrByVaccineTable(prrByVaccineTableElement), + downloadPrrByVaccineTableButton, + 'Symptom', + PrrByVaccineProvider.getPrrByVaccine); + } + + displayPrrByVaccineTable4Symptom(symptom) { + this.#delegate.displayPrrByKeyTable4Value(symptom); + } + + #createPrrByVaccineTable(tableElement) { + return new PrrByKeyTable({ + tableElement: tableElement, + keyColumnName: 'Vaccine', + prrColumnName: 'Lower Confidence Limit of Proportional Reporting Ratio', + shallMarkRowIfPrrTooHigh: true + }); + } +} diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 2e80d1ac257..3cda82b3f45 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -439,6 +439,145 @@ " lastUpdatedElementId = 'last_updated')" ] }, + { + "cell_type": "markdown", + "id": "6c302a04", + "metadata": {}, + "source": [ + "# Symptoms caused by Drugs (EudraVigilance)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb02ce7c", + "metadata": {}, + "outputs": [], + "source": [ + "from SymptomsCausedByVaccines.DataFrameFilter import DataFrameFilter\n", + "from SymptomsCausedByVaccines.HtmlUpdater import updateHtmlFile, updateHtmlFile4SymptomsCausedByCOVIDLots\n", + "from SymptomsCausedByVaccines.PrrSeriesFactory import PrrSeriesFactory\n", + "from SymptomsCausedByVaccines.PrrSeriesTransformer import PrrSeriesTransformer\n", + "from SymptomsCausedByVaccines.ProportionalReportingRatiosPersister import saveProportionalReportingRatios\n", + "import os\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ad05656", + "metadata": {}, + "outputs": [], + "source": [ + "prrByVaccineAndSymptom = pd.read_csv(\n", + " 'data/prrByDrugAndSymptom-EudraVigilance-10.csv',\n", + " index_col = 'DRUG')\n", + "prrByVaccineAndSymptom" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7aed1621", + "metadata": {}, + "outputs": [], + "source": [ + "prrByVaccineAndSymptom = DataFrameFilter.withoutZeroRowsAndZeroColumns(prrByVaccineAndSymptom)\n", + "prrByVaccineAndSymptom" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "588aaa2b", + "metadata": {}, + "outputs": [], + "source": [ + "prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", + "prrByVaccineBySymptom" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "379d9730", + "metadata": {}, + "outputs": [], + "source": [ + "prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", + "prrBySymptomByVaccine" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0cfd4c66", + "metadata": {}, + "outputs": [], + "source": [ + "prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", + "prrByVaccineBySymptomWithoutZeroPrrs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "86da9cb7", + "metadata": {}, + "outputs": [], + "source": [ + "prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterPrrs(prrBySymptomByVaccine, lambda prr: prr >= 2)\n", + "prrBySymptomByVaccineWithHighPrrs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b41b60c7", + "metadata": {}, + "outputs": [], + "source": [ + "webAppBaseDir = os.getcwd() + '/../docs/SymptomsCausedByDrugs'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26f72e75", + "metadata": {}, + "outputs": [], + "source": [ + "saveProportionalReportingRatios(\n", + " prrByVaccineBySymptomWithoutZeroPrrs,\n", + " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5bfdcbdd", + "metadata": {}, + "outputs": [], + "source": [ + "saveProportionalReportingRatios(\n", + " prrBySymptomByVaccineWithHighPrrs,\n", + " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cc97b8d4", + "metadata": {}, + "outputs": [], + "source": [ + "updateHtmlFile(\n", + " symptoms = list(prrByVaccineAndSymptom.columns),\n", + " vaccines = list(prrByVaccineAndSymptom.index),\n", + " htmlFile = os.path.normpath(webAppBaseDir + '/index.html'))" + ] + }, { "cell_type": "markdown", "id": "3e47c62c", diff --git a/src/SymptomsCausedByVaccines/HtmlUtils.py b/src/SymptomsCausedByVaccines/HtmlUtils.py index 3a6edaf4795..cfff42d3c85 100644 --- a/src/SymptomsCausedByVaccines/HtmlUtils.py +++ b/src/SymptomsCausedByVaccines/HtmlUtils.py @@ -1,3 +1,5 @@ +import html + def getVaccineOptions(vaccines, defaultOptionText): return _getOptionsWithDefaultOption(defaultOptionText = defaultOptionText, values = vaccines) @@ -15,4 +17,4 @@ def _getOptions(values): def _getOption(value): - return ''.format(value=value) + return ''.format(value = html.escape(value)) From 95b0a10784e897e6b997f4244b23b81b7a15d92a Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Wed, 10 Jul 2024 23:53:48 +0200 Subject: [PATCH 02/22] adding a TODO --- docs/SymptomsCausedByDrugs/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/SymptomsCausedByDrugs/index.html b/docs/SymptomsCausedByDrugs/index.html index 87fbd2148b0..c6386457861 100644 --- a/docs/SymptomsCausedByDrugs/index.html +++ b/docs/SymptomsCausedByDrugs/index.html @@ -28,6 +28,7 @@ + From e30a3dcb4008431ab88f2a9e04c059789315061d Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Thu, 11 Jul 2024 08:24:32 +0200 Subject: [PATCH 03/22] trying to increase free memory --- src/HowBadIsMyBatch.ipynb | 70 ++++++++++++--------------------------- 1 file changed, 22 insertions(+), 48 deletions(-) diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 3cda82b3f45..20c4ab2166b 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -460,7 +460,8 @@ "from SymptomsCausedByVaccines.PrrSeriesTransformer import PrrSeriesTransformer\n", "from SymptomsCausedByVaccines.ProportionalReportingRatiosPersister import saveProportionalReportingRatios\n", "import os\n", - "import pandas as pd" + "import pandas as pd\n", + "import gc" ] }, { @@ -471,7 +472,7 @@ "outputs": [], "source": [ "prrByVaccineAndSymptom = pd.read_csv(\n", - " 'data/prrByDrugAndSymptom-EudraVigilance-10.csv',\n", + " 'data/prrByDrugAndSymptom-EudraVigilance.csv',\n", " index_col = 'DRUG')\n", "prrByVaccineAndSymptom" ] @@ -487,50 +488,6 @@ "prrByVaccineAndSymptom" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "588aaa2b", - "metadata": {}, - "outputs": [], - "source": [ - "prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", - "prrByVaccineBySymptom" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "379d9730", - "metadata": {}, - "outputs": [], - "source": [ - "prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", - "prrBySymptomByVaccine" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0cfd4c66", - "metadata": {}, - "outputs": [], - "source": [ - "prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", - "prrByVaccineBySymptomWithoutZeroPrrs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "86da9cb7", - "metadata": {}, - "outputs": [], - "source": [ - "prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterPrrs(prrBySymptomByVaccine, lambda prr: prr >= 2)\n", - "prrBySymptomByVaccineWithHighPrrs" - ] - }, { "cell_type": "code", "execution_count": null, @@ -548,9 +505,18 @@ "metadata": {}, "outputs": [], "source": [ + "prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", + "\n", + "prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", + "del prrByVaccineBySymptom\n", + "gc.collect()\n", + "\n", "saveProportionalReportingRatios(\n", " prrByVaccineBySymptomWithoutZeroPrrs,\n", - " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))" + " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))\n", + "\n", + "del prrByVaccineBySymptomWithoutZeroPrrs\n", + "gc.collect()" ] }, { @@ -560,9 +526,17 @@ "metadata": {}, "outputs": [], "source": [ + "prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", + "prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterPrrs(prrBySymptomByVaccine, lambda prr: prr >= 2)\n", + "del prrBySymptomByVaccine\n", + "gc.collect()\n", + "\n", "saveProportionalReportingRatios(\n", " prrBySymptomByVaccineWithHighPrrs,\n", - " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))" + " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))\n", + "\n", + "del prrBySymptomByVaccineWithHighPrrs\n", + "gc.collect()" ] }, { From 3fb2c0299121b9738e70f9279b679d838181466c Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Thu, 11 Jul 2024 10:41:10 +0200 Subject: [PATCH 04/22] starting ProportionalReportingRatiosPersisterTest --- ...roportionalReportingRatiosPersisterTest.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py new file mode 100644 index 00000000000..cc94d01795b --- /dev/null +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py @@ -0,0 +1,30 @@ +import unittest +from pandas.testing import assert_series_equal +from TestHelper import TestHelper +import pandas as pd +import simplejson as json +from SymptomsCausedByVaccines.ProportionalReportingRatiosPersister import saveProportionalReportingRatios + + +class ProportionalReportingRatiosPersisterTest(unittest.TestCase): + + def test_saveProportionalReportingRatios(self): + # Given + prrBySymptom = {'Sepsis ': 366.3084378480811} + prrBySymptomByDrug = TestHelper.createSeries( + indexName = 'DRUG', + data = { + '"GENERIC COLD ACID" ': prrBySymptom + }) + + # When + saveProportionalReportingRatios(prrBySymptomByDrug, 'src/tmp/vaccines') + + # Then + data = ProportionalReportingRatiosPersisterTest.readJsonFile('src/tmp/vaccines/"GENERIC COLD ACID" .json') + self.assertDictEqual(data, prrBySymptom) + + @staticmethod + def readJsonFile(file): + with open(file) as fp: + return json.load(fp) From f1f38c32dc515d48c8ac38f11cf227f6f7bb85c5 Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Thu, 11 Jul 2024 11:24:05 +0200 Subject: [PATCH 05/22] refining ProportionalReportingRatiosPersisterTest --- .../ProportionalReportingRatiosPersister.py | 11 ++++++++--- ...roportionalReportingRatiosPersisterTest.py | 19 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py index e8160e4cbf4..65b9c474eb9 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py @@ -1,7 +1,12 @@ import shutil from IOUtils import IOUtils -def saveProportionalReportingRatios(prrByVaccineBySymptom, directory): +def saveProportionalReportingRatios(prrBySymptomByDrug, directory): shutil.rmtree(directory, ignore_errors = True) - for symptom, prrByVaccine in prrByVaccineBySymptom.items(): - IOUtils.saveDictAsJson(prrByVaccine, f'{directory}/{symptom}.json') + drugByFilename = {} + i = 0 + for drug, prrBySymptom in prrBySymptomByDrug.items(): + i += 1 + drugByFilename[f'{i}.json'] = drug + IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{i}.json') + IOUtils.saveDictAsJson(drugByFilename, f'{directory}/drugByFilename.json') diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py index cc94d01795b..18fc00dd39d 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py @@ -10,19 +10,24 @@ class ProportionalReportingRatiosPersisterTest(unittest.TestCase): def test_saveProportionalReportingRatios(self): # Given - prrBySymptom = {'Sepsis ': 366.3084378480811} + drug = '"GENERIC COLD ACID" ' + prrBySymptom = { 'Sepsis ': 366.3084378480811 } prrBySymptomByDrug = TestHelper.createSeries( indexName = 'DRUG', - data = { - '"GENERIC COLD ACID" ': prrBySymptom - }) + data = { drug: prrBySymptom }) + directory = 'src/tmp/vaccines' # When - saveProportionalReportingRatios(prrBySymptomByDrug, 'src/tmp/vaccines') + saveProportionalReportingRatios(prrBySymptomByDrug, directory) # Then - data = ProportionalReportingRatiosPersisterTest.readJsonFile('src/tmp/vaccines/"GENERIC COLD ACID" .json') - self.assertDictEqual(data, prrBySymptom) + drugFilename = '1.json' + self.assertDictEqual( + ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/{drugFilename}'), + prrBySymptom) + self.assertDictEqual( + ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/drugByFilename.json'), + { drugFilename: drug }) @staticmethod def readJsonFile(file): From 58b08909a92742e5b79ec9869b4535fe5addfe6e Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Thu, 11 Jul 2024 11:34:38 +0200 Subject: [PATCH 06/22] refactoring --- .../ProportionalReportingRatiosPersister.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py index 65b9c474eb9..8fd8b910634 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py @@ -7,6 +7,7 @@ def saveProportionalReportingRatios(prrBySymptomByDrug, directory): i = 0 for drug, prrBySymptom in prrBySymptomByDrug.items(): i += 1 - drugByFilename[f'{i}.json'] = drug - IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{i}.json') + filename = f'{i}.json' + drugByFilename[filename] = drug + IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{filename}') IOUtils.saveDictAsJson(drugByFilename, f'{directory}/drugByFilename.json') From 53ac140e83abb339feb9e40f14a20176cc09e2b5 Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Thu, 11 Jul 2024 22:54:29 +0200 Subject: [PATCH 07/22] refining ProportionalReportingRatiosPersisterTest --- .../ProportionalReportingRatiosPersister.py | 6 +++--- .../ProportionalReportingRatiosPersisterTest.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py index 8fd8b910634..4dcc1b5d98e 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py @@ -3,11 +3,11 @@ from IOUtils import IOUtils def saveProportionalReportingRatios(prrBySymptomByDrug, directory): shutil.rmtree(directory, ignore_errors = True) - drugByFilename = {} + filenameByDrug = {} i = 0 for drug, prrBySymptom in prrBySymptomByDrug.items(): i += 1 filename = f'{i}.json' - drugByFilename[filename] = drug + filenameByDrug[drug] = filename IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{filename}') - IOUtils.saveDictAsJson(drugByFilename, f'{directory}/drugByFilename.json') + IOUtils.saveDictAsJson(filenameByDrug, f'{directory}/filenameByDrug.json') diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py index 18fc00dd39d..5f412d384f3 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py @@ -26,8 +26,8 @@ class ProportionalReportingRatiosPersisterTest(unittest.TestCase): ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/{drugFilename}'), prrBySymptom) self.assertDictEqual( - ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/drugByFilename.json'), - { drugFilename: drug }) + ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/filenameByDrug.json'), + { drug: drugFilename }) @staticmethod def readJsonFile(file): From 4fd0bc7490ceaa94d23dd12e9dc469740c72baa7 Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Thu, 11 Jul 2024 23:54:47 +0200 Subject: [PATCH 08/22] refactoring --- .../js/PrrByVaccineProvider.js | 4 +-- src/SymptomsCausedByVaccines/HtmlUpdater.py | 11 ++++++-- src/SymptomsCausedByVaccines/HtmlUtils.py | 28 ++++++++++++------- .../ProportionalReportingRatiosPersister.py | 2 +- ...roportionalReportingRatiosPersisterTest.py | 6 ++-- 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js b/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js index 5f7cff61a54..c41b5eaa99a 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js +++ b/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js @@ -1,10 +1,10 @@ class PrrByVaccineProvider { static getPrrByVaccine(symptom) { - return fetch(`./data/ProportionalReportingRatios/symptoms/${symptom}.json`).then(response => response.json()); + return fetch(`./data/ProportionalReportingRatios/symptoms/${symptom}`).then(response => response.json()); } static getPrrBySymptom(vaccine) { - return fetch(`./data/ProportionalReportingRatios/vaccines/${vaccine}.json`).then(response => response.json()); + return fetch(`./data/ProportionalReportingRatios/vaccines/${vaccine}`).then(response => response.json()); } } \ No newline at end of file diff --git a/src/SymptomsCausedByVaccines/HtmlUpdater.py b/src/SymptomsCausedByVaccines/HtmlUpdater.py index 1747a207aaf..34d604b962f 100644 --- a/src/SymptomsCausedByVaccines/HtmlUpdater.py +++ b/src/SymptomsCausedByVaccines/HtmlUpdater.py @@ -5,14 +5,19 @@ from SymptomsCausedByVaccines.HtmlUtils import getSymptomOptions, getVaccineOpti from SymptomsCausedByVaccines.OptionsSetter import OptionsSetter -def updateHtmlFile(symptoms, vaccines, htmlFile, defaultSelectVaccineOptionText = 'Select Vaccine'): +def updateHtmlFile(symptomsDescr, vaccinesDescr, htmlFile, defaultSelectVaccineOptionText = 'Select Vaccine'): _saveOptions( - options = getSymptomOptions(symptoms), + options = getSymptomOptions( + symptoms = symptomsDescr['symptoms'], + filenameBySymptom = symptomsDescr['filenameBySymptom']), htmlFile = htmlFile, selectElementId = 'symptomSelect') _saveOptions( - options = getVaccineOptions(vaccines, defaultSelectVaccineOptionText), + options = getVaccineOptions( + vaccines = vaccinesDescr['vaccines'], + filenameByDrug = vaccinesDescr['filenameByDrug'], + defaultOptionText = defaultSelectVaccineOptionText), htmlFile = htmlFile, selectElementId = 'vaccineSelect') diff --git a/src/SymptomsCausedByVaccines/HtmlUtils.py b/src/SymptomsCausedByVaccines/HtmlUtils.py index cfff42d3c85..d3d79073769 100644 --- a/src/SymptomsCausedByVaccines/HtmlUtils.py +++ b/src/SymptomsCausedByVaccines/HtmlUtils.py @@ -1,20 +1,28 @@ import html -def getVaccineOptions(vaccines, defaultOptionText): - return _getOptionsWithDefaultOption(defaultOptionText = defaultOptionText, values = vaccines) +def getVaccineOptions(vaccines, filenameByDrug, defaultOptionText): + return _getOptionsWithDefaultOption( + defaultOptionText = defaultOptionText, + values = vaccines, + filenameByValue = filenameByDrug) -def getSymptomOptions(symptoms): - return _getOptionsWithDefaultOption(defaultOptionText = 'Select Symptom', values = symptoms) +def getSymptomOptions(symptoms, filenameBySymptom): + return _getOptionsWithDefaultOption( + defaultOptionText = 'Select Symptom', + values = symptoms, + filenameByValue = filenameBySymptom) -def _getOptionsWithDefaultOption(defaultOptionText, values): - return [''.format(defaultOptionText = defaultOptionText)] + _getOptions(values) +def _getOptionsWithDefaultOption(defaultOptionText, values, filenameByValue): + return [''.format(defaultOptionText = defaultOptionText)] + _getOptions(values, filenameByValue) -def _getOptions(values): - return [_getOption(value) for value in values] +def _getOptions(values, filenameByValue): + return [_getOption(filename = filenameByValue[value], displayValue = value) for value in values] -def _getOption(value): - return ''.format(value = html.escape(value)) +def _getOption(filename, displayValue): + return ''.format( + value = filename, + displayValue = html.escape(displayValue)) diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py index 4dcc1b5d98e..171c2be699d 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py @@ -10,4 +10,4 @@ def saveProportionalReportingRatios(prrBySymptomByDrug, directory): filename = f'{i}.json' filenameByDrug[drug] = filename IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{filename}') - IOUtils.saveDictAsJson(filenameByDrug, f'{directory}/filenameByDrug.json') + return filenameByDrug diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py index 5f412d384f3..7aa313d280b 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py @@ -18,16 +18,14 @@ class ProportionalReportingRatiosPersisterTest(unittest.TestCase): directory = 'src/tmp/vaccines' # When - saveProportionalReportingRatios(prrBySymptomByDrug, directory) + filenameByDrug = saveProportionalReportingRatios(prrBySymptomByDrug, directory) # Then drugFilename = '1.json' self.assertDictEqual( ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/{drugFilename}'), prrBySymptom) - self.assertDictEqual( - ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/filenameByDrug.json'), - { drug: drugFilename }) + self.assertDictEqual(filenameByDrug, { drug: drugFilename }) @staticmethod def readJsonFile(file): From dabacf6199eb4b01f96660e879b83bde8f1034eb Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 00:02:16 +0200 Subject: [PATCH 09/22] updating jupyter notebook section for EudraVigilance --- src/HowBadIsMyBatch.ipynb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 20c4ab2166b..1e89f395982 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -511,7 +511,7 @@ "del prrByVaccineBySymptom\n", "gc.collect()\n", "\n", - "saveProportionalReportingRatios(\n", + "filenameBySymptom = saveProportionalReportingRatios(\n", " prrByVaccineBySymptomWithoutZeroPrrs,\n", " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))\n", "\n", @@ -531,7 +531,7 @@ "del prrBySymptomByVaccine\n", "gc.collect()\n", "\n", - "saveProportionalReportingRatios(\n", + "filenameByDrug = saveProportionalReportingRatios(\n", " prrBySymptomByVaccineWithHighPrrs,\n", " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))\n", "\n", @@ -547,8 +547,12 @@ "outputs": [], "source": [ "updateHtmlFile(\n", - " symptoms = list(prrByVaccineAndSymptom.columns),\n", - " vaccines = list(prrByVaccineAndSymptom.index),\n", + " symptomsDescr = {\n", + " 'symptoms': list(prrByVaccineAndSymptom.columns),\n", + " 'filenameBySymptom': filenameBySymptom },\n", + " vaccinesDescr = {\n", + " 'vaccines': list(prrByVaccineAndSymptom.index),\n", + " 'filenameByDrug': filenameByDrug },\n", " htmlFile = os.path.normpath(webAppBaseDir + '/index.html'))" ] }, From 2cc3b29ed3e53dcac241963dfdbb55237db6a88e Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 07:44:29 +0200 Subject: [PATCH 10/22] refining ProportionalReportingRatiosPersisterTest --- .../ProportionalReportingRatiosPersister.py | 5 ++--- .../ProportionalReportingRatiosPersisterTest.py | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py index 171c2be699d..ef40a27a47c 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersister.py @@ -7,7 +7,6 @@ def saveProportionalReportingRatios(prrBySymptomByDrug, directory): i = 0 for drug, prrBySymptom in prrBySymptomByDrug.items(): i += 1 - filename = f'{i}.json' - filenameByDrug[drug] = filename - IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{filename}') + filenameByDrug[drug] = f'{i}' + IOUtils.saveDictAsJson(prrBySymptom, f'{directory}/{i}.json') return filenameByDrug diff --git a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py index 7aa313d280b..f23605d4c1e 100644 --- a/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py +++ b/src/SymptomsCausedByVaccines/ProportionalReportingRatiosPersisterTest.py @@ -21,9 +21,9 @@ class ProportionalReportingRatiosPersisterTest(unittest.TestCase): filenameByDrug = saveProportionalReportingRatios(prrBySymptomByDrug, directory) # Then - drugFilename = '1.json' + drugFilename = '1' self.assertDictEqual( - ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/{drugFilename}'), + ProportionalReportingRatiosPersisterTest.readJsonFile(f'{directory}/{drugFilename}.json'), prrBySymptom) self.assertDictEqual(filenameByDrug, { drug: drugFilename }) From ca4d47bbac777e05cbd38a626d97a32d0718f44a Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 08:48:27 +0200 Subject: [PATCH 11/22] changing some names from Vaccine to Drug --- docs/SymptomsCausedByDrugs/js/PageInitializer.js | 11 ++++++----- docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js | 13 ++++++------- .../js/PrrBySymptomTableView.js | 6 +++--- .../js/PrrByVaccineProvider.js | 4 ++-- .../js/PrrByVaccineTableView.js | 6 +++--- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/SymptomsCausedByDrugs/js/PageInitializer.js b/docs/SymptomsCausedByDrugs/js/PageInitializer.js index 914e5b52283..90e5bfbcce3 100644 --- a/docs/SymptomsCausedByDrugs/js/PageInitializer.js +++ b/docs/SymptomsCausedByDrugs/js/PageInitializer.js @@ -10,8 +10,8 @@ class PageInitializer { PageInitializer.#initializeSelectElement( { selectElement: symptomSelectElement, - onValueSelected: symptom => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(symptom), - minimumInputLength: 4 + onValueSelected: (id, text) => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(id, text), + minimumInputLength: 0 }); } @@ -20,7 +20,7 @@ class PageInitializer { PageInitializer.#initializeSelectElement( { selectElement: vaccineSelectElement, - onValueSelected: vaccine => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(vaccine), + onValueSelected: (id, text) => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(id ,text), minimumInputLength: 0 }); } @@ -30,8 +30,9 @@ class PageInitializer { selectElement.on( 'select2:select', function (event) { - const value = event.params.data.id; - onValueSelected(value); + const id = event.params.data.id; + const text = event.params.data.text; + onValueSelected(id, text); }); } } diff --git a/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js b/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js index 9694a94125b..715f8473e5d 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js +++ b/docs/SymptomsCausedByDrugs/js/PrrByKeyTableView.js @@ -2,7 +2,7 @@ class PrrByKeyTableView { #prrByKeyTable; #downloadPrrByKeyTableButton; - #value; + #text; #valueName; #prrByKeyProvider; @@ -14,11 +14,11 @@ class PrrByKeyTableView { this.#prrByKeyProvider = prrByKeyProvider; } - displayPrrByKeyTable4Value(value) { + displayPrrByKeyTable4Value(id, text) { UIUtils.disableButton(this.#downloadPrrByKeyTableButton); - this.#prrByKeyProvider(value) + this.#prrByKeyProvider(id) .then(prrByKey => { - this.#value = value; + this.#text = text; this.#prrByKeyTable.display(prrByKey); UIUtils.enableButton(this.#downloadPrrByKeyTableButton); }); @@ -36,9 +36,8 @@ class PrrByKeyTableView { UIUtils.downloadUrlAsFilename( window.URL.createObjectURL( new Blob( - [this.#prrByKeyTable.getDisplayedTableAsCsv(`# ${this.#valueName}: ${this.#value}`)], + [this.#prrByKeyTable.getDisplayedTableAsCsv(`# ${this.#valueName}: ${this.#text}`)], { type: 'text/csv' })), - this.#value - ); + this.#text); } } diff --git a/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js b/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js index e41f4d3c998..b84f2f02523 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js +++ b/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js @@ -6,12 +6,12 @@ class PrrBySymptomTableView { this.#delegate = new PrrByKeyTableView( this.#createPrrBySymptomTable(prrBySymptomTableElement), downloadPrrBySymptomTableButton, - 'Vaccine', + 'Drug', PrrByVaccineProvider.getPrrBySymptom); } - displayPrrBySymptomTable4Vaccine(vaccine) { - this.#delegate.displayPrrByKeyTable4Value(vaccine); + displayPrrBySymptomTable4Vaccine(id, text) { + this.#delegate.displayPrrByKeyTable4Value(id, text); } #createPrrBySymptomTable(tableElement) { diff --git a/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js b/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js index c41b5eaa99a..5f7cff61a54 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js +++ b/docs/SymptomsCausedByDrugs/js/PrrByVaccineProvider.js @@ -1,10 +1,10 @@ class PrrByVaccineProvider { static getPrrByVaccine(symptom) { - return fetch(`./data/ProportionalReportingRatios/symptoms/${symptom}`).then(response => response.json()); + return fetch(`./data/ProportionalReportingRatios/symptoms/${symptom}.json`).then(response => response.json()); } static getPrrBySymptom(vaccine) { - return fetch(`./data/ProportionalReportingRatios/vaccines/${vaccine}`).then(response => response.json()); + return fetch(`./data/ProportionalReportingRatios/vaccines/${vaccine}.json`).then(response => response.json()); } } \ No newline at end of file diff --git a/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js b/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js index bd55ea1792e..12a0f638b77 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js +++ b/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js @@ -10,14 +10,14 @@ class PrrByVaccineTableView { PrrByVaccineProvider.getPrrByVaccine); } - displayPrrByVaccineTable4Symptom(symptom) { - this.#delegate.displayPrrByKeyTable4Value(symptom); + displayPrrByVaccineTable4Symptom(id, text) { + this.#delegate.displayPrrByKeyTable4Value(id, text); } #createPrrByVaccineTable(tableElement) { return new PrrByKeyTable({ tableElement: tableElement, - keyColumnName: 'Vaccine', + keyColumnName: 'Drug', prrColumnName: 'Lower Confidence Limit of Proportional Reporting Ratio', shallMarkRowIfPrrTooHigh: true }); From 1e12fd871972dcb047831763983f7c5ce6de09b5 Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 09:51:26 +0200 Subject: [PATCH 12/22] updating wording --- docs/SymptomsCausedByDrugs/index.html | 106 ++++++++++++-------------- 1 file changed, 50 insertions(+), 56 deletions(-) diff --git a/docs/SymptomsCausedByDrugs/index.html b/docs/SymptomsCausedByDrugs/index.html index c6386457861..e1efee5c5c0 100644 --- a/docs/SymptomsCausedByDrugs/index.html +++ b/docs/SymptomsCausedByDrugs/index.html @@ -28,7 +28,6 @@ - @@ -86,7 +85,7 @@
-

Worst Vaccines

+

Worst Drugs

@@ -94,52 +93,49 @@
- + @@ -156,21 +152,19 @@
- +
VaccineDrug Lower Confidence Limit of Proportional Reporting Ratio
From d8b23880e2b6be301852f367e2e62dfff9e10828 Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 10:15:51 +0200 Subject: [PATCH 13/22] refactoring --- .../js/PageInitializer.js | 11 +- .../js/PrrByKeyTableView.js | 13 +- .../js/PrrBySymptomTableView.js | 4 +- .../js/PrrByVaccineTableView.js | 4 +- src/HowBadIsMyBatch.ipynb | 221 +++++------------- 5 files changed, 69 insertions(+), 184 deletions(-) diff --git a/docs/SymptomsCausedByVaccines/js/PageInitializer.js b/docs/SymptomsCausedByVaccines/js/PageInitializer.js index 914e5b52283..90e5bfbcce3 100644 --- a/docs/SymptomsCausedByVaccines/js/PageInitializer.js +++ b/docs/SymptomsCausedByVaccines/js/PageInitializer.js @@ -10,8 +10,8 @@ class PageInitializer { PageInitializer.#initializeSelectElement( { selectElement: symptomSelectElement, - onValueSelected: symptom => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(symptom), - minimumInputLength: 4 + onValueSelected: (id, text) => prrByVaccineTableView.displayPrrByVaccineTable4Symptom(id, text), + minimumInputLength: 0 }); } @@ -20,7 +20,7 @@ class PageInitializer { PageInitializer.#initializeSelectElement( { selectElement: vaccineSelectElement, - onValueSelected: vaccine => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(vaccine), + onValueSelected: (id, text) => prrBySymptomTableView.displayPrrBySymptomTable4Vaccine(id ,text), minimumInputLength: 0 }); } @@ -30,8 +30,9 @@ class PageInitializer { selectElement.on( 'select2:select', function (event) { - const value = event.params.data.id; - onValueSelected(value); + const id = event.params.data.id; + const text = event.params.data.text; + onValueSelected(id, text); }); } } diff --git a/docs/SymptomsCausedByVaccines/js/PrrByKeyTableView.js b/docs/SymptomsCausedByVaccines/js/PrrByKeyTableView.js index 9694a94125b..715f8473e5d 100644 --- a/docs/SymptomsCausedByVaccines/js/PrrByKeyTableView.js +++ b/docs/SymptomsCausedByVaccines/js/PrrByKeyTableView.js @@ -2,7 +2,7 @@ class PrrByKeyTableView { #prrByKeyTable; #downloadPrrByKeyTableButton; - #value; + #text; #valueName; #prrByKeyProvider; @@ -14,11 +14,11 @@ class PrrByKeyTableView { this.#prrByKeyProvider = prrByKeyProvider; } - displayPrrByKeyTable4Value(value) { + displayPrrByKeyTable4Value(id, text) { UIUtils.disableButton(this.#downloadPrrByKeyTableButton); - this.#prrByKeyProvider(value) + this.#prrByKeyProvider(id) .then(prrByKey => { - this.#value = value; + this.#text = text; this.#prrByKeyTable.display(prrByKey); UIUtils.enableButton(this.#downloadPrrByKeyTableButton); }); @@ -36,9 +36,8 @@ class PrrByKeyTableView { UIUtils.downloadUrlAsFilename( window.URL.createObjectURL( new Blob( - [this.#prrByKeyTable.getDisplayedTableAsCsv(`# ${this.#valueName}: ${this.#value}`)], + [this.#prrByKeyTable.getDisplayedTableAsCsv(`# ${this.#valueName}: ${this.#text}`)], { type: 'text/csv' })), - this.#value - ); + this.#text); } } diff --git a/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js b/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js index e41f4d3c998..f3187d18356 100644 --- a/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js +++ b/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js @@ -10,8 +10,8 @@ class PrrBySymptomTableView { PrrByVaccineProvider.getPrrBySymptom); } - displayPrrBySymptomTable4Vaccine(vaccine) { - this.#delegate.displayPrrByKeyTable4Value(vaccine); + displayPrrBySymptomTable4Vaccine(id, text) { + this.#delegate.displayPrrByKeyTable4Value(id, text); } #createPrrBySymptomTable(tableElement) { diff --git a/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js b/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js index bd55ea1792e..a669fa7d040 100644 --- a/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js +++ b/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js @@ -10,8 +10,8 @@ class PrrByVaccineTableView { PrrByVaccineProvider.getPrrByVaccine); } - displayPrrByVaccineTable4Symptom(symptom) { - this.#delegate.displayPrrByKeyTable4Value(symptom); + displayPrrByVaccineTable4Symptom(id, text) { + this.#delegate.displayPrrByKeyTable4Value(id, text); } #createPrrByVaccineTable(tableElement) { diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 1e89f395982..a7ff5dae341 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -467,93 +467,81 @@ { "cell_type": "code", "execution_count": null, - "id": "4ad05656", + "id": "f38924ec", "metadata": {}, "outputs": [], "source": [ - "prrByVaccineAndSymptom = pd.read_csv(\n", - " 'data/prrByDrugAndSymptom-EudraVigilance.csv',\n", - " index_col = 'DRUG')\n", - "prrByVaccineAndSymptom" + "def saveProportionalReportingRatios4PrrByVaccineBySymptomWithoutZeroPrrs(prrByVaccineAndSymptom, webAppBaseDir):\n", + " prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", + "\n", + " prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", + " del prrByVaccineBySymptom\n", + " gc.collect()\n", + "\n", + " filenameBySymptom = saveProportionalReportingRatios(\n", + " prrByVaccineBySymptomWithoutZeroPrrs,\n", + " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))\n", + "\n", + " del prrByVaccineBySymptomWithoutZeroPrrs\n", + " gc.collect()\n", + " return filenameBySymptom" ] }, { "cell_type": "code", "execution_count": null, - "id": "7aed1621", + "id": "e1237c0b", "metadata": {}, "outputs": [], "source": [ - "prrByVaccineAndSymptom = DataFrameFilter.withoutZeroRowsAndZeroColumns(prrByVaccineAndSymptom)\n", - "prrByVaccineAndSymptom" + "def saveProportionalReportingRatios4PrrBySymptomByVaccineWithHighPrrs(prrByVaccineAndSymptom, webAppBaseDir):\n", + " prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", + " prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterPrrs(prrBySymptomByVaccine, lambda prr: prr >= 2)\n", + " del prrBySymptomByVaccine\n", + " gc.collect()\n", + "\n", + " filenameByDrug = saveProportionalReportingRatios(\n", + " prrBySymptomByVaccineWithHighPrrs,\n", + " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))\n", + "\n", + " del prrBySymptomByVaccineWithHighPrrs\n", + " gc.collect()\n", + " return filenameByDrug" ] }, { "cell_type": "code", "execution_count": null, - "id": "b41b60c7", + "id": "64ccf3c9", "metadata": {}, "outputs": [], "source": [ - "webAppBaseDir = os.getcwd() + '/../docs/SymptomsCausedByDrugs'" + "def saveProportionalReportingRatiosAndUpdateHtmlFile(prrByVaccineAndSymptom, webAppBaseDir):\n", + " prrByVaccineAndSymptom = DataFrameFilter.withoutZeroRowsAndZeroColumns(prrByVaccineAndSymptom)\n", + " filenameBySymptom = saveProportionalReportingRatios4PrrByVaccineBySymptomWithoutZeroPrrs(prrByVaccineAndSymptom, webAppBaseDir)\n", + " filenameByDrug = saveProportionalReportingRatios4PrrBySymptomByVaccineWithHighPrrs(prrByVaccineAndSymptom, webAppBaseDir)\n", + " updateHtmlFile(\n", + " symptomsDescr = {\n", + " 'symptoms': list(prrByVaccineAndSymptom.columns),\n", + " 'filenameBySymptom': filenameBySymptom },\n", + " vaccinesDescr = {\n", + " 'vaccines': list(prrByVaccineAndSymptom.index),\n", + " 'filenameByDrug': filenameByDrug },\n", + " htmlFile = os.path.normpath(webAppBaseDir + '/index.html'))\n" ] }, { "cell_type": "code", "execution_count": null, - "id": "26f72e75", + "id": "3db1a115", "metadata": {}, "outputs": [], "source": [ - "prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", - "\n", - "prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", - "del prrByVaccineBySymptom\n", - "gc.collect()\n", - "\n", - "filenameBySymptom = saveProportionalReportingRatios(\n", - " prrByVaccineBySymptomWithoutZeroPrrs,\n", - " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))\n", - "\n", - "del prrByVaccineBySymptomWithoutZeroPrrs\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5bfdcbdd", - "metadata": {}, - "outputs": [], - "source": [ - "prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", - "prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterPrrs(prrBySymptomByVaccine, lambda prr: prr >= 2)\n", - "del prrBySymptomByVaccine\n", - "gc.collect()\n", - "\n", - "filenameByDrug = saveProportionalReportingRatios(\n", - " prrBySymptomByVaccineWithHighPrrs,\n", - " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))\n", - "\n", - "del prrBySymptomByVaccineWithHighPrrs\n", - "gc.collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cc97b8d4", - "metadata": {}, - "outputs": [], - "source": [ - "updateHtmlFile(\n", - " symptomsDescr = {\n", - " 'symptoms': list(prrByVaccineAndSymptom.columns),\n", - " 'filenameBySymptom': filenameBySymptom },\n", - " vaccinesDescr = {\n", - " 'vaccines': list(prrByVaccineAndSymptom.index),\n", - " 'filenameByDrug': filenameByDrug },\n", - " htmlFile = os.path.normpath(webAppBaseDir + '/index.html'))" + "saveProportionalReportingRatiosAndUpdateHtmlFile(\n", + " prrByVaccineAndSymptom = pd.read_csv(\n", + " 'data/prrByDrugAndSymptom-EudraVigilance-10.csv',\n", + " index_col = 'DRUG'),\n", + " webAppBaseDir = os.getcwd() + '/../docs/SymptomsCausedByDrugs')" ] }, { @@ -567,22 +555,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5cd9935f", - "metadata": {}, - "outputs": [], - "source": [ - "from SymptomsCausedByVaccines.DataFrameFilter import DataFrameFilter\n", - "from SymptomsCausedByVaccines.HtmlUpdater import updateHtmlFile, updateHtmlFile4SymptomsCausedByCOVIDLots\n", - "from SymptomsCausedByVaccines.PrrSeriesFactory import PrrSeriesFactory\n", - "from SymptomsCausedByVaccines.PrrSeriesTransformer import PrrSeriesTransformer\n", - "from SymptomsCausedByVaccines.ProportionalReportingRatiosPersister import saveProportionalReportingRatios\n", - "import os\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, + "id": "0974c307", "metadata": {}, "outputs": [], "source": [ @@ -597,101 +570,13 @@ { "cell_type": "code", "execution_count": null, + "id": "dfa98cd9", "metadata": {}, "outputs": [], "source": [ - "prrByVaccineAndSymptom = DataFrameFilter.withoutZeroRowsAndZeroColumns(prrByVaccineAndSymptom)\n", - "prrByVaccineAndSymptom" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "640868c7", - "metadata": {}, - "outputs": [], - "source": [ - "prrByVaccineBySymptom = PrrSeriesFactory.getPrrByVaccineBySymptom(prrByVaccineAndSymptom)\n", - "prrByVaccineBySymptom" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0f247c64", - "metadata": {}, - "outputs": [], - "source": [ - "prrBySymptomByVaccine = PrrSeriesFactory.getPrrBySymptomByVaccine(prrByVaccineAndSymptom)\n", - "prrBySymptomByVaccine" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "760ac423", - "metadata": {}, - "outputs": [], - "source": [ - "prrByVaccineBySymptomWithoutZeroPrrs = PrrSeriesTransformer.filterByNonZeroPrrs(prrByVaccineBySymptom)\n", - "prrByVaccineBySymptomWithoutZeroPrrs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f07203e4", - "metadata": {}, - "outputs": [], - "source": [ - "prrBySymptomByVaccineWithHighPrrs = PrrSeriesTransformer.filterPrrs(prrBySymptomByVaccine, lambda prr: prr >= 2)\n", - "prrBySymptomByVaccineWithHighPrrs" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "webAppBaseDir = os.getcwd() + '/../docs/SymptomsCausedByVaccines'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0b40071c", - "metadata": {}, - "outputs": [], - "source": [ - "saveProportionalReportingRatios(\n", - " prrByVaccineBySymptomWithoutZeroPrrs,\n", - " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/symptoms'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fac4b34f", - "metadata": {}, - "outputs": [], - "source": [ - "saveProportionalReportingRatios(\n", - " prrBySymptomByVaccineWithHighPrrs,\n", - " directory = os.path.normpath(webAppBaseDir + '/data/ProportionalReportingRatios/vaccines'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "803dfbef", - "metadata": {}, - "outputs": [], - "source": [ - "updateHtmlFile(\n", - " symptoms = list(prrByVaccineAndSymptom.columns),\n", - " vaccines = list(prrByVaccineAndSymptom.index),\n", - " htmlFile = os.path.normpath(webAppBaseDir + '/index.html'))" + "saveProportionalReportingRatiosAndUpdateHtmlFile(\n", + " prrByVaccineAndSymptom = prrByVaccineAndSymptom,\n", + " webAppBaseDir = os.getcwd() + '/../docs/SymptomsCausedByVaccines')" ] }, { From a7e88bcce00ff313d070b51b957a35fe1f37aa86 Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 10:41:01 +0200 Subject: [PATCH 14/22] refactoring --- docs/SymptomsCausedByDrugs/index.html | 7 +- .../js/PageInitializer.js | 8 +- .../js/PrrBySymptomTableView.js | 4 +- .../js/PrrByVaccineTableView.js | 8 +- docs/SymptomsCausedByVaccines/index.html | 4347 ++++++++++++++++- .../js/PageInitializer.js | 8 +- .../js/PrrBySymptomTableView.js | 4 +- .../js/PrrByVaccineTableView.js | 8 +- 8 files changed, 4240 insertions(+), 154 deletions(-) diff --git a/docs/SymptomsCausedByDrugs/index.html b/docs/SymptomsCausedByDrugs/index.html index e1efee5c5c0..9d132c4bbfd 100644 --- a/docs/SymptomsCausedByDrugs/index.html +++ b/docs/SymptomsCausedByDrugs/index.html @@ -39,17 +39,20 @@ document.addEventListener( "DOMContentLoaded", event => { + const name = 'Drug'; PageInitializer.initializePage( { symptom: { symptomSelectElement: $('#symptomSelect'), prrByVaccineTableElement: $('#prrByVaccineTable'), - downloadPrrByVaccineTableButton: document.querySelector("#downloadPrrByVaccineTable") + downloadPrrByVaccineTableButton: document.querySelector("#downloadPrrByVaccineTable"), + keyColumnName: name }, vaccine: { vaccineSelectElement: $('#vaccineSelect'), prrBySymptomTableElement: $('#prrBySymptomTable'), - downloadPrrBySymptomTableButton: document.querySelector("#downloadPrrBySymptomTable") + downloadPrrBySymptomTableButton: document.querySelector("#downloadPrrBySymptomTable"), + valueName: name } } ); diff --git a/docs/SymptomsCausedByDrugs/js/PageInitializer.js b/docs/SymptomsCausedByDrugs/js/PageInitializer.js index 90e5bfbcce3..227533551db 100644 --- a/docs/SymptomsCausedByDrugs/js/PageInitializer.js +++ b/docs/SymptomsCausedByDrugs/js/PageInitializer.js @@ -5,8 +5,8 @@ class PageInitializer { PageInitializer.#configureVaccine(vaccine); } - static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton }) { - const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton); + static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName }) { + const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName); PageInitializer.#initializeSelectElement( { selectElement: symptomSelectElement, @@ -15,8 +15,8 @@ class PageInitializer { }); } - static #configureVaccine({ vaccineSelectElement, prrBySymptomTableElement, downloadPrrBySymptomTableButton }) { - const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton); + static #configureVaccine({ vaccineSelectElement, prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName }) { + const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName); PageInitializer.#initializeSelectElement( { selectElement: vaccineSelectElement, diff --git a/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js b/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js index b84f2f02523..c3f36991e0a 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js +++ b/docs/SymptomsCausedByDrugs/js/PrrBySymptomTableView.js @@ -2,11 +2,11 @@ class PrrBySymptomTableView { #delegate; - constructor(prrBySymptomTableElement, downloadPrrBySymptomTableButton) { + constructor(prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName) { this.#delegate = new PrrByKeyTableView( this.#createPrrBySymptomTable(prrBySymptomTableElement), downloadPrrBySymptomTableButton, - 'Drug', + valueName, PrrByVaccineProvider.getPrrBySymptom); } diff --git a/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js b/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js index 12a0f638b77..40782e44eef 100644 --- a/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js +++ b/docs/SymptomsCausedByDrugs/js/PrrByVaccineTableView.js @@ -2,9 +2,9 @@ class PrrByVaccineTableView { #delegate; - constructor(prrByVaccineTableElement, downloadPrrByVaccineTableButton) { + constructor(prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName) { this.#delegate = new PrrByKeyTableView( - this.#createPrrByVaccineTable(prrByVaccineTableElement), + this.#createPrrByVaccineTable(prrByVaccineTableElement, keyColumnName), downloadPrrByVaccineTableButton, 'Symptom', PrrByVaccineProvider.getPrrByVaccine); @@ -14,10 +14,10 @@ class PrrByVaccineTableView { this.#delegate.displayPrrByKeyTable4Value(id, text); } - #createPrrByVaccineTable(tableElement) { + #createPrrByVaccineTable(tableElement, keyColumnName) { return new PrrByKeyTable({ tableElement: tableElement, - keyColumnName: 'Drug', + keyColumnName: keyColumnName, prrColumnName: 'Lower Confidence Limit of Proportional Reporting Ratio', shallMarkRowIfPrrTooHigh: true }); diff --git a/docs/SymptomsCausedByVaccines/index.html b/docs/SymptomsCausedByVaccines/index.html index 5925743513e..7627529ecaa 100644 --- a/docs/SymptomsCausedByVaccines/index.html +++ b/docs/SymptomsCausedByVaccines/index.html @@ -1,167 +1,4250 @@ + - - - - - -Safety Signal - - - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + -
-
- -
-
- - -
-
-
-
-

Safety Signal

-
- - - - - - -
VaccineLower Confidence Limit of Proportional Reporting Ratio
- -
-
- -
-
-
-

Strongest Symptoms

-
-
-
-
- - -
- - - - - - - -
SymptomLower Confidence Limit of Proportional Reporting Ratio >= 2
- -
-
-
- -
- - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/SymptomsCausedByVaccines/js/PageInitializer.js b/docs/SymptomsCausedByVaccines/js/PageInitializer.js index 90e5bfbcce3..227533551db 100644 --- a/docs/SymptomsCausedByVaccines/js/PageInitializer.js +++ b/docs/SymptomsCausedByVaccines/js/PageInitializer.js @@ -5,8 +5,8 @@ class PageInitializer { PageInitializer.#configureVaccine(vaccine); } - static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton }) { - const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton); + static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName }) { + const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName); PageInitializer.#initializeSelectElement( { selectElement: symptomSelectElement, @@ -15,8 +15,8 @@ class PageInitializer { }); } - static #configureVaccine({ vaccineSelectElement, prrBySymptomTableElement, downloadPrrBySymptomTableButton }) { - const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton); + static #configureVaccine({ vaccineSelectElement, prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName }) { + const prrBySymptomTableView = new PrrBySymptomTableView(prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName); PageInitializer.#initializeSelectElement( { selectElement: vaccineSelectElement, diff --git a/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js b/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js index f3187d18356..c3f36991e0a 100644 --- a/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js +++ b/docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js @@ -2,11 +2,11 @@ class PrrBySymptomTableView { #delegate; - constructor(prrBySymptomTableElement, downloadPrrBySymptomTableButton) { + constructor(prrBySymptomTableElement, downloadPrrBySymptomTableButton, valueName) { this.#delegate = new PrrByKeyTableView( this.#createPrrBySymptomTable(prrBySymptomTableElement), downloadPrrBySymptomTableButton, - 'Vaccine', + valueName, PrrByVaccineProvider.getPrrBySymptom); } diff --git a/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js b/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js index a669fa7d040..40782e44eef 100644 --- a/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js +++ b/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js @@ -2,9 +2,9 @@ class PrrByVaccineTableView { #delegate; - constructor(prrByVaccineTableElement, downloadPrrByVaccineTableButton) { + constructor(prrByVaccineTableElement, downloadPrrByVaccineTableButton, keyColumnName) { this.#delegate = new PrrByKeyTableView( - this.#createPrrByVaccineTable(prrByVaccineTableElement), + this.#createPrrByVaccineTable(prrByVaccineTableElement, keyColumnName), downloadPrrByVaccineTableButton, 'Symptom', PrrByVaccineProvider.getPrrByVaccine); @@ -14,10 +14,10 @@ class PrrByVaccineTableView { this.#delegate.displayPrrByKeyTable4Value(id, text); } - #createPrrByVaccineTable(tableElement) { + #createPrrByVaccineTable(tableElement, keyColumnName) { return new PrrByKeyTable({ tableElement: tableElement, - keyColumnName: 'Vaccine', + keyColumnName: keyColumnName, prrColumnName: 'Lower Confidence Limit of Proportional Reporting Ratio', shallMarkRowIfPrrTooHigh: true }); From 754a46d82b38c0abd8853ffd992c770acac0781c Mon Sep 17 00:00:00 2001 From: Frank Knoll Date: Fri, 12 Jul 2024 10:47:33 +0200 Subject: [PATCH 15/22] refactoring --- docs/SymptomsCausedByVaccines/index.html | 14 +-- .../js/PageInitializer.js | 38 ------ .../js/PrrByKey2CsvConverter.js | 41 ------- .../js/PrrByKeyTable.js | 109 ------------------ .../js/PrrByKeyTableView.js | 43 ------- .../js/PrrBySymptomTableView.js | 25 ---- .../js/PrrByVaccineProvider.js | 10 -- .../js/PrrByVaccineTableView.js | 25 ---- 8 files changed, 7 insertions(+), 298 deletions(-) delete mode 100644 docs/SymptomsCausedByVaccines/js/PageInitializer.js delete mode 100644 docs/SymptomsCausedByVaccines/js/PrrByKey2CsvConverter.js delete mode 100644 docs/SymptomsCausedByVaccines/js/PrrByKeyTable.js delete mode 100644 docs/SymptomsCausedByVaccines/js/PrrByKeyTableView.js delete mode 100644 docs/SymptomsCausedByVaccines/js/PrrBySymptomTableView.js delete mode 100644 docs/SymptomsCausedByVaccines/js/PrrByVaccineProvider.js delete mode 100644 docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js diff --git a/docs/SymptomsCausedByVaccines/index.html b/docs/SymptomsCausedByVaccines/index.html index 7627529ecaa..09aa0ed2209 100644 --- a/docs/SymptomsCausedByVaccines/index.html +++ b/docs/SymptomsCausedByVaccines/index.html @@ -28,13 +28,13 @@ - - - - - - - + + + + + + +