From 0c2a162324b1679beb7748b3e17980a814129e1a Mon Sep 17 00:00:00 2001 From: Ted Lawless Date: Mon, 18 Jun 2018 15:18:48 -0400 Subject: [PATCH] Initial commit. --- .gitignore | 121 ++++++++++ LICENSE.txt | 20 ++ README.md | 144 ++++++++++++ layouts/credit_scores.yaml | 14 ++ layouts/tax.yaml | 22 ++ requirements.txt | 3 + scatterplot.png | Bin 0 -> 52119 bytes scatterplot.py | 24 ++ simulate.py | 120 ++++++++++ sirad-id-validation.ipynb | 436 +++++++++++++++++++++++++++++++++++++ sirad_config.py | 12 + 11 files changed, 916 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 layouts/credit_scores.yaml create mode 100644 layouts/tax.yaml create mode 100644 requirements.txt create mode 100644 scatterplot.png create mode 100644 scatterplot.py create mode 100644 simulate.py create mode 100644 sirad-id-validation.ipynb create mode 100644 sirad_config.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36061f1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,121 @@ +*dblite +raw/* +build/* + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +© 2018 GitHub, Inc. +Terms +Privacy +Security +Status +Help +Contact GitHub +API +Training +Shop +Blog +About + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..fb11842 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright 2018, Brown University, Providence, RI. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose other than its incorporation into a +commercial product is hereby granted without fee, provided that the +above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Brown University not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. + +BROWN UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY +PARTICULAR PURPOSE. IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a78e00d --- /dev/null +++ b/README.md @@ -0,0 +1,144 @@ +# Worked example of Secure Infrastructure for Research with Administrative Data (SIRAD) + +`sirad` is an integration framework for data from administrative systems. It +deidentifies administrative data by removing and replacing personally +identifiable information (PII) with a global anonymized identifier, allowing +researchers to securely join data on an individual from multiple tables without +knowing the individual's identity. + +This is a simplified demonstration of how `sirad` works on simulated data; for +more details on how it is used in practice with real administrative data, +please see our manuscript preprint: + +> J.S. Hastings, M. Howison, T. Lawless, J. Ucles, P. White. 2018. +> Integrating Administrative Data for Policy Insights. +> (link to arXiv preprint) + +In this worked example, we simulate two administrative data sets: + +**1. IRS 1040 tax returns**, identified by social security number (SSN), first/last + name, and date of birth (DOB) +**2. Credit history**, identified by first/last name and date of birth (DOB) + +`sirad` uses a deterministic matching algorithm to match records across the two +data sets corresponding to the same individual. It then assigns an anonymized +identifier (the `sirad_id`) to each matched individual, and creates a +deidentified table for each data set where the SSNs, names, and DOBs have been +replaced with the `sirad_id`. Finally, we demonstrate an analysis that uses the +`sirad_id` to join adjusted gross income from the tax returns table to credit +scores in the credit history table. + +**Note**: the data are simulated by the `simulate.py` script using +[Faker](https://github.com/joke2k/faker), which creates realistic PII that does +not represent actual individuals. Any data in this example that looks +personally identifiable is not! + +## Installing dependencies + +Requires Python 3.6 or later. There are several options for installing the +dependencies (list in `requirements.txt`). + +You can use **pip** to install them globally with +`pip install -r requirements.txt`. + +If you do not have write access to install globally, you can install into your +home directory with +`pip install --user -r requirements.txt`. + +If you have Anaconda Python, you can use **conda** to install them in your +root environment with +`conda install -c riipl-org --file requirements.txt`. + +Or if you would prefer to create a named conda environment, use +`conda install -c riipl-org -n sirad-example --file requirements.txt` +and activate it with +`source activate sirad-example`. + +## Running the example + +### Step 1: Simulate data + +Command: `python simulate.py` + +### Step 2: Process the raw data into separate PII, data, and link files + +Command: `sirad process` + +`sirad` processes a set of **raw** data files specified by a set of **layout +files**. In this example, there are two simulated raw data files generated in +Step 1: tax records (`raw/tax.txt`) and credit history +(`raw/credit_scores.txt`). Their layouts are `layouts/tax.yaml` and +`layouts/credit_scores.yaml`. The layouts are YAML files that describe the +column layout and field types in the raw data files. + +The processing step uses the `pii` properties in the layout to split the PII +fields from the data fields in each row of the raw files. It randomly shuffles +the order of the PII rows when writing to the PII file. The data file has the +same row order as the raw data file. The link file provides a lookup table +that re-links the shuffled PII rows to the data rows. + +### Step 3: Stage the processed files in a database + +Command: `sirad stage` + +This step stages the PII, data, and link files in a relational database. + +### Step 4: Create a versioned research database + +Command: `sirad research --version 1` + +This step uses the PII database to construct a global anonymized identifier +(the `sirad_id`), then uses the link files to attach it to each data table in +the database. The result is a **research** database which contains no PII, but +in which individual-level data in different tables can be joined by the +anonymized identifier. Research databases are versioned to support reproducible +analysis. + +## Resulting database + +After the build finishes, an sqlite database called `research_v1.db` will be +created in the `build` directory. This database has two tables created from +the simulated data: + +### tax + +sirad_id | record_id | job | file_date | adjusted_gross_income | import_dt +-|-|-|-|-|- + +### credit_scores + +sirad_id | record_id | credit_score | import_dt +-|-|-|- + +Notes: +* `sirad_id` is an anonymized identifier created from the PII. +* `record_id` is a primary key for the research/data records, and `pii_id` is a + shuffled primary key for the PII records. +* `import_dt` is a timestamp for when the raw data were processed. +* All PII fields (SSN, first/last, DOB) have been removed from the research database. + +The results are organized in the following directory structure: +* `raw/`: the simulated raw data files +* `build/processed`: processed data files (organized by `data`, `pii`, and `link`) +* `build/db`: the staging databases for the processed files +* `build/research_v1.db`: the final research database + +In a real-world application, only the `research_v1.db` database would be +accessible to researchers. The `raw`, `processed`, and `db` directories should +be stored in a restricted location that is inaccessible to any individual +researcher, for example by using encryption with a multi-party key or +passphrase, auditing, real-time alerting, and/or other appropriate security +controls that ensure an individual researcher cannot access build files that +contain PII. + +## Example analysis + +`scatterplot.py` demonstrates an analysis that uses the `sirad_id` to +anonymously join records about individuals. It selects adjusted gross income +from the `tax` table joined to the corresponding credit score from the +`credit_scores` table, then generates this scatter plot: + +![scatterplot](scatterplot.png) + +**Note:** these variables are correlated by construction, and were drawn from a +joint distribution (with added noise) in the simulation. diff --git a/layouts/credit_scores.yaml b/layouts/credit_scores.yaml new file mode 100644 index 0000000..46f6b17 --- /dev/null +++ b/layouts/credit_scores.yaml @@ -0,0 +1,14 @@ +source: credit_scores.txt +type: csv +delimiter: "|" +fields: +- first: + pii: first_name +- last_name: + pii: last_name +- birth_date: + pii: dob + type: date + format: "%m-%d-%Y" +- credit_score: + type: int diff --git a/layouts/tax.yaml b/layouts/tax.yaml new file mode 100644 index 0000000..0bb7b08 --- /dev/null +++ b/layouts/tax.yaml @@ -0,0 +1,22 @@ +source: tax.txt +type: csv +delimiter: "|" +fields: +- first_name: + pii: first_name +- last_name: + pii: last_name +- ssn: + hash: true + pii: ssn + ssn: true +- job +- birth_date: + pii: dob + type: date + format: "%m-%d-%Y" +- file_date: + type: date + format: "%m/%d/%Y" +- adjusted_gross_income: + type: int diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..270c29c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +faker +numpy +sirad diff --git a/scatterplot.png b/scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..2f094e631467b506958e91d1c87152b12faa8e8b GIT binary patch literal 52119 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 ZO0L{6Ti`%6gF(SRbrntJ0ws%}{{>QPHs$~T literal 0 HcmV?d00001 diff --git a/scatterplot.py b/scatterplot.py new file mode 100644 index 0000000..8d0a27a --- /dev/null +++ b/scatterplot.py @@ -0,0 +1,24 @@ +import matplotlib.pyplot as plt +import pandas as pd +import seaborn as sns +import sqlite3 + +sql = """ + SELECT t.sirad_id, + adjusted_gross_income, + credit_score + FROM tax t + INNER JOIN credit_scores cs + ON t.sirad_id=cs.sirad_id + """ + +with sqlite3.connect("build/research_v1.db") as cxn: + df = pd.read_sql(sql, cxn, index_col="sirad_id") + +print(df.head()) + +sns.set_style("whitegrid") +sns.regplot("adjusted_gross_income", "credit_score", data=df, truncate=True) +plt.tight_layout() +plt.savefig("scatterplot.png") + diff --git a/simulate.py b/simulate.py new file mode 100644 index 0000000..9d844d1 --- /dev/null +++ b/simulate.py @@ -0,0 +1,120 @@ +""" +Simulate data for IRS 1040 tax returns and credit history. +""" + +from faker import Faker +import csv +import math +import numpy as np +from pathlib import Path +import random +import os +from datetime import date + +from sirad import config + +N = 1000 +SEED = 1010 + +fake = Faker() +fake.seed(SEED) +random.seed(SEED) +np.random.seed(SEED) + +out = [] + +def get_birth_date(): + """ + Faker on Windows is not generating dates prior to 1970. + Work around this for now. + See: https://stackoverflow.com/a/35709408/758157 + Start year: 1950 + End year: 1999 + """ + return date( + random.randint(1949, 1999), + random.randint(1, 12), + random.randint(1, 28) + ) + +def simulate_tax(number): + perc_bad_ssn = 0.05 + for n in range(0, number): + d = {} + if n % 2 == 0: + d['first'] = fake.first_name_female() + else: + d['first'] = fake.first_name_male() + d['last'] = fake.last_name() + d['ssn'] = fake.ssn() + if (random.random() <= perc_bad_ssn): + d['ssn'] = '000-' + d['ssn'][4:] + d['job'] = fake.job() + bd = get_birth_date() + d['birth_date'] = bd.strftime("%m-%d-%Y") + d['file_date'] = fake.date_this_year().strftime("%m/%d/%Y") + d['agi'] = int(20000 * np.random.lognormal()) + out.append(d) + + return out + +def simulate_credit_scores(path): + """ + Create fake credit scores for subset of main person list. + + For some perc of people replace full first name with first initial + """ + perc_included = .60 + perc_first_intial = .10 + perc_drop_last = .005 + perc_drop_birth = .01 + out = [] + with open(path) as f: + reader = csv.DictReader(f, delimiter="|") + for row in reader: + d = {} + if random.random() <= perc_included: + for fld in ['first', 'last', 'birth_date']: + if (fld == 'first') and (random.random() <= perc_first_intial): + d[fld] = row[fld][0] + elif (fld == 'last') and (random.random() <= perc_drop_last): + d[fld] = "" + elif (fld == 'birth_date') and (random.random() <= perc_drop_birth): + d[fld] = "" + else: + d[fld] = row[fld] + # Simulate credit score as joint distribution with AGI with a normal error term + cscore = 300 + 225 * (math.log(float(row['agi']) / 20000.0) + 0.5 * np.random.normal()) + # Clamp score + cscore = np.clip(cscore, 300, 850) + d['credit_score'] = int(cscore) + out.append(d) + return out + +def write_file(records, path, separator="|"): + fieldnames = records[0].keys() + with open(path, "w") as outf: + writer = csv.DictWriter( + outf, + lineterminator='\n', + delimiter=separator, + fieldnames=fieldnames + ) + writer.writeheader() + writer.writerows(records) + return path + + +def main(tax_path, cscore_path): + tax = simulate_tax(N) + people = write_file(tax, tax_path) + cscores = simulate_credit_scores(people) + write_file(cscores, cscore_path) + + +if __name__ == '__main__': + outdir = config.get_option("RAW") + Path(outdir).mkdir(parents=True, exist_ok=True) + tax_path = os.path.join(outdir, 'tax.txt') + cscore_path = os.path.join(outdir, 'credit_scores.txt') + main(tax_path, cscore_path) diff --git a/sirad-id-validation.ipynb b/sirad-id-validation.ipynb new file mode 100644 index 0000000..320ff30 --- /dev/null +++ b/sirad-id-validation.ipynb @@ -0,0 +1,436 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 140, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#From: https://stackoverflow.com/a/28073228/758157\n", + "from IPython.display import HTML\n", + "\n", + "HTML('''\n", + "
''')" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": { + "collapsed": true, + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "matplotlib.style.use('ggplot')\n", + "\n", + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": { + "collapsed": true, + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "from src.db import pii_eng" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Summary" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": { + "collapsed": false, + "deletable": true, + "editable": true + }, + "outputs": [], + "source": [ + "total_pii_records = pii_eng.execute('SELECT COUNT(*) records FROM sirad_id').fetchone()[0]\n", + "records_with_valid_sirad_id = pii_eng.execute('SELECT COUNT(*) FROM sirad_id WHERE sirad_id <> 0').fetchone()[0]\n", + "unique_sirad_ids = pii_eng.execute('SELECT COUNT(DISTINCT sirad_id) FROM sirad_id WHERE sirad_id <> 0').fetchone()[0]\n", + "unique_sirad_ids_with_valid_ssn = pii_eng.execute('SELECT COUNT(*) FROM (SELECT MIN(valid_ssn) valid_ssn FROM sirad_id GROUP BY sirad_id) WHERE valid_ssn = 0').fetchone()[0]\n", + "q = \"\"\"\n", + "SELECT SUM(records)\n", + "FROM (\n", + " SELECT sirad_id, \n", + " COUNT(*) AS records,\n", + " CASE WHEN MIN(valid_ssn) = 0 THEN 1 ELSE 0 END valid_ssn\n", + " FROM sirad_id\n", + " GROUP BY sirad_id\n", + ")\n", + "WHERE VALID_SSN = 1\n", + "GROUP BY VALID_SSN\n", + "\"\"\"\n", + "recs_with_valid_ssn = pii_eng.execute(q).fetchone()[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": { + "collapsed": false, + "deletable": true, + "editable": true, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "PII records: 1580\n", + "Records with valid SIRAD_ID: 1574\n", + "Unique SIRAD_IDs: 1383\n", + "Unique SIRAD_IDs with a valid SSN associated: 642\n", + "Total records with valid SSN attached: 642\n", + "\n" + ] + } + ], + "source": [ + "msg = \"\"\"\n", + "PII records: {total_pii}\n", + "Records with valid SIRAD_ID: {valid_sirad}\n", + "Unique SIRAD_IDs: {uniq_sirad}\n", + "Unique SIRAD_IDs with a valid SSN associated: {valid_ssn}\n", + "Total records with valid SSN attached: {total_valid_ssn}\n", + "\"\"\".format(\n", + " total_pii=total_pii_records, \n", + " valid_sirad=records_with_valid_sirad_id,\n", + " uniq_sirad=unique_sirad_ids,\n", + " valid_ssn=unique_sirad_ids_with_valid_ssn,\n", + " total_valid_ssn=recs_with_valid_ssn\n", + ")\n", + "print(msg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dataset breakdown" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "q = \"\"\"\n", + "SELECT dsn AS dataset, \n", + " count(*) AS records,\n", + " SUM(CASE WHEN SIRAD_ID <> 0 THEN 1 ELSE 0 END) sirad_ids,\n", + " SUM(CASE WHEN valid_ssn = 0 THEN 1 ELSE 0 END) valid_ssn,\n", + " SUM(CASE WHEN valid_ssn = 1 AND ssn IS NOT NULL THEN 1 ELSE 0 END) invalid_ssn,\n", + " SUM(CASE WHEN valid_ssn = 2 THEN 1 ELSE 0 END) questionable_ssn,\n", + " SUM(CASE WHEN ssn IS null THEN 1 ELSE 0 END) missing_ssn,\n", + " SUM(CASE WHEN first_name IS NOT null THEN 1 ELSE 0 END) first_name,\n", + " SUM(CASE WHEN last_name IS NOT null THEN 1 ELSE 0 END) last_name,\n", + " SUM(CASE WHEN dob is NOT null THEN 1 ELSE 0 END) dob\n", + "from sirad_id\n", + "group by dsn\n", + "\"\"\"\n", + "dataset_breakdown = pd.read_sql(q, con=pii_eng, index_col='dataset')" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\nS2P8+PGULl2aunXrUq5cub/4yImIyO1YjDs5Lyd35GTnJo6OIGI3zp/FFLhdNyxo/qa8YcOeoqKi\nCjytGBoayoMPPuiARCIici+YurxCQkIICQlxdAwREbnHTPUJGyIiIqDyEhERE1J5iYiI6ai8RETE\ndFReIiJiOiovERExHZWXiIiYjspLRERMR+UlIiKmo/ISERHTUXmJiIjpqLxERMR0VF4iImI6Ki8R\nETEdlZeIiJiOyktERExH5SUiIqaj8hIREdNReYmIiOm4ODpASeL8WYyjIziEl5cXKSkpjo7hMCV9\n/iL2oJWXiIiYjspLRERMR+UlIiKmo/ISERHTUXmJiIjpqLxERMR0VF4iImI6Ki8RETEdlZeIiJiO\nyktERExH5SUiIqaj8hIREdNReYmIiOmovERExHRUXiIiYjoqLxERMR2Vl4iImI7KS0RETEflJSIi\npqPyEhER01F5iYiI6ai8RETEdFReIiJiOiovERExHZWXiIiYjspLRERMx2IYhuHoECIiIsWhlZeI\niJiOyktERExH5SUiIqaj8hIREdNReYmIiOmovERExHRUXiIiYjoujg7wv+5f//oXv//+OxaLhUGD\nBuHn5+foSHazZMkSDh48SG5uLk8//TS+vr7MnTuX3NxcKlasyIgRI3B1dWXz5s189913WCwW2rdv\nT7t27Rwd/S+RlZXF66+/Tq9evfD39y9Rc9+8eTMxMTE4OTnRp08fvL29S8z8MzMzmTt3Lunp6WRn\nZxMSEkLFihX5/PPPsVgseHt789JLLwEQExPD9u3bsVgshISE8PDDDzs4/Z1LSkrigw8+oHPnznTs\n2JELFy4U+Xuek5PD/PnzOX/+PE5OToSGhlK5cuXiBTDEbg4cOGBMnz7dMAzDOHnypPHPf/7TwYns\nJyEhwZg2bZphGIaRlpZmvPLKK8a8efOMbdu2GYZhGEuXLjXWrl1rXL9+3Rg5cqSRnp5u3Lhxw3jt\ntdeMq1evOjL6X2bZsmXGuHHjjA0bNpSouaelpRkjR440MjIyjNTUVGPBggUlav7ff/+9sXTpUsMw\nDOPixYvGqFGjjEmTJhm///67YRiGMWfOHGPv3r3G2bNnjTfffNPIzs42rly5YowaNcqwWq2OjH7H\nrl+/bkyaNMlYsGCB8f333xuGYRTre75hwwbjs88+MwzDMPbt22d89NFHxc6g04Z2lJCQQHBwMADV\nq1cnPT2djIwMB6eyjwYNGjBmzBgAypYty40bNzhw4ABNmjQBoEmTJsTHx3P48GF8fX1xd3fHzc2N\nunXrcujQIUdG/0ucOnWK5ORkAgMDAUrU3BMSEmjYsCFlypTBw8ODl19+uUTN/7777uPq1asApKen\nU65cOc6dO2c7yxIUFERCQgL79+8nMDAQFxcXypcvzwMPPEBycrIjo98xV1dXxo8fj4eHh21bcb7n\n+/fvp2nTpgA0bNiQxMTEYmdQednR5cuXKV++vO1x+fLluXz5sgMT2Y+TkxOlS5cGYP369QQGBnLj\nxg1cXV2B/z/3/9VjsnjxYgYOHGh7XJLmfu7cOW7cuMHMmTOZOHEiCQkJJWr+rVq14sKFC4wYMYKw\nsDAGDBhA2bJlbfsrVKjApUuXCpz/pUuXHBH5rjk7O+Pm5pZnW3G+53/c7uTkhMViIScnp1gZVF73\nkFECPkZy165drF+/niFDhjg6yj2zadMm6tSpw4MPPujoKA5z9epVxo4dS2hoKPPnzy8Rf9Zv+c9/\n/oOnpyfh4eFMnDiR8PDwPPtvdyxK0jH6b+7kWOiGDTvy8PDI8zfLS5cu5Vlm/6/Zt28fq1evZsKE\nCbi7u1O6dGmysrJwc3MjNTUVDw+PfMckNTWV2rVrOzD13du7dy/nzp1j7969XLx4EVdX1xIzd7i5\nsqhbty7Ozs5UqVKFMmXK4OzsXGLmn5iYSOPGjQHw8fEhKysLq9Vq239r/pUqVSIlJcW2/X/t50Fx\n/sz/cXtOTg6GYeDiUrw60srLjho3bkxcXBwAR48excPDgzJlyjg4lX1kZGSwZMkSxo0bR7ly5YCb\n57JvzT8uLo6AgABq167NkSNHSE9PJzMzk8TEROrXr+/I6HdtzJgxTJ8+nffee4927drRq1evEjN3\nuPnnfP/+/eTm5nL16lUyMzNL1PyrVKnC4cOHATh//jxlypShWrVqtut5O3fuJCAgAH9/f/bu3UtO\nTg6pqamkpqZSvXp1R0b/SxXne/7Hn4179uzhoYceKvb76Z9EsbOlS5dy8OBBLBYLQ4YMwcfHx9GR\n7OLHH38kMjKSqlWr2rYNHz6cBQsWkJ2djaenJ6Ghobi4uBAXF0dMTAwWi4WOHTvSpk0bByb/a61c\nuZIHH3yQxo0bM3fu3BIz9x9++IH169cD0KtXL9uvSZSE+WdmZjJ//nyuXLlCbm4uffr0oWLFiixc\nuBDDMPDz87NdD/3+++/ZsmULAH379qVhw4aOjH7Hjh49yuLFizl//jzOzs5UqlSJkSNHMm/evCJ9\nz3Nzc1nCmMbJAAAASElEQVSwYAGnT5/G1dWV0NBQPD09i5VB5SUiIqaj04YiImI6Ki8RETEdlZeI\niJiOyktERExH5SUiIqaj8hIREdNReYmIiOn8P0S0UUcRJRPQAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dataset_breakdown['records'].plot(kind=\"barh\", title=\"SIRAD IDs by dataset\");" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n68vIyLCPw3HZlct3cXHRsGHD9NJLL2nFihVasWKFpk2bpkmTJikkJCTvDYMkx4tLLy8vBQQEqEWL\nFrnefJWIreEsAAAgAElEQVQvX97hQvL06dMaMWKE1q9fr3Pnztnb8fLF5bFjx/TQQw/Zv1+mTBnd\nf//9N1TO48ePOyxLunRgvXyT9MILL2j16tUKCgpSQECAGjRooMjISN1zzz03tD4rK1++vPz8/BQX\nF6cnn3xSK1euVNmyZeXn56cDBw5o1KhR2r59u8NrBc5uGHJrn8cffzzfN9qRkZH67rvvFBISonr1\n6ikwMFAtWrRQmTJl8rWPXrluFxcXFStWTBcuXMjXuv8q8qqjZs2aKS4uTi+++KKOHTum7du3218b\nSk9P10cffaT4+HidPXtWkpSZmel0n3D24MIZZ+3ev39/RUVFacGCBQoMDFRYWJhD2Ho33PhefX6T\nlOf4UVdOK1asmFxdXbVt27Zrjulzo+fHa52vrzxX5zWO0Mcff6wFCxZo0qRJstlscnNzU9OmTa+5\nLOn/6+LKNpOcX3c4U7RoUU2aNEl79uzRypUrFRsbqylTpujzzz+Xp6enevXqpTZt2ig+Pt7+Gs2Q\nIUP0/PPPO93Owubq6prn39fSqlUrNWrUSPHx8Vq1apW6deumLl26qF+/fqpVq5a+//57rV27VqtX\nr9bw4cP1xRdfaNasWfkqw2XZ2dlyc3NzaOf8lk9yfn2X1zZId3a7FYYrHypfGfhOnz5dAQEBioyM\n1JNPPnnDy8/reJufc8jlB6jS/weo1wrWDxw4oB9//FHz58+3TzfG6OGHH77h8ltFYmJintdwzs6b\n1ys/D0CWLl2qpKQkGWNytHvx4sXtD6gvX6+XL1/eYXmXx37cv3+/1q1bJ09PT/t0Y4yKFSt2w+VH\nTnnde+f3Xv7qY72V2okeX38h1atX14kTJxwGJk1PT7c/SahataqOHz/ucLBdvXq1Vq9ebX9q+vvv\nv9unpaam6siRIw7J8ZUefPBBZWVlObzffeX82dnZOnPmjKpUqaIuXbro888/V0REhL766qtbs8F/\nAZcvLuPi4tS0aVMlJCQoIiIi15uMK0NJSfrnP/+po0ePau7cudq5c2eOeTIzM3M8Kc7tRi8/MjIy\n8lxW5cqVtXjxYn388ceqUqWKJk+erL///e933Jg+d4qIiAjFxcVJutSbLiIiQtKlp/1FixbVokWL\n9PPPPzuMs5WX3NrnegaAvu+++/Tll19q5syZqlWrlmbPnq1mzZrp8OHD+dpHuclxLq86ioiI0Nat\nW3Xy5EnFxMSodu3a9oDp/fff18aNG/XJJ59o+/bt2rlzp/3GJC/OHlw446zdW7VqpdWrV6tXr15K\nTk5Wt27dHMYQuhv2ifLly1/zHFexYkVJcghwrwySq1evruzsbP3222/2z4wxSkxMlHRz58eHHnrI\n4VwrSX/88Ue+e6Nt27ZNQUFB8vX1lZubm86cOWMv12UZGRkOn/3vf/9TuXLlcgRfzq47nMnKylJK\nSooee+wx9ejRQ19//bVq1aqlb7/9VtKlwdwfeOABtW3bVlOnTlXPnj0tP7B3cnKySpcurWeffVbj\nxo3Tu+++ax/D5fLA/pfH65o3b562bNmSoyecM+XKlVNGRobDvr1jx458z+9s/81rG5DT1ddvvXr1\nUnx8vJ5//nnt27dPbdq0uan6y+t4m59zSG6h6NXh+GXFixdXz549tXPnTvv/fv75Zy1evPiGy28F\n2dnZTq/hnJ03r1d+HoCMGTNGW7du1c6dO3OEk7m1+7UC8uLFi6t58+Y52n3z5s03XH7klNe998MP\nP6zMzEyHNyr279+vzMxMh3v5K6enpqYqOTnZ4SHo3Yzg6y8kMDBQlStXVlRUlE6fPq3U1FR98MEH\n6t69uyQpKChIZcuW1b///W/7K2+DBg3SmTNnVK5cOYWEhGjy5Mk6efKk0tLS9K9//Uv33XefGjRo\nkOv6vL29VaZMGU2bNk0XLlzQ77//7jAg5tKlS9WiRQvt3r1bxhglJSXp4MGDPPW5Djdzc7Rt2zY9\n99xzqlq1qlxcXPTLL784TC9fvrx9sGnpUhfZU6dO3VA5H3zwQYdlSY4haFpamjIyMlS3bl0NGDBA\nS5Ys0YkTJ7R27dobWp/VhYWF6eDBg/r555/1008/qUWLFkpKStKhQ4fUsWNH+xO8n3/+OV/Lc9Y+\nzmRkZCg1NVVeXl7q06ePFi1apBIlSiguLo6AuwA8/PDDeuKJJ+w9Yi6/5ihd+u88IiJCHh4ecnV1\n1Z49e/LVm87Zgwtn/go3vl5eXnrggQfs57g9e/bYz3EuLi667777FBsbq6ysLO3evVvfffedfd7H\nHntMdevW1ciRI3X8+HGlp6dr8uTJat++vdLT052eH4sVK6ajR48qJSUlx1Pcli1baseOHVq0aJGy\nsrL0888/a968efl+VbVKlSr67bfflJqaqsTERL377ruqVKmSw77g7u6uyZMnKzU1VSdOnNDs2bPV\npEmTHMtydt3hTHR0tDp27GgfUuHw4cM6ceKEqlevrq1bt6phw4bauHGjsrOzde7cOe3du9fS1xDH\njh1TUFCQYmNjdfHiRV24cEG7d++2h5pt27bV+PHjlZaWpuzsbG3fvl1FixZVpUqVrms9tWvXVsmS\nJfWf//xH6enp2rFjh5YuXZrv+fPaf51tA5wryMD3Rs8h11KtWjXt2rXL4bPLP7j0V5afa7iCPG/m\n5wHI9cit3ZOTk6/rh5TgXF733lWqVJGHh4fGjh2rc+fO6ezZsxo7dqxq1qypWrVq2ZexZMkS/fbb\nb8rIyNB//vMflSxZUvXq1SusTbqlCL7+Qtzd3fXxxx/r7NmzCgkJUcOGDZWUlKTJkydLuvRKweef\nf66dO3eqXr166t69uzp37qxnn31WkjRy5EhVrlxZLVu2VEhIiA4dOqRZs2apRIkSua6vWLFimjp1\nqjZv3ix/f38NGjRIPXr0sE+PiIhQ27Zt1atXL3l7e+vZZ5/V448/rtdee+32V4ZF3Ex4WKVKFW3b\ntk2ZmZnatm2b5s+fL1dXV/vNzTPPPKOvv/5aiYmJSk1N1dixY2+4q2twcLA2btyodevWKSMjQ3Pm\nzHEY3+W1117T0KFDdfbsWRljtGvXrhxPIPD/ypQpo4CAAH344Yd66KGHVLNmTf3tb39TiRIltGXL\nFmVkZOjHH3+096658oY1N8HBwTpw4IAWL16sjIwMrVixIl+/BnXZ8OHD9dprr+nEiROSLj0tSklJ\nUfXq1Qm4C0izZs20ePFi7dy5094DUJJ9TI709HT98ccfGj9+vMqVK+d0n3D24MKZv8KNr7u7u/79\n738rISFB/v7+evvtt9W5c2dJ/9/jbcWKFapTp44+/PBD9erVy2H+MWPGqEyZMmratKkCAwOVkJCg\nGTNmqFixYk7Pj82bN9fJkycVHBycI5D08vLS2LFj9cknn8jPz099+/ZVjx491KVLl3xt18svv6wS\nJUqofv366tmzp9q3b6+uXbtqyZIl9l+ULV26tAICAtS8eXOFh4erevXq6tu3b651lNd1hzP/+Mc/\n5Ofnpw4dOsjLy0udOnVSkyZN1KFDB/n4+Khfv34aMmSIfHx81KRJE7m6umro0KH5WvbdqEKFChoz\n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\n44/Po48+mlGjRqWuri4vvfRSXn311Vx55ZVJks2bN+f111/PqlWrMnHixCTJEUcckWeffbaqxzz0\n0EPz29/+NrfeemsmTJiQcePGZe7cuTnssMOSJGPGjMmYMWNy//33Z/To0UmSvffeOwcddFDnWyj/\nFdVeeOGFbNy4MY899liS5J133kmSTJw4MTNmzMgJJ5yQE044YWe+RQAAAADUQM3DV319fSqVyrYP\n2tjY+e9PfepTueCCC7Y5Pnfu3NTX//Pjx/7z93bHkCFDct1112XJkiV56KGH8uKLL+ZDH/rQf72v\njo6Ozsf99xlbW1tz6KGHbvO1559/fv7xj3/kySefzJVXXpmrr746DQ0NVc8KAAAAQG3U/MPtR40a\nlb/97W9Jkr/85S9Zt25d57FDDjkkS5YsyTvvvJNKpZJZs2bl3XffTVNTU15++eUk6fy9/66uri4d\nHR0f+JiLFi3K4sWLc9RRR6W1tTUvv/xyRo0alSVLliT556vQfvnLX6a5ubnzti1btuS1117LgQce\nuM19NTc3Z+HChUmSVatW5f7778+mTZty991356CDDkpLS0sGDRqUzZs378R3CQAAAIDeVvNXfB1/\n/PFZvHhxpk2blsbGxhxxxBGdxw444ICceuqpmTZtWurr6zN+/PgMGDAgp556aq6//vosXLgww4cP\n73Kfo0ePzqxZs7LPPvvkk5/8ZJfjBx54YG688cbMnTs3dXV1OfPMMzN69Og8/fTTueKKK5Ik3/rW\ntzJ8+PAccsghmTZtWt5///2cddZZ2Xvvvbe5ry9/+cu56aabcsUVV2Tr1q355je/mYEDB2bjxo25\n/PLLs/fee+ewww7LoEGDevk7BwAAAMDOqHn4amxszLe//e0PPH7yySfn5JNP3ua2j33sY7n66qu7\nfO1tt92WJDnxxBNz4oknfuB9Dh06NDNmzOhy+znnnNPltq9//etdbps+fXrnf++zzz657LLLunxN\na2vrBz4+AAAAAH2v5uGrlu6+++7tvhXyoosuytChQ/tgIgAAAAD6i906fLW0tKSlpaWvxwAAAACg\nH6r5h9sDAAAAQF8QvgAAAAAokvAFAAAAQJGELwAAAACKJHwBAAAAUCThCwAAAIAiCV8AAAAAFEn4\nAgAAAKBIwhcAAAAARRK+AAAAACiS8AUAAABAkYQvAAAAAIokfAEAAABQJOELAAAAgCIJXwAAAAAU\nSfgCAAAAoEjCFwAAAABFEr4AAAAAKJLwBQAAAECRhC8AAAAAiiR8AQAAAFAk4QsAAACAIglfAAAA\nABRJ+AIAAACgSMIXAAAAAEUSvgAAAAAokvAFAAAAQJGELwAAAACKJHwBAAAAUCThCwAAAIAiCV8A\nAAAAFEn4AgAAAKBIwhcAAAAARRK+AAAAACiS8AUAAABAkYQvAAAAAIokfAEAAABQJOELAAAAgCIJ\nXwAAAAAUSfgCAAAAoEjCFwAAAABFEr4AAAAAKJLwBQAAAECRhC8AAAAAiiR8AQAAAFAk4QsAAACA\nIglfAAAAABRJ+AIAAACgSMIXAAAAAEUSvgAAAAAokvAFAAAAQJGELwAAAACKJHwBAAAAUCThCwAA\nAIAiCV8AAAAAFEn4AgAAAKBIwhcAAAAARRK+AAAAACiS8AUAAABAkRr7eoA9ScP//UNfj7DTmpqa\nsnr16r4eY7cy96zD+3qEnWbvANDV1464va9H6BX+P1+91eM+2dcj7LRS9t60Cx/Lz3N7phJ+nkv2\n7N17xRcAAAAARRK+AAAAACiS8AUAAABAkYQvAAAAAIokfAEAAABQJOELAAAAgCIJXwAAAAAUSfgC\nAAAAoEjCFwAAAABFEr4AAAAAKJLwBQAAAECRhC8AAAAAiiR8AQAAAFAk4QsAAACAIglfAAAAABRJ\n+AIAAACgSMIXAAAAAEUSvgAAAAAokvAFAAAAQJGELwAAAACKJHwBAAAAUCThCwAAAIAiCV8AAAAA\nFEn4AgAAAKBIwhcAAAAARRK+AAAAACiS8AUAAABAkYQvAAAAAIokfAEAAABQJOELAAAAgCIJXwAA\nAAAUSfgCAAAAoEjCFwAAAABFEr4AAAAAKJLwBQAAAECRhC8AAAAAiiR8AQAAAFAk4QsAAACAIglf\nAAAAABRJ+AIAAACgSMIXAAAAAEUSvgAAAAAokvAFAAAAQJGELwAAAACKJHwBAAAAUCThCwAAAIAi\nCV8AAAAAFEn4AgAAAKBIwhcAAAAARRK+AAAAACiS8AUAAABAkYQvAAAAAIokfAEAAABQJOELAAAA\ngCIJXwAAAAAUSfgCAAAAoEjCFwAAAABFEr4AAAAAKJLwBQAAAECRhC8AAAAAiiR8AQAAAFAk4QsA\nAACAIglfAAAAABRJ+AIAAACgSMIXAAAAAEUSvgAAAAAokvAFAAAAQJHqKpVKpa+HAAAAAIDe5hVf\nAAAAABRJ+AIAAACgSMIXAAAAAEUSvgAAAAAokvAFAAAAQJGELwAAAACKJHwBAAAAUKTGvh6gNL/+\n9a/z4osvpq6uLuedd16am5s7jy1atCh33nln6uvrc/TRR6elpaUPJ92xHT2PKVOm5KMf/Wjq6//Z\nTS+++OLsv//+fTXqf7VixYpcd911Oe2003LKKadsc6y3dlLK3pNydr8r9p6Us3t7r4699z+u9dUp\nZffO+erYe3Xsvf9xra9OKbt3zlfH3rejQq9ZsmRJ5ZprrqlUKpXKypUrKz/84Q+3OX7JJZdU1q5d\nW+no6KhMnTq1snLlyr4Y87/6b8/joosuqmzevLkvRqva5s2bK9OnT6/ccsstlT/+8Y9djvfGTkrZ\ne6VSzu53xd4rlXJ2b+/Vsff+x7W+OqXs3jlfHXuvjr33P6711Sll98756tj79nmrYy9avHhxxo8f\nnyQ5+OCD097enk2bNiVJ1qxZk0GDBuWAAw7orJKLFy/uy3E/0I6ex+5mr732yuWXX54hQ4Z0OdZb\nOyll70k5u98Ve0/K2b29V8fe+x/X+uqUsnvnfHXsvTr23v+41lenlN0756tj79snfPWiDRs2ZL/9\n9uv89X777ZcNGzZs99jgwYOzfv36XT5jd+zoefzLrbfemqlTp2bOnDmpVCq7esRua2hoyIABA7Z7\nrLd2Usrek3J2vyv2vr372l13b+/Vsff+x7W+OqXs3jlfHXuvjr33P6711Sll98756tj79vmMrxra\n0R+i/voHbHv+c9Yzzzwz48aNy6BBg3LddddlwYIFmThxYh9N13t6ayel7D3ZM3bfmzspZff23nv3\nZe/9j2t9V3vC7p3zXdl7792Xvfc/rvVd7Qm7d853Ze//5BVfvWjIkCHb1NT169d3vjTvP4+tW7eu\n336I3I6eR5J8/vOfz+DBg9PQ0JCjjz46K1as6Isxd1pv7aSUvSd7xu57cyel7N7ed+6+7L1/c63v\nak/YvXO+K3vfufuy9/7Ntb6rPWH3zvmu7H37hK9edNRRR2X+/PlJkmXLlmXIkCHZZ599kiRDhw7N\n5s2b8/rrr6ejoyPPPPNMjjzyyL4c9wPt6Hls2rQpV111Vd5///0kyXPPPZdhw4b12aw7o7d2Usre\nkz1j9725k1J2b+/Vsffdi2t9V3vC7p3zXdl7dex99+Ja39WesHvnfFf2vn11ld3pdXq7gTlz5mTp\n0qWpq6vLpEmT8sorr2TgwIE55phj8txzz2XOnDlJkgkTJuT000/v42k/2I6exwMPPJB58+ZlwIAB\nGTlyZFpbW1NXV9fXI2/XsmXLMnv27KxduzYNDQ3Zf//985nPfCZDhw7t1Z2UsvekjN3vqr0n5eze\n3qtj7/2La331Sti9c7569l4de+9fXOurV8LunfPVs/euhC8AAAAAiuStjgAAAAAUSfgCAAAAoEjC\nFwAAAABFEr4AAAAAKJLwBQAAAECRhC8AAAAAiiR8AQAAAFCk/wWBS7kELJBtQwAAAABJRU5ErkJg\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dataset_breakdown_pct = dataset_breakdown.apply(lambda x: x / x['records'], axis=1)\n", + "dataset_breakdown_pct.plot(\n", + " kind=\"barh\",\n", + " subplots=True,\n", + " layout=(1,9),\n", + " sharey=True,\n", + " legend=False,\n", + " figsize=(20, 10),\n", + " title=\"Proportion of SIRAD ID by dataset\"\n", + ");" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\nDsONiIgk5/8ABXrxtDQ0rw8AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "q = \"\"\"\n", + "WITH t AS\n", + "(\n", + "SELECt dsn, COUNT(*) as records\n", + "FROM sirad_id\n", + "GROUP BY dsn\n", + "), SID as (\n", + "SELECT dsn, COUNT(*) AS records_with_sid\n", + "FROM sirad_id\n", + "WHERE sirad_id <> 0\n", + "GROUP BY dsn\n", + ")\n", + "SELECT dsn as dataset, (CAST(records_with_sid AS FLOAT) / records) * 100 as perc\n", + "FROM t\n", + "JOIN sid USING(dsn) \n", + "\"\"\"\n", + "dsn_perc = pd.read_sql(q, con=pii_eng, index_col='dataset')\n", + "dsn_perc.plot(kind=\"barh\", title=\"Percentage of records with valid SIRAD IDs by dataset\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Birth year histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\nwjopKxU+JwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "q = \"\"\"\n", + "SELECT dsn AS dataset, CAST(STRFTIME('%Y', dob) AS INT) dob, COUNT(*) AS records\n", + "FROM sirad_id\n", + "GROUP BY DSN, STRFTIME('%Y', dob) ;\n", + "\"\"\"\n", + "dob_df = pd.read_sql(q, con=pii_eng)\n", + "pivoted_dob = dob_df.pivot(index='dob', columns='dataset', values='records')\n", + "pivoted_dob = pivoted_dob[pd.Series(index=pivoted_dob.index, data=np.isfinite(pivoted_dob.index))]\n", + "pivoted_dob.fillna(0, inplace=True)\n", + "pivoted_dob[1:].plot(kind='area', xlim=[1940, 2040]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Missing data" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "q = \"\"\"\n", + "select \n", + " sum(case when first_name is null then 1 else 0 end) first_name,\n", + " sum(case when last_name is null then 1 else 0 end) last_name,\n", + " sum(case when dob is null then 1 else 0 end) dob\n", + "from sirad_id\n", + "where sirad_id=0\n", + "\"\"\"\n", + "missing_df = pd.read_sql(q, con=pii_eng)\n", + "missing_series = missing_df.loc[0]\n", + "missing_series.plot(kind=\"bar\", title=\"Types of missing data in records without SIRAD ID\");" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 169, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAFICAYAAACvGW67AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcVPX+x/HXsINIYKaGayKSW4GCAhaYYbikYS4ttnhT\n24z8WTfTX1JmobdbaguaZWV5U9OozGtqRSliRYS54o4rmnp1REFlkeH3Rz/nisqSDI5zeD8fDx8P\n5syZ73y+Z8b3fOd7zpxjKi0tLUVERAzByd4FiIiI7SjURUQMRKEuImIgCnUREQNRqIuIGIhCXUTE\nQBTqtcyXX35JSEgIADk5OQQFBbFx40Y7V1V11al57NixPPbYYzVQlWM6f3ssWrSILl26lLvu+e+b\nAwcO0KFDB7Kysq5InfLXKNQNaM+ePdx4440MHDjQ3qUY2r59+3juueeIioqiQ4cOhIWF8eSTT7Jt\n27Yy6y1btoz77ruPzp070759e7p3784bb7xBUVGRdZ2goCD69u3L2bNnyzz23IdYTYuLi+PXX3+t\n0rqNGzdm48aNtGvXDoAtW7aQmppak+XJX6BQN6AFCxbQo0cPtm/fztatW+1djiGdPn2aBx54AA8P\nD5KTk9mwYQNLly7Fz8+Phx56iJMnTwKQkpLC2LFjGTp0KKmpqaxfv54333yTb7/9lpdeeqlMm0eP\nHmX27Nn26E61JCcnK9SvIgp1gykqKuKrr75i0KBBdOvWjQULFlx2W927d2f69On07t2bRx99FIAj\nR47w9NNP07VrV0JCQhg2bBh79+61PubgwYM8/vjjdOzYkVtuuYVJkyZZR59FRUW8/vrr3H777dx0\n003069ePH374wfrYBx98kH/84x/cc8893HnnnQDs37+fBx98kJCQEPr06cPatWvL1Lhq1Sr69+9P\nSEgIXbp04dlnn7UGanmmTZtGly5diIyM5LXXXqOkpISvvvqKsLCwMqPnkpISIiIi+PLLLy9qY8eO\nHRw+fJgRI0bQoEEDTCYT1113HS+++CLjxo2jpKQEgLS0NNq1a0dsbCyenp44Oztz00038dZbb9Gz\nZ88ybY4ZM4YZM2aQk5NT6WsDMHr0aOLj48ss++2332jTpg1HjhyhqKiIV155haioKEJCQujXr1+5\n4Xv+9ArA6tWr6d27N8HBwfztb3/j6NGj1vvOnwIbP348c+fO5bPPPiMkJISkpCR69+5dpu3jx4/T\n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\nA3z66afW+9euXcvtt99ORkYGFouFvLw8srOzueGGG8rtg9ls5l//+hfFxcWsX7+e1NTUMvPFcXFx\nbNq0ieXLl1c4ZeDp6clbb73F+++/bx1tnzhxgtmzZ7N7925iY2NxcnLi8OHDPP/88/zyyy8UFhZi\nsVjYtWsX06ZNo23btrRs2fKS7QcEBPDII48wadKkCl8TZ2dnYmNjef/99zlz5gxRUVHW+5o0acK6\ndesoLi5m3bp1fPHFF9aaKhIZGUlxcTEff/wxRUVFZGZmltmBfCF3d3dycnI4efKk9aifAQMG8OOP\nP7J+/Xp69epV4fOJbSnUDWLBggX06tWLunXrXnTfnXfeSXFxcZV2vlXmjTfewNfXl169etG1a1cy\nMzP54IMPrFMY7733HmfOnCE6OpqBAwdy6623MmLECODPnYAREREMHTqUyMhIUlNT+de//lVmpHyh\nt99+G7PZzC233MKjjz7K3/72N+t9ISEh/P3vf2f8+PGEhIRwxx134OTkREJCQrnt3Xrrrfzxxx90\n7dqVJ554ggcffLBM6DRo0ICuXbsSEBBQbuACdO3alffee49ff/2VO++8k/bt29OjRw9Wr17Nxx9/\nTIcOHQBITExk0KBBTJo0icjISG6++WaGDx9OixYt+OijjyrcefjEE0/g6elZ7v3n9OnTh4yMDHr2\n7FlmHvzFF1/k119/JSwsjGnTpjF27Fj69evH+PHj+f7778ttr2HDhrz55pt88cUXhIWFkZSUZH0N\nL2XAgAGsWbOG22+/3frN46abbqJx48Z069YNHx+fSvsgtmPSlY9Eyurfvz9DhgzRL3KroaioiO7d\nu/P6668TERFh73JqFRd7FyBytSgpKWHWrFnk5eWVmZuWv6aoqIjExESaNm2qQLcDTb+I8OfO2ODg\nYJYvX05SUpJ1Okn+mszMTDp16kR2djZvvPGGvcuplTT9IiJiIBqpi4gYiEJdRMRAFOoiIgZi96Nf\nzv+14NXK39/fIep0FNqetqNtaVuOsj39/f3LvU8jdRERA1Goi4gYiEJdRMRAFOoiIgaiUBcRMRCF\nuoiIgSjURUQMRKEuImIgdv/xkVzdSkb0s3mb+ytf5S9znrW4BloVR1Pd9+uF701HfF8p1EVEquHw\n4cNMmjQJJycnSkpK+N///V8mT55c5va5i7Xn5uayf/9+7rnnHvr06cP8+fNZtWoVTk5ORERE8MAD\nD1S7HoW6iEg1pKam0qlTJx566CG2b99OSkpKmdvnrmG7a9cukpKSOHDgABMnTqRPnz4sWLDAeu3Y\nxYtt861Ac+oiItUQFhbGd999x4wZMyguLqZr165lbrdt2xaAdu3a4ezszHXXXcepU6cAiI6O5tln\nn2XJkiXExMTYpB6FuohINdxwww188MEH3HTTTcyaNYvt27eXuf3tt98C4OzsbH3MuWsTjR49mmee\neQaz2czo0aMpKSmpdj0KdRGRavjxxx/ZvXs3t9xyC8OGDePTTz8tc3vbtm2XfFx+fj6ffPIJzZo1\n4+GHH6Zu3brWEXx1aE5dRKQamjRpwrRp0/D09MTJyYkxY8bw9ttvW2/Hx8ezZcuWix7n7e3NiRMn\neOKJJ/D09KRdu3b4+PhUux67X6PUUc5d7Ah11oSaOKSxJjjioWe2UJvfmzXBUbanzqcuIlJLKNRF\nRAykSnPqaWlpLF68GCcnJ+655x6aNWtGUlISFosFX19f4uPjcXV1JS0tjaVLl2IymYiJiaF79+41\nXb+IiJyn0lDPy8sjOTmZf/zjHxQUFLBw4ULS09OJjY0lIiKCefPmsWLFCqKiokhOTmby5Mm4uLgw\nbtw4OnfujLe395Xoh4iIUIXpl40bN9KhQwc8PT3x8/PjscceIysri9DQUABCQ0PZsGEDO3fuJCAg\nAC8vL9zc3AgKCmLr1q013gEREfmvSkfqR44cobCwkNdee41Tp04xaNAgCgsLcXV1BcDHx4fc3Fxy\nc3PLHI5zbrmIiFw5VZpTz8vL47nnnuM///kPL7/8MrY8CrKiQ3OuJo5Sp63VxBkVa0JtfX2gdve9\nJjj69qw01K+55hqCgoJwdnamUaNGeHp64uzsTFFREW5ubpjNZvz8/PDz8yszMjebzQQGBlZagKMc\nE+oIddZmtfX10XvTthxle1brOPWbb76ZTZs2YbFYyMvLo6CggA4dOpCeng5Aeno6wcHBBAYGkp2d\nzalTpygoKGDbtm20adPGdr0QEZFKVTpSr1evHuHh4bzwwgsAPPLIIwQEBJCUlERKSgr169cnOjoa\nFxcXhgwZQmJiIiaTiYEDB+Ll5VXjHRARkf/SaQKqwFG+ktUEnSbg6lab35s1wVG2p04TICJSSxju\nLI26pqaI1GYaqYuIGIhCXUTEQBTqIiIGolAXETEQhbqIiIEo1EVEDEShLiJiIAp1EREDUaiLiBiI\nQl1ExEAU6iIiBqJQFxExEIW6iIiBKNRFRAxEoS4iYiAKdRERA1Goi4gYiEJdRMRAFOoiIgaiUBcR\nMRCFuoiIgbhUtkJWVhZTp06ladOmADRr1ox+/fqRlJSExWLB19eX+Ph4XF1dSUtLY+nSpZhMJmJi\nYujevXuNd0BERP6r0lAHaNu2Lc8++6z19owZM4iNjSUiIoJ58+axYsUKoqKiSE5OZvLkybi4uDBu\n3Dg6d+6Mt7d3jRUvIiJlXdb0S1ZWFqGhoQCEhoayYcMGdu7cSUBAAF5eXri5uREUFMTWrVttWqyI\niFSsSiP1nJwcXnvtNfLz8xk0aBCFhYW4uroC4OPjQ25uLrm5ufj4+Fgfc265iIhcOZWG+vXXX8+g\nQYOIiIjg8OHDvPzyy5SUlNisAH9/f5u1BbDfpq3VHFv3u6Zoe179anPfa4Kjb89KQ71evXpERkYC\n0KhRI3x9fcnOzqaoqAg3NzfMZjN+fn74+fmVGZmbzWYCAwMrLeDgwYPVKN9x1dZ+15Tauj39/f1r\nbd9rgqNsz4o+eCqdU09LS2Px4sUA5ObmcuLECbp160Z6ejoA6enpBAcHExgYSHZ2NqdOnaKgoIBt\n27bRpk0bG3VBRESqotKRemhoKG+99RaZmZmcPXuW4cOHc8MNN5CUlERKSgr169cnOjoaFxcXhgwZ\nQmJiIiaTiYEDB+Ll5XUl+iAiIv+v0lD39PRk7NixFy1PSEi4aFl4eDjh4eG2qUxERP4y/aJURMRA\nFOoiIgaiUBcRMRCFuoiIgSjURUQMRKEuImIgCnUREQNRqIuIGIhCXUTEQBTqIiIGolAXETEQhbqI\niIEo1EVEDEShLiJiIAp1EREDUaiLiBiIQl1ExEAU6iIiBqJQFxExEIW6iIiBKNRFRAxEoS4iYiAK\ndRERA1Goi4gYiEtVVioqKuLZZ59lwIABtG/fnqSkJCwWC76+vsTHx+Pq6kpaWhpLly7FZDIRExND\n9+7da7p2ERG5QJVG6l988QXe3t4ALFy4kNjYWCZOnEijRo1YsWIFBQUFJCcnk5CQwIQJE/jmm2/I\nz8+v0cJFRORilYb6gQMHyMnJISQkBICsrCxCQ0MBCA0NZcOGDezcuZOAgAC8vLxwc3MjKCiIrVu3\n1mzlIiJykUqnX+bMmcOwYcNYuXIlAIWFhbi6ugLg4+NDbm4uubm5+Pj4WB9zbnlV+Pv7X0bZ5dtv\n09Zqjq37XVO0Pa9+tbnvNcHRt2eFoZ6amkrr1q1p0KBBjRVw8ODBGmv7alZb+11Tauv29Pf3r7V9\nrwmOsj0r+uCpMNR///13jhw5wu+//86xY8dwdXXFw8ODoqIi3NzcMJvN+Pn54efnV2ZkbjabCQwM\ntF0PRESkSioM9dGjR1v/XrhwIQ0aNGDbtm2kp6cTFRVFeno6wcHBBAYGMnPmTE6dOoWzszPbtm1j\n6NChNV27iIhcoEqHNJ5v8ODBJCUlkZKSQv369YmOjsbFxYUhQ4aQmJiIyWRi4MCBeHl51US9IiJS\ngSqH+uDBg61/JyQkXHR/eHg44eHhtqlKREQui35RKiJiIAp1EREDUaiLiBiIQl1ExEAU6iIiBqJQ\nFxExEIW6iIiBKNRFRAxEoS4iYiAKdRERA1Goi4gYiEJdRMRAFOoiIgaiUBcRMRCFuoiIgSjURUQM\nRKEuImIgCnUREQNRqIuIGIhCXUTEQBTqIiIGolAXETEQF3sXICJyOUpG9LN5m/tt3iI4z1pcA62W\nr9JQLywsZPr06Zw4cYLi4mIGDBhA8+bNSUpKwmKx4OvrS3x8PK6urqSlpbF06VJMJhMxMTF07979\nSvRBRET+X6WhvmbNGgICArjrrrv4z3/+w6uvvkpQUBCxsbFEREQwb948VqxYQVRUFMnJyUyePBkX\nFxfGjRtH586d8fb2vhL9EBERqjCnHhkZyV133QXAsWPHqFevHllZWYSGhgIQGhrKhg0b2LlzJwEB\nAXh5eeHm5kZQUBBbt26t2epFRKSMKs+pjx8/nmPHjjF27FheeeUVXF1dAfDx8SE3N5fc3Fx8fHys\n659bXhl/f//LKLt8NTEnVhNs3e+aou159autfdd789KqHOqvvvoqe/bs4Z133qG0tNRmBRw8eNBm\nbTmS2trvmlJbt6e/v3+t7bujqInXp6IPikqnX3bt2sXRo0cBaNGiBSUlJXh6elJUVASA2WzGz88P\nPz+/MiPzc8tFROTKqTTUN2/ezJIlSwDIzc2loKCADh06kJ6eDkB6ejrBwcEEBgaSnZ3NqVOnKCgo\nYNu2bbRp06ZmqxcRkTIqnX654447ePfdd3nxxRcpKipi2LBhBAQEkJSUREpKCvXr1yc6OhoXFxeG\nDBlCYmIiJpOJgQMH4uXldSX6ICIi/6/SUHdzc2PUqFEXLU9ISLhoWXh4OOHh4bapTERE/jKdJkBE\nxEAU6iIiBqJQFxExEIW6iIiBKNRFRAxEoS4iYiAKdRERA1Goi4gYiEJdRMRAFOoiIgaiUBcRMRCF\nuoiIgSjURUQMRKEuImIgCnUREQNRqIuIGIhCXUTEQBTqIiIGolAXETEQhbqIiIEo1EVEDEShLiJi\nIAp1EREDcanKSp9++ilbtmzBYrEQFxdHQEAASUlJWCwWfH19iY+Px9XVlbS0NJYuXYrJZCImJobu\n3bvXdP0iInKeSkN906ZN7N+/n8TERPLy8hgzZgwdOnQgNjaWiIgI5s2bx4oVK4iKiiI5OZnJkyfj\n4uLCuHHj6Ny5M97e3leiHyIiQhWmX9q2bcvo0aMBqFOnDoWFhWRlZREaGgpAaGgoGzZsYOfOnQQE\nBODl5YWbmxtBQUFs3bq1ZqsXEZEyKg11JycnPDw8APjxxx8JCQmhsLAQV1dXAHx8fMjNzSU3Nxcf\nHx/r484tFxGRK6dKc+oAv/32Gz/++CPjx4/n6aeftlkB/v7+NmsLYL9NW6s5tu53TdH2vPrV1r7r\nvXlpVQr1devW8eWXX/LCCy/g5eWFh4cHRUVFuLm5YTab8fPzw8/Pr8zI3Gw2ExgYWGnbBw8evPzq\nHVht7XdNqa3b09/fv9b23VHUxOtT0QdFpdMvp0+f5tNPP2Xs2LHWnZ4dOnQgPT0dgPT0dIKDgwkM\nDCQ7O5tTp05RUFDAtm3baNOmjY26ICIiVVHpSP3nn38mLy+PadOmWZeNHDmSmTNnkpKSQv369YmO\njsbFxYUhQ4aQmJiIyWRi4MCBeHl51WjxIiJSVqWhHhMTQ0xMzEXLExISLloWHh5OeHi4bSoTEZG/\nTL8oFRExEIW6iIiBKNRFRAxEoS4iYiAKdRERA1Goi4gYiEJdRMRAFOoiIgaiUBcRMRCFuoiIgSjU\nRUQMRKEuImIgCnUREQNRqIuIGIhCXUTEQBTqIiIGolAXETEQhbqIiIEo1EVEDEShLiJiIAp1ERED\nUaiLiBiIQl1ExEBcqrLSvn37eP311+nTpw89e/bk6NGjJCUlYbFY8PX1JT4+HldXV9LS0li6dCkm\nk4mYmBi6d+9e0/WLiMh5Kh2pFxQUMHv2bNq3b29dtnDhQmJjY5k4cSKNGjVixYoVFBQUkJycTEJC\nAhMmTOCbb74hPz+/RosXEZGyKg11V1dXxo0bh5+fn3VZVlYWoaGhAISGhrJhwwZ27txJQEAAXl5e\nuLm5ERQUxNatW2uuchERuUil0y/Ozs44OzuXWVZYWIirqysAPj4+5Obmkpubi4+Pj3Wdc8tFROTK\nqdKcek3y9/e3aXv7bdpazbF1v2uKtufVr7b2Xe/NS7usUPfw8KCoqAg3NzfMZjN+fn74+fmVGZmb\nzWYCAwMrbevgwYOXU4LDq639rim1dXv6+/vX2r47ipp4fSr6oLisQxo7dOhAeno6AOnp6QQHBxMY\nGEh2djanTp2ioKCAbdu20aZNm8urWERELkulI/Vdu3YxZ84c/vOf/+Ds7Ex6ejpPP/0006dPJyUl\nhfr16xMdHY2LiwtDhgwhMTERk8nEwIED8fLyuhJ9EBGR/1dpqLds2ZIJEyZctDwhIeGiZeHh4YSH\nh9ukMBER+ev0i1IREQNRqIuIGIhCXUTEQBTqIiIGolAXETEQhbqIiIEo1EVEDEShLiJiIAp1ERED\nUaiLiBiIQl1ExEAU6iIiBqJQFxExELtf+UiktigZ0c/mbdbE1X+cZy2ugVblStFIXUTEQBTqIiIG\nolAXETEQhbqIiIEo1EVEDEShLiJiIAp1EREDUaiLiBiIQl1ExEAU6iIiBmLz0wR8/PHH7NixA5PJ\nxNChQ2nVqpWtn0JERMph05H65s2bOXToEImJiTz++OPMnj3bls2LiEglbBrqGzduJCwsDIAmTZpw\n6tQpTp8+bcunEBGRCth0+iU3N5eWLVtab/v4+JCbm4uXl1e5j/H397dlCfBNpm3bq+20PW1H29K2\ntD0vqUZ3lJaWltZk8yIicgGbhrqfnx+5ubnW28ePH8fPz8+WTyEiIhWwaajffPPNpKenA7Br1y78\n/Pzw9PS05VOIiEgFTKU2niOZO3cuW7ZswWQyMWzYMFq0aGHL5kVEpAI2D3UREbEf/aJURMRAFOoi\nIgaiUBcRMRCbn/vFKI4ePXrRMicnJ3x9fXFy0mehiJGUlJTg7Oxs7zJsQqFejmnTprFr1y4aNGgA\n/BnyTZo0IS8vj3vvvZeoqCg7V3j1GzlyJCaT6ZL3mUwm3nnnnStckWObMWNGhfc/+eSTV6gS49i0\naROffPIJxcXFvPnmm8yfP582bdoQHBxs79Ium0K9HP7+/jz22GM0a9YMgJycHJYtW8ZDDz3ExIkT\nFepVMGXKFAC+/PJLWrRoQbt27SgtLWXTpk388ccfdq7O8YSHhwOQmZmJk5MTbdu2pbS0lKysLFxc\n9F/5cnz++ee8+OKLTJ06FYDevXvzz3/+06FDXfMI5cjJybEGOvx5grI9e/bg7u6OxWKxY2WOw8PD\nAw8PD7aq5PmwAAANe0lEQVRt20ZkZCTXXHMNvr6+3HLLLWzdutXe5Tmcjh070rFjRw4fPszw4cOJ\njIyka9euPProoxw5csTe5TkkZ2dn6tata719zTXXOPz0qj7eyxEYGMjYsWMJDAzEZDKxe/du/P39\nWbVqFYGBgfYuz6G4uroyZ84cWrdujZOTEzt37tQHYzXk5+ezZs0aWrdujclkIjs7m2PHjtm7LIfU\noEEDFixYQF5eHj///DMZGRk0btzY3mVVi358VIF9+/Zx4MABABo2bEjLli05e/asvur+RWfOnCEt\nLY2cnBxKS0tp3LgxUVFRFZ69U8q3b98+vvjiC3JycoA/pwrvvvtubrjhBjtX5ngsFgurV69m+/bt\nuLi40KpVKyIjIx16tK5QL8eePXtITU3l9OnTZc42qZ1RVbdjxw4CAwP5/fffL3l/x44dr3BFjq24\nuBhXV1cKCwuB/54F9dzOaHd3d7vV5mjKe0+e48jvTQ05y/H222/Tq1cvrr32WnuX4rCysrIIDAy0\nnuTtQo78H8ceZsyYwahRo3jmmWfKHFVUWlqKyWQiKSnJjtU5lvLek+c48ntTI/VyJCYm8sILL9i7\nDId2bkRZHo0s5Wqwb98+Dh48iJOTE40bN9aculHNnz+fs2fP0qZNmzLza478CX6llXecukaWl2fc\nuHEV3j958uQrVIlxzJo1i927dxMQEEBpaSnZ2dkEBQUxdOhQe5d22TT9Uo7jx48DkJGRUWa5Qr3q\npk+fXu59K1euvHKFGMQzzzxT7n1nzpy5gpUYx+7du5k0aZL1tsViISEhwY4VVZ9C/QLndkYNGzbM\n3qUYRnZ2Nl9//TV5eXkAnD17ltzcXLp162bfwhzMddddB8CpU6dIS0sjPz8f+HN7pqam8u6779qz\nPIfk7++P2WymXr16AJw8eZKmTZvauarqUahfQDujbO+jjz7ivvvuY+7cuYwYMYKMjAwd618NU6dO\nJSgoiJ9++omYmBg2b97MI488Yu+yHMq5qayzZ88ycuRIrr/+egAOHz7s8Bf2UahfYNSoUUDZqQOL\nxcLp06fx9va2V1kOzd3dnfbt2+Pq6krLli1p2bIliYmJdOrUyd6lOaTS0lIGDx7M5s2b6du3Lz17\n9mTatGmEhYXZuzSHYeSpLIV6ORYtWkSdOnW49dZbmTBhAt7e3rRu3ZrBgwfbuzSH4+7uTmZmJg0a\nNGDevHk0atTokmfBlKo5e/as9ZQVGzZsoEGDBhw+fNjeZTkUI09lOe7PpmrYmjVr6NGjB6tXryY0\nNJTx48ezbds2e5flkMxmM3v37qVfv364ubmxd+9ennrqKXuX5bCGDRtGXl4eQ4YM4auvvmLKlCn0\n6tXL3mU5pKlTp3Ly5EnS0tJwd3dn+/btDj+VpVAvh8ViwWKx8NNPPxEZGQk4/tcye3nuuefw8vLi\nk08+ITMzEx8fHzw8POxdlsNKTU3F3d2dZs2a8dJLL/H6668TExNj77Ic0rmpLD8/P/r27cu4ceNY\nsWKFvcuqFk2/lCMsLIxHH32U8PBw/P39SU5OplWrVvYuyyHVr1+fXr160atXL44dO8b8+fP5+9//\nzvz58+1dmkNq3rw5ixcv5sCBA9x8882Eh4dz44032rssh2TEqSz9+KgKLBYLZrOZ+vXr27sUh3Ts\n2DHWrFnDmjVrMJvNhISE0KVLFwICAuxdmkMrLi5m48aNrF69mi1btjj0PLC97N27lxMnTuDr68vs\n2bPJz88nNjbWob/5KNTLcf6O0pdeeom6detqR+llev755+nSpQudO3emSZMm9i7HEHJycqwflCaT\niU6dOtGvXz97l+WQTp8+zenTp4H/HrrsyAM4hXo5EhISeOWVV0hJSSE3N5eBAwfyyiuvOPyvzcTx\njRo1ivr169O5c2c6d+6Mn5+fvUtyWDNnzmTt2rXWHx+d48inXNCcejnO31E6YsQIQDtK5eqQmJiI\nk5MTp0+fpqSkxHp4qCOPLu1lz549zJw5s9xr6ToihXo5tKNUrlZz585l7dq1F43QHXl0aS/Nmzcn\nLy8PHx8fe5diM5p+qaIzZ87g6elp7zJEGDt2LJMnTzbU6NJeJkyYwO7du2nUqFGZs7E68gekRuoX\nmDVrFiNGjLjkaU5NJlOZM7qJ2IMRR5f2MnLkSHuXYHMK9QsMGjQI+PNXe1999RWnT5+2/qRY5Gpw\n+PBh4uPjDTW6tKeFCxeyZ88enJycaNmypcMf4aZQv4Cvry8A77zzDnfddZf1toi9ff/99/To0QMf\nHx9uvvlme5djCDNnzqRHjx48/PDDnD17lqysLGbOnFnpBUmuZgr1cjRu3JjbbrtN85Zy1Tj3jVEX\narEdi8VCeHi49XbXrl354Ycf7FhR9SnUy9G1a1fGjBlD8+bNy3zFffLJJ+1YldRmwcHBALq4iA25\nuLjwyy+/0K5dO0pLS9m0aROurq72LqtadPRLOeLj44mLi7vosDGNkkSMw2w2s2DBAnbt2gVAq1at\nrCf4clQaqZejSZMm3H777fYuQ0RqwLnLVtapU4dHHnnEenoAI9BIvRwzZszg8OHDtGzZEmdnZ+vy\nBx54wI5ViYgtvPXWW4waNYqRI0ca7rKVCvVylHe1e81nihjHzp07L/ql+KZNm2jfvr2dKqo+hbqI\n1DqHDh3i4MGDzJ8/n/vvv59zMWixWJg9e3aZaxQ7Gs2pi0itU1RURHZ2NidOnOCXX36xLjeZTNYf\nIDoqjdRFpNbat28fjRo1ws3Njfz8fI4ePUqLFi3sXVa1aKQuIrVWSkoKLVu2JCQkhIkTJ9K6dWtM\nJhOPPvqovUu7bLrwtIjUWnv37qVbt2789NNP3HbbbTz22GMOf41ShbqI1FrFxcWYzWbS0tKIiIig\npKTEemk7R6VQF5FaKzY2lsmTJ9OlSxeuvfZaPv/8c7p06WLvsqpFO0pFpNYrKSnB2dnZEL8s1Uhd\nRGqtrKwsnnvuOZ599lkAPvvsM9atW2fnqqpHoS4itdbChQt58cUXrSfw6t27N59//rmdq6oehbqI\n1FrOzs7UrVvXevuaa64pc6ptR6Tj1EWk1mrQoAELFiwgLy+Pn3/+mYyMDBo3bmzvsqpFO0pFpNay\nWCysXr2a7du34+LiQqtWrYiMjHTo0bpCXURqrdTU1Esuj46OvsKV2I6mX0Sk1tq3b5/175KSEnbs\n2EHTpk0V6iIijujBBx8sc9tisTBlyhQ7VWMbCnURqbUKCwvL3D5+/DgHDx60UzW2oVAXkVrr3I+O\n4M9zqXt6etK3b187VlR92lEqIrXWU089xYURaDKZHPpapRqpi0itFRUVRZMmTWjbti3Ozs5s3LiR\nffv2ERcXZ+/SLpvjHowpIlJNWVlZREZG4uvrS926dYmMjGTr1q14eHjg4eFh7/Iui0bqIlJrubi4\n8OmnnxIYGIjJZGL79u0Of5ZGzamLSK115swZVq1axYEDBygtLaVx48ZERUXh5eVl79Ium0JdRMRA\nNKcuImIgCnUREQPRjlKRSvz222/MmjWLsLAwrrnmGsxmM48//ri9yxK5JI3URSqRmZlJ9+7dGTFi\nhL1LEamURuri0EpKSpg1axZbtmzBYrHQvHlznnzySebMmXPRsvz8fMaPH09cXBw//PAD+fn5PPzw\nw0RGRpbb/tKlS0lPT8fFxYXc3Fzq1atnve/gwYO8++675Ofnc/bsWe655x5uueUWAFauXMncuXPx\n9fWlT58+zJgxg4ULF9b49hBRqItDW79+PUeOHOHNN98EYMGCBWRlZV20bPv27fj7+5OXl4eTkxNT\npkzhl19+Yf78+RWGeu/evdm9ezeNGjViwIABZYJ5zpw5dOrUibi4ODZv3sykSZMIDw+noKCADz74\ngEmTJtGkSRPefvvtmt0IIufR9Is4NB8fH3JycsjIyKCwsJB7770XPz+/i5YFBwcDf47su3XrBsAN\nN9zA0aNHL/u5x4wZQ79+/QC48cYbKS4uJjc3lx07dnD99dfTrFkznJycuOOOO6rdT5Gq0khdHFqr\nVq145JFHWL58OdOnT6dTp04MHz78kssAnJycrD//dnJywmKxXPZzr1+/ni+//JKTJ09aTwJlsVg4\ndeoU3t7e1vXOn7IRqWkKdXF44eHhhIeHk5+fz4wZM1i8eDH33XffRctuv/12mz3n2bNnmTp1KqNH\nj6Zjx44UFxfzwAMPAODp6UlBQYF13dzcXJs9r0hlNP0iDm3FihUkJycD4O3tTePGjVm5cuVFy2x9\nPo/CwkIKCwsJCAgA/tyh6uLiQkFBAS1btmTfvn0cOnQIi8XCDz/8YNPnFqmIQl0cWlhYGLt27eLp\np59m9OjR5OTkMGXKlIuW3XnnnTZ93jp16tCvXz/GjBnDmDFjaNiwIWFhYbz22mt4enpy33338fLL\nL/PCCy/Qpk0bmz63SEV07heRGnDuIgsA+/fv58UXX2T27Nl2rkpqA43URWyspKSExx9/nB07dgDw\n888/07p1aztXJbWFRupS66WmpvLVV19d8r7o6Gj69+//l9vMyMhg3rx5lJaW4uvryxNPPEGjRo2q\nW6pIpRTqIiIGoukXEREDUaiLiBiIQl1ExEAU6iIiBqJQFxExEIW6iIiB/B8Mj2RT9N1qswAAAABJ\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "q = \"\"\"\n", + "SELECT \n", + " CASE WHEN valid_ssn IS null THEN \"missing\"\n", + " WHEN valid_ssn IS 1 THEN \"invalid\"\n", + " WHEN valid_ssn IS 2 THEN \"questionable\"\n", + " WHEN valid_ssn IS 0 THEN \"valid\"\n", + " END as ssn_flag, count(*) as ssns\n", + "FROM sirad_id\n", + "GROUP BY valid_ssn\n", + "\"\"\"\n", + "ssn_v = pd.read_sql(q, con=pii_eng, index_col=\"ssn_flag\")\n", + "ssn_v.plot(kind=\"bar\", title=\"All records by SSN validity\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sirad_config.py b/sirad_config.py new file mode 100644 index 0000000..6637867 --- /dev/null +++ b/sirad_config.py @@ -0,0 +1,12 @@ +""" +Sample configuration file for the sirad command line tool and API. + +See https://github.com/riipl-org/sirad#Configuration +""" +LAYOUTS = "layouts" +RAW = "raw" +PROCESSED = "build/processed" +STAGED = "build/staged" +RESEARCH = "build/research_v{}.db" +PII_SALT = "pii-secret" +DATA_SALT = "data-secret"