{ "cells": [ { "cell_type": "markdown", "id": "0", "metadata": {}, "source": [ "# Secure Data Disclosure: Client side" ] }, { "cell_type": "markdown", "id": "1", "metadata": {}, "source": [ "This notebook showcases how researcher could use the Secure Data Disclosure system. It explains the different functionnalities provided by the `lomas_client` library to interact with the secure server.\n", "\n", "The secure data are never visible by researchers. They can only access to differentially private responses via queries to the server.\n", "\n", "Each user has access to one or multiple projects and for each dataset has a limited budget with $\\epsilon$ and $\\delta$ values." ] }, { "cell_type": "code", "execution_count": null, "id": "2", "metadata": {}, "outputs": [ { "data": { "image/png": "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QjugkjZv2mDHrNOMgT+UnLABAFCRvLydTIvWbUyLVm1No11q9mAPSIbQDogeQjsgvbI5tKN7LJAiVVSsXrHEjlO0quQvgR0AIFXbt+s7ZCnfIQAAAEgZoR2QgmLXFXbR/Flm00YqQgEAVaNq7cUl3yUL504v+W5Z55YCAAAA5RHaAUl89923ZvmSBfbkau3qFW4pAADVs27NSlt1p++Y77791i0FAAAAyhDaAQloNlidUGl2WM0SCwBAOpXNQD6dGcgBAABQDqEdELBl8yazZOEc2x22aP0atxQAgMwoWr/W/kik7x59BwEAAABCaAf4aEZYdYVduWyR+X7bNrcUAIDM+v77bfa7R99B+i4CAAAACO0AAAAAAACAiCG0A3xatGprOnTpaVq33c3UqVPXLQUAILP0naPvng5detjvIgAAAIDQDgho0LCRad+hqz1xKmja3C0FACAzCpo0t985+u5p0HAXtxQAAAC1HaEdkEDT5q1Mh849TNvCzqZe/QZuKQAA6VGvXv2S75hONrDTdw4AAADgR2gHJLFzyQlVm/YdbXjXrEVrtxQAgOrRd4rCujbtO9nvGgAAACCI0A5IQX6TZvbkqrDj7qZho8ZuKQAAlaPur+1Lvkt269yj5LuFIRgAAACQGKEdkKKddqpjWrUptOFdy9btTF5enrsFAICKtWityY56mNYl3yV16tRxSwEAAIBwedtLuHZS/oCiqKjItdJr8cpi1wKi75v1a8zi+bPMt1u3uCWJ7dK4wOTtlDgjr79z5k/eJk6c6FrGHHrooa6V3caNG+daxgwcONC1AKBytn73vWtVzvYffjAbN1R8TKTur7t16maaNGvplgDRUdg637VqRkFBgWuVfIZSOw0Bap3i4vScF+dveNK1gNqtuPEw16q+/Pya/d4ktAOqYeuWzWbNqmVmzcplZtu279zS8nru1S9pt9qaOGDOxYPkmtgvAch9VT3+0I820z77wF0rr06dura6rkWrtnZmciCKCO2A6CG0A9Irm0M7uscC1VC/QUPTbrcutrtTk2Yt3FIAQG1X0LS5/W5o36ErgR0AAACqhNAOSAN1edIMswrwFOQBAGqnevUbmLaFne13QtPmrdxSAAAAoPII7YA0qbtzPbNruw72RK15y13dUgBAbdGsRWv7HdCmfUc7jh0AAABQHYR2QJo1LmhqOnbdw17q1t3ZLtO4RgCA3KR9vLrCdtp9T5PfpJlbCgAAAFQPoR2QIaq222Of/U3zVm3cEgBArlEXWO3rNdkEAAAAkE6EdkAGqdKuY5eedowjAEBu0b69c7deZued67klAAAAQPoQ2gEAAAAAAAARQ2gHAAAAAAAARAyhHQAAAAAAABAxhHYAAAAAAABAxBDaAQAAAAAAABFDaAcAAAAAAABEDKEdAAAAAAAAEDGEdgAAAAAAAEDEENoBAAAAAAAAEUNoBwAAAAAAAEQMoR0AAAAAAAAQMYR2AAAAAAAAQMQQ2gEAAAAAAAARQ2gHAAAAAAAARAyhHQAAAAAAABAxhHYAAAAAAABAxBDaAQAAAAAAABFDaAcAAAAAAABEDKEdAAAAAAAAEDGEdgAAAAAAAEDEENoBAAAAAAAAEUNoBwAAAAAAAEQMoR0AAAAAAAAQMYR2AAAAAAAAQMTkbS/h2knl5eW5ljFFRUWuBSBbFBQUuJYxKX7sI4/9EgAA2SUXj0eAdCsuLnYtAFGTn5/vWjWDSjsAAAAAAAAgYgjtAAAAAAAAgIghtAMAAAAAAAAihtAOAAAAAAAAiBhCOwAAAAAAACBiCO0AAAAAAACAiCG0AwAAAAAAACKG0A4AAAAAAACIGEI7AAAAAAAAIGII7QAAAAAAAICIIbQDAAAAAAAAIobQDgAAAAAAAIgYQjsAAAAAAAAgYgjtAAAAAAAAgIghtAMAAAAAAAAihtAOAAAAAAAAiBhCOwAAAAAAACBiCO0AAAAAAACAiCG0AwAAAAAAACKG0A4AAAAAAACIGEI7AAAAAAAAIGII7QAAAAAAAICIIbQDAAAAAAAAIobQDgAAAAAAAIgYQjsAAAAAAAAgYgjtAAAAAAAAgIjJ217CtZPKy8tzLQDZLsWPfeSxXwIAIHvlyvEIkG7FxcWuBSBq8vPzXatmENoBtRChHQAA2NEI7QAASC7l7rHnnnuuawHIZrn0WWa/BABAduI7HACAiqVcaQcAAAAAAACgZjARBQAAAAAAABAxhHYAAAAAAABAxBDaAQAAAAAAABFDaAcAAAAAAABEDKEdAAAAAAAAEDGEdgAAAAAAAEDEENoBAAAAAAAAEUNoBwAAAAAAAEQMoR0AAAAAAAAQMYR2AAAAAAAAQMQQ2gEAAAAAAAARQ2gHAAAAAAAARAyhHQAAAAAAABAxhHYAAAAAAABApBjz/9UAdGV1iSE7AAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": null, "metadata": { "image/png": { "width": 800 } }, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename=\"images/image_demo_client.png\", width=800)" ] }, { "cell_type": "markdown", "id": "3", "metadata": {}, "source": [ "We will use the Synthetic Swiss Income Dataset to demonstrate the how to use the library `lomas_client` with polars queries." ] }, { "cell_type": "markdown", "id": "4", "metadata": {}, "source": [ "## Step 1: Install the library\n", "\n", "It can be installed via the pip command:" ] }, { "cell_type": "code", "execution_count": null, "id": "5", "metadata": {}, "outputs": [], "source": [ "import sys\n", "import os\n", "sys.path.append(os.path.abspath(os.path.join('..')))\n", "# !pip install lomas_client" ] }, { "cell_type": "code", "execution_count": null, "id": "6", "metadata": {}, "outputs": [], "source": [ "from lomas_client import Client\n", "import numpy as np\n", "import opendp.prelude as dp" ] }, { "cell_type": "markdown", "id": "7", "metadata": {}, "source": [ "## Step 2: Initialise the client\n", "\n", "Once the library is installed, a Client object must be created. It is responsible for sending sending requests to the server and processing responses in the local environment. It enables a seamless interaction with the server. \n", "\n", "The client needs a few parameters to be created. Usually, these would be set in the environment by the system administrator and be transparent to lomas users. In this instance, the following code snippet sets a few of these parameters that are specific to this notebook. " ] }, { "cell_type": "code", "execution_count": null, "id": "8", "metadata": {}, "outputs": [], "source": [ "# The following would usually be set in the environment by a system administrator\n", "# and be tranparent to lomas users. We reset these ones because they are specific to this notebook.\n", "\n", "# Note that all client settings can also be passed as keyword arguments to the Client constructor.\n", "# eg. client = Client(client_id = \"Dr.Antartica\") takes precedence over setting the \"LOMAS_CLIENT_CLIENT_ID\"\n", "# environment variable.\n", "\n", "import os\n", "\n", "USER_NAME = \"Dr.FSO\"\n", "os.environ[\"LOMAS_CLIENT_CLIENT_ID\"] = USER_NAME\n", "os.environ[\"LOMAS_CLIENT_CLIENT_SECRET\"] = USER_NAME.lower()\n", "os.environ[\"LOMAS_CLIENT_DATASET_NAME\"] = \"FSO_INCOME_SYNTHETIC\"" ] }, { "cell_type": "code", "execution_count": null, "id": "9", "metadata": {}, "outputs": [], "source": [ "client = Client()" ] }, { "cell_type": "markdown", "id": "10", "metadata": {}, "source": [ "## Step 3: Metadata and dummy dataset" ] }, { "cell_type": "markdown", "id": "11", "metadata": {}, "source": [ "### Getting dataset metadata\n", "\n", "Dr. FSO has never seen the data and as a first step to understand what is available to her, she would like to check the metadata of the dataset. Therefore, she just needs to call the `get_dataset_metadata()` function of the client. As this is public information, this does not cost any budget.\n", "\n", "This function returns metadata information in a format based on [SmartnoiseSQL dictionary format](https://docs.smartnoise.org/sql/metadata.html#dictionary-format), where among other, there is information about all the available columns, their type, bound values (see Smartnoise page for more details). Any metadata is required for Smartnoise-SQL is also required here and additional information such that the different categories in a string type column column can be added." ] }, { "cell_type": "code", "execution_count": null, "id": "12", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'max_ids': 1,\n", " 'rows': 2032543,\n", " 'row_privacy': True,\n", " 'censor_dims': False,\n", " 'columns': {'region': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': 474690,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'int',\n", " 'precision': 32,\n", " 'cardinality': 7,\n", " 'categories': [1, 2, 3, 4, 5, 6, 7]},\n", " 'eco_branch': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': 34330,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'int',\n", " 'precision': 32,\n", " 'cardinality': 72,\n", " 'categories': [8,\n", " 10,\n", " 11,\n", " 13,\n", " 14,\n", " 15,\n", " 16,\n", " 17,\n", " 18,\n", " 20,\n", " 21,\n", " 22,\n", " 23,\n", " 24,\n", " 25,\n", " 26,\n", " 27,\n", " 28,\n", " 29,\n", " 30,\n", " 31,\n", " 32,\n", " 33,\n", " 35,\n", " 37,\n", " 38,\n", " 41,\n", " 42,\n", " 43,\n", " 45,\n", " 46,\n", " 47,\n", " 49,\n", " 50,\n", " 52,\n", " 53,\n", " 55,\n", " 56,\n", " 58,\n", " 59,\n", " 60,\n", " 61,\n", " 62,\n", " 63,\n", " 64,\n", " 65,\n", " 66,\n", " 68,\n", " 69,\n", " 70,\n", " 71,\n", " 72,\n", " 73,\n", " 74,\n", " 75,\n", " 77,\n", " 78,\n", " 79,\n", " 80,\n", " 81,\n", " 82,\n", " 85,\n", " 86,\n", " 87,\n", " 88,\n", " 90,\n", " 91,\n", " 92,\n", " 93,\n", " 94,\n", " 95,\n", " 96]},\n", " 'profession': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': 78857,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'int',\n", " 'precision': 32,\n", " 'cardinality': 28,\n", " 'categories': [10,\n", " 21,\n", " 22,\n", " 23,\n", " 24,\n", " 25,\n", " 31,\n", " 32,\n", " 33,\n", " 34,\n", " 41,\n", " 42,\n", " 43,\n", " 51,\n", " 52,\n", " 53,\n", " 61,\n", " 62,\n", " 71,\n", " 72,\n", " 73,\n", " 74,\n", " 81,\n", " 83,\n", " 91,\n", " 92,\n", " 93,\n", " 94]},\n", " 'education': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': 268697,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'int',\n", " 'precision': 32,\n", " 'cardinality': 8,\n", " 'categories': [1, 2, 3, 4, 5, 6, 7, 8]},\n", " 'age': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': 53952,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'int',\n", " 'precision': 32,\n", " 'lower': 0,\n", " 'upper': 120},\n", " 'sex': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': 1397824,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'int',\n", " 'precision': 32,\n", " 'cardinality': 2,\n", " 'categories': [0, 1]},\n", " 'income': {'private_id': False,\n", " 'nullable': False,\n", " 'max_partition_length': None,\n", " 'max_influenced_partitions': None,\n", " 'max_partition_contributions': None,\n", " 'type': 'float',\n", " 'precision': 64,\n", " 'lower': 1000.0,\n", " 'upper': 100000.0}}}" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "income_metadata = client.get_dataset_metadata()\n", "income_metadata" ] }, { "cell_type": "markdown", "id": "13", "metadata": {}, "source": [ "### Get a dummy dataset\n", "\n", "Now, that she has seen and understood the metadata, she wants to get an even better understanding of the dataset (but is still not able to see it). A solution to have an idea of what the dataset looks like it to create a dummy dataset. \n", "\n", "Based on the public metadata of the dataset, a random dataframe can be created created. By default, there will be 100 rows and the seed is set to 42 to ensure reproducibility, but these 2 variables can be changed to obtain different dummy datasets.\n", "Getting a dummy dataset does not affect the budget as there is no differential privacy here. It is not a synthetic dataset and all that could be learn here is already present in the public metadata (it is created randomly on the fly based on the metadata).\n", "\n", "Dr. FSO first create a dummy dataset with 200 rows and chooses a seed of 0." ] }, { "cell_type": "code", "execution_count": null, "id": "14", "metadata": {}, "outputs": [], "source": [ "NB_ROWS = 200\n", "SEED = 0" ] }, { "cell_type": "code", "execution_count": null, "id": "15", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "shape: (200, 7)
regioneco_branchprofessioneducationagesexincome
i32i32i32i32i32i32f64
62794511111611.50605
55233824072395.412826
43581641067983.841861
227255113166033.243543
388414119069054.085229
777931119037851.861395
37433721021927.13039
79572451141515.893667
35834825144467.752841
662834102099534.680535
" ], "text/plain": [ "shape: (200, 7)\n", "┌────────┬────────────┬────────────┬───────────┬─────┬─────┬──────────────┐\n", "│ region ┆ eco_branch ┆ profession ┆ education ┆ age ┆ sex ┆ income │\n", "│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │\n", "│ i32 ┆ i32 ┆ i32 ┆ i32 ┆ i32 ┆ i32 ┆ f64 │\n", "╞════════╪════════════╪════════════╪═══════════╪═════╪═════╪══════════════╡\n", "│ 6 ┆ 27 ┆ 94 ┆ 5 ┆ 111 ┆ 1 ┆ 1611.50605 │\n", "│ 5 ┆ 52 ┆ 33 ┆ 8 ┆ 24 ┆ 0 ┆ 72395.412826 │\n", "│ 4 ┆ 35 ┆ 81 ┆ 6 ┆ 41 ┆ 0 ┆ 67983.841861 │\n", "│ 2 ┆ 27 ┆ 25 ┆ 5 ┆ 113 ┆ 1 ┆ 66033.243543 │\n", "│ 3 ┆ 88 ┆ 41 ┆ 4 ┆ 119 ┆ 0 ┆ 69054.085229 │\n", "│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n", "│ 7 ┆ 77 ┆ 93 ┆ 1 ┆ 119 ┆ 0 ┆ 37851.861395 │\n", "│ 3 ┆ 74 ┆ 33 ┆ 7 ┆ 21 ┆ 0 ┆ 21927.13039 │\n", "│ 7 ┆ 95 ┆ 72 ┆ 4 ┆ 51 ┆ 1 ┆ 41515.893667 │\n", "│ 3 ┆ 58 ┆ 34 ┆ 8 ┆ 25 ┆ 1 ┆ 44467.752841 │\n", "│ 6 ┆ 62 ┆ 83 ┆ 4 ┆ 102 ┆ 0 ┆ 99534.680535 │\n", "└────────┴────────────┴────────────┴───────────┴─────┴─────┴──────────────┘" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dummy_lf = client.get_dummy_lf(nb_rows=NB_ROWS, seed = SEED)\n", "\n", "dummy_lf.collect()" ] }, { "cell_type": "code", "execution_count": null, "id": "16", "metadata": {}, "outputs": [], "source": [ "test = client.get_dummy_dataset(nb_rows=NB_ROWS, seed = SEED)" ] }, { "cell_type": "code", "execution_count": null, "id": "17", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "region int32\n", "eco_branch int32\n", "profession int32\n", "education int32\n", "age int32\n", "sex int32\n", "income float64\n", "dtype: object" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test.dtypes" ] }, { "cell_type": "markdown", "id": "18", "metadata": {}, "source": [ "## Step 4: Prepare the pipeline" ] }, { "cell_type": "markdown", "id": "19", "metadata": {}, "source": [ "It is necessary to prepare the pipeline before sending the query to the client." ] }, { "cell_type": "code", "execution_count": null, "id": "20", "metadata": {}, "outputs": [], "source": [ "import polars as pl" ] }, { "cell_type": "markdown", "id": "21", "metadata": {}, "source": [ "### a. mean" ] }, { "cell_type": "code", "execution_count": null, "id": "22", "metadata": {}, "outputs": [], "source": [ "# Income bounds\n", "income_lower_bound, income_upper_bound = income_metadata[\"columns\"][\"income\"][\"lower\"], income_metadata[\"columns\"][\"income\"][\"upper\"]" ] }, { "cell_type": "code", "execution_count": null, "id": "23", "metadata": {}, "outputs": [], "source": [ "plan = dummy_lf.select(\n", " pl.col(\"income\").dp.mean(bounds=(income_lower_bound, income_upper_bound), scale=(100,1)\n", "))" ] }, { "cell_type": "markdown", "id": "24", "metadata": {}, "source": [ "## Step 5: Send the queries" ] }, { "cell_type": "markdown", "id": "25", "metadata": {}, "source": [ "### a. Dummy queries" ] }, { "cell_type": "code", "execution_count": null, "id": "26", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/azureuser/work/sdd-poc-server/client/lomas_client/libraries/opendp.py:58: UserWarning: 'json' serialization format of LazyFrame is deprecated\n", " body_json[\"opendp_json\"] = opendp_pipeline.serialize(format=\"json\")\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "shape: (1, 1)\n", "┌────────────┐\n", "│ income │\n", "│ --- │\n", "│ f64 │\n", "╞════════════╡\n", "│ 7052.65426 │\n", "└────────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan, dummy = False, nb_rows = NB_ROWS, seed=SEED)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "markdown", "id": "27", "metadata": {}, "source": [ "By default, the client will use a laplace mechanism. Note that Dr. FSO can also use a Gaussian mechanism if wanted." ] }, { "cell_type": "code", "execution_count": null, "id": "28", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (1, 1)\n", "┌──────────────┐\n", "│ income │\n", "│ --- │\n", "│ f64 │\n", "╞══════════════╡\n", "│ 49799.560815 │\n", "└──────────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan, mechanism = \"gaussian\", fixed_delta = 1.0, dummy = True, nb_rows = NB_ROWS, seed=SEED)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "markdown", "id": "29", "metadata": {}, "source": [ "### b. budget estimation" ] }, { "cell_type": "code", "execution_count": null, "id": "30", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epsilon=1.8346351313032196 delta=0.0\n" ] } ], "source": [ "res = client.opendp.cost(plan, mechanism = \"laplace\")\n", "\n", "print(res)" ] }, { "cell_type": "code", "execution_count": null, "id": "31", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epsilon=7.5318348577180965 delta=0.001\n" ] } ], "source": [ "res = client.opendp.cost(plan, mechanism = \"gaussian\", fixed_delta = 0.001)\n", "\n", "print(res)" ] }, { "cell_type": "markdown", "id": "32", "metadata": {}, "source": [ "### c. Actual queries" ] }, { "cell_type": "code", "execution_count": null, "id": "33", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (1, 1)\n", "┌─────────────┐\n", "│ income │\n", "│ --- │\n", "│ f64 │\n", "╞═════════════╡\n", "│ 7052.657673 │\n", "└─────────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan, mechanism = \"laplace\")\n", "\n", "print(res.result.value)" ] }, { "cell_type": "code", "execution_count": null, "id": "34", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (1, 1)\n", "┌────────────┐\n", "│ income │\n", "│ --- │\n", "│ f64 │\n", "╞════════════╡\n", "│ 7052.65083 │\n", "└────────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan, mechanism = \"gaussian\", fixed_delta = 0.001)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "markdown", "id": "35", "metadata": {}, "source": [ "## Group_by examples" ] }, { "cell_type": "code", "execution_count": null, "id": "36", "metadata": {}, "outputs": [], "source": [ "# Grouped by \"sex\"\n", "plan = dummy_lf.group_by(\"sex\").agg([\n", " pl.col(\"income\").dp.mean(bounds=(income_lower_bound, income_upper_bound), scale=(100.0,1))\n", "])" ] }, { "cell_type": "code", "execution_count": null, "id": "37", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (2, 2)\n", "┌─────┬──────────────┐\n", "│ sex ┆ income │\n", "│ --- ┆ --- │\n", "│ i64 ┆ f64 │\n", "╞═════╪══════════════╡\n", "│ 0 ┆ 53882.461146 │\n", "│ 1 ┆ 53408.068083 │\n", "└─────┴──────────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan, dummy=True)\n", "print(res.result.value)" ] }, { "cell_type": "code", "execution_count": null, "id": "38", "metadata": {}, "outputs": [], "source": [ "plan = dummy_lf.group_by([\"sex\",\"region\"]).agg([\n", " pl.col(\"income\").dp.mean(bounds=(income_lower_bound, income_upper_bound), scale=(100.0,1))\n", "])" ] }, { "cell_type": "code", "execution_count": null, "id": "39", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (14, 3)\n", "┌─────┬────────┬──────────────┐\n", "│ sex ┆ region ┆ income │\n", "│ --- ┆ --- ┆ --- │\n", "│ i64 ┆ i64 ┆ f64 │\n", "╞═════╪════════╪══════════════╡\n", "│ 1 ┆ 1 ┆ 53546.711499 │\n", "│ 1 ┆ 6 ┆ 35182.665322 │\n", "│ 0 ┆ 2 ┆ 51482.55961 │\n", "│ 1 ┆ 2 ┆ 28893.018587 │\n", "│ 1 ┆ 4 ┆ 67591.044946 │\n", "│ … ┆ … ┆ … │\n", "│ 0 ┆ 6 ┆ 49216.417821 │\n", "│ 0 ┆ 4 ┆ 66982.404975 │\n", "│ 0 ┆ 7 ┆ 56431.686061 │\n", "│ 1 ┆ 5 ┆ 58196.608609 │\n", "│ 1 ┆ 3 ┆ 68713.913721 │\n", "└─────┴────────┴──────────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan, dummy=True)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "code", "execution_count": null, "id": "40", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epsilon=1.1015634949951034 delta=0.001\n" ] } ], "source": [ "res = client.opendp.cost(plan, mechanism = \"gaussian\", fixed_delta = 0.001)\n", "\n", "print(res)" ] }, { "cell_type": "markdown", "id": "41", "metadata": {}, "source": [ "## Quantile examples" ] }, { "cell_type": "code", "execution_count": null, "id": "42", "metadata": {}, "outputs": [], "source": [ "candidates = list(range(1_000, 100_000, 1000))" ] }, { "cell_type": "code", "execution_count": null, "id": "43", "metadata": {}, "outputs": [], "source": [ "plan = dummy_lf.select(\n", " pl.col(\"income\").dp.quantile(alpha=.75, candidates=candidates, scale=1.)\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "44", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (1, 1)\n", "┌────────┐\n", "│ income │\n", "│ --- │\n", "│ i64 │\n", "╞════════╡\n", "│ 8000 │\n", "└────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "markdown", "id": "45", "metadata": {}, "source": [ "### Quantile with group_by" ] }, { "cell_type": "code", "execution_count": null, "id": "46", "metadata": {}, "outputs": [], "source": [ "plan = dummy_lf.group_by(\"sex\").agg([\n", " pl.col(\"income\").dp.quantile(alpha=.25, candidates=candidates, scale=(1.)),\n", "])" ] }, { "cell_type": "code", "execution_count": null, "id": "47", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (2, 2)\n", "┌─────┬────────┐\n", "│ sex ┆ income │\n", "│ --- ┆ --- │\n", "│ i64 ┆ i64 │\n", "╞═════╪════════╡\n", "│ 1 ┆ 6000 │\n", "│ 0 ┆ 5000 │\n", "└─────┴────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "markdown", "id": "48", "metadata": {}, "source": [ "### Quantile with group_by on mulitple columns" ] }, { "cell_type": "code", "execution_count": null, "id": "49", "metadata": {}, "outputs": [], "source": [ "plan = dummy_lf.group_by([\"sex\", \"region\"]).agg([\n", " pl.col(\"income\").dp.quantile(alpha=.75, candidates=candidates, scale=(1.)),\n", "])" ] }, { "cell_type": "code", "execution_count": null, "id": "50", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (14, 3)\n", "┌─────┬────────┬────────┐\n", "│ sex ┆ region ┆ income │\n", "│ --- ┆ --- ┆ --- │\n", "│ i64 ┆ i64 ┆ i64 │\n", "╞═════╪════════╪════════╡\n", "│ 0 ┆ 1 ┆ 8000 │\n", "│ 1 ┆ 2 ┆ 9000 │\n", "│ 1 ┆ 4 ┆ 9000 │\n", "│ 0 ┆ 7 ┆ 6000 │\n", "│ 0 ┆ 3 ┆ 8000 │\n", "│ … ┆ … ┆ … │\n", "│ 0 ┆ 5 ┆ 7000 │\n", "│ 1 ┆ 7 ┆ 7000 │\n", "│ 1 ┆ 1 ┆ 9000 │\n", "│ 1 ┆ 5 ┆ 8000 │\n", "│ 0 ┆ 2 ┆ 7000 │\n", "└─────┴────────┴────────┘\n" ] } ], "source": [ "res = client.opendp.query(plan)\n", "\n", "print(res.result.value)" ] }, { "cell_type": "markdown", "id": "51", "metadata": {}, "source": [ "### Income distribution for partitions of the population:\n", "#### Prepare the pipeline" ] }, { "cell_type": "code", "execution_count": null, "id": "52", "metadata": {}, "outputs": [], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": null, "id": "53", "metadata": {}, "outputs": [], "source": [ "# Partitions\n", "PARTITIONS = ['sex', 'region']\n", "# Prepare a list of candidates\n", "candidates = [x * 250.0 for x in range(8, 52)]" ] }, { "cell_type": "code", "execution_count": null, "id": "54", "metadata": {}, "outputs": [], "source": [ "def make_quantile_pipeline(quantile):\n", " # Create expression\n", " return dummy_lf.group_by([\"sex\", \"region\"]).agg([\n", " pl.col(\"income\").dp.quantile(alpha=quantile, candidates=candidates, scale=1.),\n", " ])" ] }, { "cell_type": "code", "execution_count": null, "id": "55", "metadata": {}, "outputs": [], "source": [ "q25 = make_quantile_pipeline(0.25)\n", "q50 = make_quantile_pipeline(0.5)\n", "q75 = make_quantile_pipeline(0.75)" ] }, { "cell_type": "code", "execution_count": null, "id": "56", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/azureuser/work/sdd-poc-server/client/lomas_client/libraries/opendp.py:58: UserWarning: 'json' serialization format of LazyFrame is deprecated\n", " body_json[\"opendp_json\"] = opendp_pipeline.serialize(format=\"json\")\n" ] } ], "source": [ "r25 = client.opendp.query(q25)\n", "r50 = client.opendp.query(q50)\n", "r75 = client.opendp.query(q75)" ] }, { "cell_type": "markdown", "id": "57", "metadata": {}, "source": [ "Let us put together the results and show them in a table. Notice that the output is a polars dataframe, we thus need to transform it to a pandas DataFrame if we want to work with pandas." ] }, { "cell_type": "code", "execution_count": null, "id": "58", "metadata": {}, "outputs": [], "source": [ "r25 = r25.result.value.to_pandas()\n", "r50 = r50.result.value.to_pandas()\n", "r75 = r75.result.value.to_pandas()" ] }, { "cell_type": "code", "execution_count": null, "id": "59", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexregionincome_25income_50income
1015000.06250.07750.0
8115750.07000.08750.0
4024750.06000.07250.0
0125500.07000.08500.0
12035000.06250.07750.0
\n", "
" ], "text/plain": [ " sex region income_25 income_50 income\n", "1 0 1 5000.0 6250.0 7750.0\n", "8 1 1 5750.0 7000.0 8750.0\n", "4 0 2 4750.0 6000.0 7250.0\n", "0 1 2 5500.0 7000.0 8500.0\n", "12 0 3 5000.0 6250.0 7750.0" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results = pd.merge(r25, r50, on=PARTITIONS, suffixes=('_25', '_50'))\n", "results = pd.merge(results, r75, on=PARTITIONS)\n", "results.sort_values(by = ['region', 'sex']).head()" ] }, { "cell_type": "markdown", "id": "60", "metadata": {}, "source": [ "#### Visualise results" ] }, { "cell_type": "code", "execution_count": null, "id": "61", "metadata": {}, "outputs": [], "source": [ "def quantile_data(q1, q2, q3):\n", " return np.concatenate((np.random.uniform(q1, q2, size=50), np.random.uniform(q2, q3, size=50)))\n", "\n", "results['data'] = results.apply(\n", " lambda row: quantile_data(row[\"income_25\"], row[\"income_50\"], row[\"income\"]),\n", " axis=1,\n", ")\n", "results['sex'] = results['sex'].replace({0: 'woman', 1: 'man'})\n", "results['region'] = results['region'].replace({1: 'Lemanique', 2: 'Mittleland', 3: 'North-West', 4: 'Zürich', 5: 'Oriental', 6: 'Central', 7: 'Ticino'})\n", "results = results.explode('data', ignore_index=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "62", "metadata": {}, "outputs": [ { "data": { "image/png": "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9/c3Tpw4kaHep59+akgy7rnnnizf742c3U/yKkHr1KlTpvPbtWtnSDIWLVpkm5aammqEhoYakuxO1lwv/UTA888/n+1407fzQw89lOn89KuJAwcOtE07duyY4eHhYZhMpgyJomEYRlxcnO2q0KZNm2zTnd2vcyNBu5n9+/cb0rXeDtldzq1idaf9AijIuAcNgNNatWolPz+/DNNr1KghSXb3DKSmpmrlypWSrg3tnR3p9zv06dMn0/n9+/eXJB04cEAnTpzIMP/uu++W2WzOML1q1aqSpPbt29vup0pXrFgx230V17f5/fffyzAMtW/fXoGBgZnGk37/zebNm7N+U1nI7D36+PjokUcekSS7+4K+++47SVLnzp1VrFjGsZ48PDzUokWLLGOpV6+eKlWq5HCMt4pXknr37p0h3nQXL17U559/rjFjxmjQoEHq27ev+vbtqy+++EKStH///kzbDAkJUfPmzXMUr6ulv7/u3bvLx8cnw/xOnTqpRIkSunDhgn777bcM8xs0aKBy5cplmJ7ZvpPdWJzdT3LbAw88kOn0zN7rzp07deLECVWuXFn169fPtJ6r97Prp1//uV2/fr3S0tJUr1491alTJ0Od8uXLq23btpKktWvXZnt5We3XuSU1NVWrV6/WK6+8oqeeekr9+vVT3759NXnyZElZ73fOcKf9AijIGMURgNMqVKiQ6fT0EeGuvwH99OnTunTpkiSpevXq2Wo//cc4MjIy0/nFixdXyZIldebMGcXFxSk0NDRb8QUEBNx0fnoCdn38hw8fliTNnTvXbpCRzJw8efKm829UvHhxFS9ePNN56e89Li4uQyxjx47V2LFjHY7FFQ+XzWqbZBavJH377bfq169fpoOXpLNarZlOd8eH4d7qs2kymRQZGamzZ89melDpyL6T01hutZ/kNkfea/pn+9ChQxlOntzI0f1Mcuxze6v1KkmVK1e2K3s9R/fr3HDgwAE9/PDD2rt3b5ZlstrvnOFO+wVQkJGgAXCah4d7X4S/VXyOxJ+WliZJioqKUt26dW9atlGjRtluN7uM60a7S4+lWbNmtgPErNSsWTPDNF9fX9cGl4nr4z1+/LgeeeQRXblyRSNHjlTPnj0VERGhgIAAeXh46KefflLbtm2zHNEvL+LNa+6+77iSM/tZ2bJlbVenslK6dOkcxZWZrD6DucXR5aWvn+zq0qWL9u7dq/vvv18jR47U7bffLovFIi8vLyUnJ2d6lSs/FaX9ArgZEjQAeaJUqVLy8/PT5cuXtX//ftWqVeuWdcqXL68///zTdlb9RufPn9eZM2dsZXNTeHi4JKlp06Z69913Xdr2uXPndO7cuUzPtqcPpx0WFpYhlgcffFAjRoxwaSzZdeTIEUVFRWWYnlm83377ra5cuaKHH35Yb7zxRoY6Bw4cyK0wc0365y2rz6Z0bR1dXzY3Y3GX/SSn0j/bpUqV0oIFC1ze/pEjRzI9wZLZ5zY72zh9Xmbr1dH92tvbW5J04cKFTJd19epVxcfHZxnLjf7880/9/vvvCgkJ0VdffZWhO3Ru7HfutF8ABRmnKgDkCU9PT917772Srj0/KzvS7zVZuHBhpvPnzZsn6do9Zbn9Y9++fXtJ0jfffJMr3WwWL16cYVpycrLtmWzXP18qPZbPP/88z8/4p8ss3uunXx9venKQ/tyt6xmGoY8//jhHsaQf2KakpORZ3fT399lnn2X6efjqq6909uxZBQYGZnkvlavkx36Sk3V+M3feeadKly6tffv23bRbnrOy+twuWrRIkv3ntkWLFvLw8NCuXbu0e/fuDHXi4+P1ww8/SLp2v2t2l5fVfh0cHCxvb2+dOXNGCQkJGer9+OOPDq3v9P0uNDQ003tVlyxZkmXdwrBfAAUZCRqAPPPSSy+pWLFievfdd/Xee+9lSC6OHTtmd+P4wIEDZbFYtGPHDr322mt25Xfu3KlXX31VkvTCCy/keuz16tVT586dFRsbq06dOmX6oNhLly7po48+0r///utw+6+88ordQ7rT0tI0atQoxcXFKTw8XJ07d7bNe/DBB3XnnXdq27Zt6tevX6b34pw9e1YffPCByw+g073//vsZBjiYPn26tm3bpsDAQNvAFNL/3eC/bNkyuysAqampGjdunFODPVwv/SqEMwf0ztbt2rWrKlSooBMnTui5556zW89HjhzR888/L0kaMmRIpgPVuFJ+7Cfp623fvn0ua1OSvLy8NH78eBmGoYcfflgbN27MUCY1NVVr1qzJ8qHoN/PVV1/p008/tZu2bNkyffHFFypWrJiGDBlim16hQgV17dpVhmFo8ODBdvdPXrp0SYMGDVJiYqKaNGmiJk2aZLo8R/ZrLy8v2+A+L7/8sl13xt27d+uZZ55x6L1Wq1ZNnp6e2rNnT4Z99dtvv9X06dOzrFsY9gugIKOLI4A8c+edd2ru3LkaMGCAnn76acXExOjOO+9UWlqaDh8+rN27d2vcuHG2M6tlypTRRx99pK5du+qll17S4sWLVa9ePSUkJOjnn39WSkqK+vXrp4EDB+ZJ/PPnz9e5c+e0YsUKVa9eXXXr1lVkZKQMw9DRo0e1e/duJScn648//lCZMmWy3W6FChVUv3593XHHHWrZsqVKlSqlX3/9VYcOHZK/v78+/vhju4MZDw8Pff3117rvvvu0cOFCLVu2THXr1lWFChWUnJysw4cPa8+ePUpNTVXfvn0zPXueU4MHD9Y999yj5s2bq3z58vrf//6nPXv2yNPTU/PmzVPZsmVtZR944AHVr19fv/32m6pVq6bo6Gj5+/tr69atOnHihEaNGpVp18fs6ty5s9auXavHHntMbdq0UYkSJSRdS0huNSCNs3V9fHy0bNkytWvXTu+//76+//573XXXXbpw4YLWrFmjxMREtW3bVuPHj3f6fWVXfuwnd911l0JDQ7Vz507dcccdql27try8vFS9evUcJ4LPPPOM/v77b02dOlXNmzdXzZo1VaVKFfn6+uqff/7Rrl27dO7cOb3//vu66667HGr72WefVY8ePfTWW2+patWqOnTokLZu3SpJmjZtWobRGv/zn//ozz//1NatW1W5cmXdfffdKlasmH7++WedPHlSkZGR+uijjzJdlqP7tSS9+uqrWr9+vWbPnq2ff/5ZderU0fHjx7V9+3Y9+uijWrdunY4dO5at91q6dGk988wzmjFjhlq1aqXmzZsrNDRU+/fv144dO/Tyyy/bkvcbFYb9AijQ8mNsfwAFw62egzZ+/PhM66U/vyo6OjrT+Xv37jX69+9vREZGGj4+PkZQUJBx++23G88884yxd+/eDOX37dtn9OnTxwgLCzO8vLyM4sWLG3fffbfx6aefZtr+reLr06dPpu8r3c2eKZSammp8/PHHRocOHYwyZcoYXl5eRqlSpYxatWoZ/fr1M7766iu7h7PezPXPErp69aoxefJk47bbbjN8fHyMkiVLGp07d850faRLTEw0PvjgA+Puu+82SpUqZRQrVswICQkxoqKijKefftr48ccf7cpn59lVt6L//3wnwzCM999/34iKijJ8fX0Ni8VitGvXzu55UNe7cOGCMWbMGKN6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vn17HTt2THv27MlQpnLlyqpSpYpWrFjhVGA//fSTGjdurISEBI0dO1YzZszQ/fffr7i4OFuZXbt2qVWrVrp8+bLeeustDRgwQLNmzVLXrl0ztNe3b1+99dZb6tmzp2bMmCFPT0916NBBGzdutCvnSJsAAAAA4EpOjeK4YMEClSlTRp999pn8/f2zLHf77bfrt99+c7h9q9Wq3r1767777tOyZcvk4ZF5HjlmzBiVKFFC69atk8VikSRFRERo4MCB+umnn9SmTRtJ0rZt2/Tpp59q6tSptm6YvXv3Vq1atTRy5Eht3rzZ4TYBAAAAwNWcuoK2f/9+NWrU6KbJmST5+/vr5MmTDrf/8ccf699//9XkyZPl4eGhS5cuKS0tza6M1WrVypUr9dhjj9kSKela4hUQEKClS5fapi1btkyenp4aNGiQbZrZbFb//v21ZcsWxcbGOtwmAAAAALiaUwmal5eXEhMTb1nu77//VmBgoMPtr1q1ShaLRcePH1f16tUVEBAgi8WiJ5980rbcPXv2KCUlRQ0aNLCr6+3traioKO3cudM2befOnapWrZpd0iVJDRs2lHStW6Ojbd4oKSlJVqvV7g8AAAAAHOFUglazZk399ttvunDhQpZlEhIStGvXLkVFRTnc/oEDB5SSkqIHH3xQbdu21RdffKHHH39cH3zwgfr16ydJio+PlySVK1cuQ/1y5crpxIkTttfx8fFZlpNkK+tImzeaMmWKgoKCbH/h4eHZfbsAAAAAIMnJe9B69eqlp59+Wk888YTmz58vb29vu/mpqal6+umndfnyZfXp08fh9i9evKjLly/riSeesI3a2KlTJyUnJ+vDDz/UpEmTdOXKFUmSj49Phvpms9k2X5KuXLmSZbn0+df/m502bzR69Gg999xzttdWq7VoJGlXzhWOZQAAAABuwKkEbdCgQfr888/1ySefaPPmzWrbtq0kaffu3Xr22We1fPlyHTlyRG3atFHPnj0dbt/X11eS1KNHD7vpjz76qD788ENt2bJFfn5+kq51LbxRYmKirY309rIqd/3y0v/NTps38vHxyTSxK+xMRzfkdwgAAABAoeFUgubp6anvv/9ezz//vObMmaNZs2ZJunav186dO+Xp6amBAwdqxowZMplMDrcfGhqqvXv3qkyZMnbTQ0JCJElnz55V5cqVJf1ft8TrxcfHKzQ01Pa6XLlyOn78eKbl0peXXi67beIaI6K55Fs8dxdy5RyJIAAAAIoEpxI06VqXv//85z+aMGGC1q1bp6NHjyotLU1hYWG6++67c5TM1K9fXytXrrQNEpIu/R6w4OBg1apVS8WKFdP27dvVrVs3W5nk5GTt2rXLblpUVJTWrl0rq9VqN1DI1q1bbfMlOdQm/j/f4pJ/qfyOAgAAACgUnBok5HrBwcHq2rWrXnjhBY0aNUo9e/bM8ZWm9ERo7ty5dtPnzJmjYsWKqWXLlgoKClLr1q21ZMkSu8FKFi9erIsXL9o9WLpLly5KTU21XemTrnVjnD9/vho1amS7V8yRNgEAAADA1Zy+gna9f//913Z1KzQ0NEPXREfVq1dPjz/+uObNm6eUlBRFR0dr3bp1+vzzzzV69GhbAjh58mQ1adJE0dHRGjRokOLi4vTmm2+qTZs2ateuna29Ro0aqWvXrho9erQSEhJUpUoVLVy4UEePHs2QBGa3TQAAAABwNaevoBmGoXfeeUfVqlVTaGioGjRooAYNGig0NFRVq1bVjBkzMjxc2hEffPCBJkyYoK1bt2rYsGHauXOnpk+frtdee81W5o477tCqVavk6+ur4cOHa9asWerfv7+WLVuWob1FixZp2LBhWrx4sYYOHaqrV69q+fLlatGihV05R9oEAAAAAFdy6gpaUlKSHnjgAa1evVqGYahEiRKqWLGipGsPpz506JCee+45LV++XMuXL3dqdEMvLy+NHz9e48ePv2m5Zs2aadOmTbdsz2w2a+rUqZo6deoty2a3TQAAAABwJaeuoL322mtatWqVatasqRUrVuj06dPasWOHduzYoVOnTumHH35QrVq1tGbNGrsrXgAAAACArDmVoC1ZskTFixfX2rVrbc9Au16bNm20evVqBQUFafHixTkOEgAAAACKAqcStBMnTqhVq1YqVSrr4dVLly6te+65J9NnigEAAAAAMnIqQStfvrySk5NvWe7q1as83BkAAAAAssmpBK1nz55avXq1jh07lmWZY8eOafXq1Xr00UedDg4AAAAAihKnErSXX35Z99xzj1q0aKF58+bp0qVLtnmXLl3S/PnzFR0drVatWmncuHEuCxYAAAAACjOnhtmvXr26DMNQXFycBg4cqIEDB6pEiRKSpLNnz9rKmUwmVa9e3a6uyWTSoUOHchAyAAAAABRO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FUImk0kTJkzIURsLFiyQyWTS0aNHHa47YcKEfHs4d07iRkbr1q2TyWTSunXr8juUQqdv376KiIhwuF5ERIT69u3r8nhQODj7uSoq8vP3yREFJc68EhERofvvv1+SdP/99zv8GXd2vzCZTHrmmWccrofMpX+uT506ld+huD0SNDeWnmyYTCZt3Lgxw3zDMBQeHi6TyWT74srM5s2bNWHCBJ07dy7DvNdee01ff/21C6MuetK30/bt2/M7FOSz9P31Vn8kvO7h0KFDGjx4sCpVqiSz2SyLxaKmTZtqxowZunLlSq4s88SJE5owYYJ27dqVK+0XZnv37tVjjz2m8uXLy8fHR6GhoerZs6f27t2b36HZYRvfWna+J68/0fz2229rxIgRkqQRI0bo7bffzp/AC6D0YxSz2azjx49nmN+yZUvVqlXLpcvMjWPLp556Sh4eHjpz5ozd9DNnzsjDw0M+Pj5KTEy0m3f48GGZTCaNGTPGpbHkxT5eLNdahsuYzWZ9/PHHatasmd30n3/+WXFxcRmGIr1y5YqKFfu/Tbt582ZNnDhRffv2VfHixe3Kvvbaa+rSpYseeuih3AofBViLFi105coVeXt753coBcLixYvtXi9atEgrV67MML1GjRqaPXu20tLSHF7G/v375eHBubWc+u6779S1a1f5+Piod+/eqlWrlpKTk7Vx40a98MIL2rt3r2bNmuXy5Z44cUITJ05URESEoqKiXN5+YfXll1+qR48eKlmypPr376/IyEgdPXpUc+fO1bJly/Tpp5/q4YcfvmU7L7/8sl588cVcjZVtfGs3fideb8KECTp06JAaNWpkm3b9MUrLli0dXp6z37eFSVJSkl5//XXNnDkz15eVG8eWzZo10/vvv69NmzbpgQcesE3fvHmzPDw8dPXqVW3fvt3uWHnTpk22uq6UF/s4CVoB0KFDB33++ed655137BKvjz/+WPXr189wqdhsNud1iCikPDw8+Dw54LHHHrN7/csvv2jlypUZpudEUX82jCscOXJE3bt3V8WKFbVmzRqVK1fONu/pp5/WwYMH9d133+VjhP/n8uXL8vPzy+8w8tWhQ4fUq1cvVapUSevXr1dwcLBt3rPPPqvmzZurV69e+v3331WpUqVM27h06ZL8/f1VrFgxu99R5I+svhPnzJmjQ4cOaciQIWrfvn2Ol5O+3b28vHLcVkEXFRWl2bNna/To0QoNDXV5+4ZhKDExUb6+vi5vW/q/JGvjxo12CdqmTZtUp04dXblyRRs3brRLxjZu3CgPDw81adIkV2LKTZyGLQB69Oih06dPa+XKlbZpycnJWrZsmR599NEM5a/vGjBhwgS98MILkqTIyEhb14GjR4/KZDLp0qVLWrhwoW36re5tWbFihZo3by5/f38FBgbqvvvuy1b3kvnz5+uee+5RSEiIfHx8dPvtt+v999/PUC69n/nGjRvVsGFDmc1mVapUSYsWLcpQdu/evbrnnnvk6+ursLAwvfrqq257huz48eN6/PHHVaZMGfn4+KhmzZqaN2+eXZn0+72WLl2qiRMnqnz58goMDFSXLl10/vx5JSUladiwYQoJCVFAQID69eunpKQkuzZcvZ6zugdt1qxZqly5snx9fdWwYUNt2LBBLVu2tDuzmdX9gFm1uXXrVrVr105BQUHy8/NTdHS07exXYZTZPRFpaWmaMWOGateuLbPZrODgYLVr186u++yN96Clr+dNmzbpueeeU3BwsPz9/fXwww/r5MmTGZb73nvvqWbNmrYuYk8//XSm3Z8Ls5iYGF28eFFz5861S87SValSRc8++6zt9ZIlS1S/fn35+vqqZMmS6t69u2JjY+3qpHcT2rdvn+6++275+fmpfPnyiomJsZVZt26d7rzzTklSv379bN+7CxYssGvjt99+U4sWLeTn52frmvPf//5X9913n0JDQ+Xj46PKlSvrlVdeUWpqqqtXj9uZOnWqLl++rFmzZtklZ5JUunRpffjhh7p06ZJtXaff57Jv3z49+uijKlGihO2gLat7u/JqG2/YsEFdu3ZVhQoV5OPjo/DwcA0fPjzXutQWJHv37tXQoUNVr149TZ06VVLWvxfpxzDp61W69p0aEBCgQ4cOqUOHDgoMDFTPnj1t85z5vk339ddfq1atWrbf7x9++MGl7z0vjBkzRqmpqXr99ddvWi4lJUWvvPKKKleuLB8fH0VERGjMmDEZjjfSjyN+/PFHNWjQQL6+vvrwww+zdWx57tw5W6+uoKAg9evXT5cvX75pXBUqVFB4eHiG44JNmzapadOmatKkSabzatasaes9lpSUpPHjx6tKlSq2/W/kyJEZ3tvKlSvVrFkzFS9eXAEBAapevbrtu/hW+7ircBqpAIiIiFDjxo31ySef2M4orVixQufPn1f37t31zjvvZFm3U6dO+uuvv/TJJ59o+vTpKl26tCQpODhYixcv1oABA9SwYUMNGjRIklS5cuUs21q8eLH69Omjtm3b6o033tDly5f1/vvvq1mzZtq5c+dNb8B9//33VbNmTXXs2FHFihXTt99+q6eeekppaWl6+umn7coePHhQXbp0Uf/+/dWnTx/NmzdPffv2Vf369VWzZk1J0j///KO7775bKSkpevHFF+Xv769Zs2bl2pmbnPj3339111132W42Dg4O1ooVK9S/f39ZrVYNGzbMrvyUKVPk6+urF198UQcPHtTMmTPl5eUlDw8PnT17VhMmTNAvv/yiBQsWKDIyUuPGjbPVdfV6zszcuXM1ePBgNWnSRMOGDdPhw4fVsWNHlSxZUuHh4U6tozVr1qh9+/aqX7++xo8fLw8PD1uyuWHDBjVs2NCpdgua/v37a8GCBWrfvr0GDBiglJQUbdiwQb/88osaNGhw07pDhgxRiRIlNH78eB09elRvv/22nnnmGX322We2MhMmTNDEiRPVunVrPfnkk9q/f7/ef/99/frrr9q0aVOROcv87bffqlKlStk6qzp58mSNHTtW3bp104ABA3Ty5EnNnDlTLVq00M6dO+26jZ89e1bt2rVTp06d1K1bNy1btkyjRo1S7dq11b59e9WoUUOTJk3SuHHjNGjQIDVv3lyS7OI4ffq02rdvr+7du+uxxx5TmTJlJF1LxAMCAvTcc88pICBAa9as0bhx42S1Wm0Hs4XVt99+q4iICNv6ulGLFi0UERGR4apn165dVbVqVb322msyDCPL9vNyG3/++ee6fPmynnzySZUqVUrbtm3TzJkzFRcXp88//zyHa6rgunz5srp16yZPT099+umnTvcUSElJUdu2bdWsWTNNmzbtplefs/t9u3HjRn355Zd66qmnFBgYqHfeeUedO3fW33//rVKlSjkVZ36IjIxU7969NXv2bL344otZXkUbMGCAFi5cqC5duuj555/X1q1bNWXKFP3xxx/66quv7Mru379fPXr00ODBgzVw4EBVr149W8eW3bp1U2RkpKZMmaIdO3Zozpw5CgkJ0RtvvHHT99CsWTN9+eWXSkpKko+Pj5KTk/Xrr7/qySef1OXLlzVy5EgZhiGTyaSzZ89q3759euKJJyRdS8g7duyojRs3atCgQapRo4b27Nmj6dOn66+//rLdM7d3717df//9qlOnjiZNmiQfHx8dPHjQlvxl53vcJQy4rfnz5xuSjF9//dV49913jcDAQOPy5cuGYRhG165djbvvvtswDMOoWLGicd9999nqSTLGjx9vez116lRDknHkyJEMy/D39zf69OmT5bLT61y4cMEoXry4MXDgQLty//zzjxEUFGQ3ffz48caNH630uK/Xtm1bo1KlSnbTKlasaEgy1q9fb5uWkJBg+Pj4GM8//7xt2rBhwwxJxtatW+3KBQUFZflec8v12ykz/fv3N8qVK2ecOnXKbnr37t2NoKAg27pZu3atIcmoVauWkZycbCvXo0cPw2QyGe3bt7er37hxY6NixYp201y9ntNjWrt2rWEYhpGcnGyEhIQYUVFRRlJSkq3crFmzDElGdHR0hvVy47a4sc20tDSjatWqRtu2bY20tDS79xIZGWnce++9Gd5TQfH0009n2BfS9enTx277rVmzxpBkDB06NEPZ69dLxYoV7fbZ9PXcunVru3LDhw83PD09jXPnzhmGcW37ent7G23atDFSU1Nt5d59911DkjFv3jxn32aBcv78eUOS8eCDD96y7NGjRw1PT09j8uTJdtP37NljFCtWzG56dHS0IclYtGiRbVpSUpJRtmxZo3PnzrZpv/76qyHJmD9/foblpbfxwQcfZJiX2b49ePBgw8/Pz0hMTLRNu/FzVdCdO3cuW9urY8eOhiTDarXafoN69OiRodyNv095vY0z245TpkwxTCaTcezYsSzjLOwef/xxQ5KxcOFCu+k3/l6kO3LkSIZ13KdPH0OS8eKLL2Zo39nvW0mGt7e3cfDgQdu03bt3G5KMmTNnOvgu88f1xyiHDh0yihUrZve+o6OjjZo1axqGYRi7du0yJBkDBgywa2PEiBGGJGPNmjW2aenHET/88EOGZWZ1bJn+uX788cftpj/88MNGqVKlbvle/vOf/xiSjA0bNhiGYRhbtmwxJBnHjh0z9u3bZ0gy9u7daxiGYSxfvtyQZHz00UeGYRjG4sWLDQ8PD1vddB988IEhydi0aZNhGIYxffp0Q5Jx8uTJLOO42T7uKnRxLCC6deumK1euaPny5bpw4YKWL1+eaffG3LJy5UqdO3dOPXr00KlTp2x/np6eatSokdauXXvT+tdf2Tp//rxOnTql6OhoHT58WOfP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88037a5QXj+gSbNmzbRixQp98803SkhIsF1Bk64laC+99JK+//57Xblyxe77onLlytq9e7datWp1y/g8PDzUqlUrtWrVSm+99ZZee+01vfTSS1q7dq1at26d4/eXHdyDVoAEBATo/fff14QJE+yeAXEr/v7+kjJ+waXPy84Q223btpXFYtFrr72mq1evZpif2XDe6dLPNlx/tun8+fOaP3/+LZeblQ4dOuiXX37Rtm3b7GL46KOPnG4zN3h6eqpz58764osvMj1jf7P15syyJNeu5xs1aNBAwcHB+uCDD+y6HyxYsCDD5yg98Vq/fr1tWmpqaoaunvXr11flypU1bdo0Xbx4McMyXbmO3Fnnzp1lGIYmTpyYYZ4rztS2bt1a3t7eeuedd+zamzt3rs6fP6/77rsvx8soKEaOHCl/f38NGDBA//77b4b5hw4d0owZM9SpUyd5enpq4sSJGbaBYRg6ffq0w8u+2fdxVjLbt5OTk13SJawgeOGFF+Tr66vBgwdnWOdnzpzRE088IT8/P9sjZRyRl9s4s+1oGEaGbmZFwVdffaV3331XHTt21NChQ7MsV7FiRXl6etr9jkjK8Wc/t79v3V3lypX12GOP6cMPP9Q///xjm96hQwdJ0ttvv21XPv2qU3Z/J7J7bJmV+vXrq3Xr1ra/22+/3TYvPel644035OfnZ9fzpmHDhipWrJjt0RfXJ2jdunXT8ePHNXv27AzLu3Llii5duiTp2nfKjdKXkT4cvzPf447iCloBc7P7dLJSv359SdJLL72k7t27y8vLSw888ID8/f1Vv359rVq1Sm+99ZZCQ0MVGRmZ6b1dFotF77//vnr16qU77rhD3bt3V3BwsP7++2999913atq0qd59991Ml9+mTRt5e3vrgQce0ODBg3Xx4kXNnj1bISEhmd6kmh0jR47U4sWL1a5dOz377LO2YfYrVqzo0P0erjRv3rxMn40yYcIErV27Vo0aNdLAgQN1++2368yZM9qxY4dWrVqV6ZeBM3JjPd/Iy8tLr776qgYPHqx77rlHjzzyiI4cOaL58+dnuAetZs2auuuuuzR69GjbWcpPP/3UblAT6dqZqjlz5qh9+/aqWbOm+vXrp/Lly+v48eNau3atLBaLvv32W5fE787uvvtu9erVS++8844OHDigdu3aKS0tTRs2bNDdd9+tZ555Jkft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66+/em3v7OxER0cHVCoVtFrtmPv1JSYmBoWFhSgsLMTAwACqqqrw1FNPwWw244knnpiQfRAR0f+PlzgSEVHAG67CaLVapYQoOTkZGo0G9fX1uHjx4pj6SUlJATBUsbG7u9uj/aOPPhpzTAaDASqVCk6n02slxQ8++ADAUHGP8YyWjUVwcDBycnKQnJyM/v5+VnIkIvIjTNCIiCjgzZs3Dw899JBUuREAFAoFzGYzLl26hBUrVuDMmTMe2/3++++wWq3S3/Hx8ViyZAna29uxfv16t+IdNpvN5+TS3qjVajz99NMYHBxEQUGBW8LX0tKCV155BQDGPbfaaHV1dThy5IhHoZGzZ8/i2LFjkMlkXu9nIyKiycFLHImI6D+hpKQENTU12LNnD1566SVERUXhxRdfxPHjx2G1WjF79mzMmzcPsbGx6O/vx4kTJ3D06FHMnTtXqqgIAG+//TZSU1Px1ltv4fDhwzAajWhra4PdbsfatWtRXl4OuVw+ppg2b96M7777DjabDXfccQcWLVokTVTd19eHoqKicc+tNlpTUxOee+45REREwGAwIDw8HC6XC/X19bh8+TIKCwulyy2JiGjycQSNiIj+E5KSkvDwww+jr68Pb7zxBoChQhvvv/8+ampqsHTpUpw9exbV1dX4+uuvoVQqsW7dOumetWHx8fFwOBzIzs7GxYsXceDAAXR1dWHfvn147LHHAIy9qEhoaCjq6+thsVig0+nwySefwG63w2g04sMPP/Q5B9p4ZGRkYOPGjUhISEBTUxP279+PX375BQsXLkR1dfWE7IOIiCaOTAghJjsIIiKiQFBaWooNGzagtLQU69evn+xwiIjoJsQEjYiIaBz6+vpw5swZzJkzx215XV0dMjMz0dvbi1OnTknl/ImIiMaD96ARERGNQ0dHBxITEzFr1izEx8dDqVTi5MmTaGpqAgC89tprTM6IiOhf4wgaERHROPT29uLll1+GzWbDuXPn0NXVhbCwMCQnJ6OwsBDLly+f7BCJiOgmxgSNiIiIiIjIT7CKIxERERERkZ9ggkZEREREROQnmKARERERERH5CSZoREREREREfoIJGhERERERkZ9ggkZEREREROQnmKARERERERH5CSZoREREREREfuJ/zedTXeuxqWEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 6))\n", "sns.boxplot(x=\"region\", y=\"data\", hue=\"sex\", data=results, palette=\"Set1\", width=0.5);\n", "plt.xticks(fontsize=12)\n", "plt.yticks(fontsize=12)\n", "plt.xlabel('Regions', fontsize=15)\n", "plt.ylabel('Income per month (in CHF)', fontsize=15)\n", "plt.title('Income per partition of the population', fontsize=16)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }