parent
c3066408c9
commit
43cbd12a1f
@ -0,0 +1,385 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 8,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"\"\"\"\n",
|
||||||
|
"The experiments here describe medical/family history as they associate with risk measures\n",
|
||||||
|
"Additionally we will have fractional risk assessments\n",
|
||||||
|
"\"\"\"\n",
|
||||||
|
"import pandas as pd\n",
|
||||||
|
"import numpy as np\n",
|
||||||
|
"from pandas_risk import *\n",
|
||||||
|
"dfm = pd.read_gbq(\"SELECT * FROM deid_risk.registered_medical_history_dec_001\",private_key='/home/steve/dev/google-cloud-sdk/accounts/curation-test.json')\n",
|
||||||
|
"dff = pd.read_gbq(\"SELECT * FROM deid_risk.registered_family_history_dec_001\",private_key='/home/steve/dev/google-cloud-sdk/accounts/curation-test.json')\n",
|
||||||
|
"df = pd.read_gbq(\"SELECT person_id, birth_date,city,state,home_owner,race,ethnicity,gender,birth_place,marital_status,orientation,education,employment_status,income,travel_abroad_6_months,active_duty_status FROM deid_risk.registered_dec_01\",private_key='/home/steve/dev/google-cloud-sdk/accounts/curation-test.json')"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 32,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"med_cols = np.random.choice(list(set(dfm.columns.tolist()) - set(['person_id'])),3).tolist()\n",
|
||||||
|
"fam_cols = np.random.choice(list(set(dff.columns.tolist()) - set(['person_id'])),3).tolist()\n",
|
||||||
|
"medical = pd.merge(df,dfm[med_cols+['person_id']],on='person_id')\n",
|
||||||
|
"family = pd.merge(df,dff[fam_cols + ['person_id']],on='person_id')\n",
|
||||||
|
"_tmp = pd.merge(dfm[med_cols +['person_id']],dff[fam_cols+['person_id']])\n",
|
||||||
|
"data = pd.merge(df,_tmp,on='person_id')"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 33,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<div>\n",
|
||||||
|
"<style scoped>\n",
|
||||||
|
" .dataframe tbody tr th:only-of-type {\n",
|
||||||
|
" vertical-align: middle;\n",
|
||||||
|
" }\n",
|
||||||
|
"\n",
|
||||||
|
" .dataframe tbody tr th {\n",
|
||||||
|
" vertical-align: top;\n",
|
||||||
|
" }\n",
|
||||||
|
"\n",
|
||||||
|
" .dataframe thead th {\n",
|
||||||
|
" text-align: right;\n",
|
||||||
|
" }\n",
|
||||||
|
"</style>\n",
|
||||||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
||||||
|
" <thead>\n",
|
||||||
|
" <tr style=\"text-align: right;\">\n",
|
||||||
|
" <th></th>\n",
|
||||||
|
" <th>field_count</th>\n",
|
||||||
|
" <th>flag</th>\n",
|
||||||
|
" <th>group_count</th>\n",
|
||||||
|
" <th>marketer</th>\n",
|
||||||
|
" <th>prosecutor</th>\n",
|
||||||
|
" <th>unique_row_ratio</th>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </thead>\n",
|
||||||
|
" <tbody>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>0</th>\n",
|
||||||
|
" <td>21</td>\n",
|
||||||
|
" <td>full history</td>\n",
|
||||||
|
" <td>115308</td>\n",
|
||||||
|
" <td>0.992691</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>0.987663</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>1</th>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
|
" <td>medical</td>\n",
|
||||||
|
" <td>115306</td>\n",
|
||||||
|
" <td>0.992674</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>0.987629</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>2</th>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
|
" <td>family</td>\n",
|
||||||
|
" <td>115304</td>\n",
|
||||||
|
" <td>0.992656</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>0.987594</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>3</th>\n",
|
||||||
|
" <td>15</td>\n",
|
||||||
|
" <td>no-history</td>\n",
|
||||||
|
" <td>115300</td>\n",
|
||||||
|
" <td>0.992622</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>0.987526</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>4</th>\n",
|
||||||
|
" <td>3</td>\n",
|
||||||
|
" <td>medical-only</td>\n",
|
||||||
|
" <td>27</td>\n",
|
||||||
|
" <td>0.000232</td>\n",
|
||||||
|
" <td>0.5</td>\n",
|
||||||
|
" <td>0.000000</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>5</th>\n",
|
||||||
|
" <td>3</td>\n",
|
||||||
|
" <td>family-only</td>\n",
|
||||||
|
" <td>146</td>\n",
|
||||||
|
" <td>0.001257</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>0.000551</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </tbody>\n",
|
||||||
|
"</table>\n",
|
||||||
|
"</div>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
" field_count flag group_count marketer prosecutor \\\n",
|
||||||
|
"0 21 full history 115308 0.992691 1.0 \n",
|
||||||
|
"1 18 medical 115306 0.992674 1.0 \n",
|
||||||
|
"2 18 family 115304 0.992656 1.0 \n",
|
||||||
|
"3 15 no-history 115300 0.992622 1.0 \n",
|
||||||
|
"4 3 medical-only 27 0.000232 0.5 \n",
|
||||||
|
"5 3 family-only 146 0.001257 1.0 \n",
|
||||||
|
"\n",
|
||||||
|
" unique_row_ratio \n",
|
||||||
|
"0 0.987663 \n",
|
||||||
|
"1 0.987629 \n",
|
||||||
|
"2 0.987594 \n",
|
||||||
|
"3 0.987526 \n",
|
||||||
|
"4 0.000000 \n",
|
||||||
|
"5 0.000551 "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 33,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"pd.concat([data.deid.evaluate(flag='full history',cols= list(set(data.columns.tolist()) - set(['person_id'])) )\n",
|
||||||
|
" ,medical.deid.evaluate(flag='medical',cols=list( set(medical.columns.tolist() ) - set(['person_id']) ) )\n",
|
||||||
|
" ,family.deid.evaluate(flag='family',cols=list( set(family.columns.tolist() ) - set(['person_id']) ) )\n",
|
||||||
|
" ,df.deid.evaluate(flag='no-history',cols=list( set(df.columns.tolist() ) - set(['person_id']) ) )\n",
|
||||||
|
" , dfm.deid.evaluate(flag='medical-only',cols=med_cols )\n",
|
||||||
|
" , dff.deid.evaluate(flag='family-only',cols=fam_cols )\n",
|
||||||
|
" ],ignore_index=True)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"from __future__ import division\n",
|
||||||
|
"def evaluate(df) :\n",
|
||||||
|
" cols = list(set(df.columns.tolist()) - set(['person_id']))\n",
|
||||||
|
" \n",
|
||||||
|
" portions = np.round(np.random.random_sample(4),3).tolist() + np.arange(5,105,5).tolist()\n",
|
||||||
|
" \n",
|
||||||
|
" N = df.shape[0] - 1\n",
|
||||||
|
" portions = np.divide(np.multiply(portions,N),100).astype(np.int64)\n",
|
||||||
|
" portions = np.unique([n for n in portions if n > 1])\n",
|
||||||
|
" \n",
|
||||||
|
" r = pd.DataFrame()\n",
|
||||||
|
" for num_rows in portions :\n",
|
||||||
|
" \n",
|
||||||
|
" indices = np.random.choice(N,num_rows,replace=False)\n",
|
||||||
|
"# print (indices.size / N)\n",
|
||||||
|
" flag = \" \".join([str( np.round(100*indices.size/ N,2)),'%'])\n",
|
||||||
|
" r = r.append(df.loc[indices].deid.evaluate(cols=cols,flag=flag,min_group_size=2))\n",
|
||||||
|
" return r"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 3,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/html": [
|
||||||
|
"<div>\n",
|
||||||
|
"<style scoped>\n",
|
||||||
|
" .dataframe tbody tr th:only-of-type {\n",
|
||||||
|
" vertical-align: middle;\n",
|
||||||
|
" }\n",
|
||||||
|
"\n",
|
||||||
|
" .dataframe tbody tr th {\n",
|
||||||
|
" vertical-align: top;\n",
|
||||||
|
" }\n",
|
||||||
|
"\n",
|
||||||
|
" .dataframe thead th {\n",
|
||||||
|
" text-align: right;\n",
|
||||||
|
" }\n",
|
||||||
|
"</style>\n",
|
||||||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
||||||
|
" <thead>\n",
|
||||||
|
" <tr style=\"text-align: right;\">\n",
|
||||||
|
" <th></th>\n",
|
||||||
|
" <th>field_count</th>\n",
|
||||||
|
" <th>flag</th>\n",
|
||||||
|
" <th>group_count</th>\n",
|
||||||
|
" <th>marketer</th>\n",
|
||||||
|
" <th>prosecutor</th>\n",
|
||||||
|
" <th>unique_row_ratio</th>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </thead>\n",
|
||||||
|
" <tbody>\n",
|
||||||
|
" <tr>\n",
|
||||||
|
" <th>0</th>\n",
|
||||||
|
" <td>11</td>\n",
|
||||||
|
" <td>UNFLAGGED</td>\n",
|
||||||
|
" <td>114886</td>\n",
|
||||||
|
" <td>0.989058</td>\n",
|
||||||
|
" <td>1.0</td>\n",
|
||||||
|
" <td>0.980535</td>\n",
|
||||||
|
" </tr>\n",
|
||||||
|
" </tbody>\n",
|
||||||
|
"</table>\n",
|
||||||
|
"</div>"
|
||||||
|
],
|
||||||
|
"text/plain": [
|
||||||
|
" field_count flag group_count marketer prosecutor unique_row_ratio\n",
|
||||||
|
"0 11 UNFLAGGED 114886 0.989058 1.0 0.980535"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 3,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"cols = list(set (df.columns.tolist()) - set(['person_id']))\n",
|
||||||
|
"df[['race','state','gender_identity','ethnicity','marital_status','education','orientation','sex_at_birth','birth_date','travel_abroad_6_months','active_duty_status']].deid.evaluate()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 68,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"['person_id',\n",
|
||||||
|
" 'HearingVision_FarSightedness',\n",
|
||||||
|
" 'HearingVision_Glaucoma',\n",
|
||||||
|
" 'Digestive_Pancreatitis']"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 68,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"#\n",
|
||||||
|
"# This is the merge with medical history\n",
|
||||||
|
"\n",
|
||||||
|
"cols = ['person_id'] + np.random.choice(dfm.columns[1:],3,replace=False).tolist()\n",
|
||||||
|
"p = pd.merge(df,dfm[cols],on='person_id')\n",
|
||||||
|
"cols\n",
|
||||||
|
"# # cols = list(set(p.columns.tolist()) - set(['person_id']))\n",
|
||||||
|
"# evaluate(p) #p.deid.explore(cols=cols,num_runs=100)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 7,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"cols = list( set(dfm.columns.tolist()) - set(['person_id']))\n",
|
||||||
|
"cols = np.random.choice(cols,3,replace=False).tolist()\n",
|
||||||
|
"p = pd.merge(dfm[['person_id']+cols],df)\n",
|
||||||
|
"fcols = list(set(p.columns.tolist()) - set(['person_id']))\n",
|
||||||
|
"# dfm[cols].deid.evaluate(cols=list( set(cols) - set(['person_id'])))"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"variables": {
|
||||||
|
" \" ; \".join(cols)": "InfectiousDiseases_HepatitisC ; Cancer_StomachCancer ; Circulatory_Hypertension",
|
||||||
|
" p.shape[0] ": "116157",
|
||||||
|
" p[fcols].deid.evaluate() ": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>field_count</th>\n <th>flag</th>\n <th>group_count</th>\n <th>marketer</th>\n <th>prosecutor</th>\n <th>unique_row_ratio</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>37</td>\n <td>UNFLAGGED</td>\n <td>115397</td>\n <td>0.993457</td>\n <td>1.0</td>\n <td>0.98886</td>\n </tr>\n </tbody>\n</table>\n</div>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"### Medical History\n",
|
||||||
|
"\n",
|
||||||
|
" We randomly select three a tributes {{ \" ; \".join(cols)}} . \n",
|
||||||
|
" The dataset associated risk evaluation contains {{ p.shape[0] }} records\n",
|
||||||
|
"{{ p[fcols].deid.evaluate() }}\n",
|
||||||
|
"\n",
|
||||||
|
" \n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 52,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"['person_id',\n",
|
||||||
|
" 'InfectiousDiseases_Tuberculosis',\n",
|
||||||
|
" 'SkeletalMuscular_Fibromyalgia',\n",
|
||||||
|
" 'Cancer_ProstateCancer']"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 52,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"cols"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 67,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"3"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 67,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"# dfm[cols[1:]].head()\n",
|
||||||
|
"np.sum(dfm.fillna(' ').groupby(cols[1:],as_index=False).size().values <= 1)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 2",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python2"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython2",
|
||||||
|
"version": "2.7.15rc1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,83 @@
|
|||||||
|
SELECT person.person_id,sex_at_birth,birth_date, race,zip,city,state, gender
|
||||||
|
FROM
|
||||||
|
(SELECT DISTINCT person_id from deid_tmp.observation order by person_id) as person
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_as_string) as race
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Race_WhatRace') and value_as_string IS NOT NULL
|
||||||
|
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as lang
|
||||||
|
ON lang.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_as_string) as zip
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIZIP') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as work_add
|
||||||
|
ON work_add.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as city
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIICity') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as u_city
|
||||||
|
ON u_city.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as state
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIState') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_addr_o
|
||||||
|
ON p_addr_o.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as gender
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Gender_GenderIdentity') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_gender
|
||||||
|
ON p_gender.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as birth_date
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIBirthInformation_BirthDate') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_birth
|
||||||
|
ON p_birth.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as sex_at_birth
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'BiologicalSexAtBirth_SexAtBirth') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_sex
|
||||||
|
ON p_sex.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
ORDER BY person.person_id
|
||||||
|
|
@ -0,0 +1,376 @@
|
|||||||
|
SELECT *
|
||||||
|
FROM (
|
||||||
|
SELECT person.person_id,first_name,last_name,birth_date,city,family_history_aware,current_hyper_tension,sex_at_birth, race,state, gender,ethnicity,birth_place,orientation,education,employment_status,
|
||||||
|
marital_status,language,home_owner,sd_bloodbank, nhpi, living_situation,income,death_cause, death_date, active_duty_status,
|
||||||
|
gender_identity, insurance_type, work_address_state,consent_18_years_age,person_one_state,person_two_state,sc_site,
|
||||||
|
health_abroad_6_months,travel_abroad_6_months
|
||||||
|
FROM
|
||||||
|
(SELECT DISTINCT person_id from deid_tmp.observation order by person_id) as person
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as travel_abroad_6_months
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'OutsideTravel6Month_OutsideTravel6MonthWhere') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as te_
|
||||||
|
ON te_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as health_abroad_6_months
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'OverallHealth_OutsideTravel6Month') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as he_
|
||||||
|
ON he_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as active_duty_status
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'ActiveDuty_AvtiveDutyServeStatus') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as mil_
|
||||||
|
ON mil_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as sc_site
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'SouthCarolinaSitePairing_EauClaireAppointment') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as sc_
|
||||||
|
ON sc_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as person_one_state
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PersonOneAddress_PersonOneAddressState') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as p1_
|
||||||
|
ON p1_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as person_two_state
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'SecondContactsAddress_SecondContactState') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as p2_
|
||||||
|
ON p2_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_as_string) as work_address_state
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'EmploymentWorkAddress_State') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as ws_
|
||||||
|
ON ws_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as consent_18_years_age
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'ExtraConsent_18YearsofAge') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as c18_
|
||||||
|
ON c18_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as gender_identity
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Gender_GenderIdentity') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as gi_
|
||||||
|
ON gi_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as income
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Income_AnnualIncome') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as income_
|
||||||
|
ON income_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as living_situation
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'LivingSituation_CurrentLiving') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as living_
|
||||||
|
ON living_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as nhpi
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'NHPI_NHPISpecific') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as nhpi_
|
||||||
|
ON nhpi_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_as_string) as sd_bloodbank
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'SanDiegoBloodBank') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as sd
|
||||||
|
ON sd.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as education
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'EducationLevel_HighestGrade') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as edu
|
||||||
|
ON edu.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as home_owner
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'HomeOwn_CurrentHomeOwn') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as h_owner
|
||||||
|
ON h_owner.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as employment_status
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Employment_EmploymentStatus') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as empl
|
||||||
|
ON empl.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as marital_status
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'MaritalStatus_CurrentMaritalStatus') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as marital
|
||||||
|
ON marital.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as language
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Language_SpokenWrittenLanguage') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as lang_
|
||||||
|
ON lang_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as race
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Race_WhatRace') and value_source_value IS NOT NULL
|
||||||
|
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as lang
|
||||||
|
ON lang.person_id = person.person_id
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as ethnicity
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Race_WhatRaceEthnicity') and value_source_value IS NOT NULL
|
||||||
|
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as ethnic
|
||||||
|
ON ethnic.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as birth_place
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'TheBasics_Birthplace') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as birthp
|
||||||
|
ON birthp.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,MAX(value_source_value) as orientation
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'TheBasics_SexualOrientation') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
) as sexo
|
||||||
|
ON sexo.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_source_value) as state
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIState') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_addr_o
|
||||||
|
ON p_addr_o.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_source_value) as gender
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Gender_GenderIdentity') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_gender
|
||||||
|
ON p_gender.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_source_value) as sex_at_birth
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'_SexAtBirth') --and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as p_sex
|
||||||
|
ON p_sex.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_source_value) as insurance_type
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'HealthInsurance_HealthInsuranceType') and value_source_value IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as ins_
|
||||||
|
ON ins_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as last_name
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIName_Last') and value_as_string IS NOT NULL
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as ln_
|
||||||
|
ON ln_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as first_name
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIName_First')
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as fn_
|
||||||
|
ON fn_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as current_hyper_tension
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'Circulatory_HypertensionCurrently')
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as cht_
|
||||||
|
ON cht_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max( cast(value_as_string as DATE)) as birth_date
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'PIIBirthInformation_BirthDate')
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as bd_
|
||||||
|
ON bd_.person_id = person.person_id
|
||||||
|
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as city
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'StreetAddress_PIICity')
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as city_
|
||||||
|
ON city_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT
|
||||||
|
person_id,max(value_as_string) as family_history_aware
|
||||||
|
FROM deid_tmp.observation
|
||||||
|
WHERE REGEXP_CONTAINS(observation_source_value,'FamilyHistory_FamilyMedicalHistoryAware')
|
||||||
|
GROUP BY person_id
|
||||||
|
order by person_id
|
||||||
|
|
||||||
|
) as bro_
|
||||||
|
ON bro_.person_id = person.person_id
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT person_id, max(death_date) AS death_date
|
||||||
|
FROM deid_tmp.death
|
||||||
|
GROUP BY person_id
|
||||||
|
order BY person_id
|
||||||
|
|
||||||
|
) as death_
|
||||||
|
ON death_.person_id = person.person_id
|
||||||
|
|
||||||
|
FULL JOIN (
|
||||||
|
SELECT person_id, max(cause_source_value) as death_cause
|
||||||
|
FROM deid_tmp.death
|
||||||
|
GROUP BY person_id
|
||||||
|
order BY person_id
|
||||||
|
|
||||||
|
|
||||||
|
) as death_c ON death_c.person_id = person.person_id
|
||||||
|
ORDER BY person.person_id
|
||||||
|
) as frame
|
||||||
|
|
||||||
|
-- WHERE first_name is not NULL
|
Loading…
Reference in new issue