{ "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.\n", "# Uncomment them if you are running against a Kubernetes deployment.\n", "# They have already been set for you if you are running locally within a devenv or the Jupyter lab set up by Docker compose.\n", "\n", "import os\n", "# os.environ[\"LOMAS_CLIENT_APP_URL\"] = \"https://lomas.example.com:443\"\n", "# os.environ[\"LOMAS_CLIENT_KEYCLOAK_URL\"] = \"https://keycloak.example.com:443\"\n", "# os.environ[\"LOMAS_CLIENT_TELEMETRY__ENABLED\"] = \"false\"\n", "# os.environ[\"LOMAS_CLIENT_TELEMETRY__COLLECTOR_ENDPOINT\"] = \"http://otel.example.com:445\"\n", "# os.environ[\"LOMAS_CLIENT_TELEMETRY__COLLECTOR_INSECURE\"] = \"true\"\n", "# os.environ[\"LOMAS_CLIENT_TELEMETRY__SERVICE_ID\"] = \"my-app-client\"\n", "# os.environ[\"LOMAS_CLIENT_REALM\"] = \"lomas\"\n", "\n", "# We set these ones because they are specific to this notebook.\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\"\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." ] }, { "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_dataset(nb_rows=NB_ROWS, seed=SEED, lazy=True)\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_000,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.650813 │\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", "│ 49552.115756 │\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.657843 │\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.657804 │\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_000.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", "│ 1 ┆ 54457.31421 │\n", "│ 0 ┆ 55058.357917 │\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_000.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", "│ 0 ┆ 5 ┆ 61659.568166 │\n", "│ 1 ┆ 2 ┆ 115605.87453 │\n", "│ 1 ┆ 7 ┆ 45921.624578 │\n", "│ 0 ┆ 3 ┆ 36268.083499 │\n", "│ 1 ┆ 5 ┆ 58201.830357 │\n", "│ … ┆ … ┆ … │\n", "│ 1 ┆ 4 ┆ 73734.810314 │\n", "│ 0 ┆ 6 ┆ 54653.587337 │\n", "│ 1 ┆ 1 ┆ 53542.070116 │\n", "│ 0 ┆ 2 ┆ 34314.46931 │\n", "│ 0 ┆ 1 ┆ 65104.854325 │\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=(100.)),\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=(100.)),\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 ┆ 7 ┆ 6000 │\n", "│ 1 ┆ 6 ┆ 9000 │\n", "│ 1 ┆ 1 ┆ 9000 │\n", "│ 0 ┆ 1 ┆ 8000 │\n", "│ 1 ┆ 5 ┆ 8000 │\n", "│ … ┆ … ┆ … │\n", "│ 0 ┆ 5 ┆ 7000 │\n", "│ 0 ┆ 4 ┆ 8000 │\n", "│ 1 ┆ 4 ┆ 9000 │\n", "│ 0 ┆ 2 ┆ 7000 │\n", "│ 0 ┆ 3 ┆ 8000 │\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
13015000.06250.07750.0
7115750.07000.08750.0
10024750.06000.07250.0
4125500.07000.08500.0
12035000.06250.07750.0
\n", "
" ], "text/plain": [ " sex region income_25 income_50 income\n", "13 0 1 5000.0 6250.0 7750.0\n", "7 1 1 5750.0 7000.0 8750.0\n", "10 0 2 4750.0 6000.0 7250.0\n", "4 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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T+3ZsyfDsfrNN99oxowZWbYtDMcFUJAxxBFAnrn11ls1d+5cDR48WE8++aSioqJ06623Ki0tTYcPH9bu3bs1fvx42y+r5cqV00cffaRevXrppZde0qJFi3TLLbcoPj5eP//8s1JSUjRw4EANGTIkT+KfN2+ezp07p5UrV6pWrVpq1KiRwsLCZBiGjh49qt27dyspKUl//PGHypUrl+1+K1WqpCZNmqhx48Zq27atypQpo19//VWHDh2Sn5+fPv74Y7svMx4eHvryyy911113acGCBVq2bJkaNWqkSpUqKSkpSYcPH9aePXuUmpqqAQMGZPrreU4NGzZM7dq1U+vWrVWxYkX997//1Z49e+Tp6akPP/xQ5cuXt9W955571KRJE/3222+qWbOmIiIi5Ofnp61bt+rEiRMaNWpUpkMfs6tHjx5au3at+vbtq44dO6pUqVKSriYkN5uQxtm2Pj4+WrZsmTp37qz33ntP3333nW677TZduHBBP/30kxISEtSpUydNmDDB6eeVXflxnNx2220KDg7Wzp071bhxYzVo0EBeXl6qVatWjhPBp556Sn///bemTp2q1q1bq169eqpevbp8fX31zz//aNeuXTp37pzee+893XbbbQ71/cwzz+jBBx/U9OnTVaNGDR06dEhbt26VJE2bNi3DbI3/+c9/9Oeff2rr1q2qVq2a7rjjDhUrVkw///yzTp48qbCwMH300UeZrsvR41qSXn31Va1fv16zZ8/Wzz//rIYNG+r48ePavn27HnroIa1bt07Hjh3L1nMtW7asnnrqKc2cOVPt27dX69atFRwcrL/++ks7duzQ2LFjbcn79QrDcQEUaPkxtz+AguFm90GbMGFCpu3S718VERGRafnevXuNQYMGGWFhYYaPj49RokQJo27dusZTTz1l7N27N0P9ffv2Gf379zdCQkIMLy8vo2TJksYdd9xhLFmyJNP+bxZf//79M31e6W50T6HU1FTj448/Nrp27WqUK1fO8PLyMsqUKWPUr1/fGDhwoLF8+XK7m7PeyLX3EkpOTjYmT55s1K5d2/Dx8TFKly5t9OjRI9PtkS4hIcF4//33jTvuuMMoU6aMUaxYMSMoKMgIDw83nnzySeOHH36wq5+de1fdjP7//k6GYRjvvfeeER4ebvj6+hoWi8Xo3Lmz3f2grnXhwgVjzJgxRq1atQyz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p86gpaWlqXfv3lq+fLkMw1DJkiVVuXJlmUwmHTt2TPv379dTTz2lNWvW6LPPPmNCEQBwlYRzhWs9AADAjlMJ2qxZs/TFF1+oVq1amjp1qu6++2678m+//VYvvPCCli9frlmzZmnYsGEuCRYAiiqLxSIvb28lH9mQZ+v08vaWxWLJs/UBAAAnE7R58+bJYrFo3bp1KleuXIbyu+66S02aNFGtWrX04YcfkqABQA4FBQVpzuzZslqtDrWLiYlRVFSUIiMjFRoa6lBbi8XCNcUAAOQxpxK0ffv26c4778w0OUtXvnx5tW/fXqtWrXI6OADA/wQFBTmdMIWGhqp69eoujgjIHyc9PXN9HWc9mOgaQP5wehbH7FxXxrVnAADAVSwWi3y8vLTMEpDfoQBArnEqQatVq5Z++uknnTp1SmXLls20zqlTp/TTTz+pVq1aOQoQAABAunoWedacOXky1De9DQDkNacStP79++uZZ55R+/btNX36dLVv396ufO3atXruuedktVo1YMAAV8QJAADAUF8AhZ5TCdoTTzyh77//XitXrlTHjh0VGBioypUrS5KOHTumkydPyjAMde3aVU888YRLAwYAAACAwsqpK2A9PT31zTffaOrUqQoJCVF8fLx+/fVX/frrr4qPj1doaKimTp2qr7/+Wh5cZAsAAAAA2eL0JCEeHh56/vnn9fzzzysmJkYnTpyQJAUHBzs8lTMAAAAAIAcJ2rVCQ0NJygAAAAAgh5waf/jvv//q66+/1pEjR7Ksc+TIEX399deKj493OjgAAAAAKEqcStCmT5+ubt26KSEhIcs6V65cUbdu3TRz5kyngwMAAACAosSpBG3lypWqV6+e6tSpk2WdunXrql69evr222+dDg4AAAAAihKnErRjx46pZs2aN61Xo0YN/f33386sAgAAAACKHKcStNTU1GzVM5lMSkxMdGYVAAAAAFDkOJWgVa1aVVu2bFFKSkqWdVJSUrRlyxZVqlTJ6eAAAAAAoChxapr9e+65R6+//rpefPFFTZ06VSaTKUOd0aNH659//lHfvn1zHCQAAACQUwkJCYqNjc20LCYmxu7fzISEhMhsNudKbEA6pxK0559/XgsXLtSMGTO0atUqDRo0SNWqVZMkHTp0SHPnztV///tflS9fXi+88IJLAwYAAACcERsbq+HDh9+wTlRUVJZl0dHR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OnXKNsTRarWqTJkyGjFihKKiomxtkpKSVKZMGfXp00dz5syRJEVGRmr69Ok6c+aMLemSpClTpmjMmDH6+++/FRoa6lCfN2O1WlWiRAmdP3/ebp3S1Tf2I0eOKCwszO4N+uDBgxo+fLiMOvdcPcOV2y6dlumPbxQdHa3q1atnq0mTJk304IMPauTIkerWrZtuvfVWTZo0SadPn9b58+cVEhKi/fv3a+LEiTp58qR+/PFHW9vIyEh9++232rt3r6SriW/r1q21aNEiSdI///yjChUqaNy4cXr55ZclSb/88otatGihuLg4lS9fPtOY7r77btWuXVvTpk2TdPUMWmpqqjZs2GCr06xZM7Vr106vv/56pn1ktU8AALhe+ue1sxz53AVQONwoN7ie255BS01N1fDhwzV48GA1aNAgQ/mePXuUkpKipk2b2i339vZWeHi4du7caVu2c+dO1axZM8PGSD/jsmvXLoWGhjrU5/USExOVmJhoe5yXMzHmpYiICK1bt07PP/+8NmzYoClTpmjp0qXauHGjzpw5o+DgYNWoUUN//PGH7rvvPru2t99+u9566y2lpqbK09NTktSwYUNbebly5STJbn+nL4uPj1f58uWVmpqq1157TUuXLtXx48eVlJSkxMREFS9e3G5d1/YrSRUqVFB8fLzrNgQAoMgKCQlRdHR0jtoDQFbcNkF7//33dezYMa1evTrT8ri4OElXv3hfr0KFCnZnT+Li4rKsJ0knTpxwuM/rTZkyRZMmTcqyvLBo27atPvzwQ+3evVteXl6qXbu22rZtq3Xr1uns2bOKiIhwqD8vLy/b/00mU5bL0tLSJElTp07VzJkz9dZbb6lBgwby8/PTs88+q6TrZr68to/0ftL7AAAgJ8xmM2fAAOQat5wk5PTp0xo/frzGjRunwMDATOtcuXJFkuTj45OhzGw228rT62ZV79q+HOnzeqNHj9b58+dtfzcae16QpV+HNmPGDFsylp6grVu3Tm3btpUk1alTR5s2bbJru2nTJtWsWdN29swZmzZt0n333ae+ffuqUaNGqlq1qvbv3+90fwAAAIA7ccszaGPHjlXp0qVvOL7b19dXkuyGFaZLSEiwlafXzaretX050uf1fHx8Mk3snJJwzjX95MJ6SpUqpYYNG+qjjz7SO++8I0lq06aNevfureTkZFvS9vzzz+vWW2/VK6+8oj59+mjLli1655139O677+Yo5Bo1amjZsmXavHmzSpUqpenTp+vff/9V3bp1c9QvAAAA4A7cLkE7cOCAZs2apbfeess29FC6miAlJyfr6NGjslgstmGI6cMSrxUXF6fg4GDb4woVKuj48eOZ1pNkq+tIn7nBYrHIy9tbyUeyHkrpal7e3je9UPF6ERER2rVrl+1sWenSpVW3bl39+++/qlWrliSpcePGWrp0qcaPH69XXnlFFSpU0Msvv2w3g6Mzxo4dq8OHD6tTp04qXry4hg4dqvvvv1/nz5/PUb8AAACAO3C7WRzXrVunO+6444Z1nnnmGU2aNElly5bNcsbF3r17a+7cuZKkF154QTNmzMgwi+Nrr72ml156yTaL4/nz57Pd5804M4ujdHUyjLycYMRisXCTajGLIwAAAHJPgZ7FsX79+lq+fHmG5WPHjtWFCxc0c+ZMVatWTSVKlFCHDh20ePFijRs3TgEBAZKkRYsW6eLFi3Y3lu7Zs6emTZumWbNm2e6DlpiYqHnz5ql58+YKDQ2VJIf6zC1BQUEkTAAAAEAR5XZn0LLStm1bu/ugSdKOHTvUsmVL1a1bV0OHDlVsbKzefPNNtWnTRj/88INd+969e2v58uUaMWKEqlevrgULFmjbtm1as2aN2rRp41SfN+LsGTTkD/YJAAAAcosjZ9DcchbH7GrcuLFWr14tX19fjRgxQrNmzdKgQYO0bNmyDHUXLlyoZ599VosWLdLTTz+t5ORkrVixwi45c7RPAAAAAHClAnMGraDhDFrBwj4BAABAbikyZ9AKOnJj98G+AAAAgDsgQcsHXl5ekqTLly/ncyRIl74v0vcNAAAAkB/cbhbHosDT01MlS5ZUfHy8JKl48eIymUz5HFXRZBiGLl++rPj4eJUsWVKenp75HRIAAACKMBK0fFK+fHlJsiVpyF8lS5a07RMAAAAgv5Cg5ROTyaQKFSooKChIycnJ+R1Okebl5cWZMwAAALgFErR85unpSXIAAAAAQBKThAAAAACA2yBBAwAAAAA3QYIGAAAAAG6Ca9BySfqNj61Waz5HAgAAACA/pecE6TnCjZCg5ZILFy5IkkJDQ/M5EgAAAADu4MKFCypRosQN65iM7KRxcFhaWppOnDihgICAQnkTaqvVqtDQUMXExMhiseR3OMgm9lvBxb4ruNh3BRP7reBi3xVchXnfGYahCxcuKDg4WB4eN77KjDNoucTDw0MhISH5HUaus1gshe4AKgrYbwUX+67gYt8VTOy3got9V3AV1n13szNn6ZgkBAAAAADcBAkaAAAAALgJEjQ4xcfHRxMmTJCPj09+hwIHsN8KLvZdwcW+K5jYbwUX+67gYt9dxSQhAAAAAOAmOIMGAAAAAG6CBA0AAAAA3AQJGgAAAAC4CRI0SJKqVKmiu+++W5J09913q0qVKg61HzBggMNtJMlkMumpp55yuB0KBmdfF0XFxIkTC8SN7AtKnM4wmUyaOHFijvqYP3++TCaTjh496nDb/Ny2OYm7IHL2/ahKlSoaMGCAy+OB+1i3bp1MJpPWrVuX36EUaunvd6dOncrvUNweCVohZTKZbvp37ZeSt956SyNHjpQkjRw5Um+99Vb+BF6EHTp0SMOGDVPVqlVlNptlsVh0++23a+bMmbpy5UqurPPEiROaOHGidu3alSv9F2Z79+5V3759VbFiRfn4+Cg4OFgPP/yw9u7dm9+h2Skq+zg92TCZTNq4cWOGcsMwFBoaKpPJZPsxKjObN2/WxIkTde7cuQxlr732mr788ksXRo2cys5nHV+8XSP9GNu+fXt+hwIHpO83s9ms48ePZyhv27at6tev79J15sZ75RNPPCEPDw+dOXPGbvmZM2fk4eEhHx8fJSQk2JUdPnxYJpNJY8aMcWksefG5WizXeka+WrRoUZZlEydO1KFDh9S8eXPbsvvvv9/2/7Zt2zq8vtmzZystLc3hdrjq22+/Va9eveTj46N+/fqpfv36SkpK0saNG/XCCy9o7969mjVrlsvXe+LECU2aNElVqlRReHi4y/svrL744gs9+OCDKl26tAYNGqSwsDAdPXpUc+fO1bJly7RkyRJ169btpv2MHTtWL774Yq7GWtT2sdls1scff6xWrVrZLf/5558VGxubYermK1euqFix/30Ubt68WZMmTdKAAQNUsmRJu7qvvfaaevbsafd+ifx1/WfdwoULtWrVqgzL69Sp4/Tn1F9//SUPD37PLszatGmjK1euyNvbO79DyTWJiYl6/fXXFR0dnevryo33ylatWum9997Tpk2bdM8999iWb968WR4eHkpOTtb27dvt3vs3bdpka+tKefG5SoJWSPXt2zfT5XPmzNGhQ4c0fPhwdenSJcfruXTpkvz8/OTl5ZXjvoqqI0eO6IEHHlDlypX1008/qUKFCrayJ598UgcPHtS3336bjxH+z+XLl1W8ePH8DiNfHTp0SI888oiqVq2q9evXKzAw0Fb2zDPPqHXr1nrkkUf0+++/q2rVqpn2kX7cFCtWzC45QM517dpVn332md5++227bfvxxx+rSZMmGYbWmM3mvA4RLnT9Z90vv/yiVatWZfkZ6Iyifj+mosDDw6PQvxeEh4dr9uzZGj16tIKDg13ev2EYSkhIkK+vr8v7lv6XZG3cuNEuQdu0aZMaNmyoK1euaOPGjXbJ2MaNG+Xh4aGWLVvmSky5iZ+EipC9e/fq6aef1i233KKpU6dKynrc9dGjR2UymTR//nzbsgEDBsjf31+HDh1S165dFRAQoIcffthWdv3Y/rS0NM2cOVMNGjSQ2WxWYGCgOnfunOnwiC+//FL169eXj4+P6tWrp++//96lz92dRUVF6eLFi5o7d65dcpauevXqeuaZZ2yPFy9erCZNmsjX11elS5fWAw88oJiYGLs26UMW9u3bpzvuuEPFixdXxYoVFRUVZauzbt063XrrrZKkgQMH2oYCpe/z9D5+++03tWnTRsWLF7cNE/jqq6901113KTg4WD4+PqpWrZpeeeUVpaamunrzuJ2pU6fq8uXLmjVrll1yJklly5bVBx98oEuXLtm2dfqY+3379umhhx5SqVKlbB8gWV1/lFf7eMOGDerVq5cqVaokHx8fhYaGasSIEbk2pDYvPPjggzp9+rRWrVplW5aUlKRly5bpoYceylD/2uHeEydO1AsvvCBJCgsLs22v9PfDS5cuacGCBbblN7suaeXKlWrdurX8/PwUEBCgu+66K1tDYOfNm6d27dopKChIPj4+qlu3rt57770M9dKvHd64caOaNWsms9msqlWrauHChRnq7t27V+3atZOvr69CQkL06quvFrlRD85+Tl1/DVr6kLFNmzbpueeeU2BgoPz8/NStWzedPHkyw3rfffdd1atXzzYU+sknn8x0CG1hcPz4cT366KMqV66c7fP8ww8/tKuT/r1j6dKlmjRpkipWrKiAgAD17NlT58+fV2Jiop599lkFBQXJ399fAwcOVGJiol0frj5GsvouNGvWLFWrVk2+vr5q1qyZNmzYoLZt29qNNMrqWs6s+ty6das6d+6sEiVKqHjx4oqIiLCd6clNY8aMUWpqql5//fUb1ktJSdErr7yiatWqycfHR1WqVNGYMWMy7IP0bfvDDz+oadOm8vX11QcffJCt98pz587ZRimUKFFCAwcO1OXLl28YV6VKlRQaGpphW23atEm33367WrZsmWlZvXr1bKMhEhMTNWHCBFWvXt32mRcZGZnhua1atUqtWrVSyZIl5e/vr1q1atm+/9zsc9VV+Om2iLh8+bJ69+4tT09PLVmyxOlfBFNSUtSpUye1atVK06ZNu+HZlEGDBmn+/Pnq0qWLBg8erJSUFG3YsEG//PKLmjZtaqu3ceNGffHFF3riiScUEBCgt99+Wz169NDff/+tMmXKOBVnQfLNN9+oatWq2fqFZ/LkyRo3bpx69+6twYMH6+TJk4qOjlabNm20c+dOuyFZZ8+eVefOndW9e3f17t1by5Yt06hRo9SgQQN16dJFderU0csvv6zx48dr6NChat26tSTZxXH69Gl16dJFDzzwgPr27aty5cpJuvqB5O/vr+eee07+/v766aefNH78eFmtVlvyX1h98803qlKlim17Xa9NmzaqUqVKhrOevXr1Uo0aNfTaa6/JMIws+8/LffzZZ5/p8uXLevzxx1WmTBlt27ZN0dHRio2N1WeffZbDLZU/qlSpohYtWuiTTz6xjRJYuXKlzp8/rwceeEBvv/12lm27d++u/fv365NPPtGMGTNUtmxZSVJgYKAWLVqkwYMHq1mzZho6dKgkqVq1aln2tWjRIvXv31+dOnXSG2+8ocuXL+u9995Tq1attHPnzhtOVvHee++pXr16uvfee1WsWDF98803euKJJ5SWlqYnn3zSru7BgwfVs2dPDRo0SP3799eHH36oAQMGqEmTJqpXr54k6Z9//tEdd9yhlJQUvfjii/Lz89OsWbNy7ZfugiS7n1OZGT58uEqVKqUJEybo6NGjeuutt/TUU0/p008/tdWZOHGiJk2apA4dOujxxx/XX3/9pffee0+//vqrNm3aVKhGn/z777+67bbbbJN/BQYGauXKlRo0aJCsVqueffZZu/pTpkyRr6+vXnzxRR08eFDR0dHy8vKSh4eHzp49q4kTJ+qXX37R/PnzFRYWpvHjx9vauvoYyczcuXM1bNgwtWzZUs8++6wOHz6se++9V6VLl1ZoaKhT2+inn35Sly5d1KRJE02YMEEeHh62ZHPDhg1q1qyZU/1mR1hYmPr166fZs2frxRdfzPIs2uDBg7VgwQL17NlTzz//vLZu3aopU6bojz/+0PLly+3q/vXXX3rwwQc1bNgwDRkyRLVq1crWe2Xv3r0VFhamKVOmaMeOHZozZ46CgoL0xhtv3PA5tGrVSl988YUSExPl4+OjpKQk/frrr3r88cd1+fJlRUZGyjAMmUwmnT17Vvv27dNjjz0m6eqPMffee682btyooUOHqk6dOtqzZ49mzJih/fv3266Z27t3r+6++241bNhQL7/8snx8fHTw4EFb8ped704uYaBIePTRRw1JxoIFC+yWr1271pBkrF271m75kSNHDEnGvHnzbMv69+9vSDJefPHFDP3379/fqFy5su3xTz/9ZEgynn766Qx109LSbP+XZHh7exsHDx60Ldu9e7chyYiOjnbwWRY858+fNyQZ9913303rHj161PD09DQmT55st3zPnj1GsWLF7JZHREQYkoyFCxfaliUmJhrly5c3evToYVv266+/ZtjP1/fx/vvvZyi7fPlyhmXDhg0zihcvbiQkJNiWXf+6KOjOnTuXrf117733GpIMq9VqTJgwwZBkPPjggxnqpZely+t9nNl+nDJlimEymYxjx45lGac7mjdvniHJ+PXXX4133nnHCAgIsD2/Xr16GXfccYdhGIZRuXJl46677rK1k2RMmDDB9njq1KmGJOPIkSMZ1uHn52f0798/y3Wnt7lw4YJRsmRJY8iQIXb1/vnnH6NEiRJ2yzPbtpntl06dOhlVq1a1W1a5cmVDkrF+/Xrbsvj4eMPHx8d4/vnnbcueffZZQ5KxdetWu3olSpTI8rkWVE8++WSWr1VnP6cqV65st9/T93eHDh3s6o0YMcLw9PQ0zp07ZxjG1W3s7e1tdOzY0UhNTbXVe+eddwxJxocffujs08wX1x5jmRk0aJBRoUIF49SpU3bLH3jgAaNEiRK213X694769esbSUlJtnoPPvigYTKZjC5duti1b9GiRYbPEVcfI9d/F0pKSjKCgoKM8PBwIzEx0VZv1qxZhiQjIiIiw3a5/ji6vs+0tDSjRo0aRqdOnexeN5cvXzbCwsKMO++8M8NzcoVr99uhQ4eMYsWK2b3mIyIijHr16hmGYRi7du0yJBmDBw+262PkyJGGJOOnn36yLUvftt9//32GdWb1Xpn+fvfoo4/aLe/WrZtRpkyZ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QerQoUO21y1dnYQmMTFRX3/9td2vzDcbFnkjlStXtv16f62//vrL6T4Lg9z+nKpcubKkq9v52rMuSUlJOnLkiMOvDXcWGBiogIAApaam5vrzyo1j5Hrp++7AgQN2Z8KTk5N15MgRNWrUyLYsu9+j0t8XLBZLvu/7sWPHavHixRkm5ahcubLS0tJ04MAB1alTx7b833//1blz52zb5Wac+W5xrTfffNPuDOe1E5q0atVKK1eu1Ndff634+HjbGTTpaoL20ksv6bvvvtOVK1fsPqOrVaum3bt3q3379jeNz8PDQ+3bt1f79u01ffp0vfbaa3rppZe0du1adejQIcfPLzu4Bq2QWr58ud555x3de++9evrpp7OsV7lyZXl6emr9+vV2y3M6HLJHjx4yDEOTJk3KUFYUf128kcjISPn5+Wnw4MH6999/M5QfOnRIM2fOVPfu3eXp6alJkyZl2IaGYej06dMOr9vPz09Sxg+WG0n/9ejaGJKSklwyhLYgeOGFF+Tr66thw4Zl2OZnzpzRY489puLFi9uma3dEXu7jzPajYRgZhrwUVP7+/nrvvfc0ceJEu3vm3MyNjgk/P79sHSudOnWSxWLRa6+9puTk5AzlmU3Fni6z/XL+/HnNmzfvpuvNSteuXfXLL79o27ZtdjF89NFHTvdZGOT251SHDh3k7e2tt99+266/uXPn6vz587rrrrtyvA534enpqR49eujzzz/PdETIjV7zzqxLcu0xcr2mTZsqMDBQ77//vt1Qu/nz52d4D0hPvK79HpWampphqGeTJk1UrVo1TZs2TRcvXsywTlduo5upVq2a+vbtqw8++ED//POPbXnXrl0lSW+99ZZd/fSzTtl9zWb3vTIrTZo0UYcOHWx/devWtZWlJ11vvPGGihcvbnc2slmzZipWrJjtdjPXJmi9e/fW8ePHNXv27Azru3Llii5duiTp6uf49dLXkT4dvzPfnRzFGbRCKC4uToMGDZKnp6fat2+vxYsXZ1qvWrVqatGihXr16qXo6GiZTCZVq1ZNK1asyDBW3FF33HGHHnnkEb399ts6cOCAOnfurLS0NG3YsEF33HGHnnrqqRz1X5hUq1ZNH3/8sfr06aM6deqoX79+ql+/vpKSkrR582Z99tlnGjBggJ555hm9+uqrGj16tI4ePar7779fAQEBOnLkiJYvX66hQ4dq5MiRDq+7ZMmSev/99xUQECA/Pz81b978huPKW7ZsqVKlSql///56+umnZTKZtGjRoiKTeNeoUUMLFizQww8/rAYNGmjQoEEKCwvT0aNHNXfuXJ06dUqffPLJDadgz0q1atXybB/Xrl1b1apV08iRI3X8+HFZLBZ9/vnnherazxtd65GVJk2aSJJeeuklPfDAA/Ly8tI999wjPz8/NWnSRKtXr9b06dMVHByssLCwTK/tslgseu+99/TII4+ocePGeuCBBxQYGKi///5b3377rW6//Xa98847ma6/Y8eO8vb21j333KNhw4bp4sWLmj17toKCgjK9qD87IiMjtWjRInXu3FnPPPOMbZr9ypUrO3RNamGT259TgYGBGj16tCZNmqTOnTvr3nvv1V9//aV3331Xt956q0tvpp2XPvzww0zvVTpx4kStXbtWzZs315AhQ1S3bl2dOXNGO3bs0OrVqzP94uuM3DhGrufl5aVXX31Vw4YNU7t27dSnTx8dOXJE8+bNy3ANWr169XTbbbdp9OjRtrOxS5YssZvURLp6VmbOnDnq0qWL6tWrp4EDB6pixYo6fvy41q5dK4vFom+++cYl8WfHSy+9pEWLFumvv/6y3W6gUaNG6t+/v2bNmmW7nGHbtm1asGCB7r//ft1xxx3Z6ju775XOaNasmby9vbVlyxa1bdvWbsh48eLF1ahRI23ZskUlS5ZU/fr1bWWPPPKIli5dqscee0xr167V7bffrtTUVP35559aunSp7X5uL7/8stavX6//a+/+Y6Ku/ziAP0F+3HXQwQBBlIAEPKVBBiwFJ4di5KJRtjAchbWRKINWTUxmjRttolRqEjUM0mjBcixx/VBPIiAqNqlBpYi/aBQuMflh/BCR1/cPxn09706hVE58Prb74z4/3p/Xfe7u87nXvT+f1/uxxx6Dr68vzp07h8LCQsyaNcuQ8P2b304TdsvqQ9KkGSvteqPHWAnUzs5Oeeqpp+See+4RV1dXWbNmjfz6669my+yrVCqz2zRXTn14eFjy8/NFo9GIg4ODeHh4yPLly6WxsdGwDABJT083ae/assZ3g9bWVklNTRU/Pz9xcHAQZ2dniYqKkp07dxqVrq+oqJBFixaJSqUSlUolGo1G0tPT5fjx44Zlri6bezVz71NlZaXMmzdP7OzsjN5zS22IiNTX18uCBQtEqVSK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lYX09HTExMTA19cXAAy9UgEBAYiKirpum25ubrck1hsZK/Rhjq3t+P9jffXVV5GYmIh9+/ZBr9ejrq4O27Ztw/bt27Ft2za89NJLNyNcIiK6CZigERHRlLZ+/XocPnwYhw4dgk6nQ0lJCYD/90BpNBqTpM6SGTNmAADa29vNzrc03Rxvb28AwO+//252fk9PD7q7u6FUKuHq6jrudi3x8fFBRkYGMjIyMDw8jPLycjz//PPIysrCc889d1O2QURE/x0vcSQioilvrApjaWmpISGKiIiAWq1GTU0NLly4MK52IiMjAYxWbOzr6zOZ/9lnn407prCwMCiVSjQ2NpqtpPjJJ58AGC3uMZHesvGws7NDcnIyIiIiMDQ0xEqORERWhAkaERFNefPnz8cTTzxhqNwIAI6OjsjKysLFixexYsUKnD592mS9P//8E6WlpYbngYGBWLp0Kbq6urBhwwaj4h16vd7i4NLmqFQqvPDCCxgZGUF6erpRwtfa2oo333wTACY8ttq1qqurcfjwYZNCI2fOnMGxY8dgY2Nj9n42IiKaHLzEkYiI7go5OTmorKxESUkJXn/9dXh5eeG1115DS0sLSktLMXfuXMyfPx/+/v4YGhrC8ePHcfToUYSEhBgqKgLA+++/j6ioKLz33ns4dOgQwsPD0dHRgbq6Oqxbtw4FBQVwcHAYV0ybN2/Gjz/+CL1ej/vvvx/R0dGGgaoHBweRmZk54bHVrtXU1ISXX34ZHh4eCAsLg5ubGzo7O1FTU4NLly4hIyPDcLklERFNPvagERHRXSE0NBRPPvkkBgcH8c477wAYLbTx8ccfo7KyEsuWLcOZM2dQUVGB7777DgqFAuvXrzfcszYmMDAQDQ0NSEpKwoULF7Bv3z709vZiz549eOaZZwCMv6iIs7MzampqoNPp4O7ujv3796Ourg7h4eH49NNPLY6BNhHx8fHYtGkTgoKC0NTUhL179+K3337DokWLUFFRcVO2QUREN4+NiMhkB0FERDQV5OXlYePGjcjLy8OGDRsmOxwiIroDMUEjIiKagMHBQZw+fRrz5s0zml5dXY2EhAQMDAzg5MmThnL+REREE8F70IiIiCagu7sbwcHBmDNnDgIDA6FQKHDixAk0NTUBAN566y0mZ0RE9K+xB42IiGgCBgYG8MYbb0Cv16O9vR29vb1wcXFBREQEMjIysHz58skOkYiI7mBM0IiIiIiIiKwEqzgSERERERFZCSZoREREREREVoIJGhERERERkZVggkZERERERGQlmKARERERERFZCSZoREREREREVoIJGhERERERkZVggkZERERERGQl/gezbX9DYj+LjwAAAABJRU5ErkJggg==", "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 }