From 458839415a2737e6b18225ba0469a53a2bd2d035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Tue, 9 Nov 2021 22:36:27 -0300 Subject: [PATCH] feat (feature constructor): examples in Orange and Jupyter --- ...ure-constructor-zombie-survey-nhanes.ipynb | 597 ++++++++++++++++++ .../feature-constructor-zombie-survey.ows | 115 ++++ 2 files changed, 712 insertions(+) create mode 100644 transformation/feature/feature-constructor-zombie-survey-nhanes.ipynb create mode 100644 transformation/feature/feature-constructor-zombie-survey.ows diff --git a/transformation/feature/feature-constructor-zombie-survey-nhanes.ipynb b/transformation/feature/feature-constructor-zombie-survey-nhanes.ipynb new file mode 100644 index 0000000..ffa2348 --- /dev/null +++ b/transformation/feature/feature-constructor-zombie-survey-nhanes.ipynb @@ -0,0 +1,597 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%defaultDatasource jdbc:h2:mem:db" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Zombie Survey Dataset (`zombies-survey.csv`)\n", + "* name - Zombie name\n", + "* type - biological, chemical or technological\n", + "* gender - the gender before becoming a zombie\n", + "* weight - weight in kg\n", + "* height - height in m\n", + "* GBC - Green Blood Cells (million cells per microliter - mcL)\n", + "* GS - Green Substance (g/dL - grams per deciliter)\n", + "* PBC - Purple Blood Cells (million cells per microliter - mcL)\n", + "* SP - Sticky Paste (g/dL - grams per deciliter)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "DROP TABLE IF EXISTS Survey;\n", + "\n", + "CREATE TABLE Survey (\n", + " name VARCHAR(50),\n", + " type VARCHAR(13) NOT NULL,\n", + " gender VARCHAR(6) NOT NULL,\n", + " height DECIMAL(4,1),\n", + " weight DECIMAL(6,2),\n", + " gbc DECIMAL(4,1),\n", + " gs INTEGER,\n", + " pbc DECIMAL(4,1),\n", + " sp DECIMAL(4,1),\n", + " stature VARCHAR(7),\n", + " PRIMARY KEY(name)\n", + ") AS SELECT\n", + " name,type,gender,height,weight,gbc,gs,pbc,sp,'regular'\n", + "FROM CSVREAD('../../data/zombie/zombie-health/zombies-survey.csv');" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d2faf784-aa95-4c6e-995e-ed09a9e62834", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT * FROM Survey;" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "UPDATE Survey\n", + "SET stature = 'tall' WHERE height > 1.85;\n", + "\n", + "UPDATE Survey\n", + "SET stature = 'short' WHERE height < 1.6;" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8b0987e1-54dd-4238-b2cb-e3f6c83899a7", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT * FROM Survey;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pergunta: *Há alteração sigficativa da média do peso de acordo com a estatura?*" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "db135238-849d-49bc-b7aa-467c9b9ca8a2", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT stature, AVG(weight) FROM Survey GROUP BY stature ORDER BY AVG(weight);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pergunta: *O tipo de zumbi afeta na distribuição das alturas?*" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f8aae00b-1f3d-4ee4-a372-6ce224b7660c", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT type, stature, COUNT(*) FROM Survey GROUP BY type, stature ORDER BY type, stature;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pergunta: *Há diferença de altura entre zumbis masculinos e femininos?*" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9e331efc-89a0-40cb-8852-85c61c246ba6", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT gender, stature, COUNT(*) FROM Survey GROUP BY gender, stature ORDER BY gender, stature;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# National Health and Nutrition Examination Survey\n", + "[https://wwwn.cdc.gov/nchs/nhanes/](https://wwwn.cdc.gov/nchs/nhanes/)\n", + "\n", + "## NHANES datasets from 2013-2014\n", + "\n", + "This dataset was extracted from [NHANES 2013-2014](https://wwwn.cdc.gov/nchs/nhanes/continuousnhanes/default.aspx?BeginYear=2013). The following tables are available:\n", + "\n", + "### `demographic-person.csv`\n", + "\n", + "Persons who participated in the survey.\n", + "\n", + "| field | description | domain |\n", + "|-------|-------------|--------|\n", + "| `id` | id of a participant | number |\n", + "| `gender` | gender of the participant | `1` - male; `2` - female |\n", + "| `age` | age of the participant | number |\n", + "\n", + "### `medications-drug.csv`\n", + "\n", + "Drugs catalog.\n", + "\n", + "| field | description | domain |\n", + "|-------|-------------|--------|\n", + "| `code` | code of the drug | string |\n", + "| `name` | name of the drug | string |\n", + "\n", + "### `medications-use.csv`\n", + "\n", + "Records drugs used by participants in the survey and how many days they are continuously using the drug.\n", + "\n", + "| field | description | domain |\n", + "|-------|-------------|--------|\n", + "| `person_id` | id of a participant in the survey | number |\n", + "| `drug_code` | code of a drug in the catalog | string |\n", + "| `days_use` | number of days of use |" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "DROP TABLE IF EXISTS Pessoa;\n", + "DROP TABLE IF EXISTS Medicamento;\n", + "DROP TABLE IF EXISTS UsoMedicamento;\n", + "\n", + "CREATE TABLE Pessoa (\n", + " Id VARCHAR(5) NOT NULL,\n", + " Genero INTEGER,\n", + " Idade INTEGER,\n", + " FaixaEtaria VARCHAR(11),\n", + " NumeroMedicamentos FLOAT,\n", + " NoMed BOOLEAN,\n", + " Med BOOLEAN,\n", + " MedAcimaMedia BOOLEAN,\n", + " PRIMARY KEY(Id)\n", + ") AS SELECT\n", + " id,\n", + " gender,\n", + " age,\n", + " 'adulto',\n", + " 0,\n", + " NULL,\n", + " NULL,\n", + " FALSE\n", + "FROM CSVREAD('../../data/nhanes/demographic-person.csv');\n", + "\n", + "CREATE TABLE Medicamento (\n", + " Codigo VARCHAR(6) NOT NULL,\n", + " NomeMedicamento VARCHAR(100) NOT NULL,\n", + " PRIMARY KEY(Codigo)\n", + ") AS SELECT\n", + " code,\n", + " name\n", + "FROM CSVREAD('../../data/nhanes/medications-drug.csv');\n", + "\n", + "CREATE TABLE UsoMedicamento (\n", + " IdPessoa VARCHAR(5) NOT NULL,\n", + " CodMedicamento VARCHAR(6) NOT NULL,\n", + " DiasUso INTEGER,\n", + " FOREIGN KEY(IdPessoa)\n", + " REFERENCES Pessoa(Id)\n", + " ON DELETE NO ACTION\n", + " ON UPDATE NO ACTION,\n", + " FOREIGN KEY(CodMedicamento)\n", + " REFERENCES Medicamento(Codigo)\n", + " ON DELETE NO ACTION\n", + " ON UPDATE NO ACTION\n", + ") AS SELECT\n", + " person_id,\n", + " drug_code,\n", + " days_use\n", + "FROM CSVREAD('../../data/nhanes/medications-use.csv');" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ce5995ac-f181-448a-9736-b8fe75e53a63", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c4dd0496-58e8-4e43-b11f-562654cc1700", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c518db6c-1415-4c95-9156-f0775b504b90", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT * FROM Pessoa;\n", + "SELECT * FROM Medicamento;\n", + "SELECT * FROM UsoMedicamento;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Features para Análise de comportamento estatístico\n", + "* **NumeroMedicamentos** - número de medicamentos tomados por pessoa\n", + "* **NoMed** - pessoas que não tomam medicamento\n", + "* **Med** - pessoas que tomam algum medicamento\n", + "* **MedAcimaMedia** - pessoas que usam mais medicamentos do que a média" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "Update Pessoa p\n", + "SET NumeroMedicamentos = (SELECT COUNT(CodMedicamento) NumeroMedicamentos\n", + " FROM UsoMedicamento um\n", + " WHERE um.IdPessoa = p.Id);" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "182fcea3-cf0b-40bc-b6bf-5bbdc56a92b4", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT * FROM Pessoa;" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.4753285395487232" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SELECT AVG(NumeroMedicamentos) FROM Pessoa WHERE NumeroMedicamentos > 0;" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "Update Pessoa\n", + "SET FaixaEtaria = 'crianca'\n", + "WHERE Idade <= 10;\n", + "\n", + "Update Pessoa\n", + "SET FaixaEtaria = 'adolescente'\n", + "WHERE Idade > 10 AND Idade <= 17;\n", + "\n", + "Update Pessoa\n", + "SET FaixaEtaria = 'meia-idade'\n", + "WHERE Idade >= 40 AND Idade <= 64;\n", + "\n", + "Update Pessoa\n", + "SET FaixaEtaria = 'idoso'\n", + "WHERE Idade > 64;" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "Update Pessoa\n", + "SET NoMed = TRUE\n", + "WHERE NumeroMedicamentos = 0;\n", + "\n", + "Update Pessoa\n", + "SET Med = TRUE\n", + "WHERE NumeroMedicamentos > 0;\n", + "\n", + "Update Pessoa\n", + "SET MedAcimaMedia = TRUE\n", + "WHERE NumeroMedicamentos > (SELECT AVG(NumeroMedicamentos) FROM Pessoa WHERE NumeroMedicamentos > 0);" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b5e9ab00-c7ec-46c2-ad14-6c40509dbfc6", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT * FROM Pessoa;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pergunta: *Qual a distribuição de uso de número de medicamentos por faixa etária?*" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1d926184-2704-4f24-97a0-bdbf761d555a", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT FaixaEtaria, AVG(NumeroMedicamentos) Media\n", + "FROM Pessoa WHERE NumeroMedicamentos > 0\n", + "GROUP BY FaixaEtaria ORDER BY FaixaEtaria;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pergunta: *Qual a proporção de pessoas que não tomas e tomam medicamentos por faixa etária?*" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c31c10c9-a699-4ec7-a859-b8babff27681", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT FaixaEtaria, COUNT(NoMed) MedFree, COUNT(Med) MedWith, Cast(COUNT(NoMed) AS FLOAT) / COUNT(Med) Proportion\n", + "FROM Pessoa GROUP BY FaixaEtaria;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pergunta: *Há diferença significativa de média de uso de medicamentos de acordo com o gênero, dentro das faixas etárias?*" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1b054338-89b9-49bc-8dce-0144e652fcc0", + "version_major": 2, + "version_minor": 0 + }, + "method": "display_data" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "SELECT FaixaEtaria, Genero, AVG(NumeroMedicamentos) Media\n", + "FROM Pessoa WHERE NumeroMedicamentos > 0\n", + "GROUP BY FaixaEtaria, Genero ORDER BY FaixaEtaria, Genero;" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "SQL", + "language": "SQL", + "name": "sql" + }, + "language_info": { + "codemirror_mode": "sql", + "file_extension": ".sql", + "mimetype": "", + "name": "SQL", + "nbconverter_exporter": "", + "version": "" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": false, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/transformation/feature/feature-constructor-zombie-survey.ows b/transformation/feature/feature-constructor-zombie-survey.ows new file mode 100644 index 0000000..80546a1 --- /dev/null +++ b/transformation/feature/feature-constructor-zombie-survey.ows @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + gASVaAwAAAAAAAB9lCiMEmNvbnRyb2xBcmVhVmlzaWJsZZSIjAxyZWNlbnRfcGF0aHOUXZQojB5v +cmFuZ2V3aWRnZXQudXRpbHMuZmlsZWRpYWxvZ3OUjApSZWNlbnRQYXRolJOUKYGUfZQojAdhYnNw +YXRolIxKL2hvbWUvc2FudGFuY2hlL2dpdC9sYWIybGVhcm4vZGF0YS96b21iaWUvem9tYmllLWhl +YWx0aC96b21iaWVzLXN1cnZleS5jc3aUjAZwcmVmaXiUTowHcmVscGF0aJROjAV0aXRsZZSMAJSM +BXNoZWV0lGgOjAtmaWxlX2Zvcm1hdJROdWJoBimBlH2UKGgJjE0vaG9tZS9zYW50YW5jaGUvZ2l0 +L2xhYjJsZWFybi9kYXRhL3pvbWJpZS96b21iaWUtaGVhbHRoL3pvbWJpZS12YWNjaW5hdGVkLmNz +dpRoC05oDE5oDWgOaA9oDmgQTnViaAYpgZR9lChoCYxHL2hvbWUvc2FudGFuY2hlL2dpdC9sYWIy +bGVhcm4vZGF0YS96b21iaWUvem9tYmllLWhlYWx0aC96b21iaWUtZGlldC5jc3aUaAtOaAxOaA1o +DmgPaA5oEE51YmgGKYGUfZQoaAmMPy91c3IvbG9jYWwvbGliL3B5dGhvbjMuOC9kaXN0LXBhY2th +Z2VzL09yYW5nZS9kYXRhc2V0cy9pcmlzLnRhYpRoC4wPc2FtcGxlLWRhdGFzZXRzlGgMjAhpcmlz +LnRhYpRoDWgOaA9oDmgQTnViaAYpgZR9lChoCYxCL3Vzci9sb2NhbC9saWIvcHl0aG9uMy44L2Rp +c3QtcGFja2FnZXMvT3JhbmdlL2RhdGFzZXRzL3RpdGFuaWMudGFilGgLaBpoDIwLdGl0YW5pYy50 +YWKUaA1oDmgPaA5oEE51YmgGKYGUfZQoaAmMQi91c3IvbG9jYWwvbGliL3B5dGhvbjMuOC9kaXN0 +LXBhY2thZ2VzL09yYW5nZS9kYXRhc2V0cy9ob3VzaW5nLnRhYpRoC2gaaAyMC2hvdXNpbmcudGFi +lGgNaA5oD2gOaBBOdWJoBimBlH2UKGgJjEgvdXNyL2xvY2FsL2xpYi9weXRob24zLjgvZGlzdC1w +YWNrYWdlcy9PcmFuZ2UvZGF0YXNldHMvaGVhcnRfZGlzZWFzZS50YWKUaAtoGmgMjBFoZWFydF9k +aXNlYXNlLnRhYpRoDWgOaA9oDmgQTnViaAYpgZR9lChoCYxJL3Vzci9sb2NhbC9saWIvcHl0aG9u +My44L2Rpc3QtcGFja2FnZXMvT3JhbmdlL2RhdGFzZXRzL2Jyb3duLXNlbGVjdGVkLnRhYpRoC2ga +aAyMEmJyb3duLXNlbGVjdGVkLnRhYpRoDWgOaA9oDmgQTnViaAYpgZR9lChoCYw+L3Vzci9sb2Nh +bC9saWIvcHl0aG9uMy44L2Rpc3QtcGFja2FnZXMvT3JhbmdlL2RhdGFzZXRzL3pvby50YWKUaAto +GmgMjAd6b28udGFilGgNaA5oD2gOaBBOdWJljAtyZWNlbnRfdXJsc5RdlIyEaHR0cHM6Ly9yYXcu +Z2l0aHVidXNlcmNvbnRlbnQuY29tL3NhbnRhbmNoZS9sYWIybGVhcm4vbWFzdGVyL2RhdGEvem9t +YmllL3pvbWJpZS1oZWFsdGgvem9tYmllLWhlYWx0aC1zeW1wdG9tcy1kaWFnbm9zdGljLXByb2Zp +bGUuY3N2lGGME3NhdmVkV2lkZ2V0R2VvbWV0cnmUQ0IB2dDLAAMAAAAAAoMAAACVAAAE2gAAAysA +AAKDAAAAugAABNoAAAMrAAAAAAAAAAAHgAAAAoMAAAC6AAAE2gAAAyuUjAtzaGVldF9uYW1lc5R9 +lIwGc291cmNllEsAjAN1cmyUaA6MDWRvbWFpbl9lZGl0b3KUfZSMC19fdmVyc2lvbl9flEsBjBBj +b250ZXh0X3NldHRpbmdzlF2UKIwVb3Jhbmdld2lkZ2V0LnNldHRpbmdzlIwHQ29udGV4dJSTlCmB +lH2UKIwGdmFsdWVzlH2UKIwJdmFyaWFibGVzlF2UaDl9lGhFXZQoXZQojAR0eXBllIwUT3Jhbmdl +LmRhdGEudmFyaWFibGWUjBBEaXNjcmV0ZVZhcmlhYmxllJOUSwCMI2Jpb2xvZ2ljYWwsIGNoZW1p +Y2FsLCB0ZWNobm9sb2dpY2FslIllXZQojAZnZW5kZXKUaE1LAIwMZmVtYWxlLCBtYWxllIllXZQo +jAZoZWlnaHSUaEuMEkNvbnRpbnVvdXNWYXJpYWJsZZSTlEsAaA6IZV2UKIwGd2VpZ2h0lGhVSwBo +DohlXZQojANnYmOUaFVLAGgOiGVdlCiMAmdzlGhVSwBoDohlXZQojANwYmOUaFVLAGgOiGVdlCiM +AnNwlGhVSwBoDohlXZQojARuYW1llGhLjA5TdHJpbmdWYXJpYWJsZZSTlEsCaA6JZWVzaDtLAXWM +CmF0dHJpYnV0ZXOUKGhKXZQojApiaW9sb2dpY2FslIwIY2hlbWljYWyUjA10ZWNobm9sb2dpY2Fs +lGWGlGhQXZQojAZmZW1hbGWUjARtYWxllGWGlGhTSwKGlGhXSwKGlGhZSwKGlGhbSwKGlGhdSwKG +lGhfSwKGlHSUjAVtZXRhc5RoYUsDhpSFlIwKY2xhc3NfdmFyc5QpjBJtb2RpZmllZF92YXJpYWJs +ZXOUXZR1YmhAKYGUfZQoaEN9lChoRV2UaDl9lGhFXZQoXZQojAJ0dpRoVUsAaA6IZV2UKIwFcmFk +aW+UaFVLAGgOiGVdlCiMCW5ld3NwYXBlcpRoVUsAaA6IZV2UKIwKdmFjY2luYXRlZJRoVUsAaA6I +ZV2UKIwEY2l0eZRoY0sCaA6JZWVzaDtLAXVoZChogksChpRohEsChpRohksChpRoiEsChpR0lGh1 +aIpLA4aUhZRoeCloeV2UdWJoQCmBlH2UKGhDfZQoaEVdlGg5fZRoRV2UKF2UKIwLYml0dGVyIGhl +cmKUaE1LAIwEMCwgMZSIZV2UKIwFc2x1Z3OUaE1LAIwEMCwgMZSIZV2UKIwKY29va2VkIHZlZ5Ro +TUsAjAQwLCAxlIhlXZQojApnaWFudCBtZWF0lGhNSwCMBDAsIDGUiGVdlCiMB3JhdyB2ZWeUaE1L +AIwEMCwgMZSIZV2UKIwHZGVzc2VydJRoTUsAjAQwLCAxlIhlXZQojAhwb3RhdG9lc5RoTUsAjAQw +LCAxlIhlXZQojApncmVlbiBtZWF0lGhNSwCMBDAsIDGUiGVdlCiMBGVnZ3OUaE1LAIwEMCwgMZSI +ZV2UKIwFYmVhbnOUaE1LAIwEMCwgMZSIZV2UKIwFaG9uZXmUaE1LAIwEMCwgMZSIZV2UKIwEZmlz +aJRoTUsAjAQwLCAxlIhlXZQojARtaWxrlGhNSwCMBDAsIDGUiGVdlCiMBWNoaWxplGhNSwCMBDAs +IDGUiGVdlCiMCWZyaWVkIHZlZ5RoTUsAjAQwLCAxlIhlXZQojApjdXBzIHdhdGVylGhVSwBoDohl +XZQojAZyZWdpb26UaE1LAIw6Y29hc3QsIGZvcmVzdCwgaGlnaGxhbmRzLCBtb3VudGFpbnMsIG5v +cnRoLCBzYXZhbm5hLCBzb3V0aJSJZWVzaDtLAXVoZCiMC2JpdHRlciBoZXJilF2UKIwBMJSMATGU +ZYaUjAVzbHVnc5RdlChozWjOZYaUjApjb29rZWQgdmVnlF2UKGjNaM5lhpSMCmdpYW50IG1lYXSU +XZQoaM1ozmWGlIwHcmF3IHZlZ5RdlChozWjOZYaUjAdkZXNzZXJ0lF2UKGjNaM5lhpSMCHBvdGF0 +b2VzlF2UKGjNaM5lhpSMCmdyZWVuIG1lYXSUXZQoaM1ozmWGlIwEZWdnc5RdlChozWjOZYaUjAVi +ZWFuc5RdlChozWjOZYaUjAVob25leZRdlChozWjOZYaUjARmaXNolF2UKGjNaM5lhpSMBG1pbGuU +XZQoaM1ozmWGlIwFY2hpbGmUXZQoaM1ozmWGlIwJZnJpZWQgdmVnlF2UKGjNaM5lhpSMCmN1cHMg +d2F0ZXKUSwKGlIwGcmVnaW9ulF2UKIwFY29hc3SUjAZmb3Jlc3SUjAloaWdobGFuZHOUjAltb3Vu +dGFpbnOUjAVub3J0aJSMB3NhdmFubmGUjAVzb3V0aJRlhpR0lGh1KWh4KWh5XZR1YmV1Lg== + + {'auto_commit': True, 'color_by_class': True, 'controlAreaVisible': True, 'dist_color_RGB': (220, 220, 220, 255), 'savedWidgetGeometry': b'\x01\xd9\xd0\xcb\x00\x03\x00\x00\x00\x00\x00H\x00\x00\x00\x1b\x00\x00\x07\x7f\x00\x00\x047\x00\x00\x02\xab\x00\x00\x00\xcc\x00\x00\x06\xa1\x00\x00\x03j\x00\x00\x00\x00\x02\x00\x00\x00\x07\x80\x00\x00\x00H\x00\x00\x00@\x00\x00\x07\x7f\x00\x00\x047', 'select_rows': True, 'selected_cols': [], 'selected_rows': [], 'show_attribute_labels': True, 'show_distributions': False, '__version__': 2} + gASVCQIAAAAAAAB9lCiMEmNvbnRyb2xBcmVhVmlzaWJsZZSIjBNzYXZlZFdpZGdldEdlb21ldHJ5 +lENCAdnQywADAAAAAAK8AAABegAABwEAAAMqAAACvAAAAZ8AAAcBAAADKgAAAAAAAAAAB4AAAAK8 +AAABnwAABwEAAAMqlIwLX192ZXJzaW9uX1+USwGMEGNvbnRleHRfc2V0dGluZ3OUXZSMFW9yYW5n +ZXdpZGdldC5zZXR0aW5nc5SMB0NvbnRleHSUk5QpgZR9lCiMBnZhbHVlc5R9lCiMDGN1cnJlbnRJ +bmRleJRLAEr+////hpSMC2Rlc2NyaXB0b3JzlF2UjChPcmFuZ2Uud2lkZ2V0cy5kYXRhLm93ZmVh +dHVyZWNvbnN0cnVjdG9ylIwSRGlzY3JldGVEZXNjcmlwdG9ylJOUKIwHc3RhdHVyZZSMRCJ0YWxs +IiBpZiBoZWlnaHQgPiAxLjg1IGVsc2UgInNob3J0IiBpZiBoZWlnaHQgPCAxLjYwIGVsc2UgInJl +Z3VsYXIilCmJdJSBlGFoBEsBdYwKYXR0cmlidXRlc5R9lCiMBHR5cGWUSwGMBmdlbmRlcpRLAYwG +aGVpZ2h0lEsCjAZ3ZWlnaHSUSwKMA2diY5RLAowCZ3OUSwKMA3BiY5RLAowCc3CUSwJ1jAVtZXRh +c5R9lIwEbmFtZZRLA3N1YmF1Lg== + + gASVOQIAAAAAAAB9lCiMC2F1dG9fY29tbWl0lIiMEmNvbnRyb2xBcmVhVmlzaWJsZZSIjBNzYXZl +ZFdpZGdldEdlb21ldHJ5lENCAdnQywADAAAAAABIAAAAGwAAB38AAAQ3AAAASAAAAEAAAAd/AAAE +NwAAAAACAAAAB4AAAABIAAAAQAAAB38AAAQ3lIwHc29ydGluZ5RLAIwDc2lwlIwOX3VucGlja2xl +X2VudW2Uk5SMDFB5UXQ1LlF0Q29yZZSMCVNvcnRPcmRlcpRLAYeUUpSGlIwLX192ZXJzaW9uX1+U +SwKMEGNvbnRleHRfc2V0dGluZ3OUXZQojBVvcmFuZ2V3aWRnZXQuc2V0dGluZ3OUjAdDb250ZXh0 +lJOUKYGUfZQojAZ2YWx1ZXOUfZQojAljb2xvcl92YXKUjAZnZW5kZXKUS2WGlIwNc2VsZWN0ZWRf +dmFyc5RdlIwHc3RhdHVyZZRLZYaUYUr9////hpRoDksCdYwKYXR0cmlidXRlc5R9lCiMBHR5cGWU +SwFoGUsBjAZoZWlnaHSUSwKMBndlaWdodJRLAowDZ2JjlEsCjAJnc5RLAowDcGJjlEsCjAJzcJRL +AmgdSwF1jAVtZXRhc5R9lIwEbmFtZZRLA3N1YmgTKYGUfZQoaBZ9lChoGGgZS2WGlGgbXZRoI0tm +hpRhSv3///+GlGgOSwJ1aCB9lChoIksBaBlLAWgjSwJoJEsCaCVLAmgmSwJoJ0sCaChLAnVoKX2U +aCtLA3N1YmV1Lg== + + gASVKAIAAAAAAAB9lCiMCmF1dG9fYXBwbHmUiIwSY29udHJvbEFyZWFWaXNpYmxllIiMEGN1bXVs +YXRpdmVfZGlzdHKUiYwTZml0dGVkX2Rpc3RyaWJ1dGlvbpRLAYwJaGlkZV9iYXJzlImMDWtkZV9z +bW9vdGhpbmeUSwWME3NhdmVkV2lkZ2V0R2VvbWV0cnmUQ0IB2dDLAAMAAAAAAcQAAABtAAAGtgAA +AvkAAAHEAAAAkgAABrYAAAL5AAAAAAAAAAAHgAAAAcQAAACSAAAGtgAAAvmUjApzaG93X3Byb2Jz +lImMDHNvcnRfYnlfZnJlcZSJjA9zdGFja2VkX2NvbHVtbnOUiYwLX192ZXJzaW9uX1+USwGMEGNv +bnRleHRfc2V0dGluZ3OUXZSMFW9yYW5nZXdpZGdldC5zZXR0aW5nc5SMB0NvbnRleHSUk5QpgZR9 +lCiMBnZhbHVlc5R9lCiMBGN2YXKUjAdzdGF0dXJllEtlhpSMDm51bWJlcl9vZl9iaW5zlEsASv7/ +//+GlIwJc2VsZWN0aW9ulI+UKEsCkEr+////hpSMA3ZhcpRoF0tlhpRoDEsBdYwKYXR0cmlidXRl +c5R9lCiMBHR5cGWUSwGMBmdlbmRlcpRLAYwGaGVpZ2h0lEsCjAZ3ZWlnaHSUSwKMA2diY5RLAowC +Z3OUSwKMA3BiY5RLAowCc3CUSwJoF0sBdYwFbWV0YXOUfZSMBG5hbWWUSwNzdWJhdS4= + + + + + +