diff --git a/conversion/tapis_v2_to_v3/README.md b/conversion/tapis_v2_to_v3/README.md index 56879d8..fe8c1e1 100644 --- a/conversion/tapis_v2_to_v3/README.md +++ b/conversion/tapis_v2_to_v3/README.md @@ -14,10 +14,14 @@ validated in the migration. We assume that V2 API is not available and that the data to be migrated resides in a JSON file. -## Docker +## Jupyter notebooks -We build a specialized docker image that brings in vdj-tapis-js and vdjserver-schema +The extract and transform fuctions are performed in the Jupyter notebooks +and generate JSONL files with meta records that can be bulk uploaded with +meta_load_records.js script in the tapis-conversion docker container. It +resdes in the adc-api-tapis-js of vdjserver-repository. +- public_projects.ipynb: Public Projects ## Users @@ -82,3 +86,20 @@ so they are either old or testing. "bioProcessing": 5, "irplus_analysis": 3, +# Migration Tasks + +## Public projects + +This conversion maintains uuids for the records. + +- public_projects.ipynb: Public Projects + +This will generate files in the directories: + +- Metadata_public_project: One file per project containing metadata records. +- Metadata_public_project_jobs: One file per project containing Tapis V2 job records. + +As there aren't many files, manually load the files one at a time using +meta_load_records.js in the tapis-conversion docker. + +## diff --git a/conversion/tapis_v2_to_v3/data_exploration.ipynb b/conversion/tapis_v2_to_v3/data_exploration.ipynb new file mode 100644 index 0000000..04e93c0 --- /dev/null +++ b/conversion/tapis_v2_to_v3/data_exploration.ipynb @@ -0,0 +1,2998 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Data exploration of tapis v2 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modified DFs\n", + "These dataframes (unless specified) are created below\n", + "\n", + "- `valid_emails` : df of JsonArray containiung value in `value.email`\n", + "\n", + "- `valid_email_list` : list of valid emails\n", + "\n", + "- `non_read_users` : metadataperms, but only READ/WRITE or ALL\n", + "\n", + "- `job_event_perms` : job events and job permissions merge on job_id\n", + "\n", + "- `email_username_combo` : combination of `value.username` and `value.email`\n", + "\n", + "- `num_jobs` : number of jobs for each `parameter.Creator` with username and email\n", + "\n", + "- `projJob_projFile_jobAll_emailUser` : \n", + " - merging of `jsonArray_df` where `name=projectJob` and `jsonArray_df` where `name=projectFile` (`on=`value.projectUuid`)\n", + " - then merge with `jobs_all_df` (`left_on=jobUuid` and `right_on=uuid`) \n", + " - then merged with `email_username_combo` (`left_on=parameters.Creator` and `right_on=value.username`)\n", + "\n", + "- `projJob_projFile_jobAll_emailUser_groupby` : Prior df, but grouped by `parameters.Creators` and sorted by `value.projectUuid`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "# import matplotlib.pyplot as plt\n", + "import json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Read files" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "job_events_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJobEvents.json')\n", + "job_permissions_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJobPermissions.json')\n", + "jobs_all_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJobs_all.json')\n", + "jobs_all_df['parameters.Creator'] = jobs_all_df['parameters'].apply(lambda x: json.loads(x).get('Creator', np.nan) if x else np.nan)\n", + "metadata_perms_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverMetadataPermissions.json')\n", + "\n", + "with open('/mnt/data2/Projects/vdjserver/vdjserverJsonArrayFeb042025.json', 'r') as f:\n", + " jsonarray = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# probably not the best way of doing this\n", + "# max_level must be 1, otherwise df is too large for system\n", + "# I end up using pd.read_json later on, but the creation of valid email list uses this.\n", + "jsonarray_df = pd.json_normalize(jsonarray, max_level=1)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# View dataframes" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "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", + "
idcreatedcreated_bydescriptionip_addressstatustenant_idjob_idtransfertaskuuid
054762014-03-31 14:48:10jfonnerJob accepted and queued for submission.129.114.60.167PENDINGvdjserver.org142NaNNone
154772014-03-31 14:48:20jfonnerNo inputs for the given job. Skipping staging129.114.60.167STAGEDvdjserver.org142NaNNone
\n", + "
" + ], + "text/plain": [ + " id created created_by \\\n", + "0 5476 2014-03-31 14:48:10 jfonner \n", + "1 5477 2014-03-31 14:48:20 jfonner \n", + "\n", + " description ip_address status \\\n", + "0 Job accepted and queued for submission. 129.114.60.167 PENDING \n", + "1 No inputs for the given job. Skipping staging 129.114.60.167 STAGED \n", + "\n", + " tenant_id job_id transfertask uuid \n", + "0 vdjserver.org 142 NaN None \n", + "1 vdjserver.org 142 NaN None " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job_events_df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "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", + "
idjob_idlast_updatedpermissiontenant_idusername
037832014-07-11 09:11:00READ_EXECUTEvdjserver.orgmlevin
147832014-07-11 09:33:02ALLvdjserver.orgwscarbor2
\n", + "
" + ], + "text/plain": [ + " id job_id last_updated permission tenant_id username\n", + "0 3 783 2014-07-11 09:11:00 READ_EXECUTE vdjserver.org mlevin\n", + "1 4 783 2014-07-11 09:33:02 ALL vdjserver.org wscarbor2" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job_permissions_df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idnametenant_idtenant_queueownerrolessystem_idapp_idapp_uuidstatus...remote_endedremote_outcomeremote_submit_retriesremote_status_checksfailed_status_checkslast_status_checkblocked_countvisibleupdate_tokenparameters.Creator
0503865My Job 24-Jan-2025 8:57:09 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.edurepcalc-ls6-2.0u86306626279335587345-242ac119-0001-005FINISHED...2025-01-25 15:43:33.007FINISHED019202025-01-25 15:43:33.00101eb27e311-4a37-4aeb-b649-056704dd2711schristley
1503859My Job 23-Jan-2025 3:05:30 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.eduigblast-ls6-1.20u61936847182374244846-242ac119-0001-005FINISHED...2025-01-24 04:18:20.211FINISHED011202025-01-24 04:18:20.201915e2528fd-25d6-4473-9287-6a67a8de8391schristley
\n", + "

2 rows × 42 columns

\n", + "
" + ], + "text/plain": [ + " id name tenant_id \\\n", + "0 503865 My Job 24-Jan-2025 8:57:09 pm vdjserver.org \n", + "1 503859 My Job 23-Jan-2025 3:05:30 pm vdjserver.org \n", + "\n", + " tenant_queue owner \\\n", + "0 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "1 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "\n", + " roles system_id \\\n", + "0 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "1 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "\n", + " app_id app_uuid status ... \\\n", + "0 repcalc-ls6-2.0u8 6306626279335587345-242ac119-0001-005 FINISHED ... \n", + "1 igblast-ls6-1.20u6 1936847182374244846-242ac119-0001-005 FINISHED ... \n", + "\n", + " remote_ended remote_outcome remote_submit_retries \\\n", + "0 2025-01-25 15:43:33.007 FINISHED 0 \n", + "1 2025-01-24 04:18:20.211 FINISHED 0 \n", + "\n", + " remote_status_checks failed_status_checks last_status_check \\\n", + "0 192 0 2025-01-25 15:43:33.001 \n", + "1 112 0 2025-01-24 04:18:20.201 \n", + "\n", + " blocked_count visible update_token \\\n", + "0 0 1 eb27e311-4a37-4aeb-b649-056704dd2711 \n", + "1 9 1 5e2528fd-25d6-4473-9287-6a67a8de8391 \n", + "\n", + " parameters.Creator \n", + "0 schristley \n", + "1 schristley \n", + "\n", + "[2 rows x 42 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jobs_all_df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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", + "
idlast_updatedpermissionusernameuuidtenant_id
052014-01-21 17:00:11READ_WRITEtest30001389977207738-5056a550b8-0001-012vdjserver.org
162014-01-21 17:00:41READ_WRITEtest40001389977207738-5056a550b8-0001-012vdjserver.org
\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "0 5 2014-01-21 17:00:11 READ_WRITE test3 \n", + "1 6 2014-01-21 17:00:41 READ_WRITE test4 \n", + "\n", + " uuid tenant_id \n", + "0 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "1 0001389977207738-5056a550b8-0001-012 vdjserver.org " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metadata_perms_df.head(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Explore" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## find valid emails" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "value.username\n", + "att23562 3\n", + "diksha28 2\n", + "paulatataru 1\n", + "frankabuytenhuijs 1\n", + "mbartl 1\n", + " ..\n", + "pejvak 1\n", + "jinhyun 1\n", + "el-hadi 1\n", + "saleach 1\n", + "cdallett 1\n", + "Name: count, Length: 1670, dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Extract list of valid emails\n", + "domains = ['test', 'email']\n", + "tlds = ['.edu', '.com', '.org']\n", + "special = ['#$^&&*)(_+{{7*7}}||\\\\[:</>,.?']\n", + "bogus_domains = [d+t for d in domains for t in tlds]\n", + "bogus_domains = bogus_domains + special\n", + "\n", + "valid_emails = jsonarray_df[jsonarray_df['value.email'].notna()]\n", + "valid_emails = valid_emails[valid_emails['value.email'].str.split('@').apply(len)==2]\n", + "valid_emails = valid_emails[valid_emails['value.email'].apply(lambda x: x.split('@')[1] not in bogus_domains)]\n", + "\n", + "valid_email_list = [e for e in valid_emails['value.email'].unique() if e.split('@')[1].lower() not in bogus_domains]\n", + "\n", + "# Construct dataframe of email-username combinations\n", + "email_username_combo = valid_emails.loc[:,['value.username', 'value.email']]\n", + "email_username_combo = email_username_combo[email_username_combo['value.username'].notna()].drop_duplicates()\n", + "email_username_combo['value.username'].value_counts()\n", + "\n", + "# valid_emails.loc[[478159,478163,478174,568135,568139],['value.username', 'value.email', 'lastUpdated']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## vdjserverJsonArrayFeb042025.json" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`name` contains `profile`, `feedback` when restricted on `value.email` as not `NaN`" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# jsonarray_df.groupby(by=['owner']).count().sort_values(by=['created'], ascending=False).to_csv('./csv/owner_created_count_sorted.csv')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### json projectFile" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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", + " \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", + " \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", + " \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", + "
fileUuidownertenantIdschemaIdinternalUsernamelastUpdatednamecreated_id.$oidassociationIds.0associationIds.1value.projectUuidvalue.type
530001395955349445-5056a550b8-0001-012vdjauthvdjserver.orgNaNNaN2014-03-27T16:22:29.444-05:00projectFile2014-03-27T16:22:29.444-05:00NoneNoneNone
540001396029083309-5056a550b8-0001-012vdjauthvdjserver.orgNaNNaN2014-03-28T12:51:23.309-05:00projectFile2014-03-28T12:51:23.309-05:00NoneNoneNone0001395346788177-5056a550b8-0001-012uploaded
550001396029805022-5056a550b8-0001-012vdjauthvdjserver.orgNaNNaN2014-03-28T13:03:25.022-05:00projectFile2014-03-28T13:03:25.022-05:00NoneNoneNone0001395346788177-5056a550b8-0001-012uploaded
560001396030144907-5056a550b8-0001-012vdjauthvdjserver.orgNaNNaN2014-03-28T13:09:04.907-05:00projectFile2014-03-28T13:09:04.907-05:00NoneNoneNone0001395346788177-5056a550b8-0001-012uploaded
570001396039988083-5056a550b8-0001-012vdjauthvdjserver.orgNaNNaN2014-03-28T15:53:08.083-05:00projectFile2014-03-28T15:53:08.083-05:00NoneNoneNone0001395346788177-5056a550b8-0001-012uploaded
..........................................
6070855338423137409494545-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-13T16:40:40.230-06:00projectFile2025-01-13T16:14:09.079-06:00NoneNoneNone5456400192359305711-242ac118-0001-012None
6070861335427718191574545-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-13T16:40:40.230-06:00projectFile2025-01-13T16:15:42.281-06:00NoneNoneNone5456400192359305711-242ac118-0001-012None
6070871840700597200490991-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-13T16:40:43.277-06:00projectFile2025-01-13T16:16:56.231-06:00NoneNoneNone5456400192359305711-242ac118-0001-012None
6070885023614960920170991-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-13T16:40:43.281-06:00projectFile2025-01-13T16:18:10.339-06:00NoneNoneNone5456400192359305711-242ac118-0001-012None
6070897830832104257678865-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-13T16:41:49.035-06:00projectFile2025-01-13T16:41:49.035-06:00NoneNoneNone5456400192359305711-242ac118-0001-012None
\n", + "

35948 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " fileUuid owner tenantId \\\n", + "53 0001395955349445-5056a550b8-0001-012 vdjauth vdjserver.org \n", + "54 0001396029083309-5056a550b8-0001-012 vdjauth vdjserver.org \n", + "55 0001396029805022-5056a550b8-0001-012 vdjauth vdjserver.org \n", + "56 0001396030144907-5056a550b8-0001-012 vdjauth vdjserver.org \n", + "57 0001396039988083-5056a550b8-0001-012 vdjauth vdjserver.org \n", + "... ... ... ... \n", + "607085 5338423137409494545-242ac118-0001-012 vdj vdjserver.org \n", + "607086 1335427718191574545-242ac118-0001-012 vdj vdjserver.org \n", + "607087 1840700597200490991-242ac118-0001-012 vdj vdjserver.org \n", + "607088 5023614960920170991-242ac118-0001-012 vdj vdjserver.org \n", + "607089 7830832104257678865-242ac118-0001-012 vdj vdjserver.org \n", + "\n", + " schemaId internalUsername lastUpdated \\\n", + "53 NaN NaN 2014-03-27T16:22:29.444-05:00 \n", + "54 NaN NaN 2014-03-28T12:51:23.309-05:00 \n", + "55 NaN NaN 2014-03-28T13:03:25.022-05:00 \n", + "56 NaN NaN 2014-03-28T13:09:04.907-05:00 \n", + "57 NaN NaN 2014-03-28T15:53:08.083-05:00 \n", + "... ... ... ... \n", + "607085 NaN NaN 2025-01-13T16:40:40.230-06:00 \n", + "607086 NaN NaN 2025-01-13T16:40:40.230-06:00 \n", + "607087 NaN NaN 2025-01-13T16:40:43.277-06:00 \n", + "607088 NaN NaN 2025-01-13T16:40:43.281-06:00 \n", + "607089 NaN NaN 2025-01-13T16:41:49.035-06:00 \n", + "\n", + " name created _id.$oid associationIds.0 \\\n", + "53 projectFile 2014-03-27T16:22:29.444-05:00 None None \n", + "54 projectFile 2014-03-28T12:51:23.309-05:00 None None \n", + "55 projectFile 2014-03-28T13:03:25.022-05:00 None None \n", + "56 projectFile 2014-03-28T13:09:04.907-05:00 None None \n", + "57 projectFile 2014-03-28T15:53:08.083-05:00 None None \n", + "... ... ... ... ... \n", + "607085 projectFile 2025-01-13T16:14:09.079-06:00 None None \n", + "607086 projectFile 2025-01-13T16:15:42.281-06:00 None None \n", + "607087 projectFile 2025-01-13T16:16:56.231-06:00 None None \n", + "607088 projectFile 2025-01-13T16:18:10.339-06:00 None None \n", + "607089 projectFile 2025-01-13T16:41:49.035-06:00 None None \n", + "\n", + " associationIds.1 value.projectUuid value.type \n", + "53 None \n", + "54 None 0001395346788177-5056a550b8-0001-012 uploaded \n", + "55 None 0001395346788177-5056a550b8-0001-012 uploaded \n", + "56 None 0001395346788177-5056a550b8-0001-012 uploaded \n", + "57 None 0001395346788177-5056a550b8-0001-012 uploaded \n", + "... ... ... ... \n", + "607085 None 5456400192359305711-242ac118-0001-012 None \n", + "607086 None 5456400192359305711-242ac118-0001-012 None \n", + "607087 None 5456400192359305711-242ac118-0001-012 None \n", + "607088 None 5456400192359305711-242ac118-0001-012 None \n", + "607089 None 5456400192359305711-242ac118-0001-012 None \n", + "\n", + "[35948 rows x 13 columns]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jsonarray_projectFile = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJsonArrayFeb042025.json')\n", + "jsonarray_projectFile = jsonarray_projectFile[jsonarray_projectFile['name'] == 'projectFile']\n", + "\n", + "jsonarray_projectFile['_id.$oid'] = jsonarray_projectFile['value'].apply(lambda x: x.get('$oid', None))\n", + "jsonarray_projectFile['associationIds.0'] = jsonarray_projectFile['value'].apply(lambda x: x[0] if isinstance(x, list) and len(x)>0 else None)\n", + "jsonarray_projectFile['associationIds.1'] = jsonarray_projectFile['value'].apply(lambda x: x[1] if isinstance(x, list) and len(x)>1 else None)\n", + "jsonarray_projectFile['value.projectUuid'] = jsonarray_projectFile['value'].apply(lambda x: x.get('projectUuid', None))\n", + "jsonarray_projectFile['value.type'] = jsonarray_projectFile['value'].apply(lambda x: x.get('type', None))\n", + "jsonarray_projectFile.rename(columns={'uuid':'fileUuid'}, inplace=True)\n", + "jsonarray_projectFile.drop(columns=['_id', 'associationIds', 'value'], inplace=True)\n", + "\n", + "jsonarray_projectFile" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "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", + " \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", + " \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", + " \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", + "
fileUuidownertenantIdschemaIdinternalUsernamelastUpdatednamecreated_id.$oidassociationIds.0associationIds.1value.type
value.projectUuid
443100441440001
0001395346788177-5056a550b8-0001-012161100161160001
0001396538655269-5056a550b8-0001-012111001110001
0001396562317882-5056a550b8-0001-012211002120001
0001396564389482-5056a550b8-0001-012311003130001
.......................................
988793832798425581-242ac118-0001-012241100241240000
991355144541573606-242ac114-0001-012111001110000
991430390416535060-242ac117-0001-012111001110000
993645360945172966-242ac11c-0001-012211002120000
993772352152343016-242ac11e-0001-012131100131130000
\n", + "

1916 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " fileUuid owner tenantId schemaId \\\n", + "value.projectUuid \n", + " 44 3 1 0 \n", + "0001395346788177-5056a550b8-0001-012 16 1 1 0 \n", + "0001396538655269-5056a550b8-0001-012 1 1 1 0 \n", + "0001396562317882-5056a550b8-0001-012 2 1 1 0 \n", + "0001396564389482-5056a550b8-0001-012 3 1 1 0 \n", + "... ... ... ... ... \n", + "988793832798425581-242ac118-0001-012 24 1 1 0 \n", + "991355144541573606-242ac114-0001-012 1 1 1 0 \n", + "991430390416535060-242ac117-0001-012 1 1 1 0 \n", + "993645360945172966-242ac11c-0001-012 2 1 1 0 \n", + "993772352152343016-242ac11e-0001-012 13 1 1 0 \n", + "\n", + " internalUsername lastUpdated name \\\n", + "value.projectUuid \n", + " 0 44 1 \n", + "0001395346788177-5056a550b8-0001-012 0 16 1 \n", + "0001396538655269-5056a550b8-0001-012 0 1 1 \n", + "0001396562317882-5056a550b8-0001-012 0 2 1 \n", + "0001396564389482-5056a550b8-0001-012 0 3 1 \n", + "... ... ... ... \n", + "988793832798425581-242ac118-0001-012 0 24 1 \n", + "991355144541573606-242ac114-0001-012 0 1 1 \n", + "991430390416535060-242ac117-0001-012 0 1 1 \n", + "993645360945172966-242ac11c-0001-012 0 2 1 \n", + "993772352152343016-242ac11e-0001-012 0 13 1 \n", + "\n", + " created _id.$oid associationIds.0 \\\n", + "value.projectUuid \n", + " 44 0 0 \n", + "0001395346788177-5056a550b8-0001-012 16 0 0 \n", + "0001396538655269-5056a550b8-0001-012 1 0 0 \n", + "0001396562317882-5056a550b8-0001-012 2 0 0 \n", + "0001396564389482-5056a550b8-0001-012 3 0 0 \n", + "... ... ... ... \n", + "988793832798425581-242ac118-0001-012 24 0 0 \n", + "991355144541573606-242ac114-0001-012 1 0 0 \n", + "991430390416535060-242ac117-0001-012 1 0 0 \n", + "993645360945172966-242ac11c-0001-012 2 0 0 \n", + "993772352152343016-242ac11e-0001-012 13 0 0 \n", + "\n", + " associationIds.1 value.type \n", + "value.projectUuid \n", + " 0 1 \n", + "0001395346788177-5056a550b8-0001-012 0 1 \n", + "0001396538655269-5056a550b8-0001-012 0 1 \n", + "0001396562317882-5056a550b8-0001-012 0 1 \n", + "0001396564389482-5056a550b8-0001-012 0 1 \n", + "... ... ... \n", + "988793832798425581-242ac118-0001-012 0 0 \n", + "991355144541573606-242ac114-0001-012 0 0 \n", + "991430390416535060-242ac117-0001-012 0 0 \n", + "993645360945172966-242ac11c-0001-012 0 0 \n", + "993772352152343016-242ac11e-0001-012 0 0 \n", + "\n", + "[1916 rows x 12 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jsonarray_projectFile.groupby('value.projectUuid').nunique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### json projectJob" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "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", + " \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", + " \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", + " \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", + "
uuidownertenantIdschemaIdinternalUsernamelastUpdatednamecreated_id.$oidassociationIds.0associationIds.1value.projectUuidvalue.jobUuid
2500001400192074855-5056a550b8-0001-012vdjvdjserver.orgNaNNaN2014-05-15T17:14:34.855-05:00projectJob2014-05-15T17:14:34.855-05:00NoneNoneNone0001399309581559-5056a550b8-0001-0120001399315558601-5056a550b8-0001-007
2520001400254373114-5056a550b8-0001-012vdjvdjserver.orgNaNNaN2014-05-16T10:32:53.114-05:00projectJob2014-05-16T10:32:53.114-05:00NoneNoneNone0001400250478554-5056a550b8-0001-0120001400254372814-5056a550b8-0001-007
2530001400273862423-5056a550b8-0001-012vdjvdjserver.orgNaNNaN2014-05-16T15:57:42.423-05:00projectJob2014-05-16T15:57:42.423-05:00NoneNoneNone0001400250478554-5056a550b8-0001-0120001400273862119-5056a550b8-0001-007
2540001400274448495-5056a550b8-0001-012vdjvdjserver.orgNaNNaN2014-05-16T16:07:28.494-05:00projectJob2014-05-16T16:07:28.494-05:00NoneNoneNone0001400250478554-5056a550b8-0001-0120001400274448320-5056a550b8-0001-007
2560001400274714655-5056a550b8-0001-012vdjvdjserver.orgNaNNaN2014-05-16T16:11:54.655-05:00projectJob2014-05-16T16:11:54.655-05:00NoneNoneNone0001400250478554-5056a550b8-0001-0120001400274714490-5056a550b8-0001-007
..........................................
6067115097479121213854191-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-08T12:13:35.460-06:00projectJob2025-01-08T12:13:35.460-06:00NoneNoneNone6589143665654501871-242ac118-0001-012ad02cb34-250e-48cb-a06e-973e431b62ee-007
6070901948444895656078865-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-13T16:44:05.995-06:00projectJob2025-01-13T16:44:05.995-06:00NoneNoneNone5456400192359305711-242ac118-0001-012c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007
6073291819643224410746385-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-20T03:06:57.762-06:00projectJob2025-01-20T03:06:57.762-06:00NoneNoneNone5199144433477554666-242ac116-0001-012773a5cb7-b369-4517-a221-83d57e3899e5-007
6073302845695380777266705-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-23T15:05:59.570-06:00projectJob2025-01-23T15:05:59.570-06:00NoneNoneNone5456400192359305711-242ac118-0001-0129188bf80-e868-4e05-a6b4-308c044108d7-007
6073473203620026767118831-242ac118-0001-012vdjvdjserver.orgNaNNaN2025-01-24T20:57:54.599-06:00projectJob2025-01-24T20:57:54.599-06:00NoneNoneNone5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-007
\n", + "

6355 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " uuid owner tenantId schemaId \\\n", + "250 0001400192074855-5056a550b8-0001-012 vdj vdjserver.org NaN \n", + "252 0001400254373114-5056a550b8-0001-012 vdj vdjserver.org NaN \n", + "253 0001400273862423-5056a550b8-0001-012 vdj vdjserver.org NaN \n", + "254 0001400274448495-5056a550b8-0001-012 vdj vdjserver.org NaN \n", + "256 0001400274714655-5056a550b8-0001-012 vdj vdjserver.org NaN \n", + "... ... ... ... ... \n", + "606711 5097479121213854191-242ac118-0001-012 vdj vdjserver.org NaN \n", + "607090 1948444895656078865-242ac118-0001-012 vdj vdjserver.org NaN \n", + "607329 1819643224410746385-242ac118-0001-012 vdj vdjserver.org NaN \n", + "607330 2845695380777266705-242ac118-0001-012 vdj vdjserver.org NaN \n", + "607347 3203620026767118831-242ac118-0001-012 vdj vdjserver.org NaN \n", + "\n", + " internalUsername lastUpdated name \\\n", + "250 NaN 2014-05-15T17:14:34.855-05:00 projectJob \n", + "252 NaN 2014-05-16T10:32:53.114-05:00 projectJob \n", + "253 NaN 2014-05-16T15:57:42.423-05:00 projectJob \n", + "254 NaN 2014-05-16T16:07:28.494-05:00 projectJob \n", + "256 NaN 2014-05-16T16:11:54.655-05:00 projectJob \n", + "... ... ... ... \n", + "606711 NaN 2025-01-08T12:13:35.460-06:00 projectJob \n", + "607090 NaN 2025-01-13T16:44:05.995-06:00 projectJob \n", + "607329 NaN 2025-01-20T03:06:57.762-06:00 projectJob \n", + "607330 NaN 2025-01-23T15:05:59.570-06:00 projectJob \n", + "607347 NaN 2025-01-24T20:57:54.599-06:00 projectJob \n", + "\n", + " created _id.$oid associationIds.0 \\\n", + "250 2014-05-15T17:14:34.855-05:00 None None \n", + "252 2014-05-16T10:32:53.114-05:00 None None \n", + "253 2014-05-16T15:57:42.423-05:00 None None \n", + "254 2014-05-16T16:07:28.494-05:00 None None \n", + "256 2014-05-16T16:11:54.655-05:00 None None \n", + "... ... ... ... \n", + "606711 2025-01-08T12:13:35.460-06:00 None None \n", + "607090 2025-01-13T16:44:05.995-06:00 None None \n", + "607329 2025-01-20T03:06:57.762-06:00 None None \n", + "607330 2025-01-23T15:05:59.570-06:00 None None \n", + "607347 2025-01-24T20:57:54.599-06:00 None None \n", + "\n", + " associationIds.1 value.projectUuid \\\n", + "250 None 0001399309581559-5056a550b8-0001-012 \n", + "252 None 0001400250478554-5056a550b8-0001-012 \n", + "253 None 0001400250478554-5056a550b8-0001-012 \n", + "254 None 0001400250478554-5056a550b8-0001-012 \n", + "256 None 0001400250478554-5056a550b8-0001-012 \n", + "... ... ... \n", + "606711 None 6589143665654501871-242ac118-0001-012 \n", + "607090 None 5456400192359305711-242ac118-0001-012 \n", + "607329 None 5199144433477554666-242ac116-0001-012 \n", + "607330 None 5456400192359305711-242ac118-0001-012 \n", + "607347 None 5456400192359305711-242ac118-0001-012 \n", + "\n", + " value.jobUuid \n", + "250 0001399315558601-5056a550b8-0001-007 \n", + "252 0001400254372814-5056a550b8-0001-007 \n", + "253 0001400273862119-5056a550b8-0001-007 \n", + "254 0001400274448320-5056a550b8-0001-007 \n", + "256 0001400274714490-5056a550b8-0001-007 \n", + "... ... \n", + "606711 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "607090 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "607329 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "607330 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "607347 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "\n", + "[6355 rows x 13 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jsonarray_projectJob = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJsonArrayFeb042025.json')\n", + "jsonarray_projectJob = jsonarray_projectJob[jsonarray_projectJob['name'] == 'projectJob']\n", + "\n", + "jsonarray_projectJob['_id.$oid'] = jsonarray_projectJob['value'].apply(lambda x: x.get('$oid', None))\n", + "jsonarray_projectJob['associationIds.0'] = jsonarray_projectJob['value'].apply(lambda x: x[0] if isinstance(x, list) and len(x)>0 else None)\n", + "jsonarray_projectJob['associationIds.1'] = jsonarray_projectJob['value'].apply(lambda x: x[1] if isinstance(x, list) and len(x)>1 else None)\n", + "jsonarray_projectJob['value.projectUuid'] = jsonarray_projectJob['value'].apply(lambda x: x.get('projectUuid', None))\n", + "jsonarray_projectJob['value.jobUuid'] = jsonarray_projectJob['value'].apply(lambda x: x.get('jobUuid', None))\n", + "jsonarray_projectJob.drop(columns=['_id', 'associationIds', 'value'], inplace=True)\n", + "\n", + "jsonarray_projectJob" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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", + " \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", + " \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", + " \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", + "
uuidownertenantIdschemaIdinternalUsernamelastUpdatednamecreated_id.$oidassociationIds.0associationIds.1value.jobUuid
value.projectUuid
0001399309581559-5056a550b8-0001-012111001110001
0001400250478554-5056a550b8-0001-0122511002512500025
0001401392421049-5056a550b8-0001-012911009190009
0001401393981043-5056a550b8-0001-012111001110001
0001401395232432-5056a550b8-0001-012311003130003
.......................................
976788537735179795-242ac118-0001-012411004140004
988793832798425581-242ac118-0001-012411004140004
991355144541573606-242ac114-0001-012111001110001
991430390416535060-242ac117-0001-012111001110001
993772352152343016-242ac11e-0001-012211002120002
\n", + "

1086 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " uuid owner tenantId schemaId \\\n", + "value.projectUuid \n", + "0001399309581559-5056a550b8-0001-012 1 1 1 0 \n", + "0001400250478554-5056a550b8-0001-012 25 1 1 0 \n", + "0001401392421049-5056a550b8-0001-012 9 1 1 0 \n", + "0001401393981043-5056a550b8-0001-012 1 1 1 0 \n", + "0001401395232432-5056a550b8-0001-012 3 1 1 0 \n", + "... ... ... ... ... \n", + "976788537735179795-242ac118-0001-012 4 1 1 0 \n", + "988793832798425581-242ac118-0001-012 4 1 1 0 \n", + "991355144541573606-242ac114-0001-012 1 1 1 0 \n", + "991430390416535060-242ac117-0001-012 1 1 1 0 \n", + "993772352152343016-242ac11e-0001-012 2 1 1 0 \n", + "\n", + " internalUsername lastUpdated name \\\n", + "value.projectUuid \n", + "0001399309581559-5056a550b8-0001-012 0 1 1 \n", + "0001400250478554-5056a550b8-0001-012 0 25 1 \n", + "0001401392421049-5056a550b8-0001-012 0 9 1 \n", + "0001401393981043-5056a550b8-0001-012 0 1 1 \n", + "0001401395232432-5056a550b8-0001-012 0 3 1 \n", + "... ... ... ... \n", + "976788537735179795-242ac118-0001-012 0 4 1 \n", + "988793832798425581-242ac118-0001-012 0 4 1 \n", + "991355144541573606-242ac114-0001-012 0 1 1 \n", + "991430390416535060-242ac117-0001-012 0 1 1 \n", + "993772352152343016-242ac11e-0001-012 0 2 1 \n", + "\n", + " created _id.$oid associationIds.0 \\\n", + "value.projectUuid \n", + "0001399309581559-5056a550b8-0001-012 1 0 0 \n", + "0001400250478554-5056a550b8-0001-012 25 0 0 \n", + "0001401392421049-5056a550b8-0001-012 9 0 0 \n", + "0001401393981043-5056a550b8-0001-012 1 0 0 \n", + "0001401395232432-5056a550b8-0001-012 3 0 0 \n", + "... ... ... ... \n", + "976788537735179795-242ac118-0001-012 4 0 0 \n", + "988793832798425581-242ac118-0001-012 4 0 0 \n", + "991355144541573606-242ac114-0001-012 1 0 0 \n", + "991430390416535060-242ac117-0001-012 1 0 0 \n", + "993772352152343016-242ac11e-0001-012 2 0 0 \n", + "\n", + " associationIds.1 value.jobUuid \n", + "value.projectUuid \n", + "0001399309581559-5056a550b8-0001-012 0 1 \n", + "0001400250478554-5056a550b8-0001-012 0 25 \n", + "0001401392421049-5056a550b8-0001-012 0 9 \n", + "0001401393981043-5056a550b8-0001-012 0 1 \n", + "0001401395232432-5056a550b8-0001-012 0 3 \n", + "... ... ... \n", + "976788537735179795-242ac118-0001-012 0 4 \n", + "988793832798425581-242ac118-0001-012 0 4 \n", + "991355144541573606-242ac114-0001-012 0 1 \n", + "991430390416535060-242ac117-0001-012 0 1 \n", + "993772352152343016-242ac11e-0001-012 0 2 \n", + "\n", + "[1086 rows x 12 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jsonarray_projectJob.groupby('value.projectUuid').nunique()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## combine projectJob jobAll and emailUsernameCombo" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + "
uuid_xowner_xtenantId_xschemaId_xinternalUsername_xlastUpdated_xname_xcreated_x_id.$oid_xassociationIds.0_x...remote_submit_retriesremote_status_checksfailed_status_checkslast_status_checkblocked_countvisibleupdate_tokenparameters.Creatorvalue.usernamevalue.email
parameters.Creator
vdj-test18421008418400...231221841vdj-test1vdjserver@utsouthwestern.edu
schristley4561100456145600...118423381314561schristleyscott.christley@utsouthwestern.edu
scott_public3051100305130500...123622221213051scott_publicscott.christley@utsouthwestern.edu
victorialopez1201100120112000...149184311201victorialopezvictorialopez@isciii.es
scott_ab5111005115100...15011871511scott_abscott.christley@utsouthwestern.edu
..................................................................
baoduong1110011100...11111111baoduongbaoduong@uab.edu
zhangcy1811001811800...16114131181zhangcycaiyan505@126.com
zhe.sang1110011100...11111111zhe.sangzhe.sang@gmail.com
zhouhao9610041110011100...11111111zhouhao961004zhouhao@biken.osaka-u.ac.jp
vae9110091900...12191191vaezyf950619@gmail.com
\n", + "

300 rows × 69 columns

\n", + "
" + ], + "text/plain": [ + " uuid_x owner_x tenantId_x schemaId_x \\\n", + "parameters.Creator \n", + "vdj-test1 84 2 1 0 \n", + "schristley 456 1 1 0 \n", + "scott_public 305 1 1 0 \n", + "victorialopez 120 1 1 0 \n", + "scott_ab 51 1 1 0 \n", + "... ... ... ... ... \n", + "baoduong 1 1 1 0 \n", + "zhangcy 18 1 1 0 \n", + "zhe.sang 1 1 1 0 \n", + "zhouhao961004 1 1 1 0 \n", + "vae 9 1 1 0 \n", + "\n", + " internalUsername_x lastUpdated_x name_x created_x \\\n", + "parameters.Creator \n", + "vdj-test1 0 84 1 84 \n", + "schristley 0 456 1 456 \n", + "scott_public 0 305 1 305 \n", + "victorialopez 0 120 1 120 \n", + "scott_ab 0 51 1 51 \n", + "... ... ... ... ... \n", + "baoduong 0 1 1 1 \n", + "zhangcy 0 18 1 18 \n", + "zhe.sang 0 1 1 1 \n", + "zhouhao961004 0 1 1 1 \n", + "vae 0 9 1 9 \n", + "\n", + " _id.$oid_x associationIds.0_x ... \\\n", + "parameters.Creator ... \n", + "vdj-test1 0 0 ... \n", + "schristley 0 0 ... \n", + "scott_public 0 0 ... \n", + "victorialopez 0 0 ... \n", + "scott_ab 0 0 ... \n", + "... ... ... ... \n", + "baoduong 0 0 ... \n", + "zhangcy 0 0 ... \n", + "zhe.sang 0 0 ... \n", + "zhouhao961004 0 0 ... \n", + "vae 0 0 ... \n", + "\n", + " remote_submit_retries remote_status_checks \\\n", + "parameters.Creator \n", + "vdj-test1 2 3 \n", + "schristley 1 184 \n", + "scott_public 1 236 \n", + "victorialopez 1 49 \n", + "scott_ab 1 50 \n", + "... ... ... \n", + "baoduong 1 1 \n", + "zhangcy 1 6 \n", + "zhe.sang 1 1 \n", + "zhouhao961004 1 1 \n", + "vae 1 2 \n", + "\n", + " failed_status_checks last_status_check blocked_count \\\n", + "parameters.Creator \n", + "vdj-test1 1 2 2 \n", + "schristley 2 338 13 \n", + "scott_public 2 222 12 \n", + "victorialopez 1 84 3 \n", + "scott_ab 1 18 7 \n", + "... ... ... ... \n", + "baoduong 1 1 1 \n", + "zhangcy 1 14 13 \n", + "zhe.sang 1 1 1 \n", + "zhouhao961004 1 1 1 \n", + "vae 1 9 1 \n", + "\n", + " visible update_token parameters.Creator value.username \\\n", + "parameters.Creator \n", + "vdj-test1 1 84 1 vdj-test1 \n", + "schristley 1 456 1 schristley \n", + "scott_public 1 305 1 scott_public \n", + "victorialopez 1 120 1 victorialopez \n", + "scott_ab 1 51 1 scott_ab \n", + "... ... ... ... ... \n", + "baoduong 1 1 1 baoduong \n", + "zhangcy 1 18 1 zhangcy \n", + "zhe.sang 1 1 1 zhe.sang \n", + "zhouhao961004 1 1 1 zhouhao961004 \n", + "vae 1 9 1 vae \n", + "\n", + " value.email \n", + "parameters.Creator \n", + "vdj-test1 vdjserver@utsouthwestern.edu \n", + "schristley scott.christley@utsouthwestern.edu \n", + "scott_public scott.christley@utsouthwestern.edu \n", + "victorialopez victorialopez@isciii.es \n", + "scott_ab scott.christley@utsouthwestern.edu \n", + "... ... \n", + "baoduong baoduong@uab.edu \n", + "zhangcy caiyan505@126.com \n", + "zhe.sang zhe.sang@gmail.com \n", + "zhouhao961004 zhouhao@biken.osaka-u.ac.jp \n", + "vae zyf950619@gmail.com \n", + "\n", + "[300 rows x 69 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# from jsonArray name=projectJob combined with jobs_all json file \n", + "projJob_projFile_jobAll_emailUser = jsonarray_projectJob.merge(jsonarray_projectFile, on='value.projectUuid')\\\n", + " .merge(jobs_all_df, left_on='value.jobUuid', right_on='uuid')\\\n", + " .merge(email_username_combo, left_on='parameters.Creator', right_on='value.username')\n", + "\n", + " \n", + "\n", + "\n", + "# extract all columns\n", + "cols = projJob_projFile_jobAll_emailUser.columns.to_list()\n", + "\n", + "# define custom agg function for email and username when only 1 present, print out name, otherwise unique count\n", + "def custom_agg(series):\n", + " unique_values = series.unique()\n", + " if len(unique_values) == 1:\n", + " return unique_values[0]\n", + " else:\n", + " return len(unique_values)\n", + "\n", + "# define columns to use this function \n", + "user_cols = {'value.username': custom_agg,\n", + " 'value.email': custom_agg}\n", + "\n", + "# create agg_dict\n", + "agg_dict = {col: 'nunique' for col in cols if col not in user_cols}\n", + "agg_dict.update(user_cols)\n", + "\n", + "# groupby\n", + "projJob_projFile_jobAll_emailUser_groupby = projJob_projFile_jobAll_emailUser.groupby('parameters.Creator').agg(agg_dict).sort_values('value.projectUuid', ascending=False)\n", + "\n", + "# save\n", + "# projJob_projFile_jobAll_emailUser_groupby.to_csv('./csv/jsonArrayProjectJob.merge.jsonArrayProjectFile_on=projectUuid'+\n", + "# '.merge.jobsAll_on=jobUuid&uuid'+\n", + "# '.merge.emailUserCombo_on=Creator&username'+\n", + "# '.groupby=Creators'+\n", + "# '.sorted=projectUuid.csv')\n", + "projJob_projFile_jobAll_emailUser_groupby" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "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", + " \n", + "
value.emailvalue.projectUuidfileUuidvalue.jobUuid
parameters.Creator
vdj-test1vdjserver@utsouthwestern.edu848484
schristleyscott.christley@utsouthwestern.edu647097456
scott_publicscott.christley@utsouthwestern.edu323242305
victorialopezvictorialopez@isciii.es27218120
scott_abscott.christley@utsouthwestern.edu23417551
\n", + "
" + ], + "text/plain": [ + " value.email value.projectUuid \\\n", + "parameters.Creator \n", + "vdj-test1 vdjserver@utsouthwestern.edu 84 \n", + "schristley scott.christley@utsouthwestern.edu 64 \n", + "scott_public scott.christley@utsouthwestern.edu 32 \n", + "victorialopez victorialopez@isciii.es 27 \n", + "scott_ab scott.christley@utsouthwestern.edu 23 \n", + "\n", + " fileUuid value.jobUuid \n", + "parameters.Creator \n", + "vdj-test1 84 84 \n", + "schristley 7097 456 \n", + "scott_public 3242 305 \n", + "victorialopez 218 120 \n", + "scott_ab 4175 51 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Pull out stats required\n", + "stats_cols = ['value.email', 'value.projectUuid', 'fileUuid', 'value.jobUuid', ]\n", + "# projJob_projFile_jobAll_emailUser_groupby[stats_cols].to_csv('./csv/reduced_stats.csv')\n", + "projJob_projFile_jobAll_emailUser_groupby[stats_cols].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# tests used when pulling '_id's, 'associationIds's, and 'value's\n", + "\n", + "# print(set([str(e.keys()) for e in jsonarray_projectJob['_id']]))\n", + "# print(set(len(e) for e in jsonarray_projectJob['associationIds']))\n", + "# print(set([str(e.keys()) for e in jsonarray_projectJob['value']]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## vdjserverMetadataPermissions.json" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "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", + "
idlast_updatedusernameuuidtenant_id
permission
ALL63646364636463646364
READ4691246912469124691246912
READ_WRITE707319707319707319707319707319
\n", + "
" + ], + "text/plain": [ + " id last_updated username uuid tenant_id\n", + "permission \n", + "ALL 6364 6364 6364 6364 6364\n", + "READ 46912 46912 46912 46912 46912\n", + "READ_WRITE 707319 707319 707319 707319 707319" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metadata_perms_df.groupby(['permission']).count()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "username\n", + "schristley 242530\n", + "scott_test1 62528\n", + "itoby 54506\n", + "lgcowell 51657\n", + "scott_public 43133\n", + " ... \n", + "zktuong 1\n", + "zhonghuang 1\n", + "zhanxw 1\n", + "zerufael 1\n", + "a.sooda 1\n", + "Name: count, Length: 1058, dtype: int64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "non_read_users = metadata_perms_df[(metadata_perms_df['permission'] == 'ALL') | (metadata_perms_df['permission'] == 'READ_WRITE')]\n", + "# non_read_users.groupby(by=['username']).count().sort_values(by=['uuid'],ascending=False)\n", + "non_read_users.value_counts('username')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## counting the number of jobs\n", + "- From vdjserverJobs_all.json the parameters.Creator var was counted, \n", + "- This count left joined with a dataframe containing email and username combinations. \n", + " - These combos were made from vdjserverJsonArrayFeb042025.json by finding valid emails by filtering out any @test or @email with varying top level domains, and checking if the address can be split on @ with a len of 2. The injection bit was also removed" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "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", + " \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", + "
parameters.Creatornum_jobsvalue.usernamevalue.email
0vdj2552NaNNaN
1scott_test1643scott_test1scott.christley@utsouthwestern.edu
2schristley592schristleyscott.christley@utsouthwestern.edu
3scott_public478scott_publicscott.christley@utsouthwestern.edu
4victorialopez175victorialopezvictorialopez@isciii.es
...............
303jivdj171jivdj17xuhuai.ji@stanford.edu
304pingpingzheng1pingpingzhengzhengpp@stanford.edu
305minici.claudia1minici.claudiaminici.claudia@hsr.it
306nianbinli1nianbinlilinianbin97@tmu.edu.cn
307crushseven1crushsevenZiyue.Yan@alivexbiotech.com
\n", + "

308 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " parameters.Creator num_jobs value.username \\\n", + "0 vdj 2552 NaN \n", + "1 scott_test1 643 scott_test1 \n", + "2 schristley 592 schristley \n", + "3 scott_public 478 scott_public \n", + "4 victorialopez 175 victorialopez \n", + ".. ... ... ... \n", + "303 jivdj17 1 jivdj17 \n", + "304 pingpingzheng 1 pingpingzheng \n", + "305 minici.claudia 1 minici.claudia \n", + "306 nianbinli 1 nianbinli \n", + "307 crushseven 1 crushseven \n", + "\n", + " value.email \n", + "0 NaN \n", + "1 scott.christley@utsouthwestern.edu \n", + "2 scott.christley@utsouthwestern.edu \n", + "3 scott.christley@utsouthwestern.edu \n", + "4 victorialopez@isciii.es \n", + ".. ... \n", + "303 xuhuai.ji@stanford.edu \n", + "304 zhengpp@stanford.edu \n", + "305 minici.claudia@hsr.it \n", + "306 linianbin97@tmu.edu.cn \n", + "307 Ziyue.Yan@alivexbiotech.com \n", + "\n", + "[308 rows x 4 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# cant do this because owner is usually vdj since tacc account needed. \n", + "# we will replace owner with parameters.creator\n", + "num_jobs = jobs_all_df['parameters.Creator'].value_counts().to_frame().reset_index().rename(columns={'count':'num_jobs'})\n", + "num_jobs = num_jobs.merge(email_username_combo, how='left', left_on='parameters.Creator', right_on='value.username')\n", + "# num_jobs.to_csv('./csv/num_jobs_by_parameters.Creator_w_username_equal_to_parameters.Creator.csv')\n", + "num_jobs\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# jobsAll & jobsEvents" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "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", + " \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", + " \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", + "
id_xnametenant_id_xtenant_queueownerrolessystem_idapp_idapp_uuidstatus_x...id_ycreated_ycreated_bydescriptionip_addressstatus_ytenant_id_yjob_idtransfertaskuuid_y
0503865My Job 24-Jan-2025 8:57:09 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.edurepcalc-ls6-2.0u86306626279335587345-242ac119-0001-005FINISHED...235856342025-01-25 02:57:54vdjJob processing beginning172.17.0.5PENDINGvdjserver.org5038650.02ad89d35-7a9b-49f8-92fc-6ac58a616bc0-028
1503865My Job 24-Jan-2025 8:57:09 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.edurepcalc-ls6-2.0u86306626279335587345-242ac119-0001-005FINISHED...235856352025-01-25 02:57:54vdjIdentifying input files for staging172.17.0.5PROCESSING_INPUTSvdjserver.org5038650.0a59279d9-4e37-456f-bc14-b44ed6a150fd-028
2503865My Job 24-Jan-2025 8:57:09 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.edurepcalc-ls6-2.0u86306626279335587345-242ac119-0001-005FINISHED...235856362025-01-25 02:57:54vdjALL permission granted to schristley172.17.0.3PERMISSION_GRANTvdjserver.org5038650.0808c6bb4-8397-4462-bf5a-81c9f96b0b08-028
3503865My Job 24-Jan-2025 8:57:09 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.edurepcalc-ls6-2.0u86306626279335587345-242ac119-0001-005FINISHED...235856372025-01-25 02:57:56vdjTransferring job input data to execution system172.17.0.5STAGING_INPUTSvdjserver.org5038650.0d230d601-4e32-45d1-a4f0-3c131b3572d6-028
4503865My Job 24-Jan-2025 8:57:09 pmvdjserver.orgaloe.jobq.vdjserver.org.submit.DefaultQueuevdjInternal/VDJ_vdj_keycloak_PRODUCTION,Internal/...ls6.tacc.utexas.edurepcalc-ls6-2.0u86306626279335587345-242ac119-0001-005FINISHED...235856382025-01-25 02:57:58vdjJob input copy in progress: agave://data.vdjse...172.17.0.5STAGING_INPUTSvdjserver.org503865560378492.09ee603a8-8777-4677-bbd3-0f55b2863676-028
\n", + "

5 rows × 52 columns

\n", + "
" + ], + "text/plain": [ + " id_x name tenant_id_x \\\n", + "0 503865 My Job 24-Jan-2025 8:57:09 pm vdjserver.org \n", + "1 503865 My Job 24-Jan-2025 8:57:09 pm vdjserver.org \n", + "2 503865 My Job 24-Jan-2025 8:57:09 pm vdjserver.org \n", + "3 503865 My Job 24-Jan-2025 8:57:09 pm vdjserver.org \n", + "4 503865 My Job 24-Jan-2025 8:57:09 pm vdjserver.org \n", + "\n", + " tenant_queue owner \\\n", + "0 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "1 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "2 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "3 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "4 aloe.jobq.vdjserver.org.submit.DefaultQueue vdj \n", + "\n", + " roles system_id \\\n", + "0 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "1 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "2 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "3 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "4 Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/... ls6.tacc.utexas.edu \n", + "\n", + " app_id app_uuid status_x ... \\\n", + "0 repcalc-ls6-2.0u8 6306626279335587345-242ac119-0001-005 FINISHED ... \n", + "1 repcalc-ls6-2.0u8 6306626279335587345-242ac119-0001-005 FINISHED ... \n", + "2 repcalc-ls6-2.0u8 6306626279335587345-242ac119-0001-005 FINISHED ... \n", + "3 repcalc-ls6-2.0u8 6306626279335587345-242ac119-0001-005 FINISHED ... \n", + "4 repcalc-ls6-2.0u8 6306626279335587345-242ac119-0001-005 FINISHED ... \n", + "\n", + " id_y created_y created_by \\\n", + "0 23585634 2025-01-25 02:57:54 vdj \n", + "1 23585635 2025-01-25 02:57:54 vdj \n", + "2 23585636 2025-01-25 02:57:54 vdj \n", + "3 23585637 2025-01-25 02:57:56 vdj \n", + "4 23585638 2025-01-25 02:57:58 vdj \n", + "\n", + " description ip_address \\\n", + "0 Job processing beginning 172.17.0.5 \n", + "1 Identifying input files for staging 172.17.0.5 \n", + "2 ALL permission granted to schristley 172.17.0.3 \n", + "3 Transferring job input data to execution system 172.17.0.5 \n", + "4 Job input copy in progress: agave://data.vdjse... 172.17.0.5 \n", + "\n", + " status_y tenant_id_y job_id transfertask \\\n", + "0 PENDING vdjserver.org 503865 0.0 \n", + "1 PROCESSING_INPUTS vdjserver.org 503865 0.0 \n", + "2 PERMISSION_GRANT vdjserver.org 503865 0.0 \n", + "3 STAGING_INPUTS vdjserver.org 503865 0.0 \n", + "4 STAGING_INPUTS vdjserver.org 503865 560378492.0 \n", + "\n", + " uuid_y \n", + "0 2ad89d35-7a9b-49f8-92fc-6ac58a616bc0-028 \n", + "1 a59279d9-4e37-456f-bc14-b44ed6a150fd-028 \n", + "2 808c6bb4-8397-4462-bf5a-81c9f96b0b08-028 \n", + "3 d230d601-4e32-45d1-a4f0-3c131b3572d6-028 \n", + "4 9ee603a8-8777-4677-bbd3-0f55b2863676-028 \n", + "\n", + "[5 rows x 52 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jobs_all_and_events_df = jobs_all_df.merge(job_events_df, right_on='job_id', left_on='id')\n", + "jobs_all_and_events_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'{\"UMIMinFrequency\":\"0.6\",\"PreFilterStatisticsFlag\":true,\"MinimumQuality\":20,\"Workflow\":\"paired\",\"Creator\":\"lcc294\",\"ReversePrimer\":\"none\",\"FindUniqueFlag\":true,\"SequenceFileTypes\":\"454\",\"UMIMaxGap\":\"0.5\",\"FilterFlag\":true,\"PostFilterStatisticsFlag\":true,\"SequenceReversePairedFilesMetadata\":\"1628993133380103705-242ac11c-0001-012\",\"FindUniqueMaxNucleotides\":20,\"ForwardPrimer\":\"none\",\"FindUniqueExclude\":true,\"Barcode\":false,\"MinimumLength\":250,\"SequenceForwardPairedFilesMetadata\":\"2433979131179691545-242ac11c-0001-012\",\"UMIConsensus\":false,\"UMIMaxError\":\"0.1\"}'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job_event_perms = job_events_df.merge(job_permissions_df, on='job_id')\n", + "job_event_perms.merge(jobs_all_df, left_on='job_id', right_on='id')['parameters'][170000]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "explor", + "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.13.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/conversion/tapis_v2_to_v3/data_exploration_2.ipynb b/conversion/tapis_v2_to_v3/data_exploration_2.ipynb new file mode 100644 index 0000000..0814eb3 --- /dev/null +++ b/conversion/tapis_v2_to_v3/data_exploration_2.ipynb @@ -0,0 +1,9987 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c843c3e4-12c4-44ef-b357-fa8435844e16", + "metadata": {}, + "source": [ + "## All Imports" + ] + }, + { + "cell_type": "raw", + "id": "213eb7e1-5520-468b-a7e7-fd85d3bf9da4", + "metadata": {}, + "source": [ + "%lsmagic" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c18e4b34-fb63-4eac-9507-74ae79802df3", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ef60f956-8f92-4a89-9c28-dd1a366bdacc", + "metadata": {}, + "outputs": [], + "source": [ + "job_events_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobEvents.json')\n", + "job_permissions_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobPermissions.json')\n", + "jobs_all_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobs_all.json')\n", + "jobs_all_df['parameters.Creator'] = jobs_all_df['parameters'].apply(lambda x: json.loads(x).get('Creator', np.nan) if x else np.nan)\n", + "metadata_perms_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverMetadataPermissions.json')\n", + "\n", + "with open('/mnt/md0/Projects/vdjserver/vdjserverJsonArrayFeb042025.json', 'r') as f:\n", + " jsonarray = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "163f864c-bfc1-4f60-be28-b2c2ad43f411", + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idlast_updatedpermissionusernameuuidtenant_id
052014-01-21 17:00:11READ_WRITEtest30001389977207738-5056a550b8-0001-012vdjserver.org
162014-01-21 17:00:41READ_WRITEtest40001389977207738-5056a550b8-0001-012vdjserver.org
292014-01-21 17:21:43READ_WRITEtest110001389977207738-5056a550b8-0001-012vdjserver.org
3142014-01-29 10:28:16READ_WRITEjfonner0001389977207738-5056a550b8-0001-012vdjserver.org
4172014-01-29 14:06:38READ_WRITEadshkl;dasfhkdf0001391025968832-5056a550b8-0001-012vdjserver.org
.....................
76059014449862025-01-25 09:44:43READ_WRITEschristley3580715269144908271-242ac118-0001-012vdjserver.org
76059114449872025-01-25 09:44:44READ_WRITEschristley3569118857445708271-242ac118-0001-012vdjserver.org
76059214449882025-01-25 09:44:44READ_WRITEschristley3557565395419468271-242ac118-0001-012vdjserver.org
76059314449892025-01-25 09:44:44READ_WRITEschristley3547300423582028271-242ac118-0001-012vdjserver.org
76059414449902025-01-25 09:44:44READ_WRITEschristley3534544370712908271-242ac118-0001-012vdjserver.org
\n", + "

760595 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "0 5 2014-01-21 17:00:11 READ_WRITE test3 \n", + "1 6 2014-01-21 17:00:41 READ_WRITE test4 \n", + "2 9 2014-01-21 17:21:43 READ_WRITE test11 \n", + "3 14 2014-01-29 10:28:16 READ_WRITE jfonner \n", + "4 17 2014-01-29 14:06:38 READ_WRITE adshkl;dasfhkdf \n", + "... ... ... ... ... \n", + "760590 1444986 2025-01-25 09:44:43 READ_WRITE schristley \n", + "760591 1444987 2025-01-25 09:44:44 READ_WRITE schristley \n", + "760592 1444988 2025-01-25 09:44:44 READ_WRITE schristley \n", + "760593 1444989 2025-01-25 09:44:44 READ_WRITE schristley \n", + "760594 1444990 2025-01-25 09:44:44 READ_WRITE schristley \n", + "\n", + " uuid tenant_id \n", + "0 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "1 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "2 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "3 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "4 0001391025968832-5056a550b8-0001-012 vdjserver.org \n", + "... ... ... \n", + "760590 3580715269144908271-242ac118-0001-012 vdjserver.org \n", + "760591 3569118857445708271-242ac118-0001-012 vdjserver.org \n", + "760592 3557565395419468271-242ac118-0001-012 vdjserver.org \n", + "760593 3547300423582028271-242ac118-0001-012 vdjserver.org \n", + "760594 3534544370712908271-242ac118-0001-012 vdjserver.org \n", + "\n", + "[760595 rows x 6 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metadata_perms_df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5e2a3b63-e630-4ccb-b35b-acc6573be86c", + "metadata": {}, + "outputs": [], + "source": [ + "def json_print(item):\n", + " print(json.dumps(item, indent = 4))" + ] + }, + { + "cell_type": "markdown", + "id": "814c7971-4a25-4fd2-9075-3ad7ff160e28", + "metadata": {}, + "source": [ + "## VDJServer_mailing_list.txt " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4968e34e-3ef2-4de8-b79b-3130ac48310d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Email updated_email\n", + "0 12ysliu2 at stu.edu.cn 12ysliu2@stu.edu.cn\n", + "1 18982180702 at msn.cn 18982180702@msn.cn\n", + "2 2008110020 at alumni.sjtu.edu.cn 2008110020@alumni.sjtu.edu.cn\n", + "3 2383920158 at qq.com 2383920158@qq.com\n", + "4 2deepayan at gmail.com 2deepayan@gmail.com\n", + ".. ... ...\n", + "571 zhanxw at gmail.com zhanxw@gmail.com\n", + "572 zhe.sang at gmail.com zhe.sang@gmail.com\n", + "573 zicheng at utexas.edu zicheng@utexas.edu\n", + "574 zluo819 at gmail.com zluo819@gmail.com\n", + "575 zyf950619 at gmail.com zyf950619@gmail.com\n", + "\n", + "[576 rows x 2 columns]\n" + ] + } + ], + "source": [ + "mailing_list = pd.read_csv(\"/mnt/md0/Projects/vdjserver/VDJServer_mailing_list.txt\", sep = ';', skiprows = 8)\n", + "mailing_list.columns = ['Email']\n", + "mailing_list = mailing_list.iloc[:-5]\n", + "mailing_list['updated_email'] = mailing_list['Email'].apply(lambda row: row.replace(\" at \", \"@\"))\n", + "\n", + "# mailing_list['updated_email'].to_csv('email_list.txt', index = False)\n", + "print(mailing_list)" + ] + }, + { + "cell_type": "markdown", + "id": "8aff3b9d-a220-4f73-8da5-cb649410c98d", + "metadata": {}, + "source": [ + "## Check What Kind Of Metadata We Have" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "90c2177e-5e24-4274-a148-6d183ef7e422", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['adc_cache', 'adc_cache_repertoire', 'adc_cache_study', 'adc_system_repositories', 'archive_project', 'async_query', 'bioProcessing', 'bioProcessingColumns', 'cellProcessing', 'cellProcessingColumns', 'communityDataSRA', 'data_processing', 'deletedProject', 'diagnosis', 'diagnosisColumns', 'feedback', 'garbage', 'irplus_analysis', 'job', 'nucleicAcidProcessing', 'nucleicAcidProcessingColumns', 'passwordReset', 'private_project', 'processMetadata', 'profile', 'project', 'projectFile', 'projectJob', 'projectJobArchive', 'projectJobFile', 'projectLoad', 'projectPublishInProcess', 'projectUnpublishInProcess', 'publicProject', 'public_project', 'rearrangementLoad', 'repertoire', 'sample', 'sampleColumns', 'sampleGroup', 'sample_processing', 'statistics_cache', 'statistics_cache_repertoire', 'statistics_cache_study', 'subject', 'subjectColumns', 'test', 'testMetadata', 'testmetadata', 'testmetadatamp', 'userVerification', 'vdjpipeWorkflow']\n", + "52\n" + ] + } + ], + "source": [ + "item_types = set()\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " item_types.add(item_type)\n", + "print(sorted(item_types))\n", + "print(len(item_types))" + ] + }, + { + "cell_type": "code", + "execution_count": 283, + "id": "3a96e83a-f451-4f91-a1f7-7f64c1a34300", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"_id\": {\n", + " \"$oid\": \"52d95bcbe4b0f097f3cf5d6d\"\n", + " },\n", + " \"uuid\": \"0001389976523746-5056a550b8-0001-012\",\n", + " \"owner\": \"wscarbor\",\n", + " \"tenantId\": \"vdjserver.org\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [],\n", + " \"lastUpdated\": \"2016-04-27T15:07:26.261-05:00\",\n", + " \"name\": \"profile\",\n", + " \"value\": {\n", + " \"firstName\": \"Walter\",\n", + " \"lastName\": \"Scarborough\",\n", + " \"email\": \"wscarbor@tacc.utexas.edu\",\n", + " \"city\": \"Austin\",\n", + " \"state\": \"TX\",\n", + " \"country\": \"USA\",\n", + " \"affiliation\": \"\"\n", + " },\n", + " \"created\": \"2014-01-17T10:35:23.649-06:00\"\n", + "}\n" + ] + } + ], + "source": [ + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'profile':\n", + " print(json.dumps(item, indent = 4))\n", + " break\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "f9ce914f-4fde-41c3-8f89-99effd49de2a", + "metadata": {}, + "source": [ + "## Look At User Email Informations\n", + "- Contains email\n", + "- Firstname, Lastname\n", + "- City, State, Country" + ] + }, + { + "cell_type": "code", + "execution_count": 284, + "id": "59e08da8-2959-4e35-9f0c-c1ea512e798a", + "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", + " \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", + "
uuidownerfirstNamelastNameemailcitystatecountrycreatedlastUpdated
18176242932598575984145-242ac118-0001-012rgarciaRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nlAmsterdamNetherlands2025-01-02T11:11:52.894-06:002025-01-02T11:11:52.894-06:00
18182755888095932968465-242ac118-0001-012rgarciavRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nl2025-01-02T11:41:52.070-06:002025-01-02T11:41:52.070-06:00
18195481029658171207185-242ac118-0001-012erichardsonEveRichardsonerichardson@lji.orgSan DiegoCaliforniaUnited States2025-01-07T18:01:25.657-06:002025-01-07T18:01:25.657-06:00
18204458895817601248785-242ac118-0001-012samwolsamuel.wollenburg@utsouthwestern.edu2025-01-07T20:24:59.390-06:002025-01-07T20:24:59.390-06:00
18219076859566261923345-242ac118-0001-012chrisjames1992Chinweike ChristopherUdoyechinweikechristopher.udoye@uksh.deLübeckSchleswig-HolsteinGermany2025-01-17T07:54:02.133-06:002025-01-17T07:54:02.133-06:00
\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "1817 6242932598575984145-242ac118-0001-012 rgarcia \n", + "1818 2755888095932968465-242ac118-0001-012 rgarciav \n", + "1819 5481029658171207185-242ac118-0001-012 erichardson \n", + "1820 4458895817601248785-242ac118-0001-012 samwol \n", + "1821 9076859566261923345-242ac118-0001-012 chrisjames1992 \n", + "\n", + " firstName lastName \\\n", + "1817 Rodrigo García Valiente \n", + "1818 Rodrigo García Valiente \n", + "1819 Eve Richardson \n", + "1820 \n", + "1821 Chinweike Christopher Udoye \n", + "\n", + " email city state \\\n", + "1817 r.garciavaliente@amsterdamumc.nl Amsterdam \n", + "1818 r.garciavaliente@amsterdamumc.nl \n", + "1819 erichardson@lji.org San Diego California \n", + "1820 samuel.wollenburg@utsouthwestern.edu \n", + "1821 chinweikechristopher.udoye@uksh.de Lübeck Schleswig-Holstein \n", + "\n", + " country created \\\n", + "1817 Netherlands 2025-01-02T11:11:52.894-06:00 \n", + "1818 2025-01-02T11:41:52.070-06:00 \n", + "1819 United States 2025-01-07T18:01:25.657-06:00 \n", + "1820 2025-01-07T20:24:59.390-06:00 \n", + "1821 Germany 2025-01-17T07:54:02.133-06:00 \n", + "\n", + " lastUpdated \n", + "1817 2025-01-02T11:11:52.894-06:00 \n", + "1818 2025-01-02T11:41:52.070-06:00 \n", + "1819 2025-01-07T18:01:25.657-06:00 \n", + "1820 2025-01-07T20:24:59.390-06:00 \n", + "1821 2025-01-17T07:54:02.133-06:00 " + ] + }, + "execution_count": 284, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "profile_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'profile':\n", + " uuid = item.get('uuid', None)\n", + " owner = item.get('owner', None)\n", + " first_name = item.get('value', {}).get('firstName', None)\n", + " last_name = item.get('value', {}).get('lastName', None)\n", + " email = item.get('value', {}).get('email', None)\n", + " city = item.get('value', {}).get('city', None)\n", + " state = item.get('value', {}).get('state', None)\n", + " country = item.get('value', {}).get('country', None)\n", + " created = item.get('created', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " # Append the extracted data as a dictionary to the list\n", + " profile_list.append({\n", + " 'uuid': uuid,\n", + " 'owner': owner,\n", + " 'firstName': first_name,\n", + " 'lastName': last_name,\n", + " 'email': email,\n", + " 'city': city,\n", + " 'state': state,\n", + " 'country': country,\n", + " 'created': created,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "# Create a DataFrame from the list of extracted data\n", + "df_profile = pd.DataFrame(profile_list)\n", + "# Print the DataFrame\n", + "df_profile.tail()" + ] + }, + { + "cell_type": "markdown", + "id": "f6c12579-3b84-44f1-971b-be731e983477", + "metadata": {}, + "source": [ + "## Look at UserVerification Data\n", + "- Contains Username\n", + "- Contains if the user is verified or not" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f6eb5a9d-c6c8-4b3a-9858-4769313ac85b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Number of User: (1881, 4)\n" + ] + }, + { + "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", + "
uuidusernameisVerifiedlast_updated
18766215315958862704145-242ac118-0001-012rgarciaFalse2025-01-02T11:11:53.537-06:00
18772740039666610728465-242ac118-0001-012rgarciavFalse2025-01-02T11:41:52.439-06:00
18785464751732119367185-242ac118-0001-012erichardsonTrue2025-01-07T18:01:47.373-06:00
18794443820482392288785-242ac118-0001-012samwolTrue2025-01-23T11:35:37.964-06:00
18809055857176184483345-242ac118-0001-012chrisjames1992False2025-01-17T07:54:02.622-06:00
\n", + "
" + ], + "text/plain": [ + " uuid username isVerified \\\n", + "1876 6215315958862704145-242ac118-0001-012 rgarcia False \n", + "1877 2740039666610728465-242ac118-0001-012 rgarciav False \n", + "1878 5464751732119367185-242ac118-0001-012 erichardson True \n", + "1879 4443820482392288785-242ac118-0001-012 samwol True \n", + "1880 9055857176184483345-242ac118-0001-012 chrisjames1992 False \n", + "\n", + " last_updated \n", + "1876 2025-01-02T11:11:53.537-06:00 \n", + "1877 2025-01-02T11:41:52.439-06:00 \n", + "1878 2025-01-07T18:01:47.373-06:00 \n", + "1879 2025-01-23T11:35:37.964-06:00 \n", + "1880 2025-01-17T07:54:02.622-06:00 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "userVerification_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'userVerification':\n", + " uuid = item.get('uuid', None) # Use .get() to avoid KeyError if 'uuid' is missing\n", + " username = item.get('value', {}).get('username', None) # Check if 'username' exists in 'value'\n", + " is_verified = item.get('value', {}).get('isVerified', None) # Check if 'isVerified' exists in 'value'\n", + " last_updated = item.get('lastUpdated', None)\n", + " # Append the extracted data as a dictionary to the list\n", + " userVerification_list.append({\n", + " 'uuid': uuid,\n", + " 'username': username,\n", + " 'isVerified': is_verified,\n", + " 'last_updated': last_updated\n", + " })\n", + "# Create a DataFrame from the list of extracted data\n", + "df_userVerification = pd.DataFrame(userVerification_list)\n", + "# Print the DataFrame\n", + "print(f\"Total Number of User: {df_userVerification.shape}\")\n", + "df_userVerification.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "789b01d5-1cfd-4965-8b7b-cda466f1f9ff", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "4fbdbfb5-07f3-40ae-b7ef-1c225981b12d", + "metadata": {}, + "source": [ + "## Look at ProjectFile data\n", + " - Contains only ProjectUUID\n", + " - Contains file upload information for the project\n", + " - Contains P" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6fe3ca43-a34e-417a-afa8-fb1612094e3c", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
359435338423137409494545-242ac118-0001-0125456400192359305711-242ac118-0001-0126793987554023894545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R1_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359441335427718191574545-242ac118-0001-0125456400192359305711-242ac118-0001-0122833383462017494545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R2_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359451840700597200490991-242ac118-0001-0125456400192359305711-242ac118-0001-012366925519251050991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R1_001.fastq.gzNone2025-01-13T16:40:43.277-06:00
359465023614960920170991-242ac118-0001-0125456400192359305711-242ac118-0001-0123549539235260010991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R2_001.fastq.gzNone2025-01-13T16:40:43.281-06:00
359477830832104257678865-242ac118-0001-0125456400192359305711-242ac118-0001-0128017190735231118865-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneprimers.fastaNone2025-01-13T16:41:49.035-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "35943 5338423137409494545-242ac118-0001-012 \n", + "35944 1335427718191574545-242ac118-0001-012 \n", + "35945 1840700597200490991-242ac118-0001-012 \n", + "35946 5023614960920170991-242ac118-0001-012 \n", + "35947 7830832104257678865-242ac118-0001-012 \n", + "\n", + " projectUuid \\\n", + "35943 5456400192359305711-242ac118-0001-012 \n", + "35944 5456400192359305711-242ac118-0001-012 \n", + "35945 5456400192359305711-242ac118-0001-012 \n", + "35946 5456400192359305711-242ac118-0001-012 \n", + "35947 5456400192359305711-242ac118-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "35943 6793987554023894545-242ac112-0001-002 \n", + "35944 2833383462017494545-242ac112-0001-002 \n", + "35945 366925519251050991-242ac112-0001-002 \n", + "35946 3549539235260010991-242ac112-0001-002 \n", + "35947 8017190735231118865-242ac112-0001-002 \n", + "\n", + " associationIds_2 owner task_type \\\n", + "35943 5456400192359305711-242ac118-0001-012 vdj None \n", + "35944 5456400192359305711-242ac118-0001-012 vdj None \n", + "35945 5456400192359305711-242ac118-0001-012 vdj None \n", + "35946 5456400192359305711-242ac118-0001-012 vdj None \n", + "35947 5456400192359305711-242ac118-0001-012 vdj None \n", + "\n", + " file_name mimeType last_updated \n", + "35943 4468_S24_L001_R1_001.fastq.gz None 2025-01-13T16:40:40.230-06:00 \n", + "35944 4468_S24_L001_R2_001.fastq.gz None 2025-01-13T16:40:40.230-06:00 \n", + "35945 6634_S25_L001_R1_001.fastq.gz None 2025-01-13T16:40:43.277-06:00 \n", + "35946 6634_S25_L001_R2_001.fastq.gz None 2025-01-13T16:40:43.281-06:00 \n", + "35947 primers.fasta None 2025-01-13T16:41:49.035-06:00 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "projectFiles_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'projectFile':\n", + " uuid = item.get('uuid', None)\n", + " associationIds = item.get('associationIds', None)\n", + " projectUuid = item.get('value', {}).get('projectUuid', None)\n", + " owner = item.get('owner', None)\n", + " task_type= item.get('value', {}).get('type', None)\n", + " file_name = item.get('value', {}).get('name', None)\n", + " mimeType = item.get('value', {}).get('mimeType', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " if associationIds:\n", + " associationIds_1 = associationIds[0]\n", + " if len(associationIds)>1:\n", + " associationIds_2 = associationIds[1]\n", + " if len(associationIds) > 2:\n", + " print(\"Length associationIds: \", len(associationIds))\n", + " else:\n", + " associationIds_2 = None\n", + " else:\n", + " associationIds_1 = None\n", + " associationIds_2 = None\n", + " # Append the extracted data as a dictionary to the list\n", + " projectFiles_list.append({\n", + " 'uuid': uuid,\n", + " 'projectUuid': projectUuid,\n", + " 'associationIds_1': associationIds_1,\n", + " 'associationIds_2': associationIds_2,\n", + " 'owner': owner,\n", + " 'task_type': task_type,\n", + " 'file_name': file_name,\n", + " 'mimeType': mimeType,\n", + " 'last_updated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_projectFiles = pd.DataFrame(projectFiles_list)\n", + "# Print the DataFrame\n", + "df_projectFiles.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f354c691-73aa-4124-af82-e86a0b34be15", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "owner\n", + "vdj 31713\n", + "schristley 1250\n", + "wscarbor 891\n", + "wrounds 517\n", + "esalina 416\n", + " ... \n", + "mrojas 1\n", + "rytis 1\n", + "randocalrissian 1\n", + "hrhinn 1\n", + "xmr5148 1\n", + "Name: count, Length: 102, dtype: int64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Keeping only projectfiles if the are owned by vdj and schristley\n", + "# df_projectFiles = df_projectFiles[df_projectFiles.owner.isin(['vdj', 'schristley'])]\n", + "df_projectFiles.owner.value_counts()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6d77cdcc-71ff-49dd-ba18-ab742eff954b", + "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", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
187962428928387311529495-242ac119-0001-0127058216970366620136-242ac11e-0001-0124248491282261929495-242ac112-0001-0027058216970366620136-242ac11e-0001-012vdjNone18M.fastaNone2019-02-15T16:20:15.208-06:00
21542646759332934512150-242ac116-0001-0123276777473314001386-242ac116-0001-0122075952650351472150-242ac113-0001-0023276777473314001386-242ac116-0001-012vdjNone18M.fastaNone2020-01-17T10:25:24.813-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "18796 2428928387311529495-242ac119-0001-012 \n", + "21542 646759332934512150-242ac116-0001-012 \n", + "\n", + " projectUuid \\\n", + "18796 7058216970366620136-242ac11e-0001-012 \n", + "21542 3276777473314001386-242ac116-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "18796 4248491282261929495-242ac112-0001-002 \n", + "21542 2075952650351472150-242ac113-0001-002 \n", + "\n", + " associationIds_2 owner task_type file_name \\\n", + "18796 7058216970366620136-242ac11e-0001-012 vdj None 18M.fasta \n", + "21542 3276777473314001386-242ac116-0001-012 vdj None 18M.fasta \n", + "\n", + " mimeType last_updated \n", + "18796 None 2019-02-15T16:20:15.208-06:00 \n", + "21542 None 2020-01-17T10:25:24.813-06:00 " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectFiles[df_projectFiles.file_name == '18M.fasta']" + ] + }, + { + "cell_type": "markdown", + "id": "1cba69fe-e100-4ace-a9f8-3c5811125ee9", + "metadata": {}, + "source": [ + "## Look at projectJob data\n", + " - Contains ProjectUUID and JobUUID" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "id": "daa652ea-e720-410e-82de-9d3a56aba5d8", + "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", + "
uuidownerprojectUuidjobUuidlastUpdated
00001400192074855-5056a550b8-0001-012vdj0001399309581559-5056a550b8-0001-0120001399315558601-5056a550b8-0001-0072014-05-15T17:14:34.855-05:00
10001400254373114-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400254372814-5056a550b8-0001-0072014-05-16T10:32:53.114-05:00
20001400273862423-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400273862119-5056a550b8-0001-0072014-05-16T15:57:42.423-05:00
30001400274448495-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400274448320-5056a550b8-0001-0072014-05-16T16:07:28.494-05:00
40001400274714655-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400274714490-5056a550b8-0001-0072014-05-16T16:11:54.655-05:00
\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "0 0001400192074855-5056a550b8-0001-012 vdj \n", + "1 0001400254373114-5056a550b8-0001-012 vdj \n", + "2 0001400273862423-5056a550b8-0001-012 vdj \n", + "3 0001400274448495-5056a550b8-0001-012 vdj \n", + "4 0001400274714655-5056a550b8-0001-012 vdj \n", + "\n", + " projectUuid jobUuid \\\n", + "0 0001399309581559-5056a550b8-0001-012 0001399315558601-5056a550b8-0001-007 \n", + "1 0001400250478554-5056a550b8-0001-012 0001400254372814-5056a550b8-0001-007 \n", + "2 0001400250478554-5056a550b8-0001-012 0001400273862119-5056a550b8-0001-007 \n", + "3 0001400250478554-5056a550b8-0001-012 0001400274448320-5056a550b8-0001-007 \n", + "4 0001400250478554-5056a550b8-0001-012 0001400274714490-5056a550b8-0001-007 \n", + "\n", + " lastUpdated \n", + "0 2014-05-15T17:14:34.855-05:00 \n", + "1 2014-05-16T10:32:53.114-05:00 \n", + "2 2014-05-16T15:57:42.423-05:00 \n", + "3 2014-05-16T16:07:28.494-05:00 \n", + "4 2014-05-16T16:11:54.655-05:00 " + ] + }, + "execution_count": 162, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "projectJob_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'projectJob':\n", + " # json_print(item)\n", + " uuid = item.get('uuid', None)\n", + " owner = item.get('owner', None)\n", + " projectUuid = item.get('value', {}).get('projectUuid', None)\n", + " jobUuid = item.get('value', {}).get('jobUuid', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " projectJob_list.append({\n", + " 'uuid': uuid,\n", + " 'owner': owner,\n", + " 'projectUuid': projectUuid,\n", + " 'jobUuid': jobUuid,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_projectJob = pd.DataFrame(projectJob_list)\n", + "df_projectJob.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "d6b829b6-080b-4a69-9f3f-662fc2cfd36f", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidownerprojectUuidjobUuidlastUpdated
3524360484783884014056-242ac11e-0001-012vdj7058216970366620136-242ac11e-0001-012217677121292014056-242ac11b-0001-0072018-04-17T10:50:14.832-05:00
35255644951932076289560-242ac11e-0001-012vdj7058216970366620136-242ac11e-0001-0125814903787979009560-242ac11b-0001-0072018-04-17T13:54:01.922-05:00
36224704510086896283160-242ac11e-0001-012vdj7058216970366620136-242ac11e-0001-0124916552622299803160-242ac11b-0001-0072018-05-30T16:16:40.464-05:00
38408974371275809231336-242ac11e-0001-012vdj7058216970366620136-242ac11e-0001-0128802787332334031336-242ac11b-0001-0072018-07-16T11:22:51.666-05:00
3841185958136163013096-242ac11e-0001-012vdj7058216970366620136-242ac11e-0001-0120029001919173096-242ac11b-0001-0072018-07-16T11:40:55.535-05:00
4225753010572288070121-242ac119-0001-012vdj7058216970366620136-242ac11e-0001-012592378795417670121-242ac11c-0001-0072019-02-27T16:40:20.145-06:00
42268331554514421092841-242ac119-0001-012vdj7058216970366620136-242ac11e-0001-0128144122141623652841-242ac11c-0001-0072019-02-27T16:31:40.346-06:00
\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "3524 360484783884014056-242ac11e-0001-012 vdj \n", + "3525 5644951932076289560-242ac11e-0001-012 vdj \n", + "3622 4704510086896283160-242ac11e-0001-012 vdj \n", + "3840 8974371275809231336-242ac11e-0001-012 vdj \n", + "3841 185958136163013096-242ac11e-0001-012 vdj \n", + "4225 753010572288070121-242ac119-0001-012 vdj \n", + "4226 8331554514421092841-242ac119-0001-012 vdj \n", + "\n", + " projectUuid \\\n", + "3524 7058216970366620136-242ac11e-0001-012 \n", + "3525 7058216970366620136-242ac11e-0001-012 \n", + "3622 7058216970366620136-242ac11e-0001-012 \n", + "3840 7058216970366620136-242ac11e-0001-012 \n", + "3841 7058216970366620136-242ac11e-0001-012 \n", + "4225 7058216970366620136-242ac11e-0001-012 \n", + "4226 7058216970366620136-242ac11e-0001-012 \n", + "\n", + " jobUuid lastUpdated \n", + "3524 217677121292014056-242ac11b-0001-007 2018-04-17T10:50:14.832-05:00 \n", + "3525 5814903787979009560-242ac11b-0001-007 2018-04-17T13:54:01.922-05:00 \n", + "3622 4916552622299803160-242ac11b-0001-007 2018-05-30T16:16:40.464-05:00 \n", + "3840 8802787332334031336-242ac11b-0001-007 2018-07-16T11:22:51.666-05:00 \n", + "3841 0029001919173096-242ac11b-0001-007 2018-07-16T11:40:55.535-05:00 \n", + "4225 592378795417670121-242ac11c-0001-007 2019-02-27T16:40:20.145-06:00 \n", + "4226 8144122141623652841-242ac11c-0001-007 2019-02-27T16:31:40.346-06:00 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectJob[df_projectJob.projectUuid == '7058216970366620136-242ac11e-0001-012']" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "96e0abf6-2f1a-4fd5-8388-1ff55fcefcc1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/projects/7058216970366620136-242ac11e-0001-012/analyses/2018-07-16-16-21-59-86-my-job-16-jul-2018-11:21:45-am'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job_uuid = '8802787332334031336-242ac11b-0001-007'\n", + "jobs_all_df[jobs_all_df.uuid == job_uuid].iloc[0].archive_path" + ] + }, + { + "cell_type": "markdown", + "id": "05986f61-ab74-4749-aa8d-734b06242b2f", + "metadata": {}, + "source": [ + "## Look at ProjectJObFILE \n", + "- Contains both Project UUID and JOBUUID\n", + "- file-type\n", + "- filename\n", + "- if it is deleted " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "3464cc27-823d-4de8-b0c6-15d7ac733342", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ownerprojectUuidjobUuidfileTypefile_namefile_lengthisDeletedlastUpdated
474031vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0076UTSW33_S42_L001_R1_001.fastq.merged.unique.igb...194102False2025-01-25T09:44:27.029-06:00
474032vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0076UTSW33_S42_L001_R1_001.fastq.merged.unique.igb...4178241False2025-01-25T09:44:27.318-06:00
474033vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0076UTSW33_S42_L001_R1_001.fastq.merged.unique.igb...10699728False2025-01-25T09:44:27.561-06:00
474034vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0076UTSW33_S42_L001_R1_001.fastq.merged.unique.igb...1068987False2025-01-25T09:44:27.827-06:00
474035vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0070vdjserver_germline.airr.json3456292False2025-01-25T09:44:28.085-06:00
\n", + "
" + ], + "text/plain": [ + " owner projectUuid \\\n", + "474031 vdj 5456400192359305711-242ac118-0001-012 \n", + "474032 vdj 5456400192359305711-242ac118-0001-012 \n", + "474033 vdj 5456400192359305711-242ac118-0001-012 \n", + "474034 vdj 5456400192359305711-242ac118-0001-012 \n", + "474035 vdj 5456400192359305711-242ac118-0001-012 \n", + "\n", + " jobUuid fileType \\\n", + "474031 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 6 \n", + "474032 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 6 \n", + "474033 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 6 \n", + "474034 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 6 \n", + "474035 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 0 \n", + "\n", + " file_name file_length \\\n", + "474031 UTSW33_S42_L001_R1_001.fastq.merged.unique.igb... 194102 \n", + "474032 UTSW33_S42_L001_R1_001.fastq.merged.unique.igb... 4178241 \n", + "474033 UTSW33_S42_L001_R1_001.fastq.merged.unique.igb... 10699728 \n", + "474034 UTSW33_S42_L001_R1_001.fastq.merged.unique.igb... 1068987 \n", + "474035 vdjserver_germline.airr.json 3456292 \n", + "\n", + " isDeleted lastUpdated \n", + "474031 False 2025-01-25T09:44:27.029-06:00 \n", + "474032 False 2025-01-25T09:44:27.318-06:00 \n", + "474033 False 2025-01-25T09:44:27.561-06:00 \n", + "474034 False 2025-01-25T09:44:27.827-06:00 \n", + "474035 False 2025-01-25T09:44:28.085-06:00 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "projectJobFile_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'projectJobFile':\n", + " owner = item.get('owner', None)\n", + " projectUuid = item.get('value', {}).get('projectUuid', None)\n", + " jobUuid = item.get('value', {}).get('jobUuid', None)\n", + " fileType = item.get('value', {}).get('fileType', None)\n", + " file_name = item.get('value', {}).get('name', None)\n", + " length = item.get('value', {}).get('length', None)\n", + " isDeleted = item.get('value', {}).get('isDeleted', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " projectJobFile_list.append({\n", + " 'owner': owner,\n", + " 'projectUuid': projectUuid,\n", + " 'jobUuid': jobUuid,\n", + " 'fileType': fileType,\n", + " 'file_name': file_name,\n", + " 'file_length': length,\n", + " 'isDeleted': isDeleted,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_projectJobFile = pd.DataFrame(projectJobFile_list)\n", + "df_projectJobFile.tail()\n", + "\n", + "# df_projectJobFile.projectUuid.value_counts()\n", + "# df_projectJobFile.jobUuid.value_counts()\n", + "# df_projectJob.projectUuid.value_counts()\n", + "# df_projectJob[df_projectJob.projectUuid.isin(df_projectJobFile.projectUuid)].projectUuid.value_counts()\n", + "# df_projectJobFile.isDeleted.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e5eb4405-d940-4022-8910-9a50af60573a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "owner\n", + "vdj 473549\n", + "schristley 18\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Keeping only projectfiles if the are owned by vdj and schristley\n", + "df_projectJobFile = df_projectJobFile[df_projectJobFile.owner.isin(['vdj', 'schristley'])]\n", + "df_projectJobFile.owner.value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "08d217e1-c529-465d-9c5b-daff664aca86", + "metadata": {}, + "source": [ + "## Look at Subject Metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "id": "2eba901e-f2b8-445c-8fd0-d0c1dfe787d6", + "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", + " \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", + "
uuidownerprojectUuidlastUpdated
06360709198094930406-242ac11c-0001-012vdj8241732730493932006-242ac11f-0001-0122016-11-22T13:31:42.578-06:00
16360709202389897702-242ac11c-0001-012vdj8241732730493932006-242ac11f-0001-0122016-11-22T13:31:41.522-06:00
26360923946459730406-242ac11c-0001-012vdj8241732730493932006-242ac11f-0001-0122016-11-22T13:31:40.441-06:00
36361482292208210406-242ac11c-0001-012vdj8241732730493932006-242ac11f-0001-0122017-01-03T13:48:30.111-06:00
41158355700316040730-242ac11c-0001-012demo2016859535379303755290-242ac114-0001-0122018-05-03T10:24:22.094-05:00
...............
54193547623744646082065-242ac118-0001-012vdj-test15139818080333393425-242ac118-0001-0122024-05-21T13:41:59.791-05:00
54204406571231448928751-242ac118-0001-012loubna_boutkhil2377764881775717905-242ac118-0001-0122024-06-01T04:20:51.010-05:00
54214487101868248928751-242ac118-0001-012loubna_boutkhil2377764881775717905-242ac118-0001-0122024-06-01T04:20:52.885-05:00
54224554747603160928751-242ac118-0001-012loubna_boutkhil2377764881775717905-242ac118-0001-0122024-06-01T04:20:54.461-05:00
54234621276646575968751-242ac118-0001-012loubna_boutkhil2377764881775717905-242ac118-0001-0122024-06-01T04:20:56.010-05:00
\n", + "

5424 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "0 6360709198094930406-242ac11c-0001-012 vdj \n", + "1 6360709202389897702-242ac11c-0001-012 vdj \n", + "2 6360923946459730406-242ac11c-0001-012 vdj \n", + "3 6361482292208210406-242ac11c-0001-012 vdj \n", + "4 1158355700316040730-242ac11c-0001-012 demo2016 \n", + "... ... ... \n", + "5419 3547623744646082065-242ac118-0001-012 vdj-test1 \n", + "5420 4406571231448928751-242ac118-0001-012 loubna_boutkhil \n", + "5421 4487101868248928751-242ac118-0001-012 loubna_boutkhil \n", + "5422 4554747603160928751-242ac118-0001-012 loubna_boutkhil \n", + "5423 4621276646575968751-242ac118-0001-012 loubna_boutkhil \n", + "\n", + " projectUuid lastUpdated \n", + "0 8241732730493932006-242ac11f-0001-012 2016-11-22T13:31:42.578-06:00 \n", + "1 8241732730493932006-242ac11f-0001-012 2016-11-22T13:31:41.522-06:00 \n", + "2 8241732730493932006-242ac11f-0001-012 2016-11-22T13:31:40.441-06:00 \n", + "3 8241732730493932006-242ac11f-0001-012 2017-01-03T13:48:30.111-06:00 \n", + "4 859535379303755290-242ac114-0001-012 2018-05-03T10:24:22.094-05:00 \n", + "... ... ... \n", + "5419 5139818080333393425-242ac118-0001-012 2024-05-21T13:41:59.791-05:00 \n", + "5420 2377764881775717905-242ac118-0001-012 2024-06-01T04:20:51.010-05:00 \n", + "5421 2377764881775717905-242ac118-0001-012 2024-06-01T04:20:52.885-05:00 \n", + "5422 2377764881775717905-242ac118-0001-012 2024-06-01T04:20:54.461-05:00 \n", + "5423 2377764881775717905-242ac118-0001-012 2024-06-01T04:20:56.010-05:00 \n", + "\n", + "[5424 rows x 4 columns]" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "subject_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'subject':\n", + " # json_print(item)\n", + " uuid = item.get('uuid', None)\n", + " owner = item.get('owner', None)\n", + " associationIds = item.get('associationIds', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " if associationIds:\n", + " associationIds_1 = associationIds[0] \n", + " else:\n", + " associationIds_1 = None\n", + " subject_list.append({\n", + " 'uuid': uuid,\n", + " 'owner': owner,\n", + " 'projectUuid': associationIds_1,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_subjects = pd.DataFrame(subject_list)\n", + "df_subjects" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "id": "da31b42c-05f9-468c-812f-4919a85c2ddf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "382" + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_subjects['projectUuid'].nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "id": "6e85c0fe-8235-4f25-9a75-505db5b3834c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "owner projectUuid \n", + "vdj 1346418785674727916-242ac117-0001-012 1165\n", + " 7405514755678596630-242ac113-0001-012 786\n", + " 4465604624794643990-242ac116-0001-012 350\n", + " 8006422057040941546-242ac116-0001-012 299\n", + " 1443107289580563990-242ac116-0001-012 170\n", + " ... \n", + "vdj-test1 7808900147506376210-242ac117-0001-012 1\n", + " 7844248211544805871-242ac118-0001-012 1\n", + "za708 3747020520399891990-242ac116-0001-012 1\n", + " 3868686842054635030-242ac116-0001-012 1\n", + " 8428968221950939626-242ac116-0001-012 1\n", + "Name: count, Length: 387, dtype: int64" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_subjects[['owner', 'projectUuid']].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18ec3752-a531-416a-b793-b87933832185", + "metadata": {}, + "outputs": [], + "source": [ + "meta" + ] + }, + { + "cell_type": "markdown", + "id": "4b5fcb01-1897-40f2-aa10-e4aa83ce7bf0", + "metadata": {}, + "source": [ + "## Look at Private Project data" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c494b780-3688-4b9c-91f3-be04256069b2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"_id\": {\n", + " \"$oid\": \"5e976b3352faff00010d8956\"\n", + " },\n", + " \"uuid\": \"4727197546809323030-242ac116-0001-012\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [],\n", + " \"lastUpdated\": \"2022-12-18T01:14:56.568-06:00\",\n", + " \"name\": \"private_project\",\n", + " \"value\": {\n", + " \"study_id\": null,\n", + " \"study_title\": \"My project\",\n", + " \"study_type\": null,\n", + " \"study_description\": \"A test project\",\n", + " \"inclusion_exclusion_criteria\": null,\n", + " \"grants\": null,\n", + " \"collected_by\": null,\n", + " \"lab_name\": \"My lab\",\n", + " \"lab_address\": \"UT Southwestern Medical Center\",\n", + " \"submitted_by\": null,\n", + " \"pub_ids\": null,\n", + " \"keywords_study\": null,\n", + " \"owner\": \"schristley\"\n", + " },\n", + " \"created\": \"2020-04-15T15:14:43.150-05:00\",\n", + " \"owner\": \"vdj\",\n", + " \"tenantId\": \"vdjserver.org\"\n", + "}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: []\n", + "Index: []" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "private_project_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'private_project':\n", + " json_print(item)\n", + " break\n", + " uuid = item.get('uuid', None)\n", + " study_title = item.get('value', {}).get('study_title', None)\n", + " job_owner = item.get('value', {}).get('owner', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " private_project_list.append({\n", + " 'uuid': uuid,\n", + " 'job_owner': job_owner,\n", + " 'study_title': study_title,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_private_project = pd.DataFrame(private_project_list)\n", + "df_private_project" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "de177b95-a028-4ca1-9870-56cb2c8ff915", + "metadata": {}, + "outputs": [], + "source": [ + "# df_private_project.to_csv('private_projects.csv', index = False)" + ] + }, + { + "cell_type": "markdown", + "id": "3675c13c-9cb2-42e0-b114-8b57759adbd7", + "metadata": {}, + "source": [ + "## Look at Public Project Data" + ] + }, + { + "cell_type": "code", + "execution_count": 160, + "id": "af15fcd7-547e-427d-addd-b01a61bfa02a", + "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", + "
uuidstudy_idassociationIdsstudy_titlelastUpdated
04505707319090933270-242ac113-0001-0124505707319090933270-242ac113-0001-012[]Outcome and Immune Correlates of a Phase II Tr...2022-12-18T01:14:48.159-06:00
12034535426280329706-242ac113-0001-012PRJNA300878[]Individual heritable differences result in uni...2022-12-18T01:14:48.306-06:00
25350423756993719830-242ac113-0001-0121371444213709729305-242ac11c-0001-012[]T cell receptor repertoires after adoptive tra...2022-12-18T01:14:48.028-06:00
31570295022599213546-242ac113-0001-0123276777473314001386-242ac116-0001-012[]Biophysicochemical Motifs in T cell Receptor S...2022-12-18T01:14:47.900-06:00
454655627105407466-242ac113-0001-012PRJNA248475[]B cells populating the multiple sclerosis brai...2022-12-18T01:14:48.453-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "0 4505707319090933270-242ac113-0001-012 \n", + "1 2034535426280329706-242ac113-0001-012 \n", + "2 5350423756993719830-242ac113-0001-012 \n", + "3 1570295022599213546-242ac113-0001-012 \n", + "4 54655627105407466-242ac113-0001-012 \n", + "\n", + " study_id associationIds \\\n", + "0 4505707319090933270-242ac113-0001-012 [] \n", + "1 PRJNA300878 [] \n", + "2 1371444213709729305-242ac11c-0001-012 [] \n", + "3 3276777473314001386-242ac116-0001-012 [] \n", + "4 PRJNA248475 [] \n", + "\n", + " study_title \\\n", + "0 Outcome and Immune Correlates of a Phase II Tr... \n", + "1 Individual heritable differences result in uni... \n", + "2 T cell receptor repertoires after adoptive tra... \n", + "3 Biophysicochemical Motifs in T cell Receptor S... \n", + "4 B cells populating the multiple sclerosis brai... \n", + "\n", + " lastUpdated \n", + "0 2022-12-18T01:14:48.159-06:00 \n", + "1 2022-12-18T01:14:48.306-06:00 \n", + "2 2022-12-18T01:14:48.028-06:00 \n", + "3 2022-12-18T01:14:47.900-06:00 \n", + "4 2022-12-18T01:14:48.453-06:00 " + ] + }, + "execution_count": 160, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public_project_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'public_project':\n", + " # json_print(item)\n", + " # break\n", + " uuid = item.get('uuid', None)\n", + " study_id = item.get('value', {}).get('study_id', None)\n", + " study_title = item.get('value', {}).get('study_title', None)\n", + " associationIds = item.get('associationIds', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " public_project_list.append({\n", + " 'uuid': uuid,\n", + " 'study_id': study_id,\n", + " 'associationIds': associationIds,\n", + " 'study_title': study_title,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_public_project = pd.DataFrame(public_project_list)\n", + "df_public_project.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "71cdba7e-cfdd-4c4a-9bd9-19f390592d12", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'_id': {'$oid': '6119d12ad6018000016d697a'}, 'uuid': '1002552565004824085-242ac117-0001-012', 'schemaId': None, 'internalUsername': None, 'associationIds': [], 'lastUpdated': '2022-12-18T01:14:49.952-06:00', 'name': 'public_project', 'value': {'study_id': 'PRJNA624801', 'study_title': 'A Potently Neutralizing Antibody Protects Mice against SARS-CoV-2 Infection', 'study_type': {'id': 'NCIT:C93130', 'label': 'Animal Study'}, 'study_description': 'Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2) is responsible for millions of infections and hundreds of thousands of deaths globally. There are no widely available licensed therapeutics against SARS-CoV-2, highlighting an urgent need for effective interventions. The virus enters host cells through binding of a receptor-binding domain within its trimeric spike glycoprotein to human angiotensin-converting enzyme 2. In this article, we describe the generation and characterization of a panel of murine mAbs directed against the receptor-binding domain. One mAb, 2B04, neutralized wild-type SARS-CoV-2 in vitro with remarkable potency (half-maximal inhibitory concentration of <2 ng/ml). In a murine model of SARS-CoV-2 infection, 2B04 protected challenged animals from weight loss, reduced lung viral load, and blocked systemic dissemination. Thus, 2B04 is a promising candidate for an effective antiviral that can be used to prevent SARS-CoV-2 infection.', 'inclusion_exclusion_criteria': ' ', 'lab_name': 'Ali H. Ellebedy', 'lab_address': 'Department of Pathology and Immunology, St. Louis, MO, 63110; USA', 'submitted_by': 'Scott Christley, scott.christley@utsouthwestern.edu, UT Southwestern Medical Center', 'collected_by': 'Wafaa B. Alsoussi, Department of Pathology and Immunology, St. Louis, MO, 63110; USA', 'grants': 'Work in Ellebedy laboratory was supported by NIAID R21 AI139813, U01 AI141990, and NIAID Centers of Excellence for Influenza Research and Surveillance (CEIRS) contract HHSN272201400008C. Work in the Diamond laboratory was partially supported by was supported by NIH contracts and grants 75N93019C00062 and R01 AI127828 and the Defense Advanced Research Project Agency HR001117S0019. Work in the Fremont laboratory was partially supported by NIAID contracts HHSN272201700060C and 75N93019C00062. Work in the Kleinstein laboratory was partially supported by NIH R01AI104739. Work in the Krammer laboratory was partially supported by the NIAID CEIRS contract HHSN272201400008C and Collaborative Influenza Vaccine Innovation Centers contract 75N93019C00051. The Genome Technology Access Center in the Department of Genetics at Washington University School of Medicine is partially supported by NCI Cancer Center Support Grant #P30 CA91842 to the Siteman Cancer Center and by ICTS/CTSA Grant# UL1 TR000448 from the NCRR. JST was supported by NIAID 5T32CA009547. JBC was supported by a Helen Hay Whitney postdoctoral fellowship.', 'pub_ids': 'PMID: 32591393', 'keywords_study': ['contains_ig', 'contains_paired_chain'], 'showArchivedJobs': False, 'vdjserver_keywords': ['is_10x_genomics', 'contains_single_cell'], 'owner': 'scott_public', 'adc_publish_date': '2021-08-26T22:48:15.506Z', 'adc_update_date': '2022-12-16T20:41:47.563Z'}, 'created': '2021-08-15T21:44:58.300-05:00', 'owner': 'vdj', 'tenantId': 'vdjserver.org'}\n" + ] + } + ], + "source": [ + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if '1002552565004824085-242ac117-0001-012' == item.get('uuid', None):\n", + " print(item)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "730814f0-28e3-4c30-97c4-9dff4cc3b655", + "metadata": {}, + "outputs": [], + "source": [ + "# col_list = ['uuid', 'owner', 'associationIds', 'created', 'lastUpdated', 'name', 'value']\n", + "# obj_list = {}\n", + "# project_uuid = '1874419312501190165-242ac117-0001-012'\n", + "# data_dir = 'Metadata_public_project/' \n", + "\n", + "# # Open a file in write mode\n", + "# with open(f'{data_dir}{project_uuid}_metadata.json', 'w') as file:\n", + "# for item in jsonarray:\n", + "# item_type = item['name']\n", + "# # json_print(item)\n", + "# if project_uuid in item.get('uuid', None) and item_type == 'public_project':\n", + "# obj = {}\n", + "# for col_name in col_list:\n", + "# obj[col_name] = item.get(col_name, None)\n", + "# # print(obj)\n", + "# json.dump(obj, file)\n", + "# file.write('\\n') # Add a newline after each JSON object\n", + " \n", + "# if project_uuid in item.get('associationIds', None):\n", + "# # json_print(item)\n", + "# obj = {}\n", + "# for col_name in col_list:\n", + "# obj[col_name] = item.get(col_name, None)\n", + "# # print(obj)\n", + "# json.dump(obj, file)\n", + "# file.write('\\n') # Add a newline after each JSON object\n", + " \n", + " \n", + " \n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "46d499c8-0cd4-4017-9db2-567d4f83528d", + "metadata": {}, + "source": [ + "## Look for ProjectFiles using ProjectUUID" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "678a29de-b89e-4cb6-bbca-1b73892b2e15", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
00001395955349445-5056a550b8-0001-012NoneNonevdjauthNoneNone2014-03-27T16:22:29.444-05:00
10001396029083309-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395939852441-5056a550b8-0001-002Nonevdjauthuploadedgitprep-latest.zipapplication/zip2014-03-28T12:51:23.309-05:00
20001396029805022-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395956517022-5056a550b8-0001-002NonevdjauthuploadedInduction-28.zipapplication/zip2014-03-28T13:03:25.022-05:00
30001396030144907-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396030144691-5056a550b8-0001-002Nonevdjauthuploadedtest10.txttext/plain2014-03-28T13:09:04.907-05:00
40001396039988083-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396039987794-5056a550b8-0001-002Nonevdjauthuploadedtest11.txttext/plain2014-03-28T15:53:08.083-05:00
\n", + "
" + ], + "text/plain": [ + " uuid projectUuid \\\n", + "0 0001395955349445-5056a550b8-0001-012 \n", + "1 0001396029083309-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "2 0001396029805022-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "3 0001396030144907-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "4 0001396039988083-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "\n", + " associationIds_1 associationIds_2 owner task_type \\\n", + "0 None None vdjauth \n", + "1 0001395939852441-5056a550b8-0001-002 None vdjauth uploaded \n", + "2 0001395956517022-5056a550b8-0001-002 None vdjauth uploaded \n", + "3 0001396030144691-5056a550b8-0001-002 None vdjauth uploaded \n", + "4 0001396039987794-5056a550b8-0001-002 None vdjauth uploaded \n", + "\n", + " file_name mimeType last_updated \n", + "0 None None 2014-03-27T16:22:29.444-05:00 \n", + "1 gitprep-latest.zip application/zip 2014-03-28T12:51:23.309-05:00 \n", + "2 Induction-28.zip application/zip 2014-03-28T13:03:25.022-05:00 \n", + "3 test10.txt text/plain 2014-03-28T13:09:04.907-05:00 \n", + "4 test11.txt text/plain 2014-03-28T15:53:08.083-05:00 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectFiles.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "e63abc4a-d711-42f9-8caf-1a572cc82738", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1002552565004824085-242ac117-0001-012\n", + "1874419312501190165-242ac117-0001-012\n", + "7800490195324703211-242ac117-0001-012\n", + "8808030969725784556-242ac117-0001-012\n", + "9007962728031055380-242ac117-0001-012\n", + "5558760323211783700-242ac117-0001-012\n", + "5193259980618657300-242ac117-0001-012\n", + "4764775561909899756-242ac118-0001-012\n", + "8\n" + ] + } + ], + "source": [ + "data_df_list = []\n", + "for project_uuid in df_public_project.uuid:\n", + " data = df_projectFiles[df_projectFiles.associationIds_2 == project_uuid]\n", + " if not data.empty:\n", + " data_df_list.append(data)\n", + " print(project_uuid)\n", + " # # print(data)\n", + " # break\n", + "print(len(data_df_list))\n", + "# data_df_list" + ] + }, + { + "cell_type": "markdown", + "id": "a2c6ffff-a1f1-4ee6-b514-9d28e641753d", + "metadata": {}, + "source": [ + "## Find total number of Verified user" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "5fff6b73-d9b2-4f0f-a237-c1b59aeb6c59", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Number of user is : 1881\n", + "Total Number of verified user is : 1409\n" + ] + } + ], + "source": [ + "# Replace None (or NaN) with an empty string in the 'username' column\n", + "df_userVerification['username'] = df_userVerification['username'].fillna('not_available')\n", + "filtered_df_userVerification = df_userVerification[(~df_userVerification['username'].str.contains('test', case=False)) & (df_userVerification['isVerified'] == True)]\n", + "verified_usernames = filtered_df_userVerification.username.tolist()\n", + "print(f'Total Number of user is : {df_userVerification.username.count()}')\n", + "\n", + "print(f'Total Number of verified user is : {filtered_df_userVerification.username.count()}')\n", + "# print(f'The usernames are: {sorted(verified_usernames)}')" + ] + }, + { + "cell_type": "markdown", + "id": "771e8e4e-bac1-40a5-8dfb-5fc99e8e357d", + "metadata": {}, + "source": [ + "## Check if These Verified Users has any Project" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ccb47021-4cbc-4410-94a4-88e0ac50db55", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Number of verified user that has project : 999\n", + "Total Number of unique project : 450579\n" + ] + } + ], + "source": [ + "verified_users_with_project = metadata_perms_df[metadata_perms_df.username.isin(verified_usernames)]\n", + "verified_users_with_project.username.value_counts()\n", + "print(f'Total Number of verified user that has project : {verified_users_with_project.username.nunique()}')\n", + "print(f'Total Number of unique project : {verified_users_with_project.uuid.nunique()}')" + ] + }, + { + "cell_type": "markdown", + "id": "45876693-1652-4d19-917e-dd7b49aec5df", + "metadata": {}, + "source": [ + "## Check if These Verified Users has Uploaded any Data" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "2c6573d7-6bf1-41ae-b3c7-63bdd6fc4407", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Number of projects with file uploads: 1247\n", + "Total Number of unique users with file uploads: 572\n" + ] + } + ], + "source": [ + "file_upload_with_verified_users = df_projectFiles[df_projectFiles.projectUuid.isin(verified_users_with_project.uuid)]\n", + "file_upload_with_verified_users.owner.value_counts()\n", + "project_uuid_with_file_uploads = file_upload_with_verified_users.projectUuid.unique().tolist()\n", + "print(f'Total Number of projects with file uploads: {file_upload_with_verified_users.projectUuid.nunique()}')\n", + "## Check how many users have uploaded any files\n", + "verified_user_with_file_upload = verified_users_with_project[verified_users_with_project.uuid.isin(project_uuid_with_file_uploads)]\n", + "print(f'Total Number of unique users with file uploads: {verified_user_with_file_upload['username'].nunique()}')" + ] + }, + { + "cell_type": "markdown", + "id": "2d561bf5-3e89-4fca-bff1-57b44740dcca", + "metadata": {}, + "source": [ + "## Check Users with projectFiles if They Ran any Jobs" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "30d8ac4c-78a4-4368-848f-2e637768592f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Number of Projects that Ran Jobs: 787\n", + "Total Number of users that Ran Jobs: 347\n" + ] + } + ], + "source": [ + "job_files_with_verified_users = df_projectJobFile[df_projectJobFile.projectUuid.isin(verified_users_with_project.uuid)]\n", + "users_with_project_job_files = verified_users_with_project[verified_users_with_project.uuid.isin(job_files_with_verified_users.projectUuid)]\n", + "\n", + "print(f'Total Number of Projects that Ran Jobs: {job_files_with_verified_users['projectUuid'].nunique()}')\n", + "print(f'Total Number of users that Ran Jobs: {users_with_project_job_files['username'].nunique()}')\n", + "# job_files_with_verified_users\n", + "# users_with_project_job_files" + ] + }, + { + "cell_type": "markdown", + "id": "97c61552-30ec-47fe-a7a2-d622376064fc", + "metadata": {}, + "source": [ + "## Number of Unique Users Each Year" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "ddfc69f6-92fa-439b-9492-2f423a9965b5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHpCAYAAACY8RRtAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAX0hJREFUeJzt3XlcVPX+x/H3ACOL4QIaiLngvuaSS2kulWCW5lJZ4drqTcvc0sxuopWmbZZmi7mVl9uq3ereVEzTyhb3LTN3zTRNCRQURvj+/ugyPydQ5yAww7mv5+PBQ+c733PO5z1ngA9nzpxxGGOMAAAAABsI8HUBAAAAQGGhuQUAAIBt0NwCAADANmhuAQAAYBs0twAAALANmlsAAADYBs0tAAAAbIPmFgAAALZBcwsAAADboLkFitC8efPkcDgUEhKi/fv357m/Y8eOatSokQ8qk7788ks5HA59+OGHPtm+Vfv27dPNN9+siIgIORwODRs27LxzHQ6HHnrooXzv+/DDD+VwOPTll18WqAaHw6F58+ZZXrY4FVV+X+nYsaMcDke+X1u3bi3SbQ8cOPC823Y4HEW23erVq6tr166Wl/vggw/kcDg0ffr0fO9/4IEHFBwcrM2bN19qiYDfCvJ1AcD/gszMTD3xxBN65513fF1KiTV8+HB9//33mjNnjqKjo1WpUqVir6FSpUr69ttvVbNmzWLf9v+6GjVq6B//+Eee8eLYF6GhoVq+fHmRb6cw3H777UpISNBjjz2mLl26qFatWu77li5dqlmzZmny5Mm68sorfVglULRoboFicOONNyopKUmjRo1SkyZNfF1OsTp9+rRCQkIu+SjX1q1b1apVK/Xo0aNwCiuA4OBgXX311T7bfkmVkZGhsLCwS1pHaGhokT32p0+fVmho6HnvDwgIKFH7fcaMGfryyy81cOBArVq1SgEBAUpLS9N9992na665Ro8++mix1FEY+x0oCE5LAIrB6NGjFRkZqTFjxlxw3oVe9nY4HEpMTHTfTkxMlMPh0ObNm3X77berbNmyioiI0IgRI3T27Fnt2LFDN954o8LDw1W9enVNnTo1322eOXNGI0aMUHR0tEJDQ9WhQwdt2LAhz7y1a9fqlltuUUREhEJCQtSsWTO9//77HnNyT8NYunSp7rnnHlWsWFFhYWHKzMw8b+YDBw6ob9++uvzyyxUcHKz69evrhRdeUE5OjqT/P31i165d+vzzz90vB+/bt++Cj6UVuaeHrFmzRu3atVNYWJhq1KihZ5991l2HdP798+9//1tNmzZVcHCwYmNj9fzzz7v3z8WWlfLuW0nauXOnEhISPB6XV199tdAyn2vDhg3q2rWre1sxMTG6+eab9csvv7jnGGM0c+ZMNW3aVKGhoSpfvrxuu+027dmzx2NduY/lqlWr1KZNG4WFhemee+6RJC1fvlwdO3ZUZGSkQkNDVbVqVd16663KyMi45AxnzpzR2LFjFRsbq1KlSqly5coaMmSI/vjjD495uS/3L1y4UM2aNVNISIgmTJhQKNsfOXKkmjZt6v5evOaaa/Svf/0rz9ycnBxNnz7d/ViWK1dOV199tT755JM8cxcvXqzmzZsrNDRU9erV05w5cy5aS/ny5TV79mx98803eumllyT9+crH8ePHNX/+fAUGBiotLU2jRo3yeLyGDRum9PR0j3W9+uqrat++vS6//HKVLl1ajRs31tSpU+VyuTzmXWi/A8WNI7dAMQgPD9cTTzyhRx55RMuXL9f1119faOvu3bu3+vbtq0GDBik5Odn9i2fZsmUaPHiwRo0apaSkJI0ZM0a1atVSr169PJZ//PHH1bx5c7311ltKTU1VYmKiOnbsqA0bNqhGjRqSpBUrVujGG29U69at9frrr6ts2bJ69913dccddygjI0MDBw70WOc999yjm2++We+8847S09PldDrzrf3YsWNq06aNsrKy9NRTT6l69er67LPPNGrUKO3evVszZ85U8+bN9e2336pnz56qWbOmnn/+eUkq9NMSjhw5oj59+mjkyJEaP368Fi1apLFjxyomJkb9+/c/73JffPGFunfvrmuuuUbvvvuusrOzNXXqVP32228FruXHH39UmzZtVLVqVb3wwguKjo7WkiVLNHToUP3+++8aP358gdf9V+np6YqLi1NsbKxeffVVRUVF6ciRI1qxYoVOnjzpnjdo0CDNmzdPQ4cO1ZQpU3TixAlNnDhRbdq00aZNmxQVFeWee/jwYfXt21ejR4/WpEmTFBAQ4D5nul27dpozZ47KlSunQ4cOafHixcrKyvLqCN/Zs2c9bgcEBCggIEDGGPXo0UNffPGFxo4dq3bt2mnz5s0aP368vv32W3377bcKDg52L7d+/Xpt375dTzzxhGJjY1W6dGnL2z53+9Kfpx6dOHFCo0aNUuXKlZWVlaVly5apV69emjt3rsdzaODAgVqwYIHuvfdeTZw4UaVKldL69evz/MG2adMmjRw5Uo899piioqL01ltv6d5771WtWrXUvn37C9Z74403atCgQXriiScUEBCgOXPmaMaMGapdu7YyMjLUoUMH/fLLL3r88cd15ZVXatu2bXryySe1ZcsWLVu2zP2H2e7du5WQkOBugjdt2qRnnnlGP/30U55GO7/9DviEAVBk5s6daySZNWvWmMzMTFOjRg3TokULk5OTY4wxpkOHDqZhw4bu+Xv37jWSzNy5c/OsS5IZP368+/b48eONJPPCCy94zGvatKmRZBYuXOgec7lcpmLFiqZXr17usRUrVhhJpnnz5u56jDFm3759xul0mvvuu889Vq9ePdOsWTPjcrk8ttW1a1dTqVIlk52d7ZG3f//+Xj0+jz32mJFkvv/+e4/xBx980DgcDrNjxw73WLVq1czNN9/s1XolmSFDhuR73wcffGAkmRUrVrjHOnTokG8dDRo0MJ07d3bfzm//tG7d2sTExJjTp0+7x9LS0kxERIQ590eslX3buXNnc8UVV5jU1FSPeQ899JAJCQkxJ06cuFB8S/nXrl1rJJmPP/74vOv79ttv832uHTx40ISGhprRo0e7x3Ifyy+++MJj7ocffmgkmY0bN16w9vzkrvOvX3369DHGGLN48WIjyUydOtVjuffee89IMm+++aZ7rFq1aiYwMNDjuXUhAwYMyHfbkswNN9xw3uXOnj1rXC6Xuffee02zZs3c46tWrTKSzLhx4y643WrVqpmQkBCzf/9+99jp06dNRESEGTRokFe1nzx50tSoUcNIMp06dXJ/n0+ePNkEBASYNWvWeMzP3Uf/+c9/8l1fdna2cblc5u233zaBgYEez8Pz7XfAF/izCigmpUqV0tNPP621a9fmeTn/Uvz1HdX169eXw+FQly5d3GNBQUGqVatWvldsSEhI8Hj5vFq1amrTpo1WrFghSdq1a5d++ukn9enTR9KfR7Byv2666SYdPnxYO3bs8Fjnrbfe6lXty5cvV4MGDdSqVSuP8YEDB8oYU6xv4omOjs5Tx5VXXpnvY5YrPT1da9asUa9evRQSEuIeDw8PV7du3QpUx5kzZ/TFF1+oZ8+eCgsLy/N4nzlzRt99912B1p2fWrVqqXz58hozZoxef/11/fjjj3nmfPbZZ3I4HOrbt69HPdHR0WrSpEmeKy+UL18+z6sTTZs2ValSpfTAAw9o/vz5eU5nuJiaNWtqzZo1Hl9PPfWUJLmfJ399BeH2229X6dKl9cUXX3iMX3nllapTp47X2w4NDc2z7TVr1mjmzJke8z744AO1bdtWl112mYKCguR0OjV79mxt377dPefzzz+XJA0ZMuSi223atKmqVq3qvh0SEqI6depc8Dl5rssuu0yjR4+WJE2YMMH9ff7ZZ5+pUaNGatq0qcf+7Ny5c54raWzYsEG33HKLIiMjFRgYKKfTqf79+ys7O1s///yzx/by2++AL9DcAsXozjvvVPPmzTVu3Lg856wVVEREhMftUqVKKSwszKPZyh0/c+ZMnuWjo6PzHTt+/LgkuV9eHzVqlJxOp8fX4MGDJUm///67x/LenjJw/PjxfOfGxMS47y+IwMBAZWdn53tf7svLfz1VIjIyMs/c4OBgnT59+rzbSUlJUU5Oznkfw4I4fvy4zp49q+nTp+d5vG+66SZJeR/vv7KSv2zZslq5cqWaNm2qxx9/XA0bNlRMTIzGjx/vfo7+9ttvMsYoKioqT03fffedV/u/Zs2aWrZsmS6//HINGTJENWvWVM2aNfXyyy979biEhISoRYsWHl+xsbHuxywoKEgVK1b0WMbhcHg8ly9U34UEBATk2XaLFi08GuSFCxeqd+/eqly5shYsWKBvv/1Wa9as0T333OPxfXfs2DEFBgZ69fwoyHMyv/nSn9//uX777Tdt3rw5z74MDw+XMca9Pw8cOKB27drp0KFDevnll/XVV19pzZo17nO//1qHL65gAuSHc26BYuRwODRlyhTFxcXpzTffzHN/bkP61zdgFbTJ88aRI0fyHcv9xVqhQgVJ0tixY/Ocr5urbt26Hre9vTJCZGSkDh8+nGf8119/9di2VVFRUTp06FC+9+WOn3uOaEGVL19eDofjvI/hubzdt+XLl1dgYKD69et33qN7uU3d+VjN37hxY7377rsyxmjz5s2aN2+eJk6cqNDQUD322GOqUKGCHA6HvvrqK49zV3P9dex8+79du3Zq166dsrOztXbtWk2fPl3Dhg1TVFSU7rzzzgtmupDIyEidPXtWx44d82hwjTE6cuSIWrZs6VV9l2LBggWKjY3Ve++957H+v+7vihUrKjs7W0eOHPFZM1ihQgWFhoae981pud93H3/8sdLT07Vw4UJVq1bNff/GjRvzXa4or/sLWMGRW6CYderUSXFxcZo4caJOnTrlcV9UVJRCQkLyXGA9v3dcF5Z//vOfMsa4b+/fv1+rV69Wx44dJf3ZuNauXVubNm3K9+hVixYtFB4eXqBt33DDDfrxxx+1fv16j/G3335bDodD1113XYHW26lTJ61YsULHjh3zGDfG6IMPPlD16tU9rv9ZUKVLl1arVq20cOFCj6NzJ0+e1Keffuox19t9GxYWpuuuu04bNmzQlVdeme/jnd8RvXMVNL/D4VCTJk300ksvqVy5cu790rVrVxljdOjQoXzrady48cUfrHMEBgaqdevW7iOAf93/Vt1www2S/mwwz/XRRx8pPT3dfX9RcjgcKlWqlEeDd+TIkTz7N/d0oddee63Iazqfrl27avfu3YqMjMx3f1avXl3S/zer5/7xYozRrFmzfFE24DWO3AI+MGXKFF111VU6evSoGjZs6B7PPa9xzpw5qlmzppo0aaIffvhBSUlJRVbL0aNH1bNnT91///1KTU3V+PHjFRISorFjx7rnvPHGG+rSpYs6d+6sgQMHqnLlyjpx4oS2b9+u9evX64MPPijQtocPH663335bN998syZOnKhq1arp3//+t2bOnKkHH3zQ0nmR53ryySf16aefqnXr1nrsscdUu3ZtHTlyRLNmzdKaNWsK9Zznp556SjfeeKPi4uI0cuRIZWdna8qUKSpdurROnDjhnmdl37788su69tpr1a5dOz344IOqXr26Tp48qV27dunTTz+96LnIVvJ/9tlnmjlzpnr06KEaNWrIGKOFCxfqjz/+UFxcnCSpbdu2euCBB3T33Xdr7dq1at++vUqXLq3Dhw/r66+/VuPGjfXggw9esKbXX39dy5cv180336yqVavqzJkz7iOHnTp18vrxzk9cXJw6d+6sMWPGKC0tTW3btnVfLaFZs2bq16/fJa0/JyfnvOc5N2vWTMHBwe7Liw0ePFi33XabDh48qKeeekqVKlXSzp073fPbtWunfv366emnn9Zvv/2mrl27Kjg4WBs2bFBYWJgefvjhS6rVG8OGDdNHH32k9u3ba/jw4bryyiuVk5OjAwcOaOnSpRo5cqRat26tuLg4lSpVSnfddZdGjx6tM2fO6LXXXlNKSkqR1whcEh+9kQ34n3Du1RL+KiEhwUjyuFqCMcakpqaa++67z0RFRZnSpUubbt26mX379p33agnHjh3zWH7AgAGmdOnSebb31ysz5F4t4Z133jFDhw41FStWNMHBwaZdu3Zm7dq1eZbftGmT6d27t7n88suN0+k00dHR5vrrrzevv/66V3nPZ//+/SYhIcFERkYap9Np6tata5577jn3FRhyWblagjHG7Ny50/Tt29dUqlTJBAUFmXLlypn4+Ph8383918cm14ABA0y1atXct893xYNPPvnEXHnllaZUqVKmatWq5tlnn3Xvn3N5u29zt3XPPfeYypUrG6fTaSpWrGjatGljnn766ULN/9NPP5m77rrL1KxZ04SGhpqyZcuaVq1amXnz5uVZ55w5c0zr1q1N6dKlTWhoqKlZs6bp37+/x/PlfI/lt99+a3r27GmqVatmgoODTWRkpOnQoYP55JNPLprlfOs81+nTp82YMWNMtWrVjNPpNJUqVTIPPvigSUlJ8Zhn9Xl0oaslSDI7d+50z3322WdN9erVTXBwsKlfv76ZNWtWvs+D7Oxs89JLL5lGjRqZUqVKmbJly5prrrnGfPrppxets0OHDqZDhw5e13++78lTp06ZJ554wtStW9ddQ+PGjc3w4cPNkSNH3PM+/fRT06RJExMSEmIqV65sHn30UfP555/ne8WRi+0joLg4jDnn9UgAQKFITEzUhAkTxI9YAChenHMLAAAA26C5BQAAgG1wWgIAAABsgyO3AAAAsA2aWwAAANgGzS0AAABsgw9x0J8X6P71118VHh7OxwcCAAD4IWOMTp48qZiYGAUEnP/4LM2t/vwc+ypVqvi6DAAAAFzEwYMHdcUVV5z3fppbSeHh4ZL+fLDKlClTZNtxuVxaunSp4uPj5XQ6i2w7xcFOWSTy+DM7ZZHI48/slEUijz+zUxap+PKkpaWpSpUq7r7tfHza3K5atUrPPfec1q1bp8OHD2vRokXq0aOHx5zt27drzJgxWrlypXJyctSwYUO9//77qlq1qiQpMzNTo0aN0j//+U+dPn1aN9xwg2bOnHnBjv6vck9FKFOmTJE3t2FhYSpTpkyJfzLbKYtEHn9mpywSefyZnbJI5PFndsoiFX+ei51C6tM3lKWnp6tJkyaaMWNGvvfv3r1b1157rerVq6cvv/xSmzZt0t///neFhIS4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Sk5Odi93+PBhbd269YLNLQAAAOzJp0duT506pV27drlv7927Vxs3blRERISqVq2qyMhIj/lOp1PR0dGqW7euJKls2bK69957NXLkSEVGRioiIkKjRo1S48aN3VdPAAAAwP8Onza3a9eu1XXXXee+nXse7IABAzRv3jyv1vHSSy8pKChIvXv31unTp3XDDTdo3rx5CgwMLIqSAQAA4Md82tx27NhRVi7WsG/fvjxjISEhmj59uqZPn16IlQEAAKAk8ttzbgEAAACraG4BAABgG357KTAAAHCOxJ7W5gc4pSZ9/ryerJVLZyUusrYdwM9w5BYAAAC2QXMLAAAA26C5BQAAgG3Q3AIAAMA2aG4BAABgGzS3AAAAsA2aWwAAANgGzS0AAABsg+YWAAAAtkFzCwAAANuguQUAAIBt0NwCAADANmhuAQAAYBs0twAAALANmlsAAADYBs0tAAAAbCPI1wUAAFAkEntamx/glJr0kSb3kXJcFrazyNp2ABQpjtwCAADANmhuAQAAYBs0twAAALANmlsAAADYBs0tAAAAbIPmFgAAALZBcwsAAADboLkFAACAbdDcAgAAwDZobgEAAGAbNLcAAACwDZpbAAAA2AbNLQAAAGyD5hYAAAC2QXMLAAAA26C5BQAAgG34tLldtWqVunXrppiYGDkcDn388cfu+1wul8aMGaPGjRurdOnSiomJUf/+/fXrr796rCMzM1MPP/ywKlSooNKlS+uWW27RL7/8UsxJAAAA4A982tymp6erSZMmmjFjRp77MjIytH79ev3973/X+vXrtXDhQv3888+65ZZbPOYNGzZMixYt0rvvvquvv/5ap06dUteuXZWdnV1cMQAAAOAngny58S5duqhLly753le2bFklJyd7jE2fPl2tWrXSgQMHVLVqVaWmpmr27Nl655131KlTJ0nSggULVKVKFS1btkydO3cu8gwAAADwHz5tbq1KTU2Vw+FQuXLlJEnr1q2Ty+VSfHy8e05MTIwaNWqk1atXn7e5zczMVGZmpvt2WlqapD9PhXC5XEVWf+66i3IbxcVOWaQSkCfAaWm6KyDI41/vF/S//H6/bywiTzGy2/cNeTz+9X5B/3tu+vX3TQEUVx5v1+8wxpgircRLDodDixYtUo8ePfK9/8yZM7r22mtVr149LViwQJKUlJSku+++26NRlaT4+HjFxsbqjTfeyHddiYmJmjBhQp7xpKQkhYWFXVoQAAAAFLqMjAwlJCQoNTVVZcqUOe+8EnHk1uVy6c4771ROTo5mzpx50fnGGDkcjvPeP3bsWI0YMcJ9Oy0tTVWqVFF8fPwFH6xL5XK5lJycrLi4ODmd1v5i9Td2yiKVgDyT+1ia7goIUnLjOxS35T05c856v+DYf1gsrOj5/b6xiDzFyG7fN+Tx7zwW+PX3TQEUV57cV9ovxu+bW5fLpd69e2vv3r1avny5R/MZHR2trKwspaSkqHz58u7xo0ePqk2bNuddZ3BwsIKDg/OMO53OYnmSFdd2ioOdskh+nCenYC/1OHPOymllWX/M/l9+u28KiDzFwG7fN+SR5Md5CsAvv28uQVHn8Xbdfn2d29zGdufOnVq2bJkiIyM97r/qqqvkdDo93nh2+PBhbd269YLNLQAAAOzJp0duT506pV27drlv7927Vxs3blRERIRiYmJ02223af369frss8+UnZ2tI0eOSJIiIiJUqlQplS1bVvfee69GjhypyMhIRUREaNSoUWrcuLH76gkAAAD43+HT5nbt2rW67rrr3Ldzz4MdMGCAEhMT9cknn0iSmjZt6rHcihUr1LFjR0nSSy+9pKCgIPXu3VunT5/WDTfcoHnz5ikwMLBYMgAAAMB/+LS57dixoy50sQZvLuQQEhKi6dOna/r06YVZGgAAAEogv39DGQCbSexpbX6AU2rS5893Vlt5E0niImvbAQDYguU3lJ0+fVoZGRnu2/v379e0adO0dOnSQi0MAAAAsMpyc9u9e3e9/fbbkqQ//vhDrVu31gsvvKDu3bvrtddeK/QCAQAAAG9Zbm7Xr1+vdu3aSZI+/PBDRUVFaf/+/Xr77bf1yiuvFHqBAAAAgLcsN7cZGRkKDw+XJC1dulS9evVSQECArr76au3fv7/QCwQAAAC8ZfkNZbVq1dLHH3+snj17asmSJRo+fLikPz8VrCg/uhZFjDf5AAAAG7B85PbJJ5/UqFGjVL16dbVu3VrXXHONpD+P4jZr1qzQCwQAAAC8ZfnI7W233aZrr71Whw8fVpMmTdzjN9xwg3r2tHj0DwAAAChElprbs2fPKiQkRBs3bsxzlLZVq1aFWhgAAABglaXTEoKCglStWjVlZ2cXVT0AAABAgVk+5/aJJ57Q2LFjdeLEiaKoBwAAACgwy+fcvvLKK9q1a5diYmJUrVo1lS5d2uP+9evXF1pxAAAAgBWWm9sePXoUQRkAAADApbPc3I4fP74o6gAAAAAumeVzbiXpjz/+0FtvveVx7u369et16NChQi0OAAAAsMLykdvNmzerU6dOKlu2rPbt26f7779fERERWrRokfbv36+33367KOoEAAAALsrykdsRI0Zo4MCB2rlzp0JCQtzjXbp00apVqwq1OAAAAMAKy83tmjVrNGjQoDzjlStX1pEjRwqlKAAAAKAgLDe3ISEhSktLyzO+Y8cOVaxYsVCKAgAAAArCcnPbvXt3TZw4US6XS5LkcDh04MABPfbYY7r11lsLvUAAAADAW5ab2+eff17Hjh3T5ZdfrtOnT6tDhw6qVauWwsPD9cwzzxRFjQAAAIBXLF8toUyZMvr666+1fPlyrV+/Xjk5OWrevLk6depUFPUBAAAAXrPc3Oa6/vrrdf3110v687q3AAAAgK9ZPi1hypQpeu+999y3e/furcjISFWuXFmbNm0q1OIAAAAAKyw3t2+88YaqVKkiSUpOTlZycrI+//xzdenSRY8++mihFwgAAAB4y/JpCYcPH3Y3t5999pl69+6t+Ph4Va9eXa1bty70AgEAAABvWT5yW758eR08eFCStHjxYvcbyYwxys7OLtzqAAAAAAssH7nt1auXEhISVLt2bR0/flxdunSRJG3cuFG1atUq9AIBAAAAb1lubl966SVVr15dBw8e1NSpU3XZZZdJ+vN0hcGDBxd6gQAAAIC3LDe3TqdTo0aNyjM+bNiwwqgHAAAAKDCvm9u333473/GyZcuqbt26qlevXqEVBQAAABSE183tI488ku/4qVOnlJOTo5tuuklJSUkKDw8vtOIAAAAAK7y+WkJKSkq+X5mZmfruu+904MABTZgwoShrBQAAAC6owB+/mysgIEAtW7bUCy+8oCFDhuj5558vjLoAAABKhsSe1uYHOKUmfaTJfaQcl4XtLLK2nf9Rlq9zez61atXSL7/8UlirAwAAACwrtOZ29+7duuKKKwprdQAAAIBll9zcGmO0fv16jRw5Ut26dbO07KpVq9StWzfFxMTI4XDo448/zrPuxMRExcTEKDQ0VB07dtS2bds85mRmZurhhx9WhQoVVLp0ad1yyy0cQQYAAPgf5XVzW758eUVEROT5Cg4OVsuWLVW5cmUlJiZa2nh6erqaNGmiGTNm5Hv/1KlT9eKLL2rGjBlas2aNoqOjFRcXp5MnT7rnDBs2TIsWLdK7776rr7/+WqdOnVLXrl35KGAAAID/QV6/oWzatGn5jpcpU0b16tVT/fr1LW+8S5cu7o/v/StjjKZNm6Zx48apV69ekqT58+crKipKSUlJGjRokFJTUzV79my988476tSpkyRpwYIFqlKlipYtW6bOnTtbrgkAAAAll9fN7YABA4qyjjz27t2rI0eOKD4+3j0WHBysDh06aPXq1Ro0aJDWrVsnl8vlMScmJkaNGjXS6tWrz9vcZmZmKjMz0307LS1NkuRyueRyWXjXokW56y7KbRRYgNPSdFdAkMe/3i/oh9nl5/tGstf+sVOWAvD755pFfp3Hbs818nj86/2C/FwrasX1c8Db9TuMMaZIK/GSw+HQokWL1KNHD0nS6tWr1bZtWx06dEgxMTHueQ888ID279+vJUuWKCkpSXfffbdHoypJ8fHxio2N1RtvvJHvthITE/O9Jm9SUpLCwsIKLxQAAAAKRUZGhhISEpSamqoyZcqcd94lX+e2qDkcDo/bxpg8Y391sTljx47ViBEj3LfT0tJUpUoVxcfHX/DBulQul0vJycmKi4uT02ntr7wiN7mPpemugCAlN75DcVvekzPnrPcLjv2HxcKKh1/vG8le+8dOWQrA759rFvl1Hrs918jjv3nslKUAiuvnQO4r7Rfjt81tdHS0JOnIkSOqVKmSe/zo0aOKiopyz8nKylJKSorKly/vMadNmzbnXXdwcLCCg4PzjDudzmL54Vxc27HEykWkz+HMOSunlWX9Lfdf+OW+key1f+yU5RL47XOtgPwyj92ea+SR5Kd57JTlEhT1zwFv111o17ktbLGxsYqOjlZycrJ7LCsrSytXrnQ3rldddZWcTqfHnMOHD2vr1q0XbG4BAABgTwU+crtr1y7t3r1b7du3V2hoqFenC/zVqVOntGvXLvftvXv3auPGjYqIiFDVqlU1bNgwTZo0SbVr11bt2rU1adIkhYWFKSEhQZJUtmxZ3XvvvRo5cqQiIyMVERGhUaNGqXHjxu6rJwAAAOB/h+Xm9vjx47rjjju0fPlyORwO7dy5UzVq1NB9992ncuXK6YUXXvB6XWvXrtV1113nvp17HuyAAQM0b948jR49WqdPn9bgwYOVkpKi1q1ba+nSpQoPD3cv89JLLykoKEi9e/fW6dOndcMNN2jevHkKDAy0Gg0AAAAlnOXTEoYPH66goCAdOHDA48oCd9xxhxYvXmxpXR07dpQxJs/XvHnzJP35ZrLExEQdPnxYZ86c0cqVK9WoUSOPdYSEhGj69Ok6fvy4MjIy9Omnn6pKlSpWYwEAAMAGLB+5Xbp0qZYsWaIrrrjCY7x27drav39/oRUGAAAAWGX5yG16enq+14L9/fff870CAQAAAFBcLDe37du319tvv+2+7XA4lJOTo+eee87j/FkAAACguFk+LeG5555Tx44dtXbtWmVlZWn06NHatm2bTpw4oW+++aYoagQAAAC8YvnIbYMGDbR582a1atVKcXFxSk9PV69evbRhwwbVrFmzKGoEAAAAvFKg69xGR0drwoQJhV0LAMDXEntamx/glJr0+fPjR6180lLiImvbAQAvWW5uV61adcH727dvX+BiAAAAgEthubnt2LFjnrFzP5ksOzv7kgoCAAAACsryObcpKSkeX0ePHtXixYvVsmVLLV26tChqBAAAALxi+cht2bJl84zFxcUpODhYw4cP17p16wqlMAAAAMAqy0duz6dixYrasWNHYa0OAAAAsMzykdvNmzd73DbG6PDhw3r22WfVpEmTQisMAAAAsMpyc9u0aVM5HA4ZYzzGr776as2ZM6fQCgMAAACsstzc7t271+N2QECAKlasqJCQkEIrCgAAACgIy81ttWrViqIOAAAA4JJZbm5feeUVr+cOHTrU6uoBAACAArPc3L700ks6duyYMjIyVK5cOUnSH3/8obCwMFWsWNE9z+Fw0NwCAACgWFm+FNgzzzyjpk2bavv27Tpx4oROnDih7du3q3nz5nr66ae1d+9e7d27V3v27CmKegEAAIDzstzc/v3vf9f06dNVt25d91jdunX10ksv6YknnijU4gAAAAArLDe3hw8flsvlyjOenZ2t3377rVCKAgAAAArCcnN7ww036P7779fatWvd17pdu3atBg0apE6dOhV6gQAAAIC3LDe3c+bMUeXKldWqVSuFhIQoODhYrVu3VqVKlfTWW28VRY0AAACAVyxfLaFixYr6z3/+o59//lk//fSTjDGqX7++6tSpUxT1AQAAAF6z3NzmqlOnDg0tAAAA/IpXze2IESP01FNPqXTp0hoxYsQF57744ouFUhhwSRJ7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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Convert 'last_updated' to datetime format\n", + "df = verified_users_with_project.copy()\n", + "df['last_updated'] = pd.to_datetime(df['last_updated'])\n", + "\n", + " # Extract the year from 'last_updated'\n", + "df['year'] = df['last_updated'].dt.year\n", + "# Count the number of unique users per year\n", + "unique_users_by_year = df.groupby('year')['username'].nunique()\n", + "\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "unique_users_by_year.plot(kind='bar', color='coral')\n", + "plt.title('Number of Unique Users For Each Year')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Unique Users')\n", + "plt.xticks(rotation=45)\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "83948f62-811d-4826-a543-d3e6a40354f5", + "metadata": {}, + "source": [ + "## Find Top N User That Ran Any JOb" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "d1132870-8c6f-4b7b-9fe1-b4a72ec89cca", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "df = users_with_project_job_files.copy()\n", + "# number of unique users\n", + "n = 30\n", + "# Group by 'username' and count the number of unique 'id' (projects) each user has\n", + "user_unique_projects = df.groupby('username')['uuid'].nunique()\n", + "# Sort users by the number of unique projects (descending order)\n", + "top_n_users = user_unique_projects.sort_values(ascending=False).head(n)\n", + "# Plot the top 15 users with their unique number of projects\n", + "plt.figure(figsize=(6, 10))\n", + "top_n_users.plot(kind='barh', color='royalblue')\n", + "plt.title(f'Top {n} users that ran any job')\n", + "plt.ylabel('Username')\n", + "plt.xlabel('Number of Unique Projects')\n", + "plt.xticks(rotation=0, ha='right')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "c868b263-bab2-4edd-aba9-34ca7118e37d", + "metadata": {}, + "source": [ + "## Histogram of Number of Jobs Associated with Each User" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "42bbb4a4-6f1a-46fe-af3a-eb63723c2e23", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+wAAAIhCAYAAADU2DBWAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAT3ZJREFUeJzt3Xl8TPf+x/H3JCILSYgtYokURWwpUopboaUoWrq4V6+ilrqJWq+WamtpK7a6ugyqFF1pe9GdpvalKhRtRamt1tQuSkuW8/ujN/MznYiZmMkc5vV8PPK4Pd9z5nw/58wX953vWSyGYRgCAAAAAACm4uftAgAAAAAAgCMCOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwDgqubNmyeLxaLNmzfnub5Dhw6qUqWKXVuVKlXUs2dPl/rZsGGDxowZo7NnzxasUJjK0aNHNWbMGG3bts1hXc+ePVW8eHG39jd9+nTNmzfPrfv0JQcOHJDFYinQObzW3xEAgOtTxNsFAABuLosXL1ZYWJhLn9mwYYPGjh2rnj17qkSJEp4pDIXm6NGjGjt2rKpUqaK4uDiP9zd9+nSVLl3a5V8U4U/ly5fXN998o6pVq3q7FADAXxDYAQBuddttt3m7BJdlZmbKYrGoSBH+WZSk7OxsZWVlKTAw0NulFArDMPTHH38oODjY26V4RWBgoJo0aeLtMgAAeeCSeACAW/31kvicnBy98MILqlGjhoKDg1WiRAnVq1dPL7/8siRpzJgxGj58uCQpJiZGFotFFotFq1atsn1+0qRJqlmzpgIDA1W2bFk9+uijOnz4sF2/hmFo/Pjxio6OVlBQkBo1aqSUlBQlJCQoISHBtt2qVatksVj09ttva9iwYapQoYICAwO1Z88enThxQomJiYqNjVXx4sVVtmxZtWrVSmvXrrXrK/cS4smTJ2vixImqUqWKgoODlZCQoN27dyszM1MjRoxQVFSUwsPD1blzZx0/fvya5+6vtebq2bOnw60HM2bMUP369VW8eHGFhoaqZs2aevrpp+22SU9P1+OPP66KFSuqaNGiiomJ0dixY5WVleVwLJMmTdILL7ygmJgYBQYGauXKldf87vKyatUqxcfHS5J69epl+z7HjBljt92ePXvUvn17FS9eXJUqVdKwYcN06dIlu23Gjh2rxo0bKyIiQmFhYWrQoIHmzJkjwzBs21SpUkU7duzQ6tWrbX399Vz9lcVi0YABAzRz5kzVqlVLgYGBmj9/vtN95vbboUMHLV26VA0aNFBwcLBq1qypN998M9++XTk2Z/s5cOCAihQpouTkZId+1qxZI4vFog8//PCqtVztkvh169bprrvuUmhoqEJCQtS0aVN9/vnnee7jzJkz6tWrlyIiIlSsWDF17NhR+/btc+pcAACujqkEAMA15c64/tVfw0VeJk2apDFjxuiZZ57RnXfeqczMTP3000+2+9X79Omj06dP69VXX9WiRYtUvnx5SVJsbKwk6V//+pdmzZqlAQMGqEOHDjpw4ICeffZZrVq1St99951Kly4tSRo1apSSk5PVr18/denSRYcOHVKfPn2UmZmpW2+91aGukSNH6o477tDMmTPl5+ensmXL6sSJE5Kk0aNHKzIyUr/99psWL16shIQELV++3CFMW61W1atXT1arVWfPntWwYcPUsWNHNW7cWAEBAXrzzTf1yy+/6N///rf69OmjTz75xOlznp8FCxYoMTFRTzzxhKZMmSI/Pz/t2bNHaWlptm3S09N1++23y8/PT88995yqVq2qb775Ri+88IIOHDiguXPn2u3zlVde0a233qopU6YoLCxM1atXv+Z3l5cGDRpo7ty56tWrl5555hnde++9kqSKFSvatsnMzFSnTp3Uu3dvDRs2TGvWrNHzzz+v8PBwPffcc7btDhw4oMcff1yVK1eWJG3cuFFPPPGEjhw5Yttu8eLFevDBBxUeHq7p06dLklNXBixZskRr167Vc889p8jISJUtW9bpPnNt375dw4YN04gRI1SuXDnNnj1bvXv3VrVq1XTnnXfm2787+6lSpYo6deqkmTNn6sknn5S/v7/ts6+99pqioqLUuXPna56TK61evVqtW7dWvXr1NGfOHAUGBmr69Onq2LGj3n//fXXt2tVu+969e6t169Z67733dOjQIT3zzDNKSEjQ999/z20uAHA9DAAArmLu3LmGpHx/oqOj7T4THR1t9OjRw7bcoUMHIy4uLt9+Jk+ebEgy9u/fb9e+c+dOQ5KRmJho1/7tt98akoynn37aMAzDOH36tBEYGGh07drVbrtvvvnGkGS0aNHC1rZy5UpDknHnnXde8/izsrKMzMxM46677jI6d+5sa9+/f78hyahfv76RnZ1ta582bZohyejUqZPdfgYPHmxIMs6dO5dvfy1atLCrNVePHj3szvOAAQOMEiVK5Luvxx9/3ChevLjxyy+/2LVPmTLFkGTs2LHD7liqVq1qXL582W5bZ767vKSmphqSjLlz5+Z5LJKMDz74wK69ffv2Ro0aNa66z+zsbCMzM9MYN26cUapUKSMnJ8e2rnbt2nmet6uRZISHhxunT5/Od7v8+oyOjjaCgoLszu/vv/9uREREGI8//rjTtbirn9xxvXjxYlvbkSNHjCJFihhjx47Nt//cMXDl99WkSROjbNmyxvnz521tWVlZRp06dYyKFSvaasz9O+LKPx+GYRjr1683JBkvvPCCS+cCAGCPS+IBANf01ltvKTU11eGnefPm1/zs7bffru3btysxMVHLli1TRkaG0/2uXLlSkhweJnb77berVq1aWr58uaQ/ZycvXbqkhx9+2G67Jk2aXPXy6AceeCDP9pkzZ6pBgwYKCgpSkSJFFBAQoOXLl2vnzp0O27Zv315+fv//T2mtWrUkyTar/Nf2gwcPXuVIXXP77bfr7Nmz+sc//qGPP/5YJ0+edNjms88+U8uWLRUVFaWsrCzbT7t27ST9OYN6pU6dOikgIMChn4J+d/mxWCzq2LGjXVu9evX0yy+/2LWtWLFCd999t8LDw+Xv76+AgAA999xzOnXqlFO3GOSnVatWKlmypEO7K33GxcXZZsglKSgoSLfeeqvDceTF3f0kJCSofv36slqttraZM2fKYrGoX79+1z4hV7hw4YK+/fZbPfjgg3ZP9Pf391f37t11+PBh7dq1y+4zjzzyiN1y06ZNFR0dbfszDAAoGAI7AOCaatWqpUaNGjn8hIeHX/OzI0eO1JQpU7Rx40a1a9dOpUqV0l133eXUa6BOnTolSbbL5K8UFRVlW5/7v+XKlXPYLq+2q+1z6tSp+te//qXGjRvrv//9rzZu3KjU1FS1bdtWv//+u8P2ERERdstFixbNt/2PP/7IsxZXde/e3Xa5/QMPPKCyZcuqcePGSklJsW3z66+/6tNPP1VAQIDdT+3atSXJIeTndT6u57vLT0hIiIKCguzaAgMD7c7Ppk2b1KZNG0nSG2+8ofXr1ys1NVWjRo2SpDy/D1fkdbyu9lmqVCmHfQQGBl6zNk/1M3DgQC1fvly7du1SZmam3njjDT344IOKjIzMt56/OnPmjAzDuOqfO+n//8zlyquPyMhIh+0AAK7hHnYAgEcVKVJEQ4cO1dChQ3X27Fl9/fXXevrpp3XPPffo0KFDCgkJuepnc4PKsWPH7O6Blv58dVju/eu52/36668O+0hPT89zlt1isTi0vfPOO0pISNCMGTPs2s+fP5//QbpJUFCQzp0759Ce1wx6r1691KtXL124cEFr1qzR6NGj1aFDB+3evVvR0dEqXbq06tWrpxdffDHPvnKDV668zsf1fHfXa8GCBQoICNBnn31mF+6XLFnilv3ndbye7tPT/XTr1k1PPfWUrFarmjRpovT0dCUlJbm8n5IlS8rPz0/Hjh1zWHf06FFJsv3Zy5Wenu6wbXp6uqpVq+Zy/wCA/8cMOwCg0JQoUUIPPvigkpKSdPr0aR04cEDS/z8k7K8zhq1atZL0Z5C+Umpqqnbu3Km77rpLktS4cWMFBgZq4cKFdttt3LjRqcuTc1ksFocHln3//ff65ptvnN7H9ahSpYp2795t97T0U6dOacOGDVf9TLFixdSuXTuNGjVKly9f1o4dOyRJHTp00I8//qiqVavmeXXEXwP7tVztu8vL1b5PV+S+Zu/KB6j9/vvvevvtt/Ps73pn3F3t04z9BAUFqV+/fpo/f76mTp2quLg4NWvWzOX9FCtWTI0bN9aiRYvszmtOTo7eeecdVaxY0eFBju+++67d8oYNG/TLL7/k+dYDAIDzmGEHAHhUx44dVadOHTVq1EhlypTRL7/8omnTpik6OlrVq1eXJNWtW1eS9PLLL6tHjx4KCAhQjRo1VKNGDfXr10+vvvqq/Pz81K5dO9tT4itVqqQhQ4ZI+vMS9KFDhyo5OVklS5ZU586ddfjwYY0dO1bly5e3u888Px06dNDzzz+v0aNHq0WLFtq1a5fGjRunmJiYPJ+S727du3fX66+/rn/+85/q27evTp06pUmTJiksLMxuu759+yo4OFjNmjVT+fLllZ6eruTkZIWHh9teqTZu3DilpKSoadOmGjhwoGrUqKE//vhDBw4c0BdffKGZM2c6XLXwV858d3mpWrWqgoOD9e6776pWrVoqXry4oqKiXPolwb333qupU6eqW7du6tevn06dOqUpU6bk+QT4unXrasGCBVq4cKFuueUWBQUF2caUK1zp83p4sp/ExERNmjRJW7Zs0ezZswu8n+TkZLVu3VotW7bUv//9bxUtWlTTp0/Xjz/+qPfff9/hCoXNmzerT58+euihh3To0CGNGjVKFSpUUGJi4vUeEgD4NAI7AMCjWrZsqf/+97+aPXu2MjIyFBkZqdatW+vZZ5+1PeQsISFBI0eO1Pz58/XGG28oJydHK1eutF2eXrVqVc2ZM0dWq1Xh4eFq27atkpOT7e7tffHFF1WsWDHNnDlTc+fOVc2aNTVjxgyNGjXK6ddKjRo1ShcvXtScOXM0adIkxcbGaubMmVq8eLHtvfCe1KxZM82fP18TJkzQfffdp1tuuUWjR4/WF198Ydf/3/72N82bN08ffPCBzpw5o9KlS6t58+Z66623VKZMGUl/3qO9efNmPf/885o8ebIOHz6s0NBQxcTEqG3btnk+cO2vnPnu8hISEqI333xTY8eOVZs2bZSZmanRo0c7vIs9P61atdKbb76piRMnqmPHjqpQoYL69u2rsmXLqnfv3nbbjh07VseOHVPfvn11/vx5RUdH53sFgDv6vB6e7KdChQpq3ry5vv/+e3Xr1s2lz14Zwlu0aKEVK1Zo9OjR6tmzp3JyclS/fn198skn6tChg8Nn58yZo7ffflt///vfdenSJbVs2VIvv/yyw/McAACusRiGEy/RBQDgBrR//37VrFlTo0eP1tNPP+3tcgCPO378uKKjo/XEE09o0qRJTn1m+/btiouL06effppnGAcAeA8z7ACAm8L27dv1/vvvq2nTpgoLC9OuXbtsl5O7c3YUMKPDhw9r3759mjx5svz8/DRo0CCnPrdy5UrNnj1bRYsWVYMGDTxcJQDAVQR2AMBNoVixYtq8ebPmzJmjs2fPKjw8XAkJCXrxxRev+mo34GYxe/ZsjRs3TlWqVNG7776rChUqOPW51q1bKyYmRnPnznX5QYQAAM/jkngAAAAAAEyI17oBAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAn5/EPncnJydPToUYWGhtq9fxQAAAAAAE8wDEPnz59XVFSU/PyuPo/u84H96NGjqlSpkrfLAAAAAAD4mEOHDqlixYpXXe/zgT00NFTSnycqLCzMa3VkZmbqq6++Ups2bRQQEOC1OuA7GHMoTIw3FDbGHAoT4w2FjTF348vIyFClSpVsefRqfD6w514GHxYW5vXAHhISorCwMP7QoVAw5lCYGG8obIw5FCbGGwobY+7mca3bsnnoHAAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCPhvYrVarYmNjFR8f7+1SAAAAAABw4LOBPSkpSWlpaUpNTfV2KQAAAAAAOPDZwA4AAAAAgJkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJlTE2wXAea0SD+a7fsX0yoVUCQAAAADA05hhBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhHw2sFutVsXGxio+Pt7bpQAAAAAA4MBnA3tSUpLS0tKUmprq7VIAAAAAAHDgs4EdAAAAAAAzI7ADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMKEbPrAfOnRICQkJio2NVb169fThhx96uyQAAAAAAK5bEW8XcL2KFCmiadOmKS4uTsePH1eDBg3Uvn17FStWzNulAQAAAABQYDd8YC9fvrzKly8vSSpbtqwiIiJ0+vRpAjsAAAAA4Ibm9Uvi16xZo44dOyoqKkoWi0VLlixx2Gb69OmKiYlRUFCQGjZsqLVr1+a5r82bNysnJ0eVKlXycNUAAAAAAHiW12fYL1y4oPr166tXr1564IEHHNYvXLhQgwcP1vTp09WsWTO9/vrrateundLS0lS5cmXbdqdOndKjjz6q2bNn59vfpUuXdOnSJdtyRkaGJCkzM1OZmZluOirX5fadXw1F/bOd2gfgDGfGHOAujDcUNsYcChPjDYWNMXfjc/a7sxiGYXi4FqdZLBYtXrxY999/v62tcePGatCggWbMmGFrq1Wrlu6//34lJydL+jOEt27dWn379lX37t3z7WPMmDEaO3asQ/t7772nkJAQ9xwIAAAAAABXcfHiRXXr1k3nzp1TWFjYVbfz+gx7fi5fvqwtW7ZoxIgRdu1t2rTRhg0bJEmGYahnz55q1arVNcO6JI0cOVJDhw61LWdkZKhSpUpq06ZNvifK0zIzM5WSkqLWrVsrICAgz206Dj2c7z4+nVrRE6XhJuXMmAPchfGGwsaYQ2FivKGwMeZufLlXel+LqQP7yZMnlZ2drXLlytm1lytXTunp6ZKk9evXa+HChapXr57t/ve3335bdevWzXOfgYGBCgwMdGgPCAgwxWDPr47L2f7X/CzgKrOMffgGxhsKG2MOhYnxhsLGmLtxOfu9mTqw57JYLHbLhmHY2po3b66cnBxvlAUAAAAAgMd4/Snx+SldurT8/f1ts+m5jh8/7jDrDgAAAADAzcTUgb1o0aJq2LChUlJS7NpTUlLUtGlTL1UFAAAAAIDnef2S+N9++0179uyxLe/fv1/btm1TRESEKleurKFDh6p79+5q1KiR7rjjDs2aNUsHDx5U//79vVg1AAAAAACe5fXAvnnzZrVs2dK2nPsE9x49emjevHnq2rWrTp06pXHjxunYsWOqU6eOvvjiC0VHR3urZAAAAAAAPM7rgT0hIUHXehV8YmKiEhMT3dqv1WqV1WpVdna2W/cLAAAAAIA7mPoedk9KSkpSWlqaUlNTvV0KAAAAAAAOfDawAwAAAABgZgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmJDPBnar1arY2FjFx8d7uxQAAAAAABz4bGBPSkpSWlqaUlNTvV0KAAAAAAAOfDawAwAAAABgZgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAE/LZwG61WhUbG6v4+HhvlwIAAAAAgAOfDexJSUlKS0tTamqqt0sBAAAAAMCBzwZ2AAAAAADMjMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyKwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJ+Wxgt1qtio2NVXx8vLdLAQAAAADAwXUF9kuXLrmrjkKXlJSktLQ0paamersUAAAAAAAcuBTYly1bpp49e6pq1aoKCAhQSEiIQkND1aJFC7344os6evSop+oEAAAAAMCnOBXYlyxZoho1aqhHjx7y8/PT8OHDtWjRIi1btkxz5sxRixYt9PXXX+uWW25R//79deLECU/XDQAAAADATa2IMxuNHz9eU6ZM0b333is/P8eM//DDD0uSjhw5opdffllvvfWWhg0b5t5KAQAAAADwIU4F9k2bNjm1swoVKmjSpEnXVRAAAAAAALiOh85dvnxZu3btUlZWljvrAQAAAAAAKkBgv3jxonr37q2QkBDVrl1bBw8elCQNHDhQEyZMcHuBAAAAAAD4IpcD+8iRI7V9+3atWrVKQUFBtva7775bCxcudGtxAAAAAAD4KqfuYb/SkiVLtHDhQjVp0kQWi8XWHhsbq71797q1OAAAAAAAfJXLM+wnTpxQ2bJlHdovXLhgF+ABAAAAAEDBuRzY4+Pj9fnnn9uWc0P6G2+8oTvuuMN9lQEAAAAA4MNcviQ+OTlZbdu2VVpamrKysvTyyy9rx44d+uabb7R69WpP1AgAAAAAgM9xeYa9adOmWr9+vS5evKiqVavqq6++Urly5fTNN9+oYcOGnqgRAAAAAACf4/IMuyTVrVtX8+fPd3cthcpqtcpqtSo7O9vbpQAAAAAA4MCpwJ6RkeH0DsPCwgpcTGFKSkpSUlKSMjIyFB4e7u1yAAAAAACw41RgL1GixDWfAG8YhiwWCzPWAAAAAAC4gVOBfeXKlZ6uAwAAAAAAXMGpwN6iRQtP1wEAAAAAAK5QoIfOSdLFixd18OBBXb582a69Xr16110UAAAAAAC+zuXAfuLECfXq1Utffvllnuu5hx0AAAAAgOvn8nvYBw8erDNnzmjjxo0KDg7W0qVLNX/+fFWvXl2ffPKJJ2oEAAAAAMDnuDzDvmLFCn388ceKj4+Xn5+foqOj1bp1a4WFhSk5OVn33nuvJ+oEAAAAAMCnuDzDfuHCBZUtW1aSFBERoRMnTkiS6tatq++++8691QEAAAAA4KNcDuw1atTQrl27JElxcXF6/fXXdeTIEc2cOVPly5d3e4EAAAAAAPgily+JHzx4sI4dOyZJGj16tO655x69++67Klq0qObNm+fu+uCCVokH812/YnrlQqoEAAAAAHC9XA7sjzzyiO2/b7vtNh04cEA//fSTKleurNKlS7u1OAAAAAAAfFWB38OeKyQkRA0aNHBHLQAAAAAA4H9cvof9wQcf1IQJExzaJ0+erIceesgtRQEAAAAA4OtcDuyrV6/O89Vtbdu21Zo1a9xSFAAAAAAAvs7lwP7bb7+paNGiDu0BAQHKyMhwS1EAAAAAAPg6lwN7nTp1tHDhQof2BQsWKDY21i1FFQar1arY2FjFx8d7uxQAAAAAABy4/NC5Z599Vg888ID27t2rVq1aSZKWL1+u999/Xx9++KHbC/SUpKQkJSUlKSMjQ+Hh4d4uBwAAAAAAOy4H9k6dOmnJkiUaP368PvroIwUHB6tevXr6+uuv1aJFC0/UCAAAAACAzynQa93uvffePB88BwAAAAAA3MPle9gPHTqkw4cP25Y3bdqkwYMHa9asWW4tDAAAAAAAX+ZyYO/WrZtWrlwpSUpPT9fdd9+tTZs26emnn9a4cePcXiAAAAAAAL7I5cD+448/6vbbb5ckffDBB6pbt642bNig9957T/PmzXN3fQAAAAAA+CSXA3tmZqYCAwMlSV9//bU6deokSapZs6aOHTvm3uoAAAAAAPBRLgf22rVra+bMmVq7dq1SUlLUtm1bSdLRo0dVqlQptxcIAAAAAIAvcjmwT5w4Ua+//roSEhL0j3/8Q/Xr15ckffLJJ7ZL5QEAAAAAwPVx+bVuCQkJOnnypDIyMlSyZElbe79+/RQSEuLW4gAAAAAA8FUFeg+7v7+/XViXpCpVqrijHgAAAAAAoAJcEg8AAAAAADyPwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJuTyQ+deeeWVPNstFouCgoJUrVo13XnnnfL397/u4gAAAAAA8FUuB/b//Oc/OnHihC5evKiSJUvKMAydPXtWISEhKl68uI4fP65bbrlFK1euVKVKlTxRMwAAAAAANz2XL4kfP3684uPj9fPPP+vUqVM6ffq0du/ercaNG+vll1/WwYMHFRkZqSFDhniiXgAAAAAAfILLM+zPPPOM/vvf/6pq1aq2tmrVqmnKlCl64IEHtG/fPk2aNEkPPPCAWwsFAAAAAMCXuDzDfuzYMWVlZTm0Z2VlKT09XZIUFRWl8+fPX391AAAAAAD4KJcDe8uWLfX4449r69attratW7fqX//6l1q1aiVJ+uGHHxQTE+O+KgEAAAAA8DEuB/Y5c+YoIiJCDRs2VGBgoAIDA9WoUSNFRERozpw5kqTixYvrpZdecnux7mS1WhUbG6v4+HhvlwIAAAAAgAOX72GPjIxUSkqKfvrpJ+3evVuGYahmzZqqUaOGbZuWLVu6tUhPSEpKUlJSkjIyMhQeHu7tcgAAAAAAsONyYM91ZUi3WCxuKwgAAAAAABTgknhJeuutt1S3bl0FBwcrODhY9erV09tvv+3u2gAAAAAA8Fkuz7BPnTpVzz77rAYMGKBmzZrJMAytX79e/fv318mTJ3n/OgAAAAAAbuByYH/11Vc1Y8YMPfroo7a2++67T7Vr19aYMWMI7AAAAAAAuEGB3sPetGlTh/amTZvq2LFjbikKAAAAAABf53Jgr1atmj744AOH9oULF6p69epuKQoAAAAAAF/n8iXxY8eOVdeuXbVmzRo1a9ZMFotF69at0/Lly/MM8gAAAAAAwHUuz7A/8MAD+vbbb1W6dGktWbJEixYtUunSpbVp0yZ17tzZEzUCAAAAAOBzCvQe9oYNG+qdd95xdy0AAAAAAOB/nArsGRkZTu8wLCyswMUAAAAAAIA/ORXYS5QoIYvFku82hmHIYrEoOzvbLYUBAAAAAODLnArsK1eu9HQdAAAAAADgCk4F9hYtWni6DgAAAAAAcAWXnxIPAAAAAAA8j8AOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIRcDuy//vqrunfvrqioKBUpUkT+/v52PwAAAAAA4Po59Vq3K/Xs2VMHDx7Us88+q/Lly8tisXiiLgAAAAAAfJrLgX3dunVau3at4uLiPFAOAAAAAACQCnBJfKVKlWQYhidqAQAAAAAA/+NyYJ82bZpGjBihAwcOeKAcAAAAAAAgFeCS+K5du+rixYuqWrWqQkJCFBAQYLf+9OnTbisOAAAAAABf5XJgnzZtmgfKAAAAAAAAV3I5sPfo0cMTdQAAAAAAgCs4FdgzMjIUFhZm++/85G4HAAAAAAAKzqnAXrJkSR07dkxly5ZViRIl8nz3umEYslgsys7OdnuRAAAAAAD4GqcC+4oVKxQRESFJWrlypUcLKixWq1VWq5VfMAAAAAAATMmpwN6iRYs8//tGlpSUpKSkJGVkZCg8PNzb5QAAAAAAYMep97AfPHjQpZ0eOXKkQMUAAAAAAIA/ORXY4+Pj1bdvX23atOmq25w7d05vvPGG6tSpo0WLFrmtQAAAAAAAfJFTl8Tv3LlT48ePV9u2bRUQEKBGjRopKipKQUFBOnPmjNLS0rRjxw41atRIkydPVrt27TxdNwAAAAAANzWnZtgjIiI0ZcoUHT16VDNmzNCtt96qkydP6ueff5YkPfLII9qyZYvWr19PWAcAAAAAwA2cmmHPFRQUpC5duqhLly6eqgcAAAAAAMjJGXYAAAAAAFC4COwAAAAAAJgQgR0AAAAAABMisAMAAAAAYEIuBfbMzEz16tVL+/bt81Q9AAAAAABALgb2gIAALV682FO1AAAAAACA/3H5kvjOnTtryZIlHigFAAAAAADkcuk97JJUrVo1Pf/889qwYYMaNmyoYsWK2a0fOHCg24oDAAAAAMBXuRzYZ8+erRIlSmjLli3asmWL3TqLxUJgBwAAAADADVwO7Pv37/dEHQAAAAAA4AoFfq3b5cuXtWvXLmVlZbmzHgAAAAAAoAIE9osXL6p3794KCQlR7dq1dfDgQUl/3rs+YcIEtxcIAAAAAIAvcjmwjxw5Utu3b9eqVasUFBRka7/77ru1cOFCtxYHAAAAAICvcvke9iVLlmjhwoVq0qSJLBaLrT02NlZ79+51a3EAAAAAAPgql2fYT5w4obJlyzq0X7hwwS7AAwAAAACAgnM5sMfHx+vzzz+3LeeG9DfeeEN33HGH+yoDAAAAAMCHuXxJfHJystq2bau0tDRlZWXp5Zdf1o4dO/TNN99o9erVnqgRAAAAAACf4/IMe9OmTbV+/XpdvHhRVatW1VdffaVy5crpm2++UcOGDT1RIwAAAAAAPsflGXZJqlu3rubPn+/uWgAAAAAAwP+4PMP+3Xff6YcffrAtf/zxx7r//vv19NNP6/Lly24tDgAAAAAAX+VyYH/88ce1e/duSdK+ffvUtWtXhYSE6MMPP9STTz7p9gIBAAAAAPBFLgf23bt3Ky4uTpL04YcfqkWLFnrvvfc0b948/fe//3V3fQAAAAAA+CSXA7thGMrJyZEkff3112rfvr0kqVKlSjp58qR7qwMAAAAAwEe5HNgbNWqkF154QW+//bZWr16te++9V5K0f/9+lStXzu0FAgAAAADgi1wO7NOmTdN3332nAQMGaNSoUapWrZok6aOPPlLTpk3dXiAAAAAAAL7I5de61atXz+4p8bkmT54sf39/txQFAAAAAICvK9B72PMSFBTkrl0BAAAAAODznL4k3s/PT/7+/g4/JUuWVJMmTbRo0SJP1gkAAAAAgE9xeoZ98eLFebafPXtWmzZt0j//+U/Nnz9fDz30kNuKAwAAAADAVzkd2O+7776rruvRo4diY2M1ZcoUAjsAAAAAAG7g8lPir6ZNmzbavXu3u3YHAAAAAIBPc1tg//3333nwHAAAAAAAbuK2wP7GG2/otttuc9fuAAAAAADwaU7fwz506NA828+dO6fNmzdr7969Wrt2rdsKAwAAAADAlzkd2Ldu3Zpne1hYmNq2bavExERFR0e7rTAAAAAAAHyZ04F95cqVnqwDAAAAAABcwW33sAMAAAAAAPchsAMAAAAAYEIEdgAAAAAATMjpe9hxc2uVeDDf9SumVy6kSgAAAAAAkpMz7A0aNNCZM2ckSePGjdPFixc9WpSrOnfurJIlS+rBBx/0dikAAAAAALiFU4F9586dunDhgiRp7Nix+u233zxalKsGDhyot956y9tlAAAAAADgNk5dEh8XF6devXqpefPmMgxDU6ZMUfHixfPc9rnnnnNrgc5o2bKlVq1aVej9AgAAAADgKU7NsM+bN0+lSpXSZ599JovFoi+//FKLFy92+FmyZInLBaxZs0YdO3ZUVFSULBZLnvuYPn26YmJiFBQUpIYNG2rt2rUu9wMAAAAAwI3EqRn2GjVqaMGCBZIkPz8/LV++XGXLlnVLARcuXFD9+vXVq1cvPfDAAw7rFy5cqMGDB2v69Olq1qyZXn/9dbVr105paWmqXJkHoQEAAAAAbk4uPyU+JyfHrQW0a9dO7dq1u+r6qVOnqnfv3urTp48kadq0aVq2bJlmzJih5ORkl/u7dOmSLl26ZFvOyMiQJGVmZiozM9Pl/blLbt/51VDUP9stfRRk3948N/AMZ8Yc4C6MNxQ2xhwKE+MNhY0xd+Nz9rsr0Gvd9u7dq2nTpmnnzp2yWCyqVauWBg0apKpVqxZkd1d1+fJlbdmyRSNGjLBrb9OmjTZs2FCgfSYnJ2vs2LEO7V999ZVCQkIKtE93SklJueq6f919ffv+4ovvC7zv/D6LG1t+Yw5wN8YbChtjDoWJ8YbCxpi7cTn75jWXA/uyZcvUqVMnxcXFqVmzZjIMQxs2bFDt2rX16aefqnXr1i4XezUnT55Udna2ypUrZ9derlw5paen25bvuecefffdd7pw4YIqVqyoxYsXKz4+Ps99jhw5UkOHDrUtZ2RkqFKlSmrTpo3CwsLcVrurMjMzlZKSotatWysgICDPbToOPXxdfXw6teJV111r3/l9FjcmZ8Yc4C6MNxQ2xhwKE+MNhY0xd+PLvdL7WlwO7CNGjNCQIUM0YcIEh/annnrKrYE9l8VisVs2DMOubdmyZU7vKzAwUIGBgQ7tAQEBphjs+dVxOdv/uvd9NdfatxnODTzDLGMfvoHxhsLGmENhYryhsDHmblzOfm9OPSX+Sjt37lTv3r0d2h977DGlpaW5urt8lS5dWv7+/naz6ZJ0/Phxh1l3AAAAAABuJi4H9jJlymjbtm0O7du2bXPbk+NzFS1aVA0bNnS4NyMlJUVNmzZ1a18AAAAAAJiJy5fE9+3bV/369dO+ffvUtGlTWSwWrVu3ThMnTtSwYcNcLuC3337Tnj17bMv79+/Xtm3bFBERocqVK2vo0KHq3r27GjVqpDvuuEOzZs3SwYMH1b9/f5f7AgAAAADgRuFyYH/22WcVGhqql156SSNHjpQkRUVFacyYMRo4cKDLBWzevFktW7a0Lec+EK5Hjx6aN2+eunbtqlOnTmncuHE6duyY6tSpoy+++ELR0dEu9wUAAAAAwI3C5cBusVg0ZMgQDRkyROfPn5ckhYaGFriAhIQEGYaR7zaJiYlKTEwscB8AAAAAANxoCvQe9lzXE9S9zWq1ymq1Kjs729ulFJpWiQe9XQIAAAAAwEkuP3TuZpGUlKS0tDSlpqZ6uxQAAAAAABz4bGAHAAAAAMDMCOwAAAAAAJiQS4E9MzNTLVu21O7duz1VDwAAAAAAkIuBPSAgQD/++KMsFoun6gEAAAAAACrAJfGPPvqo5syZ44laAAAAAADA/7j8WrfLly9r9uzZSklJUaNGjVSsWDG79VOnTnVbcQAAAAAA+CqXA/uPP/6oBg0aSJLDvexcKg8AAAAAgHu4HNhXrlzpiToKndVqldVqVXZ2trdLAQAAAADAQYFf67Znzx4tW7ZMv//+uyTJMAy3FVUYkpKSlJaWptTUVG+XAgAAAACAA5cD+6lTp3TXXXfp1ltvVfv27XXs2DFJUp8+fTRs2DC3FwgAAAAAgC9yObAPGTJEAQEBOnjwoEJCQmztXbt21dKlS91aHAAAAAAAvsrle9i/+uorLVu2TBUrVrRrr169un755Re3FQYAAAAAgC9zeYb9woULdjPruU6ePKnAwEC3FAUAAAAAgK9zObDfeeedeuutt2zLFotFOTk5mjx5slq2bOnW4gAAAAAA8FUuXxI/efJkJSQkaPPmzbp8+bKefPJJ7dixQ6dPn9b69es9USMAAAAAAD7H5Rn22NhYff/997r99tvVunVrXbhwQV26dNHWrVtVtWpVT9QIAAAAAIDPcXmGXZIiIyM1duxYd9cCAAAAAAD+p0CB/cyZM5ozZ4527twpi8WiWrVqqVevXoqIiHB3fR5jtVpltVqVnZ3t7VIAAAAAAHDg8iXxq1evVkxMjF555RWdOXNGp0+f1iuvvKKYmBitXr3aEzV6RFJSktLS0pSamurtUgAAAAAAcODyDHtSUpIefvhhzZgxQ/7+/pKk7OxsJSYmKikpST/++KPbiwQAAAAAwNe4PMO+d+9eDRs2zBbWJcnf319Dhw7V3r173VocAAAAAAC+yuXA3qBBA+3cudOhfefOnYqLi3NHTQAAAAAA+DynLon//vvvbf89cOBADRo0SHv27FGTJk0kSRs3bpTVatWECRM8UyUAAAAAAD7GqcAeFxcni8UiwzBsbU8++aTDdt26dVPXrl3dVx0AAAAAAD7KqcC+f/9+T9cBAAAAAACu4FRgj46O9nQdAAAAAADgCi6/1k2Sjhw5ovXr1+v48ePKycmxWzdw4EC3FAYAAAAAgC9zObDPnTtX/fv3V9GiRVWqVClZLBbbOovFQmAHAAAAAMANXA7szz33nJ577jmNHDlSfn4uvxUOAAAAAAA4weXEffHiRf3973+/4cO61WpVbGys4uPjvV0KAAAAAAAOXE7dvXv31ocffuiJWgpVUlKS0tLSlJqa6u1SAAAAAABw4PIl8cnJyerQoYOWLl2qunXrKiAgwG791KlT3VYcAAAAAAC+yuXAPn78eC1btkw1atSQJIeHzgEAAAAAgOvncmCfOnWq3nzzTfXs2dMD5QAAAAAAAKkA97AHBgaqWbNmnqgFAAAAAAD8j8uBfdCgQXr11Vc9UQsAAAAAAPgfly+J37Rpk1asWKHPPvtMtWvXdnjo3KJFi9xWHAAAAAAAvsrlwF6iRAl16dLFE7UAAAAAAID/cTmwz5071xN1AAAAAACAK7h8DzsAAAAAAPA8l2fYY2Ji8n3f+r59+66rIAAAAAAAUIDAPnjwYLvlzMxMbd26VUuXLtXw4cPdVRcAAAAAAD7N5cA+aNCgPNutVqs2b9583QUBAAAAAIACBParadeunUaOHHnDPJTOarXKarUqOzvb26XcEFolHsx3/YrplQupEgAAAADwDW576NxHH32kiIgId+3O45KSkpSWlqbU1FRvlwIAAAAAgAOXZ9hvu+02u4fOGYah9PR0nThxQtOnT3drcQAAAAAA+CqXA/v9999vt+zn56cyZcooISFBNWvWdFddAAAAAAD4NJcD++jRoz1RBwAAAAAAuILb7mEHAAAAAADu4/QMu5+fn92963mxWCzKysq67qIAAAAAAPB1Tgf2xYsXX3Xdhg0b9Oqrr8owDLcUBQAAAACAr3M6sN93330ObT/99JNGjhypTz/9VI888oief/55txYHAAAAAICvKtA97EePHlXfvn1Vr149ZWVladu2bZo/f74qV67s7voAAAAAAPBJLgX2c+fO6amnnlK1atW0Y8cOLV++XJ9++qnq1KnjqfoAAAAAAPBJTl8SP2nSJE2cOFGRkZF6//3387xEHgAAAAAAuIfTgX3EiBEKDg5WtWrVNH/+fM2fPz/P7RYtWuS24gAAAAAA8FVOB/ZHH330mq91AwAAAAAA7uF0YJ83b54HywAAAAAAAFcq0FPiAQAAAACAZzk9w36zsVqtslqtys7O9nYpuIZWiQfzXb9iOq8TBAAAAHDz8dkZ9qSkJKWlpSk1NdXbpQAAAAAA4MBnAzsAAAAAAGZGYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyKwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyKwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyri7QK8xWq1ymq1Kjs729ul3BRaJR68rs+vmF7ZTZXALK41JvjOAQAAgPz57Ax7UlKS0tLSlJqa6u1SAAAAAABw4LOBHQAAAAAAMyOwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyKwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyKwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADAhAjsAAAAAACZEYAcAAAAAwIQI7AAAAAAAmBCBHQAAAAAAEyKwAwAAAABgQgR2AAAAAABMiMAOAAAAAIAJEdgBAAAAADChIt4uwFusVqusVquys7O9XQp8WKvEg/muXzG9ciFVAgAAAMBsfHaGPSkpSWlpaUpNTfV2KQAAAAAAOPDZwA4AAAAAgJkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACYEIEdAAAAAAATIrADAAAAAGBCBHYAAAAAAEyIwA4AAAAAgAkR2AEAAAAAMCECOwAAAAAAJkRgBwAAAADAhAjsAAAAAACY0E0R2D/77DPVqFFD1atX1+zZs71dDgAAAAAA162Itwu4XllZWRo6dKhWrlypsLAwNWjQQF26dFFERIS3SwMAAAAAoMBu+Bn2TZs2qXbt2qpQoYJCQ0PVvn17LVu2zNtlAQAAAABwXbwe2NesWaOOHTsqKipKFotFS5Yscdhm+vTpiomJUVBQkBo2bKi1a9fa1h09elQVKlSwLVesWFFHjhwpjNIBAAAAAPAYrwf2CxcuqH79+nrttdfyXL9w4UINHjxYo0aN0tatW/W3v/1N7dq108GDByVJhmE4fMZisXi0ZgAAAAAAPM3r97C3a9dO7dq1u+r6qVOnqnfv3urTp48kadq0aVq2bJlmzJih5ORkVahQwW5G/fDhw2rcuPFV93fp0iVdunTJtpyRkSFJyszMVGZm5vUeToHl9p1fDUX9swurnEJ3Pcftze/tennz2JwZc9fjZv7e4DpPjzfgrxhzKEyMNxQ2xtyNz9nvzmLkNUXtJRaLRYsXL9b9998vSbp8+bJCQkL04YcfqnPnzrbtBg0apG3btmn16tXKyspSrVq1tGrVKttD5zZu3KhSpUrl2ceYMWM0duxYh/b33ntPISEhHjkuAAAAAAByXbx4Ud26ddO5c+cUFhZ21e28PsOen5MnTyo7O1vlypWzay9XrpzS09MlSUWKFNFLL72kli1bKicnR08++eRVw7okjRw5UkOHDrUtZ2RkqFKlSmrTpk2+J8rTMjMzlZKSotatWysgICDPbToOPVzIVd0YPp1a0dslXJWnv7NrHXt+/Qf4Z6tPyx35jrnrca1j9+T35s2+nXE948LbtRdUYfwdl9+5MfuYgPs5M+YAd2G8obD58pi7Wf5Nz73S+1pMHdhz/fWedMMw7No6deqkTp06ObWvwMBABQYGOrQHBASYYrDnV8flbP9CrubGYIbv7Wo8/Z1d69id6d9TY/9afXvye/Nm3864nnHh7dqvlyf/jsvv3Jh9TMBzzPLvO3wD4w2FzRfH3M3yb7qzdXr9oXP5KV26tPz9/W2z6bmOHz/uMOsOAAAAAMDNxNSBvWjRomrYsKFSUlLs2lNSUtS0aVMvVQUAAAAAgOd5/ZL43377TXv27LEt79+/X9u2bVNERIQqV66soUOHqnv37mrUqJHuuOMOzZo1SwcPHlT//v29WDUAAAAAAJ7l9cC+efNmtWzZ0rac+0C4Hj16aN68eeratatOnTqlcePG6dixY6pTp46++OILRUdHe6tkAAAAAAA8zuuBPSEhQdd6s1xiYqISExMLqSIAAAAAALzP1Pewe5LValVsbKzi4+O9XQoAAAAAAA58NrAnJSUpLS1Nqamp3i4FAAAAAAAHPhvYAQAAAAAwMwI7AAAAAAAmRGAHAAAAAMCECOwAAAAAAJgQgR0AAAAAABMisAMAAAAAYEIEdgAAAAAATMhnA7vValVsbKzi4+O9XQoAAAAAAA58NrAnJSUpLS1Nqamp3i4FAAAAAAAHPhvYAQAAAAAwsyLeLsDbDMOQJGVkZHi1jszMTF28eFEZGRkKCAjIc5usy+cLuaobg7e/u/x4+ju71rHn17+ff/Y1x9z1uNaxe/J782bfzrieceHt2guqMP6Oy+/cmH1MwP2cGXOAuzDeUNh8eczdLP+m59aZm0evxmJca4ub3OHDh1WpUiVvlwEAAAAA8DGHDh1SxYoVr7re5wN7Tk6Ojh49qtDQUFksFq/VkZGRoUqVKunQoUMKCwvzWh3wHYw5FCbGGwobYw6FifGGwsaYu/EZhqHz588rKipKfn5Xv1Pd5y+J9/Pzy/c3GoUtLCyMP3QoVIw5FCbGGwobYw6FifGGwsaYu7GFh4dfcxseOgcAAAAAgAkR2AEAAAAAMCECu0kEBgZq9OjRCgwM9HYp8BGMORQmxhsKG2MOhYnxhsLGmPMdPv/QOQAAAAAAzIgZdgAAAAAATIjADgAAAACACRHYAQAAAAAwIQI7AAAAAAAmRGD3gunTpysmJkZBQUFq2LCh1q5d6+2ScANKTk5WfHy8QkNDVbZsWd1///3atWuX3TaGYWjMmDGKiopScHCwEhIStGPHDi9VjJtJcnKyLBaLBg8ebGtjvMHdjhw5on/+858qVaqUQkJCFBcXpy1bttjWM+bgTllZWXrmmWcUExOj4OBg3XLLLRo3bpxycnJs2zDm4Kw1a9aoY8eOioqKksVi0ZIlS+zWOzOWLl26pCeeeEKlS5dWsWLF1KlTJx0+fLgQjwJmQGAvZAsXLtTgwYM1atQobd26VX/729/Url07HTx40Nul4QazevVqJSUlaePGjUpJSVFWVpbatGmjCxcu2LaZNGmSpk6dqtdee02pqamKjIxU69atdf78eS9WjhtdamqqZs2apXr16tm1M97gTmfOnFGzZs0UEBCgL7/8UmlpaXrppZdUokQJ2zaMObjTxIkTNXPmTL322mvauXOnJk2apMmTJ+vVV1+1bcOYg7MuXLig+vXr67XXXstzvTNjafDgwVq8eLEWLFigdevW6bffflOHDh2UnZ1dWIcBMzBQqG6//Xajf//+dm01a9Y0RowY4aWKcLM4fvy4IclYvXq1YRiGkZOTY0RGRhoTJkywbfPHH38Y4eHhxsyZM71VJm5w58+fN6pXr26kpKQYLVq0MAYNGmQYBuMN7vfUU08ZzZs3v+p6xhzc7d577zUee+wxu7YuXboY//znPw3DYMyh4CQZixcvti07M5bOnj1rBAQEGAsWLLBtc+TIEcPPz89YunRpodUO72OGvRBdvnxZW7ZsUZs2beza27Rpow0bNnipKtwszp07J0mKiIiQJO3fv1/p6el24y0wMFAtWrRgvKHAkpKSdO+99+ruu++2a2e8wd0++eQTNWrUSA899JDKli2r2267TW+88YZtPWMO7ta8eXMtX75cu3fvliRt375d69atU/v27SUx5uA+zoylLVu2KDMz026bqKgo1alTh/HmY4p4uwBfcvLkSWVnZ6tcuXJ27eXKlVN6erqXqsLNwDAMDR06VM2bN1edOnUkyTam8hpvv/zyS6HXiBvfggUL9N133yk1NdVhHeMN7rZv3z7NmDFDQ4cO1dNPP61NmzZp4MCBCgwM1KOPPsqYg9s99dRTOnfunGrWrCl/f39lZ2frxRdf1D/+8Q9J/D0H93FmLKWnp6to0aIqWbKkwzbkBt9CYPcCi8Vit2wYhkMb4IoBAwbo+++/17p16xzWMd7gDocOHdKgQYP01VdfKSgo6KrbMd7gLjk5OWrUqJHGjx8vSbrtttu0Y8cOzZgxQ48++qhtO8Yc3GXhwoV655139N5776l27dratm2bBg8erKioKPXo0cO2HWMO7lKQscR48z1cEl+ISpcuLX9/f4ffih0/ftzhN2yAs5544gl98sknWrlypSpWrGhrj4yMlCTGG9xiy5YtOn78uBo2bKgiRYqoSJEiWr16tV555RUVKVLENqYYb3CX8uXLKzY21q6tVq1atoe08ncc3G348OEaMWKE/v73v6tu3brq3r27hgwZouTkZEmMObiPM2MpMjJSly9f1pkzZ666DXwDgb0QFS1aVA0bNlRKSopde0pKipo2beqlqnCjMgxDAwYM0KJFi7RixQrFxMTYrY+JiVFkZKTdeLt8+bJWr17NeIPL7rrrLv3www/atm2b7adR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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "df = users_with_project_job_files.copy()\n", + "# number of unique users\n", + "n = 30\n", + "# Group by 'username' and count the number of unique 'id' (projects) each user has\n", + "user_unique_projects = df.groupby('username')['uuid'].nunique()\n", + "# Sort users by the number of unique projects (descending order)\n", + "top_n_users = user_unique_projects.sort_values(ascending=False)\n", + "# Plot the top 15 users with their unique number of projects\n", + "plt.figure(figsize=(12, 6))\n", + "top_n_users.plot(kind='hist', bins = 'fd', color='royalblue')\n", + "plt.title(f'Histogram users that ran any job')\n", + "plt.ylabel('Number of User (in log scale)')\n", + "plt.xlabel('Number of Unique Projects')\n", + "plt.xticks(rotation=0, ha='right')\n", + "plt.yscale('log')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ce5c3dd2-299f-49fa-a3c8-361d114ab096", + "metadata": {}, + "source": [ + "## Number of Projects Associated With Each User" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "b07503e8-ed9a-48b7-9092-c03cab26818b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArYAAAHUCAYAAADP12sgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVvFJREFUeJzt3Xl8THfj/v9rEElEJCKINMTWkiD2tqiKvaFodaGt1lJ81LTWLnSxVYvepb3VoKu1rVaLW1ul1tJSS4iWhKK22lPLEGuS8/ujv8y30wQzMXHG5PV8PPK4nfc5Oeeak9H7cvKecyyGYRgCAAAAbnEFzA4AAAAAeALFFgAAAD6BYgsAAACfQLEFAACAT6DYAgAAwCdQbAEAAOATKLYAAADwCRRbAAAA+ASKLQAAAHwCxRa4SaZPny6LxeL4CggIUEREhJo2baoxY8bo+PHj2b5nxIgRslgsbh3n/PnzGjFihFatWuXW9+V0rPLly+v+++93az/X89lnn+ndd9/NcZ3FYtGIESM8ejxPW758uerVq6egoCBZLBYtWLAgx+1WrVoli8Wir776Ksf1zz77rNs/27yWmZmpWbNmqUWLFgoPD5efn59KlSql+++/X998840yMzPNjpjr97eZ9u3b5/R3v0CBAipRooTatGmjdevWefRY3bp1U/ny5T26z39atGiR1/8dRf5GsQVusmnTpmndunVaunSpbDabatWqpXHjxikmJkbLli1z2rZnz55u/x/f+fPnNXLkSLf/jz83x8qNaxXbdevWqWfPnnmeIbcMw9Cjjz4qPz8/LVy4UOvWrVOTJk3MjuURFy9eVJs2bdS1a1eVKlVKU6ZM0YoVKzR16lRFRkbqkUce0TfffGN2zFy/v73Bc889p3Xr1mnNmjUaM2aMtm7dqqZNm2rLli0eO8Zrr72m+fPne2x//7Zo0SKNHDkyz/YP3KhCZgcA8pvq1aurXr16juWHHnpIAwcO1D333KOOHTtq165dKl26tCQpKipKUVFReZrn/PnzKlKkyE051vXcfffdph7/eg4fPqyTJ0/qwQcfVPPmzc2O4xbDMHTx4kUFBgbmuH7QoEFasmSJZsyYoaeeesppXceOHfXCCy/owoULNyPqLenChQsKCAi45lX4cuXKOd7jjRo1UuXKldW8eXNNnjxZH374Ya73+0+VKlVyPzzgQ7hiC3iBcuXKafz48Tp79qzef/99x3hO0wNWrFih+Ph4lShRQoGBgSpXrpweeughnT9/Xvv27VPJkiUlSSNHjnT86rNbt25O+9u8ebMefvhhFS9e3PF/hNea9jB//nzFxcUpICBAFStW1MSJE53WZ02z2Ldvn9N41q/js66uxcfH67vvvtP+/fudfjWbJaepCNu2bVOHDh1UvHhxBQQEqFatWpoxY0aOx/n888/1yiuvKDIyUsWKFVOLFi20c+fOq5/4f/jpp5/UvHlzBQcHq0iRImrYsKG+++47x/oRI0Y4iv9LL70ki8Xi8V/5zp07V3fddZdCQkJUpEgRVaxYUT169HDaxm636/nnn1eFChVUuHBh3XbbbRowYIDS0tKctrNYLHr22Wc1depUxcTEyN/fP9t5y3L06FF99NFHat26dbZSm+X2229XXFycY/nAgQPq0qWLSpUqJX9/f8XExGj8+PFO0xX+/fPPkvWr+enTpzvGunXrpqJFi2r37t1q06aNihYtqrJly2rw4MG6dOmS4/uu9f7OSVaG2bNna9CgQYqIiFBgYKCaNGmS45XSTZs2qX379goLC1NAQIBq166tL7/80mmbrPf7Dz/8oB49eqhkyZIqUqSII6erskru/v37r7vfzMxMvfXWW6patar8/f1VqlQpPfXUU/rzzz+d9pnTVATDMDR58mTVqlVLgYGBKl68uB5++GH98ccf2TItXrxYzZs3d7wHY2JiNGbMGMe+bTabJDn9/f3333vATFyxBbxEmzZtVLBgQa1evfqq2+zbt09t27ZV48aN9cknnyg0NFSHDh3S4sWLdfnyZZUpU0aLFy/Wfffdp6efftrxa/2sMpClY8eO6ty5s/r06ZOtEP1bUlKSBgwYoBEjRigiIkKffvqp+vfvr8uXL+v555936zVOnjxZvXv31p49e1z6denOnTvVsGFDlSpVShMnTlSJEiU0e/ZsdevWTceOHdOLL77otP3LL7+sRo0a6aOPPpLdbtdLL72kdu3aKSUlRQULFrzqcX788Ue1bNlScXFx+vjjj+Xv76/JkyerXbt2+vzzz9WpUyf17NlTNWvWVMeOHfXcc8/p8ccfl7+/v1uv/1rWrVunTp06qVOnThoxYoQCAgK0f/9+rVixwrHN+fPn1aRJE/355596+eWXFRcXp+3bt2vYsGH67bfftGzZMqd/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fabg4GDVqVNHkhyfwv7111+dtlu4cGG2/fn7+7ucrXnz5lqxYoWjMGWZOXOmihQp4pHbgwUFBemuu+7SvHnznHJlZmZq9uzZioqK0h133OH2fm+//XZFR0dr7ty52aaYnDhxQitXrlSLFi1y/F5/f381adJE48aNkyTHp/fvv/9+7dmzRyVKlFC9evWyfeX2Lg0RERHq2bOnlixZopkzZ+a4zZ49exw/3+bNmys5OTnbVJSZM2fKYrGoadOmktx7X7gqt+/vzz//3OnnsH//fq1du9bxD8kqVaro9ttv19atW3M8t/Xq1VNwcHCuc9+IZs2aSZJmz57tNL5x40alpKRc89Zz999/vwzD0KFDh3J8TTVq1JAkNWzYUCEhIZo6deo1p0R5+r8vgKdxxRa4ybZt2+aY53b8+HGtWbNG06ZNU8GCBTV//vxrfsJ76tSpWrFihdq2baty5crp4sWLjqt3WSUpODhY0dHR+t///qfmzZsrLCxM4eHhuS49kZGRat++vUaMGKEyZcpo9uzZWrp0qcaNG6ciRYpI+nt+aJUqVfT8888rPT1dxYsX1/z58/XTTz9l21+NGjU0b948TZkyRXXr1lWBAgWuehVr+PDh+vbbb9W0aVMNGzZMYWFh+vTTT/Xdd9/prbfeUkhISK5e07+NGTNGLVu2VNOmTfX888+rcOHCmjx5srZt26bPP/8813MO3377bT366KNq3ry5evXqpYiICO3atUtjx45V4cKF9dprrzm2HTZsmP788081b95cUVFROn36tP773//Kz8/P8RCIAQMG6Ouvv9a9996rgQMHKi4uTpmZmTpw4IB++OEHDR48WHfddVeusk6YMEF//PGHunXrpiVLlujBBx9U6dKllZqaqqVLl2ratGmaM2eO4uLiNHDgQM2cOVNt27bVqFGjFB0dre+++06TJ0/WM8884/iHQEREhFq0aKExY8aoePHiio6O1vLlyzVv3rxcZZRy//4+fvy4HnzwQfXq1UtnzpzR8OHDFRAQoKFDhzq2ef/995WQkKDWrVurW7duuu2223Ty5EmlpKRo8+bNmjt3bq5z34gqVaqod+/eeu+991SgQAElJCQ47opQtmxZDRw48Krf26hRI/Xu3Vvdu3fXpk2bdO+99yooKEhHjhzRTz/9pBo1auiZZ55R0aJFNX78ePXs2VMtWrRQr169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AACfQLEFAACAT6DY3iSrV69Wu3btFBkZKYvFogULFpgdySuMGTNG9evXV3BwsEqVKqUHHnhAO3fuNDuW6aZMmaK4uDjHTcEbNGig77//3uxYXmfMmDGyWCwaMGCA2VFMN2LECFksFqeviIgIs2N5jUOHDqlLly4qUaKEihQpolq1aikxMdHsWKYqX758tveMxWKR1Wo1O5rp0tPT9eqrr6pChQoKDAxUxYoVNWrUKGVmZpodDdeR7588drOkpaWpZs2a6t69ux566CGz43iNH3/8UVarVfXr11d6erpeeeUVtWrVSsnJyQoKCjI7nmmioqI0duxYVa5cWZI0Y8YMdejQQVu2bFG1atVMTucdNm7cqA8++EBxcXFmR/Ea1apV07JlyxzLBQsWNDGN9zh16pQaNWqkpk2b6vvvv1epUqW0Z88ehYaGmh3NVBs3blRGRoZjedu2bWrZsqUeeeQRE1N5h3Hjxmnq1KmaMWOGqlWrpk2bNql79+4KCQlR//79zY6Ha6DY3iQJCQlKSEgwO4bXWbx4sdPytGnTVKpUKSUmJuree+81KZX52rVr57T8xhtvaMqUKfrll18otpLOnTunJ554Qh9++KFGjx5tdhyvUahQIa7S5mDcuHEqW7aspk2b5hgrX768eYG8RMmSJZ2Wx44dq0qVKqlJkyYmJfIe69atU4cOHdS2bVtJf79fPv/8c23atMnkZLgepiLAq5w5c0aSFBYWZnIS75GRkaE5c+YoLS1NDRo0MDuOV7BarWrbtq1atGhhdhSvsmvXLkVGRqpChQrq3Lmz/vjjD7MjeYWFCxeqXr16euSRR1SqVCnVrl1bH374odmxvMrly5c1e/Zs9ejRQxaLxew4prvnnnu0fPly/f7775KkrVu36qefflKbNm1MTobr4YotvIZhGBo0aJDuueceVa9e3ew4pvvtt9/UoEEDXbx4UUWLFtX8+fMVGxtrdizTzZkzR5s3b9bGjRvNjuJV7rrrLs2cOVN33HGHjh07ptGjR6thw4bavn27SpQoYXY8U/3xxx+aMmWKBg0apJdfflkbNmxQv3795O/vr6eeesrseF5hwYIFOn36tLp162Z2FK/w0ksv6cyZM6pataoKFiyojIwMvfHGG3rsscfMjobroNjCazz77LP69ddf9dNPP5kdxStUqVJFSUlJOn36tL7++mt17dpVP/74Y74utwcPHlT//v31ww8/KCAgwOw4XuWfU51q1KihBg0aqFKlSpoxY4YGDRpkYjLzZWZmql69enrzzTclSbVr19b27ds1ZcoUiu3/7+OPP1ZCQoIiIyPNjuIVvvjiC82ePVufffaZqlWrpqSkJA0YMECRkZHq2rWr2fFwDRRbeIXnnntOCxcu1OrVqxUVFWV2HK9QuHBhx4fH6tWrp40bN+q///2v3n//fZOTmScxMVHHjx9X3bp1HWMZGRlavXq1Jk2apEuXLvGBqf9fUFCQatSooV27dpkdxXRlypTJ9g/CmJgYff311yYl8i779+/XsmXLNG/ePLOjeI0XXnhBQ4YMUefOnSX9/Y/F/fv3a8yYMRRbL0exhakMw9Bzzz2n+fPna9WqVapQoYLZkbyWYRi6dOmS2TFM1bx5c/32229OY927d1fVqlX10ksvUWr/4dKlS0pJSVHjxo3NjmK6Ro0aZbuN4O+//67o6GiTEnmXrA/tZn1QCtL58+dVoIDzx5AKFizI7b5uARTbm+TcuXPavXu3Y3nv3r1KSkpSWFiYypUrZ2Iyc1mtVn322Wf63//+p+DgYB09elSSFBISosDAQJPTmefll19WQkKCypYtq7Nnz2rOnDlatWpVtrtI5DfBwcHZ5l8HBQWpRIkS+X5e9vPPP6927dqpXLlyOn78uEaPHi273c7VJUkDBw5Uw4YN9eabb+rRRx/Vhg0b9MEHH+iDDz4wO5rpMjMzNW3aNHXt2lWFClEJsrRr105vvPGGypUrp2rVqmnLli2aMGGCevToYXY0XI+Bm2LlypWGpGxfXbt2NTuaqXI6J5KMadOmmR3NVD169DCio6ONwoULGyVLljSaN29u/PDDD2bH8kpNmjQx+vfvb3YM03Xq1MkoU6aM4efnZ0RGRhodO3Y0tm/fbnYsr/HNN98Y1atXN/z9/Y2qVasaH3zwgdmRvMKSJUsMScbOnTvNjuJV7Ha70b9/f6NcuXJGQECAUbFiReOVV14xLl26ZHY0XIfFMAzDnEoNAAAAeA73sQUAAIBPoNgCAADAJ1BsAQAA4BMotgAAAPAJFFsAAAD4BIotAAAAfALFFgAAAD6BYgsAAACfQLEFAEn79u2TxWJRUlKS2VEcduzYobvvvlsBAQGqVatWnh8vPj5eAwYMyPPjAEBeodgC8ArdunWTxWLR2LFjncYXLFggi8ViUipzDR8+XEFBQdq5c6eWL1+e4zZXK6O5OW/z5s3T66+/npuoHjV9+nSFhobmuC40NFTTp0+/qXkA3DootgC8RkBAgMaNG6dTp06ZHcVjLl++nOvv3bNnj+655x5FR0erRIkSHkyVs7CwMAUHB+f5cbzVlStXzI4A4AZRbAF4jRYtWigiIkJjxoy56jYjRozI9mv5d999V+XLl3csd+vWTQ888IDefPNNlS5dWqGhoRo5cqTS09P1wgsvKCwsTFFRUfrkk0+y7X/Hjh1q2LChAgICVK1aNa1atcppfXJystq0aaOiRYuqdOnSevLJJ5WamupYHx8fr2effVaDBg1SeHi4WrZsmePryMzM1KhRoxQVFSV/f3/VqlVLixcvdqy3WCxKTEzUqFGjZLFYNGLEiKufOBdknbdZs2apfPnyCgkJUefOnXX27Fmn7P+8+nv8+HG1a9dOgYGBqlChgj799FOVL19e7777rqScp2+cPn1aFovF6bxd75zl1uXLl/Xss8+qTJkyCggIUPny5Z3eO2fOnFHv3r1VqlQpFStWTM2aNdPWrVuznZNPPvlEFStWlL+/vwzD0FdffaUaNWooMDBQJUqUUIsWLZSWlnbDeQHkPYotAK9RsGBBvfnmm3rvvff0559/3tC+VqxYocOHD2v16tWaMGGCRowYofvvv1/FixfX+vXr1adPH/Xp00cHDx50+r4XXnhBgwcP1pYtW9SwYUO1b99ef/31lyTpyJEjatKkiWrVqqVNmzZp8eLFOnbsmB599FGnfcyYMUOFChXSzz//rPfffz/HfP/97381fvx4vf322/r111/VunVrtW/fXrt27XIcq1q1aho8eLCOHDmi559//obOh/T3FeAFCxbo22+/1bfffqsff/wx29SPf+rWrZv27dunFStW6KuvvtLkyZN1/Phxt47p6jnLjYkTJ2rhwoX68ssvtXPnTs2ePdvxDxzDMNS2bVsdPXpUixYtUmJiourUqaPmzZvr5MmTjn3s3r1bX375pb7++mslJSXp6NGjeuyxx9SjRw+lpKRo1apV6tixowzDuOG8AG4CAwC8QNeuXY0OHToYhmEYd999t9GjRw/DMAxj/vz5xj//UzV8+HCjZs2aTt/7zjvvGNHR0U77io6ONjIyMhxjVapUMRo3buxYTk9PN4KCgozPP//cMAzD2Lt3ryHJGDt2rGObK1euGFFRUca4ceMMwzCM1157zWjVqpXTsQ8ePGhIMnbu3GkYhmE0adLEqFWr1nVfb2RkpPHGG284jdWvX9/o27evY7lmzZrG8OHDr7mfJk2aGP379882ntN5K1KkiGG32x1jL7zwgnHXXXfluK+dO3cakoxffvnFsT4lJcWQZLzzzjuGYfy/c7ZlyxbHNqdOnTIkGStXrjQMw7Vz9m/Tpk0zQkJCclwXEhJiTJs2zTAMw3juueeMZs2aGZmZmdm2W758uVGsWDHj4sWLTuOVKlUy3n//fcc58fPzM44fP+5Yn5iYaEgy9u3bl+PxAXg3rtgC8Drjxo3TjBkzlJycnOt9VKtWTQUK/L//xJUuXVo1atRwLBcsWFAlSpTIdgWyQYMGjj8XKlRI9erVU0pKiiQpMTFRK1euVNGiRR1fVatWlfT31dAs9erVu2Y2u92uw4cPq1GjRk7jjRo1chwrL5QvX95pDm2ZMmWuegU2JSXF8fqzVK1a9aof6roaV89ZbnTr1k1JSUmqUqWK+vXrpx9++MHpuOfOnVOJEiWcjr13716n40ZHR6tkyZKO5Zo1a6p58+aqUaOGHnnkEX344Yc+Necb8HWFzA4AAP927733qnXr1nr55ZfVrVs3p3UFChTI9mvhnD704+fn57RssVhyHMvMzLxunqy7C2RmZqpdu3YaN25ctm3KlCnj+HNQUNB19/nP/WYxDMPtOxkUK1ZMZ86cyTZ++vRpFStWzGnMndefdY6vlSfrHw7//Hn8+2fh6jn7p2LFiuncuXPKyMhQwYIFHeMZGRk6d+6cQkJCJEl16tTR3r179f3332vZsmV69NFH1aJFC3311VfKzMxUmTJlss2RluRUzv/9sypYsKCWLl2qtWvX6ocfftB7772nV155RevXr1eFChWuei4AeAeu2ALwSmPHjtU333yjtWvXOo2XLFlSR48edSpTnrz37C+//OL4c3p6uhITEx1XGOvUqaPt27erfPnyqly5stOXq2VW+ru4RUZG6qeffnIaX7t2rWJiYtzKW7VqVW3atCnb+MaNG1WlShW39vVPMTExSk9Pd9r3zp07dfr0acdy1pXOI0eOOMb+/bPIzTmrWrWqMjIytGXLFqfxzZs3KyMjw+l1FStWTJ06ddKHH36oL774Ql9//bVOnjypOnXq6OjRoypUqFC244aHh1/ztVssFjVq1EgjR47Uli1bVLhwYc2fP/+a3wPAO1BsAXilGjVq6IknntB7773nNB4fH68TJ07orbfe0p49e2Sz2fT999977Lg2m03z58/Xjh07ZLVaderUKfXo0UOSZLVadfLkST322GPasGGD/vjjD/3www/q0aOHMjIy3DrOCy+8oHHjxumLL77Qzp07NWTIECUlJal///5u7adv377as2ePrFartm7dqt9//102m00ff/yxXnjhBbf29U9VqlTRfffdp169emn9+vVKTExUz549FRgY6NgmMDBQd999t8aOHavk5GStXr1ar776qtN+cnPOYmNjlZCQoB49emjZsmXau3evli1bpqeffloJCQmKjY2VJL3zzjuaM2eOduzYod9//11z585VRESEQkND1aJFCzVo0EAPPPCAlixZon379mnt2rV69dVXc/yHQJb169frzTff1KZNm3TgwAHNmzdPJ06ccPsfHADMQbEF4LVef/31bNMOYmJiNHnyZNlsNtWsWVMbNmzwyB0DsowdO1bjxo1TzZo1tWbNGv3vf/9zXOGLjIzUzz//rIyMDLVu3VrVq1dX//79FRIS4jSf1xX9+vXT4MGDNXjwYNWoUUOLFy/WwoULdfvtt7u1n/Lly2vNmjXas2ePWrVqpfr162v69OmaPn26HnnkEbf29W/Tpk1T2bJl1aRJE3Xs2NFx66x/+uSTT3TlyhXVq1dP/fv31+jRo53W5/aczZkzRy1atNAzzzyj2NhYPfPMM2revLk+//xzxzZFixbVuHHjVK9ePdWvX1/79u3TokWLVKBAAVksFi1atEj33nuvevTooTvuuEOdO3fWvn37VLp06aset1ixYlq9erXatGmjO+64Q6+++qrGjx+vhISEXJ5FADeTxfj3/2sAAHAV5cuX14ABA3j0LgCvxBVbAAAA+ASKLQAAAHwCUxEAAADgE7hiCwAAAJ9AsQUAAIBPoNgCAADAJ1BsAQAA4BMotgAAAPAJFFsAAAD4BIotAAAAfALFFgAAAD7h/wNTAwL3iZwZ9gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Count unique users per project (uuid)\n", + "users_per_project = users_with_project_job_files.groupby('uuid')['username'].nunique()\n", + "# Step 2: Plot histogram\n", + "plt.figure(figsize=(8, 5))\n", + "bins = range(1, users_per_project.max() + 2) # +2 to include the last bin\n", + "counts, edges, patches = plt.hist(users_per_project, bins=bins, color='coral', edgecolor='black')\n", + "\n", + "# Step 3: Plot formatting\n", + "plt.title('Distribution of User Count per Project')\n", + "plt.xlabel('Number of Unique Users')\n", + "plt.ylabel('Number of Projects (in log scale)')\n", + "plt.xticks(range(1, users_per_project.max() + 1))\n", + "plt.yscale('log')\n", + "\n", + "# Step 4: Add count labels on top of each bar\n", + "for count, edge in zip(counts, edges[:-1]):\n", + " if count > 0:\n", + " plt.text(edge + 0.4, count + 1, str(int(count)), ha='center', va='bottom', fontsize=9)\n", + "\n", + "# Show the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "dcb13923-3eef-4802-a421-3b9607937e8d", + "metadata": {}, + "source": [ + "## Number of Jobs Run Each Year" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "1d4d1e87-21cd-4242-aaf7-d24c41d4fdd9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique JobUUID: 5087\n" + ] + }, + { + "data": { + "image/png": "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AEDdunXRqVMnjBw5EmvWrAEAjBo1Ct7e3kVaAYKIiIiIyg+1FsCrV68GALi7uyu0r1+/HkOHDgUATJkyBenp6Rg7diwSEhLQvHlzHD58GIaGhlL/H374Adra2ujTpw/S09PRvn17bNiwAVpaWlKfLVu2YMKECdJqEd26dcOKFStUmyARERERlTqlah3g0ozrAL8nrgNMREREJaRMrgNMRERERKRqLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0CgtgIiIiItIoLICJiIiISKOwACYiIiIijcICmIiIiIg0iloL4FOnTqFr166wtbWFTCbDnj17FPbLZLICt//9739SH3d393z7+/Xrp3CchIQEDBo0CHK5HHK5HIMGDUJiYmIJZEhEREREpY1aC+C0tDQ0bNgQK1asKHB/dHS0wvbLL79AJpOhV69eCv1Gjhyp0G/NmjUK+319fREaGorg4GAEBwcjNDQUgwYNUlleRERERFR6aavz5F5eXvDy8ip0v7W1tcLjP//8E+3atUP16tUV2itVqpSvb547d+4gODgYFy5cQPPmzQEAa9euRcuWLXHv3j3Url37A7MgIiIiorKkzMwBfvbsGfbv34/hw4fn27dlyxaYm5ujfv368Pf3R0pKirTv/PnzkMvlUvELAC1atIBcLse5c+cKPV9GRgaSk5MVNiIiIiIq+9Q6Alwcv/76KwwNDdGzZ0+F9gEDBsDBwQHW1tYICwtDQEAA/v77bxw5cgQAEBMTA0tLy3zHs7S0RExMTKHnmzdvHmbPnq3cJIiIiIhI7cpMAfzLL79gwIAB0NPTU2gfOXKk9LWTkxNq1qwJV1dXXLt2DS4uLgD+u5juTUKIAtvzBAQEwM/PT3qcnJwMOzu7D02DiIiIiNSsTBTAp0+fxr1797Bt27Z39nVxcYGOjg7u378PFxcXWFtb49mzZ/n6PX/+HFZWVoUeR1dXF7q6uh8UNxERERGVPmViDnBQUBCaNGmChg0bvrPvrVu3kJWVBRsbGwBAy5YtkZSUhEuXLkl9Ll68iKSkJLi5uaksZiIiIiIqndQ6ApyamooHDx5Ij8PDwxEaGgpTU1NUrVoVwH9TD7Zv347Fixfne/7Dhw+xZcsWdO7cGebm5rh9+zYmT56Mxo0bo1WrVgCAunXrolOnThg5cqS0PNqoUaPg7e3NFSCIiIiINJBaR4CvXLmCxo0bo3HjxgAAPz8/NG7cGDNnzpT6bN26FUII9O/fP9/zK1asiGPHjqFjx46oXbs2JkyYAE9PTxw9ehRaWlpSvy1btsDZ2Rmenp7w9PREgwYNsGnTJtUnSERERESljkwIIdQdRFmQnJwMuVyOpKQkGBkZqTucsiOwhxrPvVt95yYiIqISV9R6rUzMASYiIiIiUhYWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBqFBTARERERaRQWwERERESkUVgAExEREZFGYQFMRERERBpFrQXwqVOn0LVrV9ja2kImk2HPnj0K+4cOHQqZTKawtWjRQqFPRkYGxo8fD3NzcxgYGKBbt26IiopS6JOQkIBBgwZBLpdDLpdj0KBBSExMVHF2RERERFQaqbUATktLQ8OGDbFixYpC+3Tq1AnR0dHSduDAAYX9kyZNwu7du7F161acOXMGqamp8Pb2Rk5OjtTH19cXoaGhCA4ORnBwMEJDQzFo0CCV5UVEREREpZe2Ok/u5eUFLy+vt/bR1dWFtbV1gfuSkpIQFBSETZs2wcPDAwCwefNm2NnZ4ejRo+jYsSPu3LmD4OBgXLhwAc2bNwcArF27Fi1btsS9e/dQu3Zt5SZFRERERKVaqZ8DfOLECVhaWqJWrVoYOXIkYmNjpX1Xr15FVlYWPD09pTZbW1s4OTnh3LlzAIDz589DLpdLxS8AtGjRAnK5XOpTkIyMDCQnJytsRERERFT2leoC2MvLC1u2bMHx48exePFiXL58GZ988gkyMjIAADExMahYsSJMTEwUnmdlZYWYmBipj6WlZb5jW1paSn0KMm/ePGnOsFwuh52dnRIzIyIiIiJ1UesUiHfp27ev9LWTkxNcXV1hb2+P/fv3o2fPnoU+TwgBmUwmPX7968L6vCkgIAB+fn7S4+TkZBbBREREROVAqR4BfpONjQ3s7e1x//59AIC1tTUyMzORkJCg0C82NhZWVlZSn2fPnuU71vPnz6U+BdHV1YWRkZHCRkRERERlX5kqgOPi4hAZGQkbGxsAQJMmTaCjo4MjR45IfaKjoxEWFgY3NzcAQMuWLZGUlIRLly5JfS5evIikpCSpDxERERFpDrVOgUhNTcWDBw+kx+Hh4QgNDYWpqSlMTU0RGBiIXr16wcbGBhEREZg+fTrMzc3Ro0cPAIBcLsfw4cMxefJkmJmZwdTUFP7+/nB2dpZWhahbty46deqEkSNHYs2aNQCAUaNGwdvbmytAEBEREWkgtRbAV65cQbt27aTHeXNuhwwZgtWrV+PmzZvYuHEjEhMTYWNjg3bt2mHbtm0wNDSUnvPDDz9AW1sbffr0QXp6Otq3b48NGzZAS0tL6rNlyxZMmDBBWi2iW7dub117mIiIiIjKL5kQQqg7iLIgOTkZcrkcSUlJnA9cHIE91Hju3eo7NxEREZW4otZrZWoOMBERERHRh2IBTEREREQahQUwEREREWkUFsBEREREpFFYABMRERGRRmEBTEREREQahQUwEREREWkUFsBEREREpFGKXQAHBwfjzJkz0uOVK1eiUaNG8PX1RUJCglKDIyIiIiJStmIXwF999RWSk5MBADdv3sTkyZPRuXNnPHr0SLqVMRERERFRaaVd3CeEh4ejXr16AICdO3fC29sbc+fOxbVr19C5c2elB0hEREREpEzFHgGuWLEiXr58CQA4evQoPD09AQCmpqbSyDARERERUWlV7BHg1q1bw8/PD61atcKlS5ewbds2AMA///yDjz76SOkBEhEREREpU7FHgFesWAFtbW3s2LEDq1evRpUqVQAABw8eRKdOnZQeIBERERGRMhV7BLhq1arYt29fvvYffvhBKQEREREREalSsQtgAMjJycHu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VP5lZGRg8+bNaNasGZycnPLtzyt+Hz16hMOHD6Nx48bFOn5ISAgAoEaNGkqJl4iIqLwr9VMgXhcUFAQvLy/Y2tpKbX379pW+dnJygqurK+zt7bF//3707Nmz0GMJId56a+eAgAD4+flJj5OTk1kE03vZs2cP4uPjCxz9TU9PR8eOHXH9+nX8+OOPyM7OxoULF6T9FhYW0lrCa9aswenTp+Hp6Qk7OzukpaXh9OnTWL58Odzc3NC9e/cSy4mIiKgsKzMF8OPHj3H06FHs2rXrrf1sbGxgb2+P+/fvAwCsra2RmZmJhIQEhVHg2NhYuLm5FXocXV3dQudqEhVHUFAQDAwM0K9fv3z7nj17hsuXLwMAJk6cmG//kCFDpNuQOzs7Y9++fQgICMCLFy+gra2NmjVrYvr06fDz8+M6wEREREVUZv7HXL9+PSwtLdGlS5e39ouLi0NkZCRsbGwAAE2aNIGOjg6OHDmCPn36AACio6MRFhaGhQsXqjxuosOHDxe6r1q1aijq3cjd3Nywd+9eZYVFRESkscpEAZybm4v169djyJAhCqNcqampCAwMRK9evWBjY4OIiAhMnz4d5ubm0tXwcrkcw4cPx+TJk2FmZgZTU1P4+/vD2dlZWhWCiIiIiDRHmSiAjx49iidPnki3j82jpaWFmzdvYuPGjUhMTISNjQ3atWuHbdu2wdDQUOr3ww8/QFtbG3369EF6ejrat2+PDRs2cA1gUp1ANS5HFrhbfecmIiIqA8pEAezp6Vngx8T6+vo4dOjQO5+vp6eH5cuXY/ny5aoIj4iIiIjKkDK1DBoRERER0YdiAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARKRy69atg0wmQ+XKlfPty8rKwpIlS+Ds7Ax9fX0YGxvDzc0N586dU+gXHR2NoUOHwtLSEnp6emjQoAGCgoJKKgUi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muGnn37Co0ePIIRAeno6mjZtmq+fq6srTp48idTUVFSuXFlhX94892+++aakwiYNxovgiIiIlCRvnvebRo0ahQ4dOhS6ru3Zs2dhZWUlFb95vL29kZaWhuDgYJXEqywhISGoUKECqlevDltbWwDAhQsXFPoIIXDhwgWYmJjAwMAg3zE4z51KEkeAiYiI3lNubi5yc3ORkJCA7du349ChQ/nm9q5btw6XLl3C7du3Cz1OZmYmdHV187Xntd24cQP9+vVTbvDvYdSoUTAyMkKzZs1gZWWFFy9eYPv27di2bRu++uoraQpPz5498fPPP0NXVxedO3dGRkYGfv31V5w9exbffvttvrWuS+08dyq3WAATEX0oDb4YTNO9azWEp0+fwt/fHwsXLpRGRgtSr149HD16FE+ePJHm1gLAmTNnABS8brQ6tGzZEuvXr8evv/6KxMREVK5cGQ0bNsSmTZsULv7bsmULVqxYgU2bNuGXX36Bjo4OatWqhc2bN8PX1zffcTnPnUoaC2AiIqL39K7VED7//HM0bNgQI0eOfOtxRo0ahdWrV2PAgAH46aefYG1tja1bt2Lbtm0AgAoVSseMxc8++wyfffbZO/vp6enB399f+j68C+e5U0ljAUxERPSe3rYawsmTJxEcHIwzZ84gKSlJ4XmZmZlITEyEgYEBdHR0ULduXezevRujR4+Gk5MTAMDOzg6LFy/G+PHjUaVKlZJNjKicYwFMRESkJK+vhhAWFobs7Gy0aNEiX7+1a9di7dq12L17N3x8fAD8t0zY48eP8eDBA2RnZ6NWrVr4448/AABt2rQpyTQKxqk+VI6wACYiIlKS11dDGDp0aIE3R2nXrh18fHwwceJEabQ3j0wmQ82aNQH8N0q8dOlSNGrUqHQUwETlCAtgIiKiYirKaggWFhaoVq1agc+vUqVKvuJ4/PjxcHd3h5mZGR49eoRly5YhKioKJ0+eVH1CRBqGBTAREVExFXU1hOKIjIzE+PHj8eLFC5iZmaFTp074888/YW9vr+ToiYgFMBERUTEVdTWEggghCmzfs2fPB0RERMVROtZVISIiIiIqISyAiYiIiEijcAoEERFRcXA5MKIyjyPARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbARERERKRRWAATERERkUZhAUxEREREGoUFMBERERFpFBbA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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# Convert 'last_updated' to datetime format\n", + "df = df_projectJob.copy()\n", + "df = df[df.projectUuid.isin(job_files_with_verified_users.projectUuid)]\n", + "print(f'Number of unique JobUUID: {df.jobUuid.nunique()}')\n", + "## Filter the projectUUID by verified user\n", + "\n", + "df['last_updated'] = pd.to_datetime(df['lastUpdated'], utc = True)\n", + " # Extract the year from 'last_updated'\n", + "df['year'] = df['last_updated'].dt.year\n", + "# Count the number of unique users per year\n", + "unique_jobs_by_year = df.groupby('year')['jobUuid'].nunique()\n", + "\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "ax = unique_jobs_by_year.plot(kind='bar', color='coral')\n", + "for i, value in enumerate(unique_jobs_by_year.values):\n", + " ax.text(i, value + 0.1, str(value), ha='center', va='bottom', fontsize=12)\n", + "plt.title('Number of Unique Jobs Ran Each Year')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Jobs')\n", + "plt.xticks(rotation=45)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "f3964c95-689c-4d45-9ad5-21f939494c3a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAHpCAYAAABwcaFGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAie1JREFUeJzs3Xlcjen/P/DXaTvte0qE7EuyZMuaIVliaIYhIrsJYYQsQ/YtY23GFlnG8rHvIfs61pDd2CmhjaT1+v3h1/11TkUnaZvX8/E4j5lz3e9z3e/rnNK7q+u+bpkQQoCIiIiIiCRq+Z0AEREREVFBwyKZiIiIiEgJi2QiIiIiIiUskomIiIiIlLBIJiIiIiJSwiKZiIiIiEgJi2QiIiIiIiUskomIiIiIlLBIJiIiIiJSwiKZqBALCgqCTCaDtrY2njx5kuG4k5MT7Ozs8iEz4Pjx45DJZNi6dWu+nF9Vjx8/Rrt27WBqagqZTIbhw4dnGSuTyTBkyJBMj23duhUymQzHjx/PUQ4ymQxBQUEqvzYvlSlTBjKZTHro6+ujfv36WLt2ba6eJ/3r+/Hjx7nab7pbt27Bz88vV/v39PRUeG+UH99LmTJl4OrqqvLrtmzZAplMhsWLF2d6fMCAAZDL5bh+/fq3pkhU6GjkdwJE9O0SExMxYcIErFu3Lr9TKbRGjBiBf/75B6tWrYKVlRWKFy+e5zkUL14c586dQ7ly5fL83Kpq1KgR/P39AQDPnz+Hv78/evXqhfj4ePz666+5co527drh3Llz3+2zuHXrFiZPngwnJyeUKVMm1/rV0dHB0aNHc62/76lz585wd3eHr68v2rRpg/Lly0vHDh06hBUrVmDmzJmwt7fPxyyJ8geLZKIioHXr1tiwYQN8fHxQo0aN/E4nTyUkJEBbW/ubZ+nCwsJQr149dOzYMXcSywG5XI4GDRrk2/lVYWxsrJBry5YtUbp0afzxxx9ZFsmpqalISUmBXC7P1jksLCxgYWGRK/nmJTU1tULzOQLAkiVLcPz4cXh6euLkyZNQU1NDXFwc+vXrB0dHR4waNSpP8vjw4QN0dXXz5FxE2cHlFkRFwOjRo2FmZoYxY8Z8Me5Lf86XyWTw8/OTnvv5+UEmk+H69evo3LkzjIyMYGpqit9++w0pKSm4e/cuWrduDQMDA5QpUwZz5szJ9JwfP37Eb7/9BisrK+jo6KBZs2a4evVqhrhLly6hQ4cOMDU1hba2NmrVqoX//e9/CjHpf34/dOgQ+vTpAwsLC+jq6iIxMTHLMT99+hQ9evRAsWLFIJfLUaVKFcybNw9paWkA/m9ZyIMHD3DgwAHpz+K5+Sf49GUvFy9eRJMmTaCrq4uyZcti1qxZUh5A1p/Pvn37ULNmTcjlctja2sLf31/6fL72WiDjZwsA9+/fh7u7u8L7EhAQkOMxGhsbo1KlStKyn/R85syZg2nTpsHW1hZyuRzHjh0DAOzevRuOjo7Q1dWFgYEBnJ2dce7cOYU+s1puERISghYtWsDQ0BC6urpo1KgRjhw5kiGnO3fuoFu3brC0tIRcLkepUqXQs2dPJCYmIigoCJ07dwYANG/eXPrc09+/q1evwtXVVXp/rK2t0a5dOzx//jzH79HnPn78iJEjR6JmzZrS95ajoyN27dqVITYtLQ2LFy9GzZo1oaOjI/2Csnv37gyxwcHBqF27NnR0dFC5cmWsWrXqq7mYmJggMDAQZ86cwfz58wF8+svK27dvsWbNGqirqyMuLg4+Pj6wtbWFlpYWSpQogeHDhyM+Pl6hr4CAADRt2hTFihWDnp4eqlevjjlz5iA5OVkhLv174uTJk2jYsCF0dXXRp08fVd5Cou+OM8lERYCBgQEmTJiAYcOG4ejRo/jhhx9yre8uXbqgR48eGDhwIA4fPiz9wAsJCYGXlxd8fHywYcMGjBkzBuXLl4ebm5vC68eNG4fatWtj5cqViI2NhZ+fH5ycnHD16lWULVsWAHDs2DG0bt0a9evXx9KlS2FkZIRNmzbhl19+wYcPH+Dp6anQZ58+fdCuXTusW7cO8fHx0NTUzDT3169fo2HDhkhKSsLUqVNRpkwZ7N27Fz4+Pvj333/x559/onbt2jh37hw6deqEcuXKSUsIcvtP/BEREejevTtGjhyJSZMmYceOHRg7diysra3Rs2fPLF935MgR/Pjjj3B0dMSmTZuQmpqKOXPm4NWrVznO5datW2jYsCFKlSqFefPmwcrKCgcPHoS3tzfevHmDSZMmqdxncnIynjx5kmHmd9GiRahYsSL8/f1haGiIChUqYMOGDejevTtatWqFjRs3IjExEXPmzIGTkxOOHDmCxo0bZ3me9evXo2fPnvjxxx+xZs0aaGpqYtmyZXBxccHBgwfRokULAMC1a9fQuHFjmJubY8qUKahQoQLCw8Oxe/duJCUloV27dpgxYwbGjRuHgIAA1K5dGwBQrlw5xMfHw9nZGba2tggICIClpSUiIiJw7NgxvHv3LlvvR0pKSoY2NTU1qKl9mptKTExEVFQUfHx8UKJECSQlJSEkJARubm5YvXq1wteEp6cn1q9fj759+2LKlCnQ0tLClStXMvzycO3aNYwcORK+vr6wtLTEypUr0bdvX5QvXx5Nmzb9Yr6tW7fGwIEDMWHCBKipqWHVqlVYsmQJKlSogA8fPqBZs2Z4/vw5xo0bB3t7e9y8eRMTJ07EjRs3EBISIv3C9u+//8Ld3V0qpq9du4bp06fjzp07GQr28PBw9OjRA6NHj8aMGTOk94aowBBEVGitXr1aABAXL14UiYmJomzZsqJOnToiLS1NCCFEs2bNRLVq1aT4R48eCQBi9erVGfoCICZNmiQ9nzRpkgAg5s2bpxBXs2ZNAUBs375daktOThYWFhbCzc1Najt27JgAIGrXri3lI4QQjx8/FpqamqJfv35SW+XKlUWtWrVEcnKywrlcXV1F8eLFRWpqqsJ4e/bsma33x9fXVwAQ//zzj0L7r7/+KmQymbh7967UVrp0adGuXbts9QtADB48ONNjW7ZsEQDEsWPHpLZmzZplmkfVqlWFi4uL9Dyzz6d+/frC2tpaJCQkSG1xcXHC1NRUfP5PuCqfrYuLiyhZsqSIjY1ViBsyZIjQ1tYWUVFRXxq+KF26tGjbtq1ITk4WycnJ4tGjR6JXr14CgBg1apRCPuXKlRNJSUnSa1NTU4W1tbWoXr269LkKIcS7d+9EsWLFRMOGDaW29M/70aNHQggh4uPjhampqWjfvr1CPqmpqaJGjRqiXr16UtsPP/wgjI2NRWRkZJbjyOyzEkKIS5cuCQBi586dX3wfMpP+PmT2aNGiRZavS0lJEcnJyaJv376iVq1aUvvJkycFADF+/Pgvnrd06dJCW1tbPHnyRGpLSEgQpqamYuDAgdnK/d27d6Js2bICgGjZsqX0fTtz5kyhpqYmLl68qBC/detWAUDs378/0/5SU1NFcnKyWLt2rVBXV1f4ukr/njhy5Ei2ciPKD/y1jaiI0NLSwrRp03Dp0qUMyxS+hfIV81WqVIFMJkObNm2kNg0NDZQvXz7THTbc3d0VlgWULl0aDRs2lP7s/uDBA9y5cwfdu3cH8GkGLv3Rtm1bhIeH4+7duwp9/vTTT9nK/ejRo6hatSrq1aun0O7p6QkhRJ5eXGVlZZUhD3t7+0zfs3Tx8fG4ePEi3NzcoK2tLbUbGBigffv2Ocrj48ePOHLkCDp16gRdXd0M7/fHjx9x/vz5r/azf/9+aGpqQlNTE7a2tvjf//6HoUOHYtq0aQpxHTp0UJjpv3v3Ll6+fAkPDw+FmUN9fX389NNPOH/+PD58+JDpOc+ePYuoqCj06tVLIe+0tDS0bt0aFy9eRHx8PD58+IATJ06gS5cuOVrTXL58eZiYmGDMmDFYunQpbt26pdLrdXR0cPHixQyPP//8UyFuy5YtaNSoEfT19aGhoQFNTU0EBgbi9u3bUsyBAwcAAIMHD/7qeWvWrIlSpUpJz7W1tVGxYsUvfo19Tl9fH6NHjwYATJ48Wfq+3bt3L+zs7FCzZk2F993FxSXDTi5Xr15Fhw4dYGZmBnV1dWhqaqJnz55ITU3FvXv3FM5nYmKSq3/1IsptXG5BVIR07doV/v7+GD9+fIZlDzllamqq8FxLSwu6uroKRVt6e1xcXIbXW1lZZdp27do1AJCWDfj4+MDHxyfTHN68eaPwPLtLId6+fZvprgXW1tbS8ZxQV1dHampqpsfS/8yuvATEzMwsQ6xcLkdCQkKW54mOjkZaWlqW72FOvH37FikpKVi8eHGW234pv9+Zady4MebPnw+ZTAZdXV2UK1cOWlpaGeKUP6v09zyzz9Da2hppaWmIjo7O9AKu9K+Vn3/+Ocu8oqKioKamhtTUVJQsWfKr48iMkZERTpw4genTp2PcuHGIjo5G8eLF0b9/f0yYMCHL5T3p1NTUUKdOnS/GbN++HV26dEHnzp0xatQoWFlZQUNDA3/99ZfCsoTXr19DXV09W593Tr7GMosHoPBZvnr1Cg8ePMhy3OlfL0+fPkWTJk1QqVIlLFy4EGXKlIG2tjYuXLiAwYMHZ8gjP3aQIVIFi2SiIkQmk2H27NlwdnbG8uXLMxxPL2yVL3TLabGYHREREZm2pf9ANzc3BwCMHTs2y8K+UqVKCs+zu5OFmZkZwsPDM7S/fPlS4dyqsrS0xIsXLzI9lt5uaWmZo74/Z2JiAplMluV7+LnsfrYmJiZQV1eHh4dHlrOTtra2X83NyMjoq4UgkPGzSv/cs/pc1NTUYGJikmlf6Z/X4sWLs9w9wtLSEqmpqVBXV/+mi+yqV6+OTZs2QQiB69evIygoCFOmTIGOjg58fX1z3G+69evXw9bWFps3b1Z4j5Q/PwsLC6SmpiIiIiLfikpzc3Po6OhkeRFg+ueyc+dOxMfHY/v27ShdurR0PDQ0NNPXfc99o4lyA5dbEBUxLVu2hLOzM6ZMmYL3798rHLO0tIS2tnaGGwNkdkV9btm4cSOEENLzJ0+e4OzZs3BycgLwqQCuUKECrl27hjp16mT6MDAwyNG5W7RogVu3buHKlSsK7WvXroVMJkPz5s1z1G/Lli1x7NgxvH79WqFdCIEtW7agTJkyCvvN5pSenh7q1auH7du34+PHj1L7u3fvsGfPHoXY7H62urq6aN68Oa5evQp7e/tM3+/MZiRzS6VKlVCiRAls2LBB4esiPj4e27Ztk3a8yEyjRo1gbGyMW7duZfm1oqWlJe2ismXLli/OiqfPmn5pplUmk6FGjRqYP38+jI2NM3wt5ZRMJoOWlpZCoRgREZHh80pf1vTXX3/lynlzwtXVFf/++y/MzMwyfc/T/1qTPpbPt/gTQmDFihX5kTbRN+NMMlERNHv2bDg4OCAyMhLVqlWT2mUyGXr06IFVq1ahXLlyqFGjBi5cuIANGzZ8t1wiIyPRqVMn9O/fH7GxsZg0aRK0tbUxduxYKWbZsmVo06YNXFxc4OnpiRIlSiAqKgq3b9/GlStXsGXLlhyde8SIEVi7di3atWuHKVOmoHTp0ti3bx/+/PNP/Prrr6hYsWKO+p04cSL27NmD+vXrw9fXFxUqVEBERARWrFiBixcv5uqa8KlTp6J169ZwdnbGyJEjkZqaitmzZ0NPTw9RUVFSnCqf7cKFC9G4cWM0adIEv/76K8qUKYN3797hwYMH2LNnz3ddq62mpoY5c+age/fucHV1xcCBA5GYmIi5c+ciJiYGs2bNyvK1+vr6WLx4MXr16oWoqCj8/PPPKFasGF6/fo1r167h9evXUjH5xx9/oHHjxtJnVL58ebx69Qq7d+/GsmXLYGBgIN2Ncvny5TAwMIC2tjZsbW1x7tw5/Pnnn+jYsSPKli0LIQS2b9+OmJgYODs7f3WMaWlpWa7rrlWrFuRyOVxdXbF9+3Z4eXnh559/xrNnzzB16lQUL14c9+/fl+KbNGkCDw8PTJs2Da9evYKrqyvkcjmuXr0KXV1dDB06VJW3P0eGDx+Obdu2oWnTphgxYgTs7e2RlpaGp0+f4tChQxg5ciTq168PZ2dnaGlpoVu3bhg9ejQ+fvyIv/76C9HR0d89R6LvIh8vGiSib/T57hbK3N3dBQCF3S2EECI2Nlb069dPWFpaCj09PdG+fXvx+PHjLHe3eP36tcLre/XqJfT09DKcT3knjfTdLdatWye8vb2FhYWFkMvlokmTJuLSpUsZXn/t2jXRpUsXUaxYMaGpqSmsrKzEDz/8IJYuXZqt8WblyZMnwt3dXZiZmQlNTU1RqVIlMXfuXIWdFYRQbXcLIYS4f/++6NGjhyhevLjQ0NAQxsbGolWrVplera/83qTr1auXKF26tPQ8qx0qdu/eLezt7YWWlpYoVaqUmDVrlvT5fC67n236ufr06SNKlCghNDU1hYWFhWjYsKGYNm3aV8eenfcqfSxz587N9PjOnTtF/fr1hba2ttDT0xMtWrQQZ86cUYhJ/7wfP36s0H7ixAnRrl07YWpqKjQ1NUWJEiVEu3btxJYtWxTibt26JTp37izMzMyk987T01N8/PhRilmwYIGwtbUV6urq0nt/584d0a1bN1GuXDmho6MjjIyMRL169URQUNBX35sv7W4BQNy/f1+KnTVrlihTpoyQy+WiSpUqYsWKFZl+rqmpqWL+/PnCzs5OaGlpCSMjI+Ho6Cj27NkjxWT1mTRr1kw0a9bsq3mny+p77P3792LChAmiUqVKUg7Vq1cXI0aMEBEREVLcnj17RI0aNYS2trYoUaKEGDVqlDhw4ECmO75k9j1BVJDIhPjs711ERFQo+Pn5YfLkySjK/4QvXLgQw4cPx7t376Cvr5/f6RDRfwyXWxARUYESGxuLc+fOISgoCHZ2diyQiShf8MI9IiIqUK5evYpOnTpBS0sLa9asye90iOg/isstiIiIiIiUcCaZiIiIiEgJi2QiIiIiIiUskomIiIiIlHB3i1yUlpaGly9fwsDAgLfbJCIiIiqAhBB49+4drK2toaaW9Xwxi+Rc9PLlS9jY2OR3GkRERET0Fc+ePUPJkiWzPM4iORcZGBgA+PSmGxoa5nM2RERERKQsLi4ONjY2Ut2WFRbJuSh9iYWhoSGLZCIiIqIC7GtLY3nhHhERERGREhbJREREVGBcvXoVHTt2hLW1NXR1dVG5cmVMmTIFHz58kGJkMlmWj8qVK0txQUFBX4ydNWuWFPv8+XMMHz4czZo1g7GxMWQyGYKCgjLNMSkpCRMnToStrS20tLRQunRpjB07FgkJCd/tfaG8x+UWREREVCDcunULDRs2RKVKlbBgwQKYm5vj5MmTmDJlCi5fvoxdu3YBAM6dO5fhtf/88w+GDx+OTp06SW3t2rXLNHbixIk4fPiwQuyDBw/w999/o2bNmmjbti02btyYZZ7dunXD/v37MXHiRNStWxfnzp3DtGnTcPPmTezevftb3gIqQFgkExERUYGwYcMGfPz4Edu2bUO5cuUAAD/88APCw8OxfPlyREdHw8TEBA0aNMjw2mXLlkEmk6Fv375Sm4WFBSwsLBTi4uPjce7cOTRu3BiVKlWS2ps2bYrXr18DAC5dupRlkXz+/Hls374d8+bNw2+//QYAaNmyJTQ0NDBu3DgcPnwYzs7O3/ZGUIHA5RZERERUIGhqagIAjIyMFNqNjY2hpqYGLS2tTF/37t07bNmyBc2aNUP58uW/eI7Nmzfj/fv36Nevn0L7l/bL/dyZM2cAAG3btlVod3V1BQBs27YtW/1QwccimYiIiAqEXr16wdjYGL/++isePnyId+/eYe/evVi2bBkGDx4MPT29TF+3adMmxMfHZyh8MxMYGAhDQ0N07tw5RzkmJSUBAORyuUJ7+vPr16/nqF8qeFgkExERUYFQpkwZnDt3DmFhYShXrhwMDQ3Rvn179OrVCwsXLszydYGBgTA2NsZPP/30xf7v3LmDs2fPolu3btDV1c1RjlWrVgXwfzPK6U6fPg0AePv2bY76pYKHa5KJiIioQHj8+DHat28PS0tLbN26FRYWFvjnn38wbdo0vH//HoGBgRlec/PmTfzzzz8YPHgwtLW1v9h/+uuzM+OclTZt2qB8+fIYM2YMLC0tUbduXZw/fx7jxo2Durp6tpdtUMHHIpmIiIgKBF9fX8TFxSE0NFRaWtG0aVOYm5ujT58+6NmzJ5o1a6bwmuwWvsnJyVi7di1q1KiBOnXq5DhHLS0tHDhwAB4eHmjVqhUAQE9PDzNmzMDUqVNRokSJHPdNBQt/3SEiIqICITQ0FFWrVs2w9rhu3boAgLCwMIX2pKQkrFu3Dg4ODqhZs+YX+967dy8iIyO/aRY5Xfny5XHu3Dk8f/4c169fR2RkJDp37ow3b96gadOm39w/FQwskomIiKhAsLa2xs2bN/H+/XuF9vS9jkuWLKnQvnv3brx580Zh27esBAYGQltbG927d8+1fEuUKIHq1atDV1cXc+fOhZ6eXrZyocKByy2IiIioQBg+fDg6duwIZ2dnjBgxAubm5jh//jxmzpyJqlWrok2bNgrxgYGB0NHRgbu7+xf7ffnyJYKDg/HLL7/AxMQky7itW7cCAB4+fAjg037J+vr6AICff/5ZipszZw6srKxQqlQpvHr1Cv/73/+wc+dOrFu3jsstihAWyURERFQgdOjQAUeOHMGsWbMwbNgwxMbGwsbGBgMHDsTYsWMV9kl+9uwZDh06hB49emTYV1lZUFAQUlNTv7rUQnlbuICAAAQEBAAAhBBS+8ePHzFlyhQ8f/4cOjo6aNCgAY4fP44mTZqoOmQqwGTi80+dvklcXByMjIwQGxsLQ0PD/E6HiIiIiJRkt17jmmQiIiIiIiVcbkFERESFl1+nPDjHju9/DipwOJNMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESvK1SE5JScGECRNga2sLHR0dlC1bFlOmTEFaWpoUI4SAn58frK2toaOjAycnJ9y8eVOhn8TERAwdOhTm5ubQ09NDhw4d8Pz5c4WY6OhoeHh4wMjICEZGRvDw8EBMTIxCzNOnT9G+fXvo6enB3Nwc3t7eSEpK+m7jJyIiIqKCKV+L5NmzZ2Pp0qVYsmQJbt++jTlz5mDu3LlYvHixFDNnzhz88ccfWLJkCS5evAgrKys4Ozvj3bt3Uszw4cOxY8cObNq0CadPn8b79+/h6uqK1NRUKcbd3R2hoaEIDg5GcHAwQkND4eHhIR1PTU1Fu3btEB8fj9OnT2PTpk3Ytm0bRo4cmTdvBhEREREVGDIhhMivk7u6usLS0hKBgYFS208//QRdXV2sW7cOQghYW1tj+PDhGDNmDIBPs8aW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X7lyJdeSIyIiIiLKDyoXyT/++OM33cmLiIiIiKigU7lI9vPz+w5pEBEREREVHNlek/zhwwcMHjwYJUqUQLFixeDu7o43b958z9yIiIiIiPJFtovkSZMmISgoCO3atUPXrl1x+PBh/Prrr98zNyIiIiKifJHt5Rbbt29HYGAgunbtCgDo0aMHGjVqhNTUVKirq3+3BImIiIiI8lq2Z5KfPXuGJk2aSM/r1asHDQ0NvHz58rskRkRERESUX7JdJKempkJLS0uhTUNDAykpKbmeFBERERFRfsr2cgshBDw9PSGXy6W2jx8/YtCgQQp7JW/fvj13MyQiIiIiymPZLpJ79eqVoa1Hjx65mgwRERERUUGQ7SJ59erV3zMPIiIiIqICI9trkomIiIiI/itYJBMRERERKWGRTERERESkhEUyEREREZGSbBXJtWvXRnR0NABgypQp+PDhw3dNioiIiIgoP2WrSL59+zbi4+MBAJMnT8b79++/a1JERERERPkpW1vA1axZE71790bjxo0hhIC/vz/09fUzjZ04cWKuJkhERERElNeyVSQHBQVh0qRJ2Lt3L2QyGQ4cOAANjYwvlclkLJKJiIiIqNDLVpFcqVIlbNq0CQCgpqaGI0eOoFixYt81MSIiIiKi/JLtO+6lS0tL+x55EBEREREVGCoXyQDw77//YsGCBbh9+zZkMhmqVKmCYcOGoVy5crmdHxERERFRnlN5n+SDBw+iatWquHDhAuzt7WFnZ4d//vkH1apVw+HDh79HjkREREREeUrlmWRfX1+MGDECs2bNytA+ZswYODs751pyRERERET5QeWZ5Nu3b6Nv374Z2vv06YNbt27lSlJERERERPlJ5SLZwsICoaGhGdpDQ0O54wURERERFQkqL7fo378/BgwYgIcPH6Jhw4aQyWQ4ffo0Zs+ejZEjR36PHImIiIiI8pTKRfLvv/8OAwMDzJs3D2PHjgUAWFtbw8/PD97e3rmeIBERERFRXlO5SJbJZBgxYgRGjBiBd+/eAQAMDAxyPTEiIiIiovySo32S07E4JiIiIqKiSOUL94iIiIiIijoWyURERERESlgkExEREREpUalITk5ORvPmzXHv3r3vlQ8RERERUb5TqUjW1NREWFgYZDLZ98qHiIiIiCjfqbzcomfPnggMDPweuRARERERFQgqbwGXlJSElStX4vDh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bt26hRYtWqBkyZLShXuHDh2Cn58fzM3NpXOPGDEC3t7eaN++PQYOHAhdXV0cOXIE8+bNQ8uWLVGjRg0AwKlTpzB9+nR06tQJZcuWxcePH3HgwAEsX74cP/zwA9q3b5+XbxlRtqhcJKdvRE5ERET5z9HREatXr8aaNWsQExMDfX191KhRA+vWrZPW/ALAzZs30blzZ4XXenl5AQCaNWsm3VykcuXK2L17N/bt24fo6Gjo6OigZs2a2LhxI7p27arw+qFDh6JEiRKYP38++vXrh4SEBJQpUwaTJk3CiBEjpLjixYtDXV0dU6dOxZs3byCTyVChQgVMmTIFI0eO5HILKpBULpKJiIio4Ojduzd69+791TgnJydpXfGXtG/fXqWZXTc3N7i5uX0xpnz58ti3b1+2+yQqCLJdJKupqSmsRc6MTCZDSkrKNydFRERERJSfsl0k79iR9X2+z549i8WLF2frN1QiIiIiooIu20Xyjz/+mKHtzp07GDt2LPbs2YPu3bsr3IWHiIiICiC/PLpph1/Wk2tEhUGOVsq/fPkS/fv3h729PVJSUhAaGoo1a9agVKlSuZ0fEREREVGeU6lIjo2NxZgxY1C+fHncvHkTR44cwZ49e2BnZ/e98iMiIiIiynPZXm4xZ84czJ49G1ZWVti4cWOmyy+IiIiIiIqCbBfJvr6+0NHRQfny5bFmzRrpLjnKtm/fnmvJERERERHlh2wXyT179vzqFnBEREREREVBtovkoKCg75gGEREREVHBwftAEhEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpydcieebMmahbty4MDAxQrFgx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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = verified_users_with_project.copy()\n", + "df['last_updated'] = pd.to_datetime(df['last_updated'])\n", + "df['year'] = df['last_updated'].dt.year\n", + "unique_projectes_created_each_year = df.groupby('year')['uuid'].nunique()\n", + "unique_projectes_created_each_year\n", + "\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "ax = unique_projectes_created_each_year.plot(kind='bar', color='coral')\n", + "for i, value in enumerate(unique_projectes_created_each_year.values):\n", + " ax.text(i, value + 0.1, str(value), ha='center', va='bottom', fontsize=12)\n", + "plt.title('Number of Unique Projects Each Year')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Projects')\n", + "plt.xticks(rotation=45)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "45d23e2a-501f-45c7-bb80-b2177bc52a65", + "metadata": {}, + "source": [ + "## Number of Projects Created Each Year" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "2363c9b9-dffd-4cac-a72d-7f5c94264b8a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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sLa2xs2bN/H+/XuF9vS9jkuWLKnQvnv3brx580Zh27esBAYGQltbG927d8+1fEuUKIHq1atDV1cXc+fOhZ6eXrZyocKByy2IiIioQBg+fDg6duwIZ2dnjBgxAubm5jh//jxmzpyJqlWrok2bNgrxgYGB0NHRgbu7+xf7ffnyJYKDg/HLL7/AxMQky7itW7cCAB4+fAjg037J+vr6AICff/5ZipszZw6srKxQqlQpvHr1Cv/73/+wc+dOrFu3jsstihAWyURERFQgdOjQAUeOHMGsWbMwbNgwxMbGwsbGBgMHDsTYsWMV9kl+9uwZDh06hB49emTYV1lZUFAQUlNTv7rUQnlbuICAAAQEBAAAhBBS+8ePHzFlyhQ8f/4cOjo6aNCgAY4fP44mTZqoOmQqwGTi80+dvklcXByMjIwQGxsLQ0PD/E6HiIiIiJRkt17jmmQiIiIiIiVcbkFERESFl1+nPDjHju9/DipwOJNMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESvK1SE5JScGECRNga2sLHR0dlC1bFlOmTEFaWpoUI4SAn58frK2toaOjAycnJ9y8eVOhn8TERAwdOhTm5ubQ09NDhw4d8Pz5c4WY6OhoeHh4wMjICEZGRvDw8EBMTIxCzNOnT9G+fXvo6enB3Nwc3t7eSEpK+m7jJyIiIqKCKV+L5NmzZ2Pp0qVYsmQJbt++jTlz5mDu3LlYvHixFDNnzhz88ccfWLJkCS5evAgrKys4Ozvj3bt3Uszw4cOxY8cObNq0CadPn8b79+/h6uqK1NRUKcbd3R2hoaEIDg5GcHAwQkND4eHhIR1PTU1Fu3btEB8fj9OnT2PTpk3Ytm0bRo4cmTdvBhEREREVGDIhhMivk7u6usLS0hKBgYFS208//QRdXV2sW7cOQghYW1tj+PDhGDNmDIBPs8aWlpaYPXs2Bg4ciNjYWFhYWGDdunX45ZdfAAAvX76EjY0N9u/fDxcXF9y+fRtVq1bF+fPnUb9+fQDA+fPn4ejoiDt37qBSpUo4cOAAXF1d8ezZM1hbWwMANm3aBE9PT0RGRsLQ0PCr44mLi4ORkRFiY2OzFU9ERETfyK9THpxjx/c/B+WZ7NZr+TqT3LhxYxw5cgT37t0DAFy7dg2nT59G27ZtAQCPHj1CREQEWrVqJb1GLpejWbNmOHv2LADg8uXLSE5OVoixtraGnZ2dFHPu3DkYGRlJBTIANGjQAEZGRgoxdnZ2UoEMAC4uLkhMTMTly5czzT8xMRFxcXEKDyIiIiIq/DTy8+RjxoxBbGwsKleuDHV1daSmpmL69Ono1q0bACAiIgIAYGlpqfA6S0tLPHnyRIrR0tKCiYlJhpj010dERKBYsWIZzl+sWDGFGOXzmJiYQEtLS4pRNnPmTEyePFnVYRMRERFRAZevM8mbN2/G+vXrsWHDBly5cgVr1qyBv78/1qxZoxAnk8kUngshMrQpU47JLD4nMZ8bO3YsYmNjpcezZ8++mBMRERERFQ75OpM8atQo+Pr6omvXrgCA6tWr48mTJ5g5cyZ69eoFKysrAJ9meYsXLy69LjIyUpr1tbKyQlJSEqKjoxVmkyMjI9GwYUMp5tWrVxnO//r1a4V+/vnnH4Xj0dHRSE5OzjDDnE4ul0Mul+d0+ERERERUQOXrTPKHDx+gpqaYgrq6urQFnK2tLaysrHD48GHpeFJSEk6cOCEVwA4ODtDU1FSICQ8PR1hYmBTj6OiI2NhYXLhwQYr5559/EBsbqxATFhaG8PBwKebQoUOQy+VwcHDI5ZETERERUUGWrzPJ7du3x/Tp01GqVClUq1YNV69exR9//IE+ffoA+LT8Yfjw4ZgxYwYqVKiAChUqYMaMGdDV1YW7uzsAwMjICH379sXIkSNhZmYGU1NT+Pj4oHr16mjZsiUAoEqVKmjdujX69++PZcuWAQAGDBgAV1dXVKpUCQDQqlUrVK1aFR4eHpg7dy6ioqLg4+OD/v37c6cKIiIiov+YfC2SFy9ejN9//x1eXl6IjIyEtbU1Bg4ciIkTJ0oxo0ePRkJCAry8vBAdHY369evj0KFDMDAwkGLmz58PDQ0NdOnSBQkJCWjRogWCgoKgrq4uxfz999/w9vaWdsHo0KEDlixZIh1XV1fHvn374OXlhUaNGkFHRwfu7u7w9/fPg3eCiIiIiAqSfN0nuajhPslERER5jPskk4oKxT7JREREREQFEYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJiIiIiJSwSCYiIiIiUsIimYiIiIhICYtkIiIiIiIlLJKJqEA5ffo02rZtCxMTE+jo6KBChQqYOnVqprFCCDRt2hQymQxDhgzJcDwiIgJDhgxB2bJloaOjg9KlS6Nv3754+vRppv3t2rULzZo1g6GhIfT09FCtWjUsX748Q1xISAgcHR2hq6sLc3NzeHp6IjIy8tsGTkREBYpGfidARJRuw4YN8PDwQJcuXbB27Vro6+vj33//xcuXLzONDwgIwIMHDzI9lpiYiKZNmyI6OhqTJ09G1apVcffuXUyaNAkHDx7E7du3YWBgIMXPmjUL48ePx6BBgzB27Fhoamrizp07SEpKUuj3xIkTaNOmDdq1a4ddu3YhMjISY8aMQYsWLXDp0iXI5fLce0OIiCjfsEgmogLhxYsXGDBgAAYOHIg///xTam/evHmm8Y8fP8bYsWOxdu1auLm5ZTh+6tQp3L9/HytXrkTfvn0BAE5OTjA0NIS7uztCQkLQqVMnAMDly5cxfvx4zJw5E6NHj5b6aNGiRYZ+R40ahYoVK2Lr1q3Q0Pj0T6itrS0aNWqEVatW4ddff835m0BERAUGl1sQUYGwcuVKxMfHY8yYMdmKHzBgAJydnaVCV5mmpiYAwMjISKHd2NgYAKCtrS21LVmyBHK5HEOHDv3iOV+8eIGLFy/Cw8NDKpABoGHDhqhYsSJ27NiRrdyJiKjgY5FMRAXCyZMnYWpqijt37qBmzZrQ0NBAsWLFMGjQIMTFxSnErly5EhcuXMCSJUuy7K9Ro0ZwcHCAn58fLl68iPfv3+PKlSsYN24cateujZYtWyqcu0qVKti2bRsqVaoEdXV1lCxZEr6+vgrLLcLCwgAA9vb2Gc5nb28vHSciosKPRTIRFQgvXrzAhw8f0LlzZ/zyyy8ICQnBqFGjsHbtWrRt2xZCCCnOx8cHc+bMgbW1dZb9aWho4NixYyhbtizq1asHAwMDODg4wNjYGIcPH5ZmmtP7vH//Pry9veHt7Y2QkBB4enrC398fvXv3luLevn0LADA1Nc1wPlNTU+k4EREVflyTTEQFQlpaGj5+/IhJkybB19cXwKc1xFpaWhg+fDiOHDmCli1bYtCgQahRowb69+//xf6Sk5Pxyy+/ICwsDCtWrEClSpXw6NEjTJs2Dc7Ozjh69Ki0FCMtLQ3v3r3Dxo0b0bVrVwCf1kLHx8djwYIFmDx5MsqXLy/1LZPJMj1nVu1ERFT4cCaZiAoEMzMzAICLi4tCe5s2bQAAV65cwdatWxEcHIw5c+YgNjYWMTExiImJAQAkJSUhJiYGycnJAIDAwEAcOHAA27dvR79+/dCkSRP07NkTwcHBuHLlChYsWKDSuT+Py2zGOCoqKtMZZiIiKpxYJBNRgZDZOl8A0jILNTU1hIWFISUlBQ0aNICJiYn0AIAVK1bAxMQE+/btAwCEhoZCXV0dtWvXVuivbNmyMDMzU1g/nJ1zA4CdnR0A4MaNGxlib9y4IR0nIqLCj0UyERUIP/30EwDgwIEDCu379+8HADRo0ACenp44duxYhgcAdOzYEceOHUPjxo0BANbW1khNTcXFixcV+rt37x7evn2LkiVLZuvcampqqFu3LgCgRIkSqFevHtavX4/U1FQp7vz587h7926mW9EREVHhJBPpUyX0zeLi4mBkZITY2FgYGhrmdzpEhU6HDh1w6NAhTJgwAQ0aNMClS5cwefJktGzZEnv27MnydTKZDIMHD1bY7eLZs2ewt7eHnp4eJkyYgEqVKuHhw4eYMWMGXr16hcuXL6NSpUoAPq1fbtCgAf79919MmTIFVatWRUhICPz9/fHrr79i8eLFUr/Hjx+Hs7Mz2rdvDy8vL0RGRsLX1xdGRka8mQhRfvDLfBvI3D0Ht3csSrJbr7FIzkUskom+TUJCAiZPnowNGzYgPDwc1tbW6N69OyZNmvTF4jOzIhkAHjx4gClTpuDUqVMIDw+HpaUlHB0dMXHiRFStWlUhNioqCuPGjcPOnTsRFRUFW1tb9O/fH7/99pu03CLd4cOHMXHiRISGhkJXVxeurq6YO3cuihUrlntvBhFlD4tkUhGL5HzAIpmIiCiPsUgmFWW3XuOaZCIiIiIiJSySiYiIiIiU8GYiRFQ45cWfWAH+mZWI6D+KM8lERN/J6dOn0bZtW5iYmEBHRwcVKlTA1KlTFY7369cPDg4OkMvlkMlkePz4cZb9LV68GJUrV4ZcLoetrS0mT54s3TxF2a5du9CsWTMYGhpCT08P1apVw/Lly6XjcXFxmD59OpycnGBlZQV9fX1Ur14ds2fPxsePH3PtPSAiKqxYJBMRfQcbNmxAs2bNYGRkhLVr12L//v0YM2YMPr9W+siRIwgJCUGpUqXQsGHDL/Y3ffp0DBs2DG5ubjh48CC8vLwwY8YMDB48OEPsrFmz4ObmBjs7O/zvf//D7t274eXlhaSkJCnm6dOnWLBgAWrXro3ly5dj9+7d+Pnnn+Hn5wdXV1fwmm4i+q/j7ha5iLtbEOWhArzc4sWLF6hUqRJ69uyJP//8M8u4tLQ0aXs5f39/jBo1Co8ePUKZMmUU4tJvftKzZ08sW7ZMap8xYwYmTJiAsLAwaUu7y5cvo169epg5cyZGjx6d5bnj4+MBAHp6egrt6XmcOnVKujELUYHG3S1IRdzdgogon6xcuRLx8fEYM2bMF+OU91/OSnBwMD5+/IjevXsrtPfu3RtCCOzcuVNqW7JkCeRyOYYOHfrFPvX09DIUyABQr149AJ9uxkJE9F/GIpmIKJedPHkSpqamuHPnDmrWrAkNDQ0UK1YMgwYNQlxcnMr9hYWFAQCqV6+u0F68eHGYm5tLx9PPXaVKFWzbtg2VKlWCuro6SpYsCV9fX4XlFlk5evQoAKBatWoq50lEVJSwSCYiymUvXrzAhw8f0LlzZ/zyyy8ICQnBqFGjsHbtWrRt21bl9b5v376FXC7PdObX1NQUb9++VTj3/fv34e3tDW9vb4SEhMDT0xP+/v4ZZqKVXb9+HXPmzEGnTp1gb2+vUo5EREUNt4AjIsplaWlp+PjxIyZNmgRfX18AgJOTE7S0tDB8+HAcOXIELVu2VKlPmUyWrWNpaWl49+4dNm7ciK5duwIAmjdvjvj4eCxYsACTJ09G+fLlM/Tx+PFjuLq6wsbGBitXrlQpNyKioogzyUREuczMzAwA4OLiotDepk0bAMCVK1dU7u/jx4/48OFDhmNRUVEwNTX9pnM/efIEzZs3h4aGBo4cOaLQHxHRfxWLZCKiXJbVUoX0ZRbZvWAvXfpa5Bs3bii0R0RE4M2bN7Czs8vxuZ88eQInJycIIXDs2DGULFlSpdyIiIoqFslERLnsp59+AgAcOHBAoX3//v0AgAYNGqjUX+vWraGtrY2goCCF9qCgIMhkMnTs2DFb51ZTU0PdunWltqdPn8LJyQmpqak4evQoSpcurVJeRERFGdckExHlslatWqF9+/aYMmUK0tLS0KBBA1y6dAmTJ0+Gq6urtP/w69evceLECQD/N0t84MABWFhYwMLCAs2aNQPw6eK8CRMm4Pfff4epqSlatWqFixcvws/PD/369ZP2SAY+bQu3bNkyeHl54c2bN6hatSpCQkIQEBAALy8vqRCOjIxE8+bNER4ejsDAQERGRiIyMlLqp2TJkpxVJqL/NN5MJBfxZiJEeagA30wEABISEjB58mRs2LAB4eHhsLa2Rvfu3TFp0iTI5XIAwPHjx9G8efNMX9+sWTMcP35coW3RokUICAjA48ePYWVlhd69e2P8+PHQ1NRUiIuKisK4ceOwc+dOREVFwdbWFv3798dvv/0mLbf40rkBYNKkSfDz88vR2InyFG8mQirKbr32zUVyXFwcjh49ikqVKqFKlSrf0lWhxyKZKA8V8CKZiPIIi2RS0Xe7416XLl2wZMkSAJ9mSurUqYMuXbrA3t4e27Zty3nGREREREQFhMprkk+ePInx48cDAHbs2AEhBGJiYrBmzRpMmzZNumiEiIhUwJlxIqICReWZ5NjYWGkPzeDgYPz000/Q1dVFu3btcP/+fZUTePHiBXr06AEzMzPo6uqiZs2auHz5snRcCAE/Pz9YW1tDR0cHTk5OuHnzpkIfiYmJGDp0KMzNzaGnp4cOHTrg+fPnCjHR0dHw8PCAkZERjIyM4OHhgZiYGIWYp0+fon379tDT04O5uTm8vb2zdRtXIiIiIipaVC6SbWxscO7cOcTHxyM4OBitWrUC8KkI1dbWVqmv6OhoNGrUCJqamjhw4ABu3bqFefPmwdjYWIqZM2cO/vjjDyxZsgQXL16ElZUVnJ2d8e7dOylm+PDh2LFjBzZt2oTTp0/j/fv3cHV1RWpqqhTj7u6O0NBQBAcHIzg4GKGhofDw8JCOp6amol27doiPj8fp06exadMmbNu2DSNHjlT1LSIiIiKiQk7l5RbDhw9H9+7doa+vj9KlS8PJyQnAp2UY6RveZ9fs2bNhY2OD1atXS21lypSR/l8IgQULFmD8+PFwc3MDAKxZswaWlpbYsGEDBg4ciNjYWAQGBmLdunXSbV7Xr18PGxsbhISEwMXFBbdv30ZwcDDOnz+P+vXrAwBWrFgBR0dH3L17F5UqVcKhQ4dw69YtPHv2DNbW1gCAefPmwdPTE9OnT+eFeERERET/ISrPJHt5eeH8+fNYtWoVTp8+LW0nVLZsWUyfPl2lvnbv3o06deqgc+fOKFasGGrVqoUVK1ZIxx89eoSIiAhpthoA5HI5mjVrhrNnzwIALl++jOTkZIUYa2tr2NnZSTHnzp2DkZGRVCADnzbzNzIyUoixs7OTCmTg021dExMTFZZ/fC4xMRFxcXEKDyIiIiIq/FQukqdMmYIqVaqgU6dO0NfXl9p/+OEHhISEqNTXw4cP8ddff6FChQo4ePAgBg0aBG9vb6xduxbAp1uuAoClpaXC6ywtLaVjERER0NLSgomJyRdjihUrluH8xYoVU4hRPo+JiQm0tLSkGGUzZ86U1jgbGRnBxsZGpfETERERUcGkcpE8efJkvH//PkP7hw8fMHnyZJX6SktLQ+3atTFjxgzUqlULAwcORP/+/fHXX38pxMlkMoXnQogMbcqUYzKLz0nM58aOHYvY2Fjp8ezZsy/mRERERESFg8pFclZF47Vr16RdL7KrePHiCrdTBYAqVarg6dOnAAArKysAyDCTGxkZKc36WllZISkpCdHR0V+MefXqVYbzv379WiFG+TzR0dFITk7OMMOcTi6Xw9DQUOFBRERERIVftotkExMTmJqaQiaToWLFijA1NZUeRkZGcHZ2RpcuXVQ6eaNGjXD37l2Ftnv37qF06dIAAFtbW1hZWeHw4cPS8aSkJJw4cQINGzYEADg4OEBTU1MhJjw8HGFhYVKMo6MjYmNjceHCBSnmn3/+QWxsrEJMWFgYwsPDpZhDhw5BLpfDwcFBpXERERERUeGW7d0tFixYACEE+vTpg8mTJ8PIyEg6pqWlhTJlysDR0VGlk48YMQINGzbEjBkz0KVLF1y4cAHLly/H8uXLAXxa/jB8+HDMmDEDFSpUQIUKFTBjxgzo6urC3d0dAGBkZIS+ffti5MiRMDMzg6mpKXx8fFC9enVpt4sqVaqgdevW6N+/P5YtWwYAGDBgAFxdXVGpUiUAQKtWrVC1alV4eHhg7ty5iIqKgo+PD/r3788ZYiIiIqL/mGwXyb169QLwaXa3UaNG0NBQefe4DOrWrYsdO3Zg7NixmDJlCmxtbbFgwQJ0795dihk9ejQSEhLg5eWF6Oho1K9fH4cOHYKBgYEUM3/+fGhoaKBLly5ISEhAixYtEBQUBHV1dSnm77//hre3t7QLRocOHaTbawOAuro69u3bBy8vLzRq1Ag6Ojpwd3eHv7//N4+TiIiIiAoXmRBCqPKC/fv3Q11dHS4uLgrtBw8eRFpaGtq0aZOrCRYmcXFxMDIyQmxsLGefib63onYb56I2HqK8khffO/y+KVKyW6+pfOGer6+vwp3s0gkh4Ovrq2p3REREREQFjspF8v379zPsSAEAlStXxoMHD3IlKSIiIiKi/KRykWxkZISHDx9maH/w4AH09PRyJSkiIiIiovykcpHcoUMHDB8+HP/++6/U9uDBA4wcORIdOnTI1eSIiIhy2/HjxyGTyTJ9nD9/PtPXCCHQtGlTyGQyDBkyJNOYxYsXo3LlypDL5bC1tcXkyZORnJycIe7gwYPSBeJGRkZo3749bt68mSFu79696NmzJ6pXrw5NTc2v3kSLiHKXykXy3Llzoaenh8qVK8PW1ha2traoUqUKzMzMuBMEEREVGjNmzMC5c+cUHnZ2dpnGBgQEfHFJ4fTp0zFs2DC4ubnh4MGD8PLywowZMzB48GCFuF27dqFNmzYoVqwYtm3bhqVLl+L+/fto0qSJwuQTAOzYsQPnz59H1apVUaNGjW8fMBGpROV93IyMjHD27FkcPnwY165dg46ODuzt7dG0adPvkR8REdF3UaFCBTRo0OCrcY8fP8bYsWOxdu1auLm5ZTj+9u1bTJs2Df3798eMGTMAAE5OTkhOTsaECRMwfPhw6VqeMWPGoHr16ti+fbs0M9ywYUNUrFgREydOxN9//y31u2LFCqipfZrLGjJkCC5fvvzNYyai7FN5Jhn4dJOPVq1aYejQoRg8eDALZCIiKrIGDBgAZ2dndOqU+VZjwcHB+PjxI3r37q3Q3rt3bwghsHPnTgCfium7d++iTZs2CksnSpcuDTs7O+zcuVNh96j0ApmI8ofK34FpaWmYOnUqSpQoAX19fTx69AgA8PvvvyMwMDDXEyQiIvoeBg8eDA0NDRgaGsLFxQWnT5/OELNy5UpcuHBB4eZTysLCwgAA1atXV2gvXrw4zM3NpeNJSUkAALlcnqEPuVyODx8+ZFhyQUT5R+Uiedq0aQgKCsKcOXOgpaUltVevXh0rV67M1eSIiIhym5GREYYNG4Zly5bh2LFjWLhwIZ49ewYnJyccPHhQinvx4gV8fHwwZ84cWFtbZ9nf27dvIZfLM93hydTUFG/fvgUAWFpawtTUFGfOnFGIiYmJkQrp9Fgiyn8qF8lr167F8uXL0b17d4XbPtvb2+POnTu5mhwREeW/7OwGkZqaij/++AOtW7dGyZIloauriypVqsDX1xcxMTGZ9vvkyRP06dMH1tbWkMvlKFGiRIYlDU5OTlmeWyaTISIiQorN7m4QtWrVwoIFC9CxY0c0adIEvXv3xtmzZ1G8eHGMHj1aihs0aBBq1KiB/v37f/U9+tLOE+nH1NTUMHjwYBw5cgRTp05FZGQkHjx4gB49euDDhw9SDBEVDCpfuPfixQuUL18+Q3taWlqmW90QEVHRMGPGDDRv3lyhLX03iISEBPj5+aFbt27o168fzM3NceXKFUybNg179uzBpUuXoKOjI70uLCwMTk5OKFu2LPz9/VGyZEmEh4crzOQCwJ9//om4uDiFtg8fPqB169ZwcHCAlZWV1J6+G0StWrUgl8tVutDN2NgYrq6uWLp0KRISErBv3z4EBwfj9OnTiI2NVYhNSkpCTEwM9PT0oKmpCTMzM3z8+BEfPnyArq6uQmxUVBQcHByk5xMnTsT79+8xbdo0TJw4EQDQrl079O7dGytXrkSJEiWynTMRfV8qF8nVqlXDqVOnULp0aYX2LVu2oFatWrmWGBERFSxf2g1CR0cHjx49gpmZmdTm5OSEUqVKoXPnzti2bRt69OgB4NOewx4eHrCxscGpU6cU1uj+8ssvCv1mdofXNWvWIDk5Gf369VNo/9bdIIQQAD7N/IaFhSElJSXT8a5YsQIrVqzAjh070LFjR2kt8o0bN1C/fn0pLiIiAm/evFHYVk5DQwN//PEHpkyZgkePHsHc3BzFixeHi4sLbG1tUbJkSZVyJqLvR+UiedKkSfDw8MCLFy+QlpaG7du34+7du1i7di327t37PXIkIqICTl1dXaFATlevXj0AwLNnz6S2kydPIjQ0FEFBQZlexPY1gYGB0NfXz1BQf8tShejoaOzduxc1a9aEtrY2PD094eTklCGuefPm6NixI4YNGyYVv61bt4a2tjaCgoIUiuSgoCDIZDJ07NgxQz/6+vpScX3lyhUcOXIE8+bNy3H+RJT7VP4XpX379ti8eTP2798PmUyGiRMn4vbt29izZw+cnZ2/R45ElIns3jXs9OnT6NevHxwcHCCXyyGTyfD48eMM/aX/QM/qMWvWLIX4Y8eOwdnZGcWKFYO+vj7s7e2xaNEihS2s0sXHx2PixImoWLEi5HI5zMzM0Lx5c9y/fz/X3xf6frKzG4Syo0ePAvj0V8h0J0+eBAAYGBigbdu20NbWhr6+PlxdXb96bcv9+/dx6tQpdO3aFfr6+jkah7u7O3x9fbF161YcP34cK1asgKOjI169eoW5c+cCAMqUKQMnJ6cMDwAoUaIEnJycYG5uDuDTxXkTJkzAsmXLMH78eJw4cQL+/v7w8/NDv379FGbDjx8/jrlz5+LgwYMIDg7GlClT0KRJE7Ru3TrDnfyePHmCrVu3YuvWrdKuF+nPL126lKOxE1H2qTyTDAAuLi5wcXHJ7VyIKAe+tE4UAI4cOYKQkBDUqlULhoaGOH78eKb9tGvXDufOncvQPnHiRBw+fFjhgqqQkBC4uLigadOmWLFiBfT09LB7924MGzYM//77LxYuXCjFvn//Hs2bN8fLly/h6+sLe3t7xMbG4uzZs9LFSlSwpe8G4eTkBDMzMzx48ABz586Fk5MT9u3bl+XPgxcvXsDX1xd16tSBq6urQjvwaR/hzp07Y9++fQgPD8eECRPQpEkTXL9+HcWLF8+0z/StRvv27Zvj8djb22Pz5s1YunQp3r9/D1NTUzRu3Bjr1q1D3bp1c9Tn+PHjYWBggICAAPj7+8PKygq+vr4YP368QpyWlha2bduGadOmITExERUqVMCUKVPg7e2tcDE88OkXUeW9lzt37gwA6NWrF4KCgnKUKxFlj0ykL8KibxYXFwcjIyPExsbC0NAwv9OhIu748eNo3rw5tmzZgp9//jnLuLS0NOnP0P7+/hg1ahQePXqEMmXKfPUc8fHxsLKyQs2aNXHq1CmpvUePHti6dSvevn2rsO2Vi4sLzp8/r3Ch0/Dhw7Fy5Upcv34dZcuWzcFIs+CX+Y0dcp3fjjw6T+EaT0xMDKpXrw5TU1Ncu3Ytw/GoqCg0b94cEREROHfunMJnP2DAAKxYsQIuLi4IDg6W2kNDQ1GrVi2MHz8e06ZNy9BnSkoKbGxsYGZmJm2ZlpUhQ4YgICAA/BH3H5AX3zt59e8A5Yns1mvZWm5hamqKN2/eAABMTExgamqa5aNUqVJo06YNrl+/njsjIaJv8i3rNDdv3oz3799nuEBKU1MTWlpaCrsVAJ92CNDW1paef/jwAStXrkTnzp1zt0CmfJe+G8T169eRkJCgcCw6OhrOzs548eIFDh8+nOGzT1+7rDwDXbNmTRQvXhxXrlzJ9Jz79+9HREREhq9HIqLvIVvLLebPnw8DAwMAwIIFC74Ym5iYiP3796N37968zzxRHhg8eDC6du0KXV1dODo64vfff0fjxo1zpe/AwEAYGhpKf+JNN2jQIGzcuBHe3t4YN24cdHV1sWfPHuzYsQMzZ86U4i5fvoz4+HhUqFABv/76KzZt2oT4+HjY29tj8uTJaNeuXa7kSfnj890g0kVHR6Nly5Z49OgRjhw5Ant7+wyvy6zt8z6z+sUuMDAQWlpa8PDw+MbMiYi+LltFcq9evTL9/6y0adNGYV9IIsp9OV0nml137tzB2bNnMXDgwAx7v9avXx9Hjx5F586dERAQAODT7gYzZ87EyJEjpbj0taezZ89G9erVsXbtWqipqWHevHlo3749Dhw4wOsbCinl3SDS21q2bImHDx/i8OHDWW4L2qZNG+jq6uLAgQMYMWKE1H7lyhVERERkuu1aREQE9u/fDzc3t0x30fiuCtlSGCLKHTm6cA/4NEN0+/ZtyGQyVKlSBbVr15aO2djYIDIyMlcSJKLM1apVS6EIadKkCTp16oTq1atj9OjR31x8pl8gldmfti9fvoxOnTqhfv36WLZsGfT09HD06FFMmDABHz9+xO+//w7g03po4NPFSgcOHJD+ItW8eXNUqFABU6dOZZFcCLi7u6NUqVKoU6cOzM3Ncf/+fcybNw+vXr2SLh5LSEiAi4sLrl69igULFiAlJUVhlxULCwuUK1cOwKelGlOmTIGPjw88PT3RrVs3RERE4Pfff0epUqXg5eWVIYc1a9YgJSXli0stnjx5gosXLwKAwm4QwKfdKurUqZMr7wcR/TeoXCRHRkaia9euOH78OIyNjSGEQGxsLJo3b45NmzbBwsLie+RJRNmgfNcw5TXD2ZWcnIy1a9eiRo0amRYWgwcPhqWlJXbs2CFdkd+8eXOoqanBz88P3bt3R9myZaUZv4YNG0oFMgDo6uqiWbNm2LlzZ47yo7yVnd0gXr16JRWow4YNy9CH8m4MI0eOhJGRERYuXIiNGzfCwMAArVu3xqxZs2Bqaprh9atWrUKZMmXQsmXLLPPkbhBElJtULpKHDh2KuLg43Lx5E1WqVAEA3Lp1C7169YK3tzc2btyY60kSUfZltk5UVXv37kVkZKQ0I6wsNDQU3bp1y7BlVd26dZGWlobbt2+jbNmyOV57SgWLr68vfH19vxhTpkwZlXeS6NevX7Yvwrt79+5XYzw9PeHp6alSDkREWVG5SA4ODkZISIhUIAOfbhsaEBCAVq1a5WpyRKSazNaJ5kRgYCC0tbXRvXv3TI9bW1vj0qVLSE1NVSiU0/dZTr+1bvHixeHo6IgzZ84gLi5O2mrnw4cPOHHiRJa3OCYiIspvKhfJaWlp0NTUzNCuqakprT8kou8vO+tEAeD169c4ceIEAODGjRsAgAMHDsDCwgIWFhZo1qyZQr8vX75EcHAwfvnlF5iYmGR67hEjRsDb2xvt27eXLuxLv61uy5YtUaNGDSnW398fzZs3h4uLC8aMGQOZTIZ58+bhzZs3mDp1ai6/K0RERLlD5SL5hx9+wLBhw7Bx40ZYW1sD+HQF+4gRI9CiRYtcT5CIMpfdu4bdvHkzwxZu6RdGNWvWLMMd+IKCgpCamvrFP4MPHToUJUqUwPz589GvXz8kJCSgTJkymDRpksJuBcCn9chHjhzBhAkTpJnpBg0a4Pjx43B0dPyWt4AKMt7ggYgKOZXvuPfs2TP8+OOPCAsLg42NDWQyGZ4+fYrq1atj165d0p9Z/4t4xz2iPFTUtuXieHJwjiI0FoBFf04Vpa81yhPZrddUnkm2sbHBlStXcPjwYdy5cwdCCFStWvWLVxwTERERERUmKhXJKSkp0NbWRmhoKJydneHs7Py98iKi74EzLkRERNmi0v5LGhoaKF26NFJTU79XPkRERERE+U7lTUonTJiAsWPHIioq6nvkQ0RERESU71Rek7xo0SI8ePAA1tbWKF26NPT09BSOX7lyJdeSIyIiIiLKDyoXyT/++OM33cmLiIiIiKigU7lI9vPz+w5pEBEREREVHNlek/zhwwcMHjwYJUqUQLFixeDu7o43b958z9yIiIiIiPJFtovkSZMmISgoCO3atUPXrl1x+PBh/Prrr98zNyIiIiKifJHt5Rbbt29HYGAgunbtCgDo0aMHGjVqhNTUVKirq3+3BImIiIiI8lq2Z5KfPXuGJk2aSM/r1asHDQ0NvHz58rskRkRERESUX7JdJKempkJLS0uhTUNDAykpKbmeFBERERFRfsr2cgshBDw9PSGXy6W2jx8/YtCgQQp7JW/fvj13MyQiIiIiymPZLpJ79eqVoa1Hjx65mgwRERERUUGQ7SJ59erV3zMPIiIiIqICI9trkomIiIiI/itYJBMRERERKWGRTERERESkhEUyEREREZGSbBXJtWvXRnR0NABgypQp+PDhw3dNioiIiIgoP2WrSL59+zbi4+MBAJMnT8b79++/a1JERERERPkpW1vA1axZE71790bjxo0hhIC/vz/09fUzjZ04cWKuJkhERERElNeyVSQHBQVh0qRJ2Lt3L2QyGQ4cOAANjYwvlclkLJKJiIiIqNDLVpFcqVIlbNq0CQCgpqaGI0eOoFixYt81MSIiIiKi/JLtO+6lS0tL+x55EBEREREVGCoXyQDw77//YsGCBbh9+zZkMhmqVKmCYcOGoVy5crmdHxERERFRnlN5n+SDBw+iatWquHDhAuzt7WFnZ4d//vkH1apVw+HDh79HjkREREREeUrlmWRfX1+MGDECs2bNytA+ZswYODs751pyRERERET5QeWZ5Nu3b6Nv374Z2vv06YNbt27lSlJERERERPlJ5SLZwsICoaGhGdpDQ0O54wURERERFQkqL7fo378/BgwYgIcPH6Jhw4aQyWQ4ffo0Zs+ejZEjR36PHImIiIiI8pTKRfLvv/8OAwMDzJs3D2PHjgUAWFtbw8/PD97e3rmeIBERERFRXlO5SJbJZBgxYgRGjBiBd+/eAQAMDAxyPTEiIiIiovySo32S07E4JiIiIqKiSOUL94iIiIiIijoWyURERERESlgkExEREREpUalITk5ORvPmzXHv3r3vlQ8RERERUb5TqUjW1NREWFgYZDLZ98qHiIiIiCjfqbzcomfPnggMDPweuRARERERFQgqbwGXlJSElStX4vDh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bt26hRYtWqBkyZLShXuHDh2Cn58fzM3NpXOPGDEC3t7eaN++PQYOHAhdXV0cOXIE8+bNQ8uWLVGjRg0AwKlTpzB9+nR06tQJZcuWxcePH3HgwAEsX74cP/zwA9q3b5+XbxlRtqhcJKdvRE5ERET5z9HREatXr8aaNWsQExMDfX191KhRA+vWrZPW/ALAzZs30blzZ4XXenl5AQCaNWsm3VykcuXK2L17N/bt24fo6Gjo6OigZs2a2LhxI7p27arw+qFDh6JEiRKYP38++vXrh4SEBJQpUwaTJk3CiBEjpLjixYtDXV0dU6dOxZs3byCTyVChQgVMmTIFI0eO5HILKpBULpKJiIio4Ojduzd69+791TgnJydpXfGXtG/fXqWZXTc3N7i5uX0xpnz58ti3b1+2+yQqCLJdJKupqSmsRc6MTCZDSkrKNydFRERERJSfsl0k79iR9X2+z549i8WLF2frN1QiIiIiooIu20Xyjz/+mKHtzp07GDt2LPbs2YPu3bsr3IWHiIiICiC/PLpph1/Wk2tEhUGOVsq/fPkS/fv3h729PVJSUhAaGoo1a9agVKlSuZ0fEREREVGeU6lIjo2NxZgxY1C+fHncvHkTR44cwZ49e2BnZ/e98iMiIiIiynPZXm4xZ84czJ49G1ZWVti4cWOmyy+IiIiIiIqCbBfJvr6+0NHRQfny5bFmzRrpLjnKtm/fnmvJERERERHlh2wXyT179vzqFnBEREREREVBtovkoKCg75gGEREREVHBwftAEhEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpYZFMRERERKSERTIRERERkRIWyURERERESlgkExEREREpydcieebMmahbty4MDAxQrFgxdOzYEXfv3lWIEULAz88P1tbW0NHRgZOTE27evKkQk5iYiKFDh8Lc3Bx6enro0KEDnj9/rhATHR0NDw8PGBkZwcjICB4eHoiJiVGIefr0Kdq3bw89PT2Ym5vD29sbSUlJ32XsRERERFRw5WuRfOLECQwePBjnz5/H4cOHkZKSglatWiE+Pl6KmTNnDv744w8sWbIEFy9ehJWVFZydnfHu3TspZvjw4dixYwc2bdqE06dP4/3793B1dUVqaqoU4+7ujtDQUAQHByM4OBihoaHw8PCQjqempqJdu3aIj4/H6dOnsWnTJmzbtg0jR47MmzeDiIiIiAoMjfw8eXBwsMLz1atXo1ixYrh8+TKaNm0KIQQWLFiA8ePHw83NDQCwZs0aWFpaYsOGDRg4cCBiY2MRGBiIdevWoWXLlgCA9evXw8bGBiEhIXBxccHt27cRHByM8+fPo379+gCAFStWwNHREXfv3kWlSpVw6NAh3Lp1C8+ePYO1tTUAYN68efD09MT06dNhaGiYh+8MEREREeWnArUmOTY2FgBgamoKAHj06BEiIiLQqlUrKUYul6NZs2Y4e/YsAODy5ctITk5WiLG2toadnZ0Uc+7cORgZGUkFMgA0aNAARkZGCjF2dnZSgQwALi4uSExMxOXLlzPNNzExEXFxcQoPIiIiIir8CkyRLITAb7/9hsaNG8POzg4AEBERAQCwtLRUiLW0tJSORUREQEtLCyYmJl+MKVasWIZzFitWTCFG+TwmJibQ0tKSYpTNnDlTWuNsZGQEGxsbVYdNRERERAVQgSmShwwZguvXr2Pjxo0ZjslkMoXnQogMbcqUYzKLz0nM58aOHYvY2Fjp8ezZsy/mRERERESFQ4EokocOHYrdu3fj2LFjKFmypNRuZWUFABlmciMjI6VZXysrKyQlJSE6OvqLMa9evcpw3tevXyvEKJ8nOjoaycnJGWaY08nlchgaGio8iIiIiKjwy9ciWQiBIUOGYPv27Th69ChsbW0Vjtva2sLKygqHDx+W2pKSknDixAk0bNgQAODg4ABNTU2FmPDwcISFhUkxjo6OiI2NxYULF6SYf/75B7GxsQoxYWFhCA8Pl2IOHToEuVwOBweH3B88ERERERVY+bq7xeDBg7Fhwwbs2rULBgYG0kyukZERdHR0IJPJMHz4cMyYMQMVKlRAhQoVMGPGDOjq6sLd3V2K7du3L0aOHAkzMzOYmprCx8cH1atXl3a7qFKlClq3bo3+/ftj2bJlAIABAwbA1dUVlSpVAgC0atUKVatWhYeHB+bOnYuoqCj4+Pigf//+nCEmIiIi+o/J1yL5r7/+AgA4OTkptK9evRqenp4AgNGjRyMhIQFeXl6Ijo5G/fr1cejQIRgYGEjx8+fPh4aGBrp06YKEhAS0aNECQUFBUFdXl2L+/vtveHt7S7tgdOjQAUuWLJGOq6urY9++ffDy8kKjRo2go6MDd3d3+Pv7f6fRExEREVFBla9FshDiqzEymQx+fn7w8/PLMkZbWxuLFy/G4sWLs4wxNTXF+vXrv3iuUqVKYe/evV/NiYiIiIiKtgJx4R4RERERUUHCIpmIiIiISAmLZCIiIiIiJSySiYiIiIiUsEgmIiIiIlLCIpmIiIiISAmLZCIiIiIiJSySiYiIiIiUsEgmIiIiIlLCIpmIiIiISAmLZCIiIiIiJSySiYiIiIiUsEgmIiIiIlLCIpmIiIiISAmLZCIiIiIiJSySiYiIiIiUsEgmIiIiIlLCIpmIiIiISAmLZCIiIiIiJSySiYiIiIiUsEim/5R3795h9OjRaNWqFSwsLCCTyeDn55dp7JUrV9CyZUvo6+vD2NgYbm5uePjwYYa4BQsWwM3NDba2tpDJZHBycsq0v6CgIMhkskwfERERGeJDQkLg6OgIXV1dmJubw9PTE5GRkd8yfCIiIsomFsn0n/L27VssX74ciYmJ6NixY5Zxd+7cgZOTE5KSkvC///0Pq1atwr1799CkSRO8fv1aIXbp0qV48uQJfvjhB1hYWHw1h9WrV+PcuXMKDzMzM4WYEydOoE2bNrC0tMSuXbuwcOFChISEoEWLFkhMTMzR2ImIiCj7NPI7AaK8VLp0aURHR0Mmk+HNmzdYuXJlpnETJ06EXC7H3r17YWhoCABwcHBAhQoV4O/vj9mzZ0uxt27dgprap9837ezsvpqDnZ0d6tSp88WYUaNGoWLFiti6dSs0ND59m9ra2qJRo0ZYtWoVfv3112yNl4iIiHKGM8n0n5K+vOFLUlJSsHfvXvz0009SgQx8KrCbN2+OHTt2KMSnF8i55cWLF7h48SI8PDykAhkAGjZsiIoVK2Y4PxEREeU+FslESv79918kJCTA3t4+wzF7e3s8ePAAHz9+zHH/rq6uUFdXh6mpKdzc3BAWFqZwPP15VudXjiciIqLcx+UWRErevn0LADA1Nc1wzNTUFEIIREdHo3jx4ir1a2VlhfHjx6NBgwYwNDTEjRs3MGvWLDRo0ABnzpxBjRo1snX+9ONERET0/bBIJsrCl5ZlfG3JRmZat26N1q1bS8+bNm2Kdu3aoXr16pg4cSJ27dqVrXPk5NxERESkGi63IFKSvtNEZjO2UVFRkMlkMDY2zpVzlSlTBo0bN8b58+ezff7MZpiJiIgod7FIJlJSrlw56Ojo4MaNGxmO3bhxA+XLl4e2tnaunU8IoXDxX/oOGVmdPzs7aBAREdG3YZFMpERDQwPt27fH9u3b8e7dO6n96dOnOHbsGNzc3HLtXI8ePcKZM2fQoEEDqa1EiRKoV68e1q9fj9TUVKn9/PnzuHv3bq6en4iIiDLHNcn0n3PgwAHEx8dLBfCtW7ewdetWAEDbtm2hq6uLyZMno27dunB1dYWvry8+fvyIiRMnwtzcHCNHjlTo79KlS3j8+DEAIC4uDkIIqb+6deuidOnSAICWLVuiadOmsLe3ly7cmzNnDmQyGaZOnarQ5+zZs+Hs7IzOnTvDy8sLkZGR8PX1hZ2dHXr37v093x4iIiICi2T6D/r111/x5MkT6fmWLVuwZcsWAJ9mdsuUKYPKlSvj+PHjGDNmDH7++WdoaGjghx9+gL+/f4a76i1ZsgRr1qxRaOvcuTOAT3fX8/T0BABUr14dmzdvhr+/PxISElCsWDH88MMP+P3331GxYkWF1zs5OWH//v2YOHEi2rdvD11dXbi6umLu3LmQy+W5/ZYQERGREhbJ9J+TPuv7NQ4ODggJCflqXFBQEIKCgr4aN3/+/GydN52zszOcnZ1Veg0RERHlDq5JJiIiIiJSwplkoi/x65RH5+GtpomIiAoSziQTERERESlhkUxEREREpIRFMhERERGREhbJRERERERKWCSTyo4fPw6ZTJbp4/z585m+RgiBpk2bQiaTYciQIRmOh4eHw9PTE8WKFYO2tjbs7e0RGBiYIe758+cYPnw4mjVrBmNjY8hksmxtv0ZERESkCu5uQTk2Y8YMNG/eXKHNzs4u09iAgAA8ePAg02OxsbFo3LgxkpKSMGfOHBQvXhwbN25Ev379EBsbi99++02KffDgAf7++2/UrFkTbdu2xcaNG3NvQERERET/H4tkyrEKFSqgQYMGX417/Pgxxo4di7Vr18LNzS3D8b/++gsPHz7EpUuX4ODgAABwcXFBeHg4Jk6ciD59+sDY2BgA0LRpU7x+/RrAp9tBs0gmIiKi74HLLei7GzBgAJydndGpU+Z7Dp85cwaWlpZSgZzO1dUV8fHxCA4OltrU1PglS0RERN8fKw7KscGDB0NDQwOGhoZwcXHB6dOnM8SsXLkSFy5cwJIlS7LsJykpCXK5PEN7etv169dzL2kiIiKibGCRTCozMjLCsGHDsGzZMhw7dgwLFy7Es2fP4OTkhIMHD0pxL168gI+PD+bMmQNra+ss+6tatSqeP3+Op0+fKrSnF91v3779PgMhIiIiygKLZFJZrVq1sGDBAnTs2BFNmjRB7969cfbsWRQvXhyjR4+W4gYNGoQaNWqgf//+X+xvwIAB0NTURPfu3XHz5k28ffsWAQEB2Lx5MwAusSAiIqK8x+qDcoWxsTFcXV1x/fp1JCQkYOvWrQgODsacOXMQGxuLmJgYxMTEAPi0vCImJgbJyckAgCpVqmDHjh148uQJ7OzsYG5ujtmzZ2PevHkAgBIlSuTXsIiIiOgLQkND0a5dO5QqVQo6OjowNTWFo6Mj1q9frxAnhMCKFSvg4OAAQ0NDmJmZoVmzZti3b1+GPiMiIjBkyBCULVsWOjo6KF26NPr27ZvhL85OTk5Zbkkrk8kQERHxTWNjkUy5RggBAJDJZAgLC0NKSgoaNGgAExMT6QEAK1asgImJicI3Rps2bfDkyRPcu3cPt27dwqNHj2BmZgbg044WREREVPDExMTAxsYGM2bMwP79+7F27VqUKVMGHh4emDZtmhQ3adIkDBgwAPXq1cO2bdsQFBQEuVwOV1dXbN++XYpLTExE06ZNsXnzZvj4+ODAgQMYN24c9u3bh4YNG+Ldu3dS7J9//olz584pPI4cOQJNTU00aNAAVlZW3zQ2bgFHuSI6Ohp79+5FzZo1oa2tDU9PTzg5OWWIa968OTp27Ihhw4Zl2FNZJpOhQoUKAD7NNi9cuBA1a9ZkkUxERFRAOTk5Zfh57+rqikePHmH58uWYMGECAGDVqlVo3Lgx/vrrLynO2dkZVlZWWLNmjbRF7KlTp3D//n2sXLkSffv2lc5haGgId3d3hISESLtlVa1aNUM+a9asQXJyMvr16/fNY2ORTCpzd3dHqVKlUKdOHZibm+P+/fuYN28eXr16Jd39rkyZMihTpkymry9RokSGb6ihQ4fCyckJZmZmePjwIRYtWoTnz5/jxIkTGV6/detWAMDDhw8BfNovWV9fHwDw888/584giYiIKMfMzc0RGRkpPdfU1ISRkZFCjLa2tvT4PA5Ahtj0+yV8HpuZwMBA6Ovr45dffvmW9AGwSKYcsLe3x+bNm7F06VK8f/8epqamaNy4MdatW4e6devmqM9nz55h6NChePPmDczMzNC6dWvs2rULpUuXzhDbuXNnhecBAQEICAgA8H9LPoiIiCjvpKWlIS0tDdHR0diyZQsOHjyosP3rsGHD4OPjg8DAQLi5ueHjx4+YO3cuYmNj4e3tLcU1atQIDg4O8PPzQ+nSpVGlShXcu3cP48aNQ+3atdGyZcssc7h//z5OnTqFfv36SZNn34JFMqnM19cXvr6+OXptVkXszp07v7kPIiIiyh9eXl5YtmwZAEBLSwuLFi3CwIEDpePDhw+Hjo4OBg8eLC2FMDU1xZ49e9CoUSMpTkNDA8eOHUP37t1Rr149qd3JyQnbtm2TZpozExgYCADSMo1vxQv3iIiIiOibjBs3DhcvXsS+ffvQp08fDBkyBP7+/tLx1atXY9iwYRgyZAhCQkKwf/9+tGrVCj/++KPCPRaSk5Pxyy+/IDQ0FCtWrMDJkyexZs0avHjxAs7OzoiNjc30/CkpKVizZg2qVauGBg0a5MqYOJNMRERERN+kVKlSKFWqFACgbdu2AICxY8eiV69e0NDQkGaQPy+c27RpAycnJwwaNAiPHj0C8Gk2+MCBA7h48SLq1KkDAGjSpAkaN26McuXKYcGCBZg0aVKG8+/fvx8REREYM2ZMro2JRTLlLr9OeXSeHXlzHiIiIlJZvXr1sHTpUjx8+BBCCCQkJGR63VKdOnVw4sQJvH//Hvr6+ggNDYW6ujpq166tEFe2bFmYmZkhLCws0/MFBgZCS0sLHh4euTYGLrcgIiIiolx17NgxqKmpoWzZsrC2tgYAnD9/XiFGCIHz58/DxMQEenp6AABra2ukpqbi4sWLCrH37t3D27dvUbJkyQznioiIwP79+9GxY0fpHgu5gTPJRERERJQjAwYMgKGhIerVqwdLS0u8efMGW7ZswebNmzFq1ChYWFgAANzc3LB8+XLI5XK0bdsWiYmJWLNmDc6cOYOpU6dCJpMBAHr37o358+fjp59+woQJE1CpUiU8fPgQM2bMgJ6eHgYNGpQhhzVr1iAlJSVX9kb+HItkIiIiIsoRR0dHrF69GmvWrEFMTAz09fVRo0YNrFu3Dj169JDi/v77byxZsgTr1q3DqlWroKmpiYoVK2L9+vVwd3eX4mxsbHDx4kVMmTIFs2fPRnh4OCwtLeHo6IiJEyeiUqVKGXJYtWoVypQp88Xt4XKCRTIRERER5Ujv3r3Ru3fvr8Zpa2vDx8cHPj4+X40tX7481q5dm+0c7t69m+1YVXBNcj7y9PSETCbL8pG+dmfRokVo0KABzM3NIZfLUapUKXTt2hU3b97MtN8nT56gT58+sLa2hlwuR4kSJaRbOBIRERHR13EmOR/9/vvvma6tad++PeRyuXQV6Nu3b9GmTRvUqFEDJiYmePjwIWbNmoX69evj8uXLCn96CAsLg5OTE8qWLQt/f3+ULFkS4eHhCnsQEhEREX13hXzHKxbJ+ahcuXIoV66cQtuJEyfw5s0bTJgwAerq6gCAyZMnK8Q0a9YMDRo0QNWqVfH3339jypQpAD5dJerh4QEbGxucOnUKcrlcek1u3MOciIiI6L+CRXIBExgYCJlMhj59+nwxLv1qUQ2N//sIT548idDQUAQFBSkUyERERESkGq5JLkBiY2OxdetWtGjRAra2thmOp6amIjExEXfu3EG/fv1QrFgxhcXyJ0+eBAAYGBigbdu20NbWhr6+PlxdXXHnzp08GwcRERFRYcciuQDZuHEjEhIS0Ldv30yP6+npQVtbG1WqVMHt27dx/Phx2NjYSMdfvHgB4NOVptbW1ti3bx+WLl2KsLAwNGnSBOHh4XkyDiIiIqLCjkVyARIYGAgzM7Msd6I4e/Yszp07h/Xr18PAwADNmzdX2OEiLS0NwKc9C1euXIkWLVqgR48e2LlzJ968eYOAgIA8GQcRERFRYcciuYC4fv06Ll26hB49emS5nrh27dpo0KABunfvjmPHjkEIgXHjxknH02/F6OLiovC6mjVronjx4rhy5cr3GwARERFREcIiuYAIDAwEgGzfUtHAwACVK1fGvXv3pDZ7e/ss44UQUFPjx01ERESUHayaCoDExESsX78e9erVg52dXbZe8+bNG9y4cQPly5eX2tq0aQNdXV0cOHBAIfbKlSuIiIhAgwYNcjVvIiIioqKKW8AVADt37kRUVFSms8ixsbFwdnaGu7s7KlSoAB0dHdy7dw8LFy5EYmIiJk2aJMUaGxtjypQp8PHxgaenJ7p164aIiAj8/vvvKFWqFLy8vPJyWERERESFFovkAiAwMBB6enro2rVrhmPa2tqoUaMGli9fjmfPnuHjx4+wsrKCk5MTtm3bhqpVqyrEjxw5EkZGRli4cCE2btwIAwMDtG7dGrNmzYKpqWleDYmIiIioUGORXAAcOnQoy2NyuRwrVqxQqb9+/fple20zEREREWXENclEREREREpYJCv5888/YWtrC21tbTg4OODUqVP5nRIRERER5TEut/jM5s2bMXz4cPz5559o1KgRli1bhjZt2uDWrVsoVarU9zuxX+Y3D8ndc+z4/ucgIiIiKiI4k/yZP/74A3379kW/fv1QpUoVLFiwADY2Nvjrr7/yOzUiIiIiykOcSf7/kpKScPnyZfj6+iq0t2rVCmfPns30NYmJiUhMTJSex8bGAgDi4uJUO3lismrxOaFqTjmVF2MBOJ6c4tea6jienOHXmuo4npzh15rq/uPjSa/ThBBfDhQkhBDixYsXAoA4c+aMQvv06dNFxYoVM33NpEmTBAA++OCDDz744IMPPgrZ49mzZ1+sDTmTrEQmkyk8F0JkaEs3duxY/Pbbb9LztLQ0REVFwczMLMvXfKu4uDjY2Njg2bNnMDQ0/C7nyEscT8FVlMYCcDwFWVEaC8DxFGRFaSwAx5NTQgi8e/cO1tbWX4xjkfz/mZubQ11dHREREQrtkZGRsLS0zPQ1crkccrlcoc3Y2Ph7pajA0NCwSHxDpON4Cq6iNBaA4ynIitJYAI6nICtKYwE4npwwMjL6agwv3Pv/tLS04ODggMOHDyu0Hz58GA0bNsynrIiIiIgoP3Am+TO//fYbPDw8UKdOHTg6OmL58uV4+vQpBg0alN+pEREREVEeYpH8mV9++QVv377FlClTEB4eDjs7O+zfvx+lS5fO79QkcrkckyZNyrDMo7DieAquojQWgOMpyIrSWACOpyArSmMBOJ7vTSbE1/a/ICIiIiL6b+GaZCIiIiIiJSySiYiIiIiUsEgmIiIiIlLCIpmIiIiISAmLZCIiIiIiJSySqcBKTU3N7xRyVXJyMoBPt8MsCqKjo5GQkJDfaVAWisrXWbqiNp6ihJ8N5YX8qAlYJBchz549w7179/I7jVxx69YtTJ8+HfHx8fmdSq64c+cOBgwYgCdPnkAmk+V3Ot/s5s2bqFq1Kvbv35/fqXyz169f4/r167h+/Xp+p5IrPnz4AAB49+5dPmeSO+Lj45GamlpkxgMUnaIy/Rf/jx8/AgDS0tLyM51v9v79e7x//x6RkZEACvd4ilI9AORfTcAiuYh4/vw5ypQpg44dO+LOnTv5nc43uXbtGuzs7KCpqQk9PT0AhfuHyo0bN9C4cWPo6uoiNjY2v9P5ZqGhoWjcuDHi4uKwdOlSREVF5XdKOXbjxg04OTmhe/fuqFmzJvz8/PI7pW8SFhaGn376CT/88AOcnJywcuVKvH79Or/TyrGwsDB06NABjo6OaNiwIZYvX45Xr17ld1o5cu/ePezZswcAIJPJCvW/acCnX/x//fVXODs7o1evXrhw4QLU1NQK7bhu3bolfe84ODjg0KFDUFMrnCVSUaoHgPytCQrnVwBlIJPJUK1aNSQlJaFdu3a4fft2fqeUI9evX0fDhg0xevRojB07VmpP/zNLYfsHODo6Gj179oS7uzsCAgJgb2+PpKQkRERE5HdqOXLt2jU0bNgQQ4YMwapVq3Djxg2Eh4cDKHyzLg8ePICzszM6deqELVu2YNWqVZgyZQqeP3+e36nlyL1799C8eXNUq1YNHh4e6NixIwYMGAAfHx9cvHgxv9NT2cOHD9G0aVPY2dmhZ8+e6NixI7y9vTF69OhCN5779++jbt26+PHHH7Fu3ToAhbtQDgsLQ6NGjaCpqYlKlSohNTUVvXr1wqNHjwrlX8rSx1O1alX8+uuvaNOmDfr27YuYmBgAhe/nTlGpB4ACUBMIKvRSUlJEeHi4aNmypbh9+7Zo2bKlKF++vPj333+FEEJcunQpnzPMnvv37wt9fX3h6ekptc2ePVt4enqKzp07i3379uVjdjlz//59Ua9ePREVFSXS0tJE586dRaNGjYSurq7w9vYWZ86cye8Us+3KlStCJpOJ8ePHS23Vq1cXP/30Uz5mlXPjx48Xrq6u0vN3796Jtm3bisuXL4szZ86IV69e5WN2qhs2bJhwd3dXaOvevbvQ0tISPXv2FLdv386nzHJm3rx5olGjRgptBw8eFBUrVhTu7u7i+vXr+ZSZat6+fSvc3NxEhw4dxNChQ4WBgYFYvXq1dDwtLS3/ksuB8PBwUbduXTFq1Cip7fLly6J69epi7969QojCNaYnT56IatWqibFjx0ptISEhomPHjuLt27fixYsX+Zid6opKPSBEwagJOJNcBKirq8PKygpGRkZ4/fo1Nm3aBEtLS7Rr1w4dO3aEn58f4uLi8jvNr3r06BESExNhbW2NmzdvomnTpggODkZUVBSSk5Ph6uoKf39/AIXnN/v4+HhERUXh3bt3+PHHH/H+/Xt4e3tj4cKFOHbsGObPn4+7d+/md5pflZqaiq1bt2LUqFGYNm2a9Ft8v379cO/ePVy7dg1A4flcAODFixdQU1OT1lUuWrQIBw8exKBBg9C6dWsMHDgQFy5cyOcss0cIgQcPHsDMzAzA/61LrlSpEtq0aYNdu3Zhw4YNUmxhEB8fj6SkJKSlpSE1NRWpqalo1aoVlixZguPHjyMoKAhAwR9PbGwsjI2NMWjQIIwZMwZeXl7w9vaW8i9sM8p37tyBvr4+3N3dpbxr164NIyMjhIaG5m9yORAREYFq1aqhf//+Utvx48dx4sQJNGvWDNWrV8fEiRMLzfUxRaUeAApITfDdy3D67tJ/a+/UqZPw8/OT2q2srIRMJhPbtm3Lr9RUtmXLFlGiRAlhZWUlOnbsKF6+fClSU1OFEEIsWrRIqKmpiQsXLuRzltn377//CktLS/Hnn3+Knj17ijt37kjHzpw5IywtLcWKFSvyMcPse//+vfT/6V9zjx49EqampmLSpEn5lFXOBQYGCjU1NdGjRw9pxnXnzp0iNjZWXL16VVSsWFFMnDgxv9PMtjFjxghbW1vx8uVLIYQQz58/F4aGhuLkyZMiMDBQ6OnpiSdPnuRzltm3ZcsWoa6uLi5evCiEECI5OVn6uvvf//4n1NTUxLlz5/IzxWx7+PCh9P9Pnz4Vo0ePzjCjnJycLBISEvIhO9U8fPhQ/O9//5OeJycnCyGEaNWqVab/DqT/+12QPX/+XPr/FStWCLlcLoKCgsSlS5fE33//LWQymdi+fXs+Zph9RakeECL/awIWyYVUZn/OCggIkL4pPDw8hJWVlahZs6aoWrWquHHjRl6nmG1paWkK49m2bZto2rSpOHv2rELcmzdvRPHixcXSpUvzOkWVKH82Y8eOFTKZTOjo6IirV68qxLi5uYmePXvmdYoqyeqHXHr7zJkzha2trbh161ZeppUjyl9rgYGBws/PT7i5uQkvLy8hxP+Ny9PTUzRv3lwqAgqiz8dy8eJF4eLiIvT19UWHDh2Erq6uGDhwoBBCiAcPHojixYuLy5cv51eqKktOThZdunQRFStWlJaKJCYmCiGESEpKElWrVhVLlizJzxSzTfl76Pnz5xkK5aFDh4pFixYViqIy/evu81y7dOkixo0bJz338/MT58+fz/PcciJ9HMnJyWLFihUZlsHVrl1bDB8+PD9SU1lKSooQovDWA5nJz5pA4/vMT9P38urVK1haWkp/ovv8Iglra2vs3r0bnTt3xqlTpxASEgJbW1vUr18fnp6eOHv2LLS0tPIxe0XKY0kfj5ubG2rUqAFra2sAkNrfv38PS0tL2Nra5nPmmVMeD/DpT6leXl549eoVVq9ejdOnT8POzg4aGp++9YQQKFeuXH6mnaX08aRfsa58QU76ld+Ojo5YtGgRbty4gSpVqiAtLa3AXRX++WeTlpYmjaVPnz7Sfy0sLABAyj8xMRHVqlUrcGMBMo5HTU0NderUQUBAAHbt2oV3796hc+fO6NGjBwAgLi4OxsbG0NXVzefMM/f48WPs2rUL0dHRKF++PHr06AENDQ14eXlhxowZ6NGjB9avX4/KlSsD+PR9paOjAx0dnXzOPKPMxqL8PVSiRAl4e3sDAH777TesXr0ap06dwuXLlwvc19vn4ylXrhw8PDwUvu4+l74M6/fff8f06dPRvn37/Ej5i7L6fFJTU6GhoYF+/fopxEdHR8PY2Bi1atXKp4yzltlY1NXVARS+egDIfDwA8rcm+G7lN+W6W7duCZlMJtq3by+1fT6TdO3aNVGmTBlRpUoVhRmjmJgY8ejRo7xM9auyGsuXLvgYN26csLOzk/6cXJBkNp7PZ1lu3rwpevToIWQymRg5cqTw9/cXI0eOFGZmZgXygqqvfa0p69mzpyhXrpz48OFDXqSnkq99NkJ8mg3X0dERZ8+eFZcvXxYTJ04U5ubmBXJ2PLPxfG22e+TIkaJ27dri7du33zs9lV2/fl2UKFFCtGzZUtStW1fI5XIxefJk6fjBgwdFmzZthImJiQgMDBRbtmwRvr6+wtTUVLoYqaDIbCxTpkzJMv7hw4eicuXKwtTUVFy7di0PM82ezMYzdepUhZj076W2bduK6dOni0WLFgm5XF4g/2qRnc9H+d+5CRMmiAoVKojHjx/nZapf9bWxFKZ6QAjVv3eEyJuagEVyIREeHi4aNWokmjVrJq3NSff5D/zVq1cXyB/sn/vSWDIrxI4fPy4GDRokTExMpOUKBcmXxpP+py8hhPjw4YNYtGiRaNCggXBwcBCtW7cWoaGh+ZHyF6ny+aR/7f3vf/8TdevWFREREXma69d8bSzp43n69Kno1q2bkMlkokqVKqJ69eqF7mstsz/Th4SEiF9//VUYGhoWyPE8fvxYlCtXTowePVqkpaWJuLg4sWzZMlG1alVx//59Ke7Bgwdi9OjRwtraWlStWlXUrVtXXLlyJR8zz+hLY/l8TXK61NRU4ePjIzQ0NArkTh2qjsfd3V2oq6sLAwODAnndiKrjOXXqlBg8eLAwMTEptF9rhaEeEOLr41H+uZOXNQGL5EJi586domvXruLkyZPi6NGjolixYgo/INPX6hUGXxvL5z/sX716JebPny8aNmxYIH+QCPH18SjP8kVFRYmUlBSFC+EKElU+n3QfP34U4eHheZlmtnxtLJ//EiOEECdPnhShoaEFdvs3VT+bf/75R3h4eIiwsLC8TvWrUlNTxezZs0Xr1q1FbGys1H7p0iVhYWGR6Q/3Z8+eiejoaBEdHZ2HmX5dTsfSrVu3AvnLS07GM2zYMGFgYFAg17uqOp7IyEjx119/iZYtWxa48eTksynIVB3Pq1evxIIFC/KsJmCRXEhER0eLAwcOSM/Tf0D++OOPUlthuOBDiOyN5fPfHN+9e1fgfih+LrufTVH9fAqy7IwlJSWlSI1HednSx48f8zJFlRw5ckTMnDlTep6WliaSkpJE2bJlM91DvCB/D6k6FiFEgd7NQtXxXL16VTx79iwvU1SJquOJjY0VMTExeZlituXka60gU3U8UVFReVYTsEgupNLS0sSxY8cy/IBcunRphitAC7qsxvLnn38Wmi2ePleUPhshitZ4itJYhPjyeNJ/uBTkXwCSkpKk//88z3LlyomQkBDp+eHDhwt0gSyEamMpyDumpMvueA4dOpSneeWUKuMpSl9rBX0sQqj22eT1v2cskguoJ0+eiL1794oVK1aIly9fivj4eCGE4kxKamqq9AOyU6dOYvDgwUImkxW4i1mK0liE4HgK8niK0liEKLrjWb58uXj58qW05Ch92UtycrJ4//69KF26tFTkjx8/XshksgJ357OiNBYhvm08n+8zXFAUpc+nKI1FiMI1HhbJBdC1a9eEpaWlqFWrljA2NhY2NjbCx8dHWpCv/Jvh4cOHhUwmE6ampgXulpNFaSxCcDwFeTxFaSxC/PfGk5aWJpKTk0V8fLwoXbq0uHr1qpgxY4bQ19eXbihSUBSlsQjB8RTk8RSlsQhR+MbDIrmAiY6OFg4ODmLUqFEiKipKCCHE5MmTRZMmTUSHDh2kK74/38y9f//+Qk9PT9y8eTPf8s5MURqLEBxPQR5PURqLEP/d8aSrXbu2qFu3rtDS0ipwP+iL0liE4HgK8niK0liEKJzjYZFcwDx58kSULl1aHDx4UKF9zZo1omnTpsLd3f3/tXcvIVG2fRzHvzOjlHhKjCTDUKNSmOlgQxAkRUVCNNBBCotcFLVxIUrgzk1BdIJcGJhQG5OI3JeFtbCFmiiYlZApIUEHxRKpPF3vIpz3caTn5Xlecy6v+X3AhTO3en1B8e/tfV8zZ0/AZ8+emU2bNln5A+FSizHqsbnHpRZjYrNndneUkZERk5qaau3WaC61GKMem3tcajFmafbY9dI+gs/nIyEhgQ8fPgAwNTUFQGlpKSdPnuTly5c8fvw4fPy2bdt48uQJwWAwKuv9Oy61gHps7nGpBWKzp7m5GYC0tDRqa2vp6ekhEAhEbc2/41ILqMfmHpdaYIn2RG08l98KhUJmy5Yt4S1O/nondHFxsdmxY4cxxu671me51GKMemzmUosxsdtjjN1bvRnjVosx6rGZSy3GLL0enUmOsvHxccbGxvj27Vv4sdu3b/P161eOHTvGxMQEcXFx4eeKioowxjAxMYHH44nGkn/LpRZQj809LrWAemZ7fv78CYDXa8+vJpdaQD0297jUAm70RH8FMezVq1ccOXKEXbt2kZ+fz927d5mZmWHlypU0Njby5s0b9u/fT19fHz9+/ACgvb2d5ORkjDFRXv1cLrWAesDeHpdaQD3w3x7buNQC6gF7e1xqAYd6FvvUtfzS29tr0tPTTUVFhWlsbDSVlZUmPj5+zmvE9/T0mEAgYNatW2eCwaAJhUImOTnZdHd3R3Hl87nUYox6bO5xqcUY9djc41KLMeqxucelFmPc6vEYY+GpCMeNjIxQUlJCXl4eNTU14cf37NlDIBCgpqYGY0z436i1tbUMDQ2RkJDA8ePH2bhxY7SWPo9LLaAem3tcagH12NzjUguox+Yel1rAvZ64/32ILLTJyUlGR0cpLi4GYGZmBq/XS25uLsPDwwB4PB6mp6fx+XyUlZVFc7l/y6UWUI/NPS61gHps7nGpBdRjc49LLeBej65JjoKMjAwaGhooLCwEYHp6GoA1a9bMuVDd5/MxNjYWft/Gk/4utYB6ZtnY41ILqGeWjT0utYB6ZtnY41ILuNejITlK1q9fD/z6Kys+Ph749c308ePH8DGXLl2ivr4+vJegjXexg1stoB6wt8elFlAP2NvjUguoB+ztcakF3OrR5RZR5vV6w9fneDwefD4fANXV1Vy8eJGurq45W6TYzKUWUI/NXGoB9djMpRZQj81cagE3enQm2QKz/2bw+XxkZWVx7do1rly5wosXL9i8eXOUV/fPuNQC6rGZSy2gHpu51ALqsZlLLbD0e+we4WPE7HU68fHx1NfXk5KSQmtrKwUFBVFe2T/nUguox2YutYB6bOZSC6jHZi61gAM9C72nnPx7HR0dxuPxmN7e3mgv5f/mUosx6rGZSy3GqMdmLrUYox6budRizNLt0T7JlhkfHycxMTHay1gQLrWAemzmUguox2YutYB6bOZSCyzNHg3JIiIiIiIRdOOeiIiIiEgEDckiIiIiIhE0JIuIiIiIRNCQLCIiIiISQUOyiIiIiEgEDckiIiIiIhE0JIuIiIiIRNCQLCISA4wx7Nu3j6KionnP3bx5k9TUVN6/fx+FlYmI2ElDsohIDPB4PNy5c4e2tjbq6urCjw8MDFBVVUVNTQ1r165d0K85OTm5oJ9PRGQxaUgWEYkRWVlZ1NTUcP78eQYGBjDGcObMGfbu3cv27ds5cOAASUlJZGRkcOrUKb58+RL+2IcPH7Jz505WrFhBeno6Bw8epL+/P/z84OAgHo+H+/fvs3v3bpYvX05DQ0M0MkVEFoRellpEJMYcOnSI0dFRjh49yoULF+jo6CAYDHL27FlKS0v5/v07VVVVTE1N0dLSAkBTUxMej4dAIMD4+DjV1dUMDg7S3d2N1+tlcHCQnJwcsrOzuX79Olu3bmXZsmVkZmZGuVZE5N/RkCwiEmM+ffqE3+9neHiYBw8e0NXVRVtbG48ePQofMzQ0RFZWFn19fWzYsGHe5/j8+TOrVq2ip6cHv98fHpJv3LhBeXn5YuaIiPwRutxCRCTGrFq1inPnzpGfn8/hw4fp7Ozk6dOnJCUlhd/y8vIAwpdU9Pf3c+LECXJzc0lJSSEnJwdg3s1+wWBwcWNERP6QuGgvQEREFl9cXBxxcb9+BczMzBAKhbh8+fK841avXg1AKBQiKyuL+vp6MjMzmZmZwe/3MzExMef4xMTEP794EZFFoCFZRCTGFRQU0NTURHZ2dnhw/qvh4WFev35NXV0dhYWFALS2ti72MkVEFpUutxARiXFlZWWMjIxQUlJCe3s77969o7m5mdOnTzM9PU1aWhrp6encunWLt2/f0tLSQmVlZbSXLSLyR2lIFhGJcZmZmTx//pzp6WmKiorw+/2Ul5eTmpqK1+vF6/Vy7949Ojs78fv9VFRUcPXq1WgvW0Tkj9LuFiIiIiIiEXQmWUREREQkgoZkEREREZEIGpJFRERERCJoSBYRERERiaAhWUREREQkgoZkEREREZEIGpJFRERERCJoSBYRERERiaAhWUREREQkgoZkEREREZEIGpJFRERERCL8B3iuazHl/dq9AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = verified_users_with_project.copy()\n", + "df['last_updated'] = pd.to_datetime(df['last_updated'])\n", + "df['year'] = df['last_updated'].dt.year\n", + "unique_projectes_created_each_year = df.groupby('year')['uuid'].nunique()\n", + "unique_projectes_created_each_year\n", + "\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "ax = unique_projectes_created_each_year.plot(kind='bar', color='coral')\n", + "for i, value in enumerate(unique_projectes_created_each_year.values):\n", + " ax.text(i, value + 0.1, str(value), ha='center', va='bottom', fontsize=12)\n", + "plt.title('Number of Unique Projects Each Year')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Projects')\n", + "plt.xticks(rotation=45)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "50f16b45-14c2-4e39-826d-f570b6403fd9", + "metadata": {}, + "source": [ + "## Number of Projects Created Each Year That Ran any Job" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "7836abe8-9138-4c4b-852b-1084cce9e143", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of unique Projetcs: 784\n" + ] + }, + { + "data": { + "image/png": "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m6Nv374YO3YsrK2tYWVlhXHjxsHT01OePYGIiIiICo8cj7m9cOECbt26BUmSUK5cOVSpUkVe5uzsrDSrQVbOnz+Phg0bys/Tx8H26tULq1evxrVr17Bx40a8fv0ajo6OaNiwIbZs2SKfRQben1XW09NDly5dkJCQgMaNGyMoKEjp7mlEREREVDioXNxGRESga9euOH78OCwsLCCEQExMDBo2bIjff/8dtra22d6Wt7c3hBBZLj906NBnt2FoaIjly5dj+fLl2d4vEREREWknlee5HT58OGJjY3Hjxg1ERUUhOjoa169fR2xsLEaMGJEbMRIRERERZYvKZ24PHjyII0eOoFy5cnKbu7s7Vq5cqXQzBSIiIiKivKbymdu0tDTo6+tnaNfX10daWppagiIiIiIiygmVi9tGjRph5MiRePbsmdz29OlTjB49Go0bN1ZrcEREREREqlC5uF2xYgXi4uJQvHhxuLm5oWTJknB1dUVcXBwv6iIiIiIijVJ5zK2zszMuXryI4OBg3L59G0IIuLu7c15ZIiIiItI4lYrblJQUGBoa4vLly/Dx8YGPj09uxUVEREREpDKVhiXo6enBxcUFqampuRUPEREREVGOqTzmdsqUKZg0aRKioqJyIx4iIiIiohxTecztsmXLcO/ePTg5OcHFxQUmJiZKyy9evKi24IiIiIiIVKFycdu2bVtIkpQbsRARERERfRGVi9uAgIBcCIOIiIiI6Mtle8zt27dvMXToUBQtWhR2dnbw8/PDq1evcjM2IiIiIiKVZLu4nT59OoKCgtCqVSt07doVwcHBGDx4cG7GRkRERESkkmwPS9i5cycCAwPRtWtXAED37t1Rp04dpKamQldXN9cCJCIiIiLKrmyfuQ0LC0O9evXk5zVq1ICenh6ePXuWK4EREREREakq28VtamoqDAwMlNr09PSQkpKi9qCIiIiIiHIi28MShBDw9/eHQqGQ2969e4dBgwYpzXW7c+dO9UZIRERERJRN2S5ue/XqlaGte/fuag2GiIiIiOhLZLu4Xb9+fW7GQURERET0xbI95paIiIiIKL9jcUtEREREWoPFLRERERFpDRa3RERERKQ1slXcVqlSBdHR0QCAmTNn4u3bt7kaFBHlX3FxcRg/fjyaNm0KW1tbSJKEgIAApT6pqalYtGgRmjdvjq+++grGxsYoV64cJk6ciNevX2e63eXLl6Ns2bJQKBRwdXXFjBkzkJycnPsJERGRVslWcXvr1i3Ex8cDAGbMmIE3b97kalBElH9FRkZizZo1SExMRLt27TLtk5CQgICAALi4uGDJkiXYv38/+vfvjzVr1qBOnTpISEhQ6v/9999j5MiR6NChAw4dOoQhQ4Zgzpw5GDp0aB5kRERE2iRbU4FVqlQJvXv3Rt26dSGEwMKFC2Fqappp32nTpqk1QCLKX1xcXBAdHQ1JkvDq1SusW7cuQx8jIyOEhobC2tpabvP29kaxYsXQuXNn7NixQ54nOzIyErNnz0b//v0xZ84cuW9ycjKmTJmCUaNGwd3dPW+SIyKiAi9bxW1QUBCmT5+Offv2QZIkHDhwAHp6GVeVJInFLZGWkyTps310dXWVCtt0NWrUAACEhYXJbQcPHsS7d+/Qu3dvpb69e/fG5MmTsXv3bha3RESUbdkqbsuUKYPff/8dAKCjo4O//voLdnZ2uRoYEWmfo0ePAgDKly8vt12/fh0A4OnpqdTX0dERNjY28nIiIqLsyPYdytKlpaXlRhxEpOWePn2KiRMnolq1avD19ZXbIyMjoVAoYGJikmEdKysrREZG5mWYRERUwKlc3ALA/fv3sWTJEty6dQuSJKFcuXIYOXIk3Nzc1B0fEWmBqKgotGzZEkIIbNmyBTo6yteyfmqoQ3aGQRAREaVTeZ7bQ4cOwd3dHf/++y8qVKgADw8P/PPPPyhfvjyCg4NzI0YiKsCio6Ph4+ODp0+fIjg4GCVKlFBabm1tjXfv3mU6xWBUVBSsrKzyKlQiItICKp+5nThxIkaPHo158+ZlaJ8wYQJ8fHzUFhwRFWzR0dFo0qQJQkND8ddff6FChQoZ+qSPtb127Rpq1qwpt4eHh+PVq1fw8PDIs3iJiKjgU/nM7a1bt9C3b98M7X369MHNmzfVEhQRFXzphe2DBw9w+PBhVK5cOdN+zZs3h6GhIYKCgpTag4KCIElSlnPpEhERZUblM7e2tra4fPkySpUqpdR++fJlzqBAVEgcOHAA8fHxiIuLAwDcvHkT27dvBwC0bNkSkiShWbNmuHTpEpYsWYKUlBScPXtWXt/W1lYeo29lZYUpU6Zg6tSpsLKyQtOmTXHu3DkEBASgX79+nAaMiIhUonJx279/fwwYMAAPHjyAl5cXJEnCqVOnMH/+fIwdOzY3YiSifGbw4MF49OiR/Hzbtm3Ytm0bACA0NBQAcO7cOQDAyJEjM6zfq1cvpTO1kydPhpmZGVauXImFCxfCwcEBEydOxOTJk3MxCyIi0kYqF7dTp06FmZkZfvzxR0yaNAkA4OTkhICAAIwYMULtARJR/vPw4cPP9hFCqLTNESNG8DuEiIi+mMrFrSRJGD16NEaPHi3/SdLMzEztgRERERERqSpH89ymY1FLRERERPnJFxW3RFSIBLTX4L53aW7fRERUoKg8FRgRERERUX7F4paIiIiItIZKxW1ycjIaNmyIO3fu5FY8REREREQ5plJxq6+vj+vXr0OSpNyKh4iIiIgox1QeltCzZ08EBgbmRixERERERF9E5dkSkpKSsG7dOgQHB6NatWowMTFRWr5o0SK1BUdEREREpAqVi9vr16+jSpUqAJBh7C2HKxARERGRJqlc3B47diw34iAiIiIi+mI5ngrs3r17OHToEBISEgCofh95IiIiIiJ1U7m4jYyMROPGjVG6dGm0bNkSz58/BwD069cPY8eOVXuARERERETZpXJxO3r0aOjr6+Px48cwNjaW27/++mscPHhQrcEREREREalC5TG3hw8fxqFDh/DVV18ptZcqVQqPHj1SW2BERERERKpS+cxtfHy80hnbdK9evYJCoVBLUEREREREOaFycVu/fn1s3LhRfi5JEtLS0vDDDz+gYcOGag2OiIiIiEgVKg9L+OGHH+Dt7Y3z588jKSkJ48ePx40bNxAVFYXTp0/nRoxERERERNmi8plbd3d3XL16FTVq1ICPjw/i4+PRoUMHXLp0CW5ubrkRIxERERFRtqh85hYAHBwcMGPGDHXHQkRERET0RXJU3EZHRyMwMBC3bt2CJEkoV64cevfuDSsrK3XHR0RERESUbSoPSzhx4gRcXV2xbNkyREdHIyoqCsuWLYOrqytOnDiRGzESEREREWWLymduhw4dii5dumD16tXQ1dUFAKSmpmLIkCEYOnQorl+/rvYgiYiIiIiyQ+Uzt/fv38fYsWPlwhYAdHV1MWbMGNy/f1+twRERERERqULl4rZKlSq4detWhvZbt26hUqVK6oiJiIiIiChHsjUs4erVq/L/R4wYgZEjR+LevXuoVasWAODs2bNYuXIl5s2blztREhERERFlQ7aK20qVKkGSJAgh5Lbx48dn6Ofn54evv/5a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EWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3GrA8ePHIUlSpo+zZ89qOjwiIiKiAktP0wEUZnPmzEHDhg2V2jw8PDQUDREREVHBx+JWg0qVKoVatWppOgwiIiIircFhCURERESUpcuXL6NVq1YoVqwYjIyMYGVlhdq1a2PTpk2aDi1TLG41aOjQodDT00ORIkXQrFkznDp1StMhERERESl5/fo1nJ2dMWfOHOzfvx8bN25E8eLF0aNHD8yePVvT4WXAYQkaYG5ujpEjR8Lb2xvW1ta4d+8efvjhB3h7e+PPP/9Es2bNNB0iEREREQDA29sb3t7eSm2+vr4IDQ3FmjVrMGXKFM0ElgUWtxpQuXJlVK5cWX5er149tG/fHp6enhg/fjyLWyIiIsr3bGxsEBERoekwMuCwhHzCwsICvr6+uHr1KhISEjQdDhEREZGStLQ0pKSk4OXLl1i1ahUOHTqECRMmaDqsDHjmNh8RQgAAJEnScCREREREyoYMGYL//e9/AAADAwMsW7YMAwcO1HBUGbG4zSeio6Oxb98+VKpUCYaGhpoOh4iIiEjJd999h379+iEiIgJ79+7FsGHDEB8fj3Hjxmk6NCUsbjXAz88PxYoVQ7Vq1WBjY4O7d+/ixx9/xIsXLxAUFKTp8IiIiIgyKFasGIoVKwYAaNmyJQBg0qRJ6NWrF2xtbTUZmhKOudWAChUq4NChQ+jXrx+aNGmCyZMnw93dHSEhIWjSpImmwyMiIiL6rBo1aiAlJQUPHjzQdChKeOZW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3oWLtuTN4paIiIiItAaHJRARERGR1mBxS0RERERag8UtEREREWkNFrdEREREpDVY3BIRERGR1mBxS0RERERag8UtEREREWkNFrdERPmYEAJNmjSR7x70oVWrVsHc3ByPHz/WQGRERPkTi1sionxMkiSsX78e//zzD/73v//J7aGhoZgwYQKWLl2KYsWKqXWfycnJat0eEVFeYnFLRJTPOTs7Y+nSpRg3bhxCQ0MhhEDfvn3RuHFj1KhRAy1btoSpqSns7e3Ro0cPvHr1Sl734MGDqFu3LiwsLGBtbQ1fX1/cv39fXv7w4UNIkoStW7fC29sbhoaG2LRpkybSJCJSC95+l4iogGjXrh1ev36Njh07YtasWTh37hyqVauG/v37o2fPnkhISMCECROQkpKCo0ePAgB27NgBSZLg6emJ+Ph4TJs2DQ8fPsTly5eho6ODhw8fwtXVFcWLF8ePP/6IypUrQ6FQwMnJScPZEhHlDItbIqICIiIiAh4eHoiMjMT27dtx6dIl/PPPPzh06JDc58mTJ3B2dsZ///2H0qVLZ9jGy5cvYWdnh2vXrsHDw0MubpcsWYKRI0fmZTpERLmCwxKIiAoIOzs7DBgwAOXKlUP79u1x4cIFHDt2DKampvKjbNmyACAPPbh//z78/PxQokQJFClSBK6urgCQ4SK0atWq5W0yRES5RE/TARARUfbp6elBT+/9V3daWhpat26N+fPnZ+jn6OgIAGjdujWcnZ2xdu1aODk5IS0tDR4eHkhKSlLqb2JikvvBExHlARa3REQFVJUqVbBjxw4UL15cLng/FBkZiVu3buF///sf6tWrBwA4depUXodJRJSnOCyBiKiAGjp0KKKiovDNN9/g33//xYMHD3D48GH06dMHqampsLS0hLW1NdasWYN79+7h6NGjGDNmjKbDJiLKVSxuiYgKKCcnJ5w+fRqpqalo1qwZPDw8MHLkSJibm0NHRwc6Ojr4/fffceHCBXh4eGD06NH44YcfNB02EVGu4mwJRERERKQ1eOaWiIiIiLQGi1siIiIi0hosbomIiIhIa7C4JSIiIiKtweKWiIiIiLQGi1siIiIi0hosbomIiIhIa7C4JSIiIiKtweKWiIiIiLQGi1siIiIi0hosbomIiIhIa/w/SnluS/isKfMAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = df_projectJob.copy()\n", + "df = df[df.projectUuid.isin(job_files_with_verified_users.projectUuid)]\n", + "print(f'Number of unique Projetcs: {df.projectUuid.nunique()}')\n", + "## Filter the projectUUID by verified user\n", + "\n", + "df['last_updated'] = pd.to_datetime(df['lastUpdated'], utc = True)\n", + " # Extract the year from 'last_updated'\n", + "df['year'] = df['last_updated'].dt.year\n", + "# Count the number of unique users per year\n", + "unique_jobs_by_year = df.groupby('year')['projectUuid'].nunique()\n", + "\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "ax = unique_jobs_by_year.plot(kind='bar', color='coral')\n", + "for i, value in enumerate(unique_jobs_by_year.values):\n", + " ax.text(i, value + 0.1, str(value), ha='center', va='bottom', fontsize=12)\n", + "plt.title('Number of Unique Projects Each Year That ran Any Job')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Projects')\n", + "plt.xticks(rotation=45)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "381e5034-f297-4793-ba9f-900b853468b7", + "metadata": {}, + "source": [ + "## Number of Files Associated With Each Project" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "2ee322fa-59f2-4515-a862-f0f17fe0aefc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total number of project: 752\n", + "621.0\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1EAAAImCAYAAACy1QBnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVc1JREFUeJzt3X98zfXj///7MfbTNmY/WAwR2zDCKor8rhHRD0mFqF7eVhFehV4x9SqvfsmrDC8lPz4q+oF+iVb5mX7MWJEpSs2v0fwaG8P2/P7Rd+fSsY3znHP2PNtu18vlXF7O4/nrfp47z1677/k8z2MzDMMQAAAAAMAp1awOAAAAAAAVCSUKAAAAAEygRAEAAACACZQoAAAAADCBEgUAAAAAJlCiAAAAAMAEShQAAAAAmECJAgAAAAATKFEAAAAAYAIlCoDLLFiwQDabzf7w9fVV3bp11bVrV02bNk2HDx8utkxSUpJsNpup7eTl5SkpKUlr1641tVxJ22rUqJFuueUWU+u5lLffflszZswocZrNZlNSUpJLt+dqX375pdq3b6+AgADZbDatWLGixPl+//13h5/33x/t27eX9Nf+HTZsWLFlFixY4NLM+fn5mjlzpm644QbVrl1b3t7euuKKKzRw4ECtW7fOpdsqqwMHDigpKUnp6ekuW2fRe7qkx8yZM122nZJceLxf+DB7fDpr2LBhqlmzZpmX79Kli0NOPz8/tW7dWjNmzFBhYaHLcq5du9at+8Ed7ycAzqtudQAAlc/8+fMVHR2tc+fO6fDhw9q4caOef/55vfTSS1q6dKl69Ohhn/eBBx7QzTffbGr9eXl5mjp1qqS/fiFyVlm2VRZvv/22tm/frjFjxhSb9s0336h+/fpuz1BWhmFo4MCBatasmT766CMFBASoefPmF13mkUce0eDBgx3Gin7JXb58uYKCgtyWV5Kys7N1880368cff9Tw4cP1z3/+UyEhIdq/f78+/PBDde/eXWlpaWrdurVbc1zKgQMHNHXqVDVq1Eht2rRx6bpXrVql4OBgh7HGjRu7dBulKTreLxQbG1su2y+LK6+8Um+99ZYk6fDhw5ozZ44ee+wxHTx4UM8//7xLttG2bVt98803btsP7nw/Abg0ShQAl2vZsqX9TIQk3X777Xrsscd0ww036LbbbtOuXbsUEREhSapfv77bS0VeXp78/f3LZVuXct1111m6/Us5cOCAjh49qgEDBqh79+5OLRMVFVXq67r66qtdGa9EQ4YM0Q8//KDVq1erW7duDtMGDRqksWPHqnbt2m7PYaV27dopNDTU5estOnYu5sLjvSLw8/NzeM8mJCQoOjpaM2fO1L///W/VqFGj2DKGYejMmTPy8/NzahtBQUEef7wDKDsu5wNQLqKiovTyyy/r5MmT+t///mcfL+kSu6+++kpdunRRnTp15Ofnp6ioKN1+++3Ky8vT77//rrCwMEnS1KlT7ZfkFF0yVrS+LVu26I477lDt2rXVpEmTUrdVZPny5YqLi5Ovr6+uvPJKvfrqqw7Tiy5d+v333x3GL7xkp0uXLvr000/1xx9/OFwyVKSky/m2b9+uW2+9VbVr15avr6/atGmjhQsXlridd955R08++aQiIyMVFBSkHj166Oeffy59x//Nxo0b1b17dwUGBsrf318dO3bUp59+ap+elJRkL5lPPPGEbDabGjVq5NS6S3Ph5Xyl2bVrlwYPHqzw8HD5+PgoJiZGycnJl1wuLS1Nn332mUaMGFGsQBWJj49XVFSU/bkz+9vZn7f018+8ZcuWSk1NVadOneTv768rr7xS//nPf+yXh61du1bx8fGSpPvvv9/+vih6L/z2228aNGiQIiMj5ePjo4iICHXv3t1ll2q9+eabat26tXx9fRUSEqIBAwYoIyPDYZ6iy+S2bdumXr16KTAw0OkifSnJycnq3LmzwsPDFRAQoFatWumFF17QuXPnis27atUqde/eXcHBwfL391dMTIymTZtWbL7du3erd+/eqlmzpho0aKBx48YpPz+/TPlq1Kihdu3aKS8vT3/++aekv47Vhx9+WHPmzFFMTIx8fHzs75NLHUtS6Zfzbd68Wf369VNISIh8fX119dVX69133y2Waf/+/XrooYfUoEEDeXt7KzIyUnfccYcOHTp0yfcTAPfjTBSActO7d295eXlp/fr1pc7z+++/q0+fPurUqZPefPNN1apVS/v379eqVat09uxZ1atXT6tWrdLNN9+sESNG6IEHHpAke7Eqctttt2nQoEEaOXKkcnNzL5orPT1dY8aMUVJSkurWrau33npLo0eP1tmzZzV+/HhTr3HWrFl66KGH9Ouvv2r58uWXnP/nn39Wx44dFR4erldffVV16tTR4sWLNWzYMB06dEiPP/64w/yTJk3S9ddfrzfeeEM5OTl64okn1LdvX2VkZMjLy6vU7axbt049e/ZUXFyc5s2bJx8fH82aNUt9+/bVO++8o7vuuksPPPCAWrdurdtuu81+iZ6Pj88lX0NhYaHOnz/vMObl5eX0Z9127Nihjh072ot23bp1tXr1aj366KPKzs7WlClTSl32888/lyT179/fqW2Z3d/OysrK0j333KNx48ZpypQpWr58uSZOnKjIyEgNGTJEbdu21fz583X//ffrX//6l/r06SNJ9tLau3dvFRQU6IUXXlBUVJSys7O1adMmHT9+3KntFxQUOPwMbDab/f0wbdo0TZo0SXfffbemTZumI0eOKCkpSR06dFBqaqquuuoq+3Jnz55Vv3799I9//EMTJkwo9nN1ZtsXbl+Sfv31Vw0ePFiNGzeWt7e3fvjhBz377LPauXOn3nzzTft88+bN04MPPqgbb7xRc+bMUXh4uH755Rdt377dYf3nzp1Tv379NGLECI0bN07r16/XM888o+DgYE2ePNmpfXahX3/9VdWrV3c4a7lixQpt2LBBkydPVt26dRUeHu7UsVSaNWvW6Oabb9a1116rOXPmKDg4WEuWLNFdd92lvLw8+x8c9u/fr/j4eJ07d06TJk1SXFycjhw5otWrV+vYsWOXfD8BKAcGALjI/PnzDUlGampqqfNEREQYMTEx9udTpkwx/v6fovfff9+QZKSnp5e6jj///NOQZEyZMqXYtKL1TZ48udRpf9ewYUPDZrMV217Pnj2NoKAgIzc31+G17dmzx2G+NWvWGJKMNWvW2Mf69OljNGzYsMTsF+YeNGiQ4ePjY2RmZjrMl5CQYPj7+xvHjx932E7v3r0d5nv33XcNScY333xT4vaKXHfddUZ4eLhx8uRJ+9j58+eNli1bGvXr1zcKCwsNwzCMPXv2GJKMF1988aLr+/u8JT1SUlIMw/hr/w4dOrTYMvPnz7eP3XTTTUb9+vWNEydOOKz/4YcfNnx9fY2jR4+WmmHkyJGGJGPnzp2XzGsYzu9vMz/vG2+80ZBkfPfddw7zxsbGGjfddJP9eWpqarHXbhiGkZ2dbUgyZsyY4dRr+Lui9/SFjyuuuMIwDMM4duyY4efnV+x9k5mZafj4+BiDBw+2jw0dOtSQZLz55ptObbtoH5X08PLyKnW5goIC49y5c8aiRYsMLy8v+8/35MmTRlBQkHHDDTfY348lKcr57rvvOoz37t3baN68+SVz33jjjUaLFi2Mc+fOGefOnTMOHDhgTJgwwZBk3Hnnnfb5JBnBwcHF3n/OHkslvVeio6ONq6++2jh37pzDOm+55RajXr16RkFBgWEYhjF8+HCjRo0axo4dO0p9HaW9nwCUDy7nA1CuDMO46PQ2bdrI29tbDz30kBYuXKjffvutTNu5/fbbnZ63RYsWxW46MHjwYOXk5GjLli1l2r6zvvrqK3Xv3l0NGjRwGB82bJjy8vL0zTffOIz369fP4XlcXJwk6Y8//ih1G7m5ufruu+90xx13ONzVzMvLS/fdd5/27dvn9CWBJRk9erRSU1MdHtdee61Ty545c0ZffvmlBgwYIH9/f50/f97+6N27t86cOaNvv/22zNkuZHZ/O6tu3bq65pprHMbi4uIu+nMpEhISoiZNmujFF1/U9OnTtXXrVtN3ifviiy8c9v/KlSsl/XUjk9OnTxe7pLJBgwbq1q2bvvzyy2LrMnPsSNKiRYuK/fy/++47h3m2bt2qfv36qU6dOvLy8lKNGjU0ZMgQFRQU6JdffpEkbdq0STk5ORo1atQlz2LabDb17dvXYczZ/S1JP/30k2rUqKEaNWooMjJSL7/8su655x69/vrrDvN169bN4czU5RxLu3fv1s6dO3XPPfdIUrH3+sGDB+3LfvbZZ+ratatiYmKcej0Ayh+X8wEoN7m5uTpy5IhatWpV6jxNmjTRF198oRdeeEGJiYnKzc3VlVdeqUcffVSjR492elv16tVzet66deuWOnbkyBGn11MWR44cKTFrZGRkiduvU6eOw/Oiy+1Onz5d6jaOHTsmwzBMbceM+vXrl/nGAkeOHNH58+f12muv6bXXXitxnuzs7FKXL/qs0549ey55F8Gi7bljP1z4c5H++tlc7OdSxGaz6csvv9TTTz+tF154QePGjVNISIjuuecePfvsswoMDLzkOlq3bl3ijSWKXk9przklJcVhzN/f3/TdFGNiYi7688/MzFSnTp3UvHlz/fe//1WjRo3k6+ur77//XomJifZ9VPRZJGcuSfP395evr6/DmI+Pj86cOeNU5iZNmmjJkiX2r2Jo3LhxiTfQuHC/Xc6xdOjQIUnS+PHjS71MuOi9/ueff3JpHuDhKFEAys2nn36qgoKCS96WvFOnTurUqZMKCgq0efNmvfbaaxozZowiIiI0aNAgp7Zl5runsrKySh0r+uW46Be2Cz+4frFf8J1Rp04dHTx4sNj4gQMHJMkld1yrXbu2qlWr5vbtlEXt2rXtf8VPTEwscZ6L3ar7pptu0qRJk7RixQqnbl/v7P5218+7NA0bNtS8efMkSb/88oveffddJSUl6ezZs5ozZ06Z11v0/i3tNV/4czf7nW3OWLFihXJzc7Vs2TI1bNjQPn7hTTOKPte4b98+l2e4kK+vr1PF/8L9cTnHUtH4xIkTddttt5U4T9EfAsLCwsplPwAoOy7nA1AuMjMzNX78eAUHB+sf//iHU8t4eXnp2muvtd+lrejSOmfOvpjx008/6YcffnAYe/vttxUYGKi2bdtKkv0udT/++KPDfB999FGx9Tl7BkKSunfvrq+++sr+C1iRRYsWyd/f3yW3SA4ICNC1116rZcuWOeQqLCzU4sWLVb9+fTVr1uyyt1MW/v7+6tq1q7Zu3aq4uDi1b9++2KOkszxF2rZtq4SEBM2bN09fffVVifNs3rxZmZmZkpzf32Z+3s5y9n3brFkz/etf/1KrVq0u+3LSDh06yM/PT4sXL3YY37dvn/3SRncrKiJ/v0mJYRjFLp3r2LGjgoODNWfOnEte9muVyzmWmjdvrquuuko//PBDie/z9u3b2886JiQkaM2aNRe9zNbV/x0EYA5nogC43Pbt2+3X+h8+fFgbNmzQ/Pnz5eXlpeXLlxe7k97fzZkzR1999ZX69OmjqKgonTlzxn73rqIv6Q0MDFTDhg3tX6QaEhKi0NDQMt+OOzIyUv369VNSUpLq1aunxYsXKyUlRc8//7z9Ep/4+Hg1b95c48eP1/nz51W7dm0tX75cGzduLLa+Vq1aadmyZZo9e7batWunatWqlfpX7ylTpuiTTz5R165dNXnyZIWEhOitt97Sp59+qhdeeKHYF6iW1bRp09SzZ0917dpV48ePl7e3t2bNmqXt27frnXfeccsZCGf997//1Q033KBOnTrp//7v/9SoUSOdPHlSu3fv1scff1xqOSqyaNEi3XzzzUpISNDw4cOVkJCg2rVr6+DBg/r444/1zjvvKC0tTVFRUU7vbzM/b2c1adJEfn5+euuttxQTE6OaNWsqMjJS2dnZevjhh3XnnXfqqquukre3t7766iv9+OOPmjBhQpm3J0m1atXSU089pUmTJmnIkCG6++67deTIEU2dOlW+vr4XvfOhs4qO9ws1adJEYWFh6tmzp7y9vXX33Xfr8ccf15kzZzR79mwdO3bMYf6aNWvq5Zdf1gMPPKAePXrowQcfVEREhHbv3q0ffvhBM2fOvOysrnA5x9L//vc/JSQk6KabbtKwYcN0xRVX6OjRo8rIyNCWLVv03nvvSZKefvppffbZZ+rcubMmTZqkVq1a6fjx41q1apXGjh2r6OjoUt9PRZcVAnAzS29rAaBSufBuXd7e3kZ4eLhx4403Gs8995xx+PDhYstceMe8b775xhgwYIDRsGFDw8fHx6hTp45x4403Gh999JHDcl988YVx9dVXGz4+PoYk+x3gitb3559/XnJbhvHX3eP69OljvP/++0aLFi0Mb29vo1GjRsb06dOLLf/LL78YvXr1MoKCgoywsDDjkUceMT799NNid+A6evSocccddxi1atUybDabwzZVwl0Ft23bZvTt29cIDg42vL29jdatWxe741bRnb7ee+89h/GS7nZXmg0bNhjdunUzAgICDD8/P+O6664zPv744xLXZ+bufBeb15m78xWNDx8+3LjiiiuMGjVqGGFhYUbHjh2Nf//735fMYRiGcfr0aePVV181OnToYAQFBRnVq1c3IiMjjdtuu8349NNPHeZ1Zn8bhvM/76K7vV1o6NChxe7S+M477xjR0dFGjRo17O+FQ4cOGcOGDTOio6ONgIAAo2bNmkZcXJzxyiuvGOfPn7/o677Y+/3v3njjDSMuLs7w9vY2goODjVtvvdX46aefiuUNCAi46Hr+7mJ355NkvP766/Z5P/74Y6N169aGr6+vccUVVxj//Oc/jc8++6zYvjQMw1i5cqVx4403GgEBAYa/v78RGxtrPP/885fMWdLxXZLSfl4XkmQkJiaWOM2ZY6nomF27dq3D+A8//GAMHDjQCA8PN2rUqGHUrVvX6NatmzFnzhyH+fbu3WsMHz7cqFu3rlGjRg0jMjLSGDhwoHHo0CH7PCW9nwCUD5theOg5cwAAgArqww8/VP/+/bVt2za1bNnS6jgAXIzL+QAAAFwkPz9fGzZs0MyZMxUWFqamTZtaHQmAG3BjCQAAABc5ePCgevfuraysLL311lvFbsUOoHLgcj4AAAAAMIEzUQAAAABgAiUKAAAAAEygRAEAAACACVX+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "projectUuid_counts = job_files_with_verified_users.projectUuid.value_counts() \n", + "print(f'Total number of project: {sum(projectUuid_counts>2)}')\n", + "plt.figure(figsize=(10, 6))\n", + "bins = 50\n", + "n, bins, patches = plt.hist(projectUuid_counts, bins=range(10, max(projectUuid_counts)+1, 500), color='coral', edgecolor='black')\n", + "print(sum(n))\n", + "# Add count labels on top of each bar\n", + "for i in range(len(patches)):\n", + " height = patches[i].get_height()\n", + " if height > 0:\n", + " plt.text(patches[i].get_x() + patches[i].get_width() / 2, height, # Offset for clarity\n", + " f'{int(height)}', ha='center', va='bottom', fontsize=10)\n", + "\n", + "plt.title('Distribution of File Counts For Each Project')\n", + "plt.xlabel('File Count')\n", + "plt.ylabel('Number of Project (in log)')\n", + "plt.yscale('log')\n", + "plt.xscale('log')\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "id": "30b620e0-b666-42ba-a29a-5d428e9ed0c1", + "metadata": {}, + "source": [ + "# Plot which country has how many Users" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "20c11360-89b6-4f3b-a0c5-7206c2558235", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total number of unique countries: 118\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/s234499/miniforge3/envs/general_env/lib/python3.12/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 20013 (\\N{CJK UNIFIED IDEOGRAPH-4E2D}) missing from font(s) DejaVu Sans.\n", + " fig.canvas.print_figure(bytes_io, **kw)\n", + "/home/s234499/miniforge3/envs/general_env/lib/python3.12/site-packages/IPython/core/pylabtools.py:170: UserWarning: Glyph 22269 (\\N{CJK UNIFIED IDEOGRAPH-56FD}) missing from font(s) DejaVu Sans.\n", + " fig.canvas.print_figure(bytes_io, **kw)\n" + ] + }, + { + "data": { + "image/png": "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WKBOnTrp/Pnz6a7D3d1djzzyiDXwkqTNmzfLyclJly9f1k8//WRt37Rpk5o0aZJuALZz5045OzvrySeftK55xowZmfrc0jJy5Eh17NjRWiPlVaJECWufb7/9VtOnT9eYMWO0fPlyeXp6qn379jpy5Ii1z2+//aZHHnlE0dHRmjRpklavXq3WrVurf//+CgsLu+McbtW9e3edOnVK69evlyQlJycrIiJC3bp1U758qf9Yv2jRIrVt21bu7u764osvNHfuXMXGxiowMFDbt2+39nvppZe0cuVKjRo1Shs2bNCcOXPUrFkz6/dvxowZatCggXx8fGw+B3t68sknFRUVpYkTJ2rjxo2aOXOmateubRPeh4eH6/nnn5efn5++/PJLLViwQJcvX9YTTzyh3377zWa8pKQkPf3002rSpIm+/vprhYWFKT4+XkFBQfr333/10UcfaePGjZo6darKlCmjy5cv23U9AADgDgwAAIAs6tq1q+Hq6mr9+uOPPzYkGV9++aVNv3fffdeQZGzYsMHaJslwdnY2YmJirG03btwwqlatalSqVOmutfv27Wt8+umnRmRkpLFy5UrjhRdeMCQZL774ok2/ypUrGy1atEj1/lOnThmSjPDw8HRr7Nq1y5BkDB069K7zMQzDWLdunSHJmDhxok37kiVLDEnGrFmzrG2SjNGjR6cao2zZskbXrl2tX3/22WeGJKNv3742/SZOnGhIMk6fPm1tq1atmtGoUaNUY27dutWQZDRs2DDda1u3brW2Va1a1ahdu7Zx/fp1m75t2rQxSpQoYSQnJxuGYRjVq1c32rVrl2rMu3n77bcNZ2dn49q1a4ZhGEbPnj2Nli1bGjVq1DDCwsIMwzCMkydPpvrMunbtapQtW9ZmLFdXV5vPK0VmPre0BAcHG+n9kVmS4e3tbVy6dMnaFhMTY+TLl88YP368ta1FixZGqVKljLi4OJv39+vXzyhYsKBx4cKFO86hbNmyRuvWrQ3DMIxGjRoZHTt2NAzDML799lvDYrEYR48eNZYuXWrz/UtOTjZ8fX0Nf39/6/fJMAzj8uXLRvHixY369etb2woVKmSEhITccQ6tW7dO9ZlndM632717tyHJ+OyzzwzDMIxz584ZkoypU6emO97x48cNBwcH4/XXX7dpv3z5suHj42N07tzZ2ta1a1dDkvHpp5/a9P35558NScbKlSszvA4AAGB/7IwEAAB2t2XLFrm6ulp3laVIue148+bNNu1Nmza1OXAmf/78evbZZ/XXX3/d9fbJjz76SK+88ooaNmyotm3bauHCherXr58WLlyY6vbNO91aas/bTlMO8rn9AJlOnTrJ1dU11foz4+mnn7b5OmVn599//53hMZ555pm79vnrr7/0+++/64UXXpAk3bhxw/p68skndfr0af3xxx+SpEcffVRr167V0KFDtW3bNiUkJGRoHk2bNlVCQoJ27Ngh6b8dkEFBQWrWrJk2btxobZOU7m3IGWWPzy0tjRs3lpubm/Vrb29vFS9e3DrutWvXtHnzZrVv314uLi6pPsdr165p165dGa7XvXt3ffPNNzp//rzmzp2rxo0bpzpZXJL++OMPnTp1Si+99JLNrslChQrpmWee0a5du3T16lVJ/33/5s2bp3HjxmnXrl26fv36PX4a98bT01MVK1bUe++9p8mTJ2vv3r02t6JL0vr163Xjxg29/PLLNp9hwYIF1ahRozRPEb/957xSpUoqUqSI3nrrLX388cepdlMCAABzEEYCAAC7O3/+vHx8fFIFfMWLF5eDg0Oq23d9fHxSjZHSdqdbfdOTcvvtrSFP0aJF0xzrwoULkv4LRNJTpkwZSdLRo0czVP/8+fNycHBQsWLFbNotFot8fHzuaU0pihYtavO1k5OTJGU4AJRkc5txev79919J0uDBg+Xo6Gjz6tu3r6T/nvEoSR9++KHeeustrVy5Uo0bN5anp6fatWunP//884416tevLxcXF23atEl//fWXjh07Zg0jf/zxR125ckWbNm1ShQoVVL58+QyvLy32+NwyMm7K2Cnjnj9/Xjdu3NC0adNSfY5PPvmkpP/7HDOiY8eOKliwoKZMmaJVq1apR48eafZL+RlL63vt6+urmzdvKjY2VtJ/z2Hs2rWr5syZo3r16snT01Mvv/yyYmJiMjyv2zk4OKR6VEKKlOeBOjo6Svrv18XmzZvVokULTZw4UQ8//LCKFSum/v37W2+fTvl5fOSRR1J9jkuWLEn1Gbq4uMjd3d2mzcPDQ5GRkapVq5aGDx+uatWqydfXV6NHjzY9gAUA4EHGadoAAMDuihYtqh9//FGGYdgEkmfOnNGNGzfk5eVl0z+t0COlLa2w526M/3/Qya07wvz9/fXFF1/oxo0bNs+N3L9/vySpevXq6Y5XokQJ+fv7a8OGDRk6lbdo0aK6ceOGzp49axNIGoahmJgYPfLII9Y2JyenNJ8hmZXA8m4ysgs05Xs0bNiwNJ/zKUlVqlSRJLm6uiosLExhYWH6999/rbskn3rqKf3+++/p1ihQoIAef/xxbdq0SaVKlZKPj4/8/f1VoUIFSf8duLN582a1adMms0vMNYoUKaL8+fPrpZdeUnBwcJp9MhO0uri46LnnntP48ePl7u6e7vcm5dfN6dOnU107deqU8uXLpyJFikj673s9depUTZ06VcePH9c333yjoUOH6syZM1q3bl2G53Yrb29vnTx5Ms1rKe237oYuW7as5s6dK0k6dOiQvvzyS4WGhiopKUkff/yx9ecx5Zmyd5Pez7i/v78WL14swzD066+/at68eRozZoycnZ01dOjQTK0RAADcG3ZGAgAAu2vatKmuXLmilStX2rTPnz/fev1Wmzdvtu58kv47mGPJkiWqWLGiSpUqlen6KXUCAgKsbe3bt9eVK1e0fPlym74RERHy9fXVY489dscxR44cqdjYWPXv398adt7qypUr2rBhg6T/W9/ChQtt+ixfvlzx8fE26y9Xrpx+/fVXm35btmzRlStX7rbMdN26M+9eValSRZUrV9Yvv/yiunXrpvm69fbkFN7e3urWrZuef/55/fHHH9ZbgdPTrFkzRUVFafny5dZbsV1dXRUQEKBp06bp1KlTGbpF2x5rTm9c6d53ULq4uKhx48bau3evatSokebnmNnA/bXXXtNTTz2lUaNGqWDBgmn2qVKlikqWLKlFixbZ/LzGx8dr+fLl1hO2b1emTBn169dPQUFB2rNnj7U9s59vs2bNFB0dneat0F9++aUKFSqU7q+5//3vf3r77bfl7+9vnUOLFi3k4OCgw4cPp/vzmBkWi0U1a9bUlClTVLhwYZu1AgCA7MXOSAAAYHcvv/yyPvroI3Xt2lXHjh2Tv7+/tm/frvDwcD355JOpwiUvLy81adJEI0eOlKurq2bMmKHff/9dixcvvmOdRYsW6auvvlLr1q1VtmxZXbx4UUuXLtXixYvVrVs31axZ09q3VatWCgoK0muvvaZLly6pUqVK+uKLL7Ru3TotXLhQ+fPnv2OtTp06aeTIkRo7dqx+//139ejRQxUrVtTVq1f1448/6pNPPtGzzz6r5s2bKygoSC1a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bd26VYZhpHtYU24cX7I9zX7jxo33dJp9XpZyOJWnp2eqa56enjIMQ7Gxsbl2/Oyo4efnp127dlkfISH9t/vyxx9/tKmXFdTIXTW6du2qwoUL67XXXtORI0d0+fJlrV69Wp988omCg4Pl6uqaq8fPSzXSMnfuXFksFnXv3j1bxr8fa8yZM0fx8fF666237DCzO6tcubICAgJsXvZ4tM3tUh5Dk52PoMmuGhcvXlTp0qUVHh6uNWvWaP78+SpXrpxeeukljRs3LtePT43cVSMvrEH67/FI3bt3V9WqVeXq6qqSJUuqbdu2ioqKssv4ZtQwYw0SOyMBIFusXbtW8fHxunz5sqT/njm1bNkySdKTTz4pFxcXjR07VmvXrlXLli0VGhoqd3d3zZkzR7/88ou+/PLLbJvbsmXLdPXqVbvcatStWzcFBgamam/cuLHatWunAQMGZHkngRk10uPm5qaqVavq0KFD9834t55mv3nz5ns6zf5Bcafboe1xWn12j2/PGq+//rp69Oihfv36acSIEbp586bCwsL0999/S7LPTm1q5K4a5cqV086dO9W+fXubf2jr37+/pk6dmuvHz0s1bhcXF6dly5apadOmKl++PDX+v++++06enp76/fff1bZtW0VHR8vT01MdOnTQxIkTbR5Zcb/o06ePGjZsKE9PT+ufE++XGoGBgan+fNamTRsdPXpUs2bN0ttvv52rx6dG7qqRF9YgSTNnztT58+c1YMAA+fn56ezZs5o0aZICAgK0fv16NWnSJNfXMGMNEmEkgAzKK8++NMtrr71m/UujJC1dulRLly6VJB09elTlypVTxYoV9f3332vo0KHq1auXrl+/rlq1aumbb77J0PP97hZ4nj17Vl26dNFzzz2nSpUqyWKxKDIyUlOnTlW1atXUs2fPLNcoV66cypUrl+Z7S5YsmWaImBM17tW5c+e0f/9+NWjQ4L4Y/9bT7Ddu3HhPp9k/CFKe2ZrW7rILFy7IYrGocOHCuXb87KjRvXt3nT17VuPGjdPMmTMlSfXq1dPgwYP17rvvqmTJklmaLzVyX41jx47pqaeekre3t5YtW6ZixYrpxx9/1Lhx43TlyhXNnTs3V4+fl2rc7osvvlBCQoJ69Ohh97Hv5xonT57U1atX1alTJw0bNkxTp07V7t27NXr0aEVHR+v777+32z/0BAcH67nn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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n = 50\n", + "df_filtered = df_profile[~df_profile['country'].str.contains(r'[^\\w\\s]', na=False)]\n", + "country_counts = df_filtered['country'].value_counts()\n", + "print(f'Total number of unique countries: {len(country_counts)}')\n", + "top_10_countries = country_counts.head(n)\n", + "\n", + "# Plot the bar plot\n", + "plt.figure(figsize=(16, 6))\n", + "ax = sns.barplot(x=top_10_countries.index, y=top_10_countries.values)\n", + "for i, value in enumerate(top_10_countries.values):\n", + " ax.text(i, value + 0.1, str(value), ha='center', va='bottom', fontsize=12)\n", + "# Add labels and title\n", + "plt.xlabel('Country')\n", + "plt.ylabel('Number of Users')\n", + "plt.title(f'Top {n} Countries with the Most Users ')\n", + "\n", + "# Display the plot\n", + "plt.xticks(rotation=90)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "d7597721-a85d-41c2-84b8-42cfc2a369ac", + "metadata": {}, + "source": [ + "## Look at Metadata Permission File (UUID is projectUUID)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "f22a11eb-7c76-41ff-9ff2-8bcf71338930", + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idlast_updatedpermissionusernameuuidtenant_id
052014-01-21 17:00:11READ_WRITEtest30001389977207738-5056a550b8-0001-012vdjserver.org
162014-01-21 17:00:41READ_WRITEtest40001389977207738-5056a550b8-0001-012vdjserver.org
292014-01-21 17:21:43READ_WRITEtest110001389977207738-5056a550b8-0001-012vdjserver.org
3142014-01-29 10:28:16READ_WRITEjfonner0001389977207738-5056a550b8-0001-012vdjserver.org
4172014-01-29 14:06:38READ_WRITEadshkl;dasfhkdf0001391025968832-5056a550b8-0001-012vdjserver.org
.....................
76059014449862025-01-25 09:44:43READ_WRITEschristley3580715269144908271-242ac118-0001-012vdjserver.org
76059114449872025-01-25 09:44:44READ_WRITEschristley3569118857445708271-242ac118-0001-012vdjserver.org
76059214449882025-01-25 09:44:44READ_WRITEschristley3557565395419468271-242ac118-0001-012vdjserver.org
76059314449892025-01-25 09:44:44READ_WRITEschristley3547300423582028271-242ac118-0001-012vdjserver.org
76059414449902025-01-25 09:44:44READ_WRITEschristley3534544370712908271-242ac118-0001-012vdjserver.org
\n", + "

760595 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "0 5 2014-01-21 17:00:11 READ_WRITE test3 \n", + "1 6 2014-01-21 17:00:41 READ_WRITE test4 \n", + "2 9 2014-01-21 17:21:43 READ_WRITE test11 \n", + "3 14 2014-01-29 10:28:16 READ_WRITE jfonner \n", + "4 17 2014-01-29 14:06:38 READ_WRITE adshkl;dasfhkdf \n", + "... ... ... ... ... \n", + "760590 1444986 2025-01-25 09:44:43 READ_WRITE schristley \n", + "760591 1444987 2025-01-25 09:44:44 READ_WRITE schristley \n", + "760592 1444988 2025-01-25 09:44:44 READ_WRITE schristley \n", + "760593 1444989 2025-01-25 09:44:44 READ_WRITE schristley \n", + "760594 1444990 2025-01-25 09:44:44 READ_WRITE schristley \n", + "\n", + " uuid tenant_id \n", + "0 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "1 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "2 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "3 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "4 0001391025968832-5056a550b8-0001-012 vdjserver.org \n", + "... ... ... \n", + "760590 3580715269144908271-242ac118-0001-012 vdjserver.org \n", + "760591 3569118857445708271-242ac118-0001-012 vdjserver.org \n", + "760592 3557565395419468271-242ac118-0001-012 vdjserver.org \n", + "760593 3547300423582028271-242ac118-0001-012 vdjserver.org \n", + "760594 3534544370712908271-242ac118-0001-012 vdjserver.org \n", + "\n", + "[760595 rows x 6 columns]" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metadata_perms_df\n", + "##\n", + "# metadata_perms_df[(metadata_perms_df['permission'] == 'READ_WRITE')].value_counts('username')" + ] + }, + { + "cell_type": "markdown", + "id": "a4295699-7074-4456-bcaa-df800fa69d60", + "metadata": {}, + "source": [ + "## Look at All the Jobs at VDJ Server" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "0f5f5884-9d94-4422-83a9-1179ce4119b5", + "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", + " \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", + " \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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
0ls6.tacc.utexas.eduvdjrepcalc-ls6-2.0u8FINISHED2025-01-25 15:43:51.678c7cd08ad-a560-4574-a363-b9cc4c5e051d-007/projects/5456400192359305711-242ac118-0001-01...FINISHEDeb27e311-4a37-4aeb-b649-056704dd2711schristley
1ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FINISHED2025-01-24 04:20:37.8919188bf80-e868-4e05-a6b4-308c044108d7-007/projects/5456400192359305711-242ac118-0001-01...FINISHED5e2528fd-25d6-4473-9287-6a67a8de8391schristley
2ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FAILED2025-01-22 15:04:46.891773a5cb7-b369-4517-a221-83d57e3899e5-007/projects/5199144433477554666-242ac116-0001-01...FAILED_SKIP_ARCHIVE78b89c14-3dec-4aa8-acf8-d2592064e3a4scott_public
3ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-14 22:31:02.980c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007/projects/5456400192359305711-242ac118-0001-01...FINISHED1e2f122d-5e5b-4f14-931f-ca55803115ffschristley
4ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-09 04:21:12.476ad02cb34-250e-48cb-a06e-973e431b62ee-007/projects/6589143665654501871-242ac118-0001-01...FINISHED1069949d-1d9a-453f-80b8-7372019aba31schristley
.................................
15776my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 16:38:39.0000001396301879424-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/foo123-201...FINISHED3b188d18-7955-49b6-bc21-10a557ced542NaN
15777my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 15:44:00.0000001396298592090-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FINISHEDc9dd99e9-2ef2-4fd7-b211-26b56162b21eNaN
15778my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 15:35:18.0000001396298085562-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FINISHED282196b2-9972-4615-944d-777e1ee7826cNaN
15779my-lonestarjfonnermy-vdj_pipe-0.0.4FAILED2014-03-31 15:28:36.0000001396297676287-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FAILEDdc81e8a3-9869-47cc-8bee-3d254bb805d1NaN
15780my-lonestarjfonnermy-vdj_pipe-0.0.4FAILED2014-03-31 14:50:18.0000001396295290656-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FAILED08f920a6-e4c1-4029-9ac2-e1de96e7d23aNaN
\n", + "

15781 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "0 ls6.tacc.utexas.edu vdj repcalc-ls6-2.0u8 FINISHED \n", + "1 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FINISHED \n", + "2 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FAILED \n", + "3 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "4 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "... ... ... ... ... \n", + "15776 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15777 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15778 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15779 my-lonestar jfonner my-vdj_pipe-0.0.4 FAILED \n", + "15780 my-lonestar jfonner my-vdj_pipe-0.0.4 FAILED \n", + "\n", + " last_updated uuid \\\n", + "0 2025-01-25 15:43:51.678 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "1 2025-01-24 04:20:37.891 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "2 2025-01-22 15:04:46.891 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "3 2025-01-14 22:31:02.980 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "4 2025-01-09 04:21:12.476 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "... ... ... \n", + "15776 2014-03-31 16:38:39.000 0001396301879424-5056a550b8-0001-007 \n", + "15777 2014-03-31 15:44:00.000 0001396298592090-5056a550b8-0001-007 \n", + "15778 2014-03-31 15:35:18.000 0001396298085562-5056a550b8-0001-007 \n", + "15779 2014-03-31 15:28:36.000 0001396297676287-5056a550b8-0001-007 \n", + "15780 2014-03-31 14:50:18.000 0001396295290656-5056a550b8-0001-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "0 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "1 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "2 /projects/5199144433477554666-242ac116-0001-01... FAILED_SKIP_ARCHIVE \n", + "3 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "4 /projects/6589143665654501871-242ac118-0001-01... FINISHED \n", + "... ... ... \n", + "15776 /scratch/01114/jfonner/vdj/analyses/foo123-201... FINISHED \n", + "15777 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FINISHED \n", + "15778 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FINISHED \n", + "15779 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FAILED \n", + "15780 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FAILED \n", + "\n", + " update_token parameters.Creator \n", + "0 eb27e311-4a37-4aeb-b649-056704dd2711 schristley \n", + "1 5e2528fd-25d6-4473-9287-6a67a8de8391 schristley \n", + "2 78b89c14-3dec-4aa8-acf8-d2592064e3a4 scott_public \n", + "3 1e2f122d-5e5b-4f14-931f-ca55803115ff schristley \n", + "4 1069949d-1d9a-453f-80b8-7372019aba31 schristley \n", + "... ... ... \n", + "15776 3b188d18-7955-49b6-bc21-10a557ced542 NaN \n", + "15777 c9dd99e9-2ef2-4fd7-b211-26b56162b21e NaN \n", + "15778 282196b2-9972-4615-944d-777e1ee7826c NaN \n", + "15779 dc81e8a3-9869-47cc-8bee-3d254bb805d1 NaN \n", + "15780 08f920a6-e4c1-4029-9ac2-e1de96e7d23a NaN \n", + "\n", + "[15781 rows x 10 columns]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jobs_all_df.head()\n", + "## Filter AllJobs columns\n", + "#### Keeping only important ones\n", + "keep_columns = ['system_id', 'owner', 'app_id', 'status', 'last_updated', 'uuid', 'archive_path', 'remote_outcome', 'update_token', 'parameters.Creator']\n", + "jobs_all_df = jobs_all_df[keep_columns]\n", + "jobs_all_df" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "2713d671-05a1-47fc-9304-4cab63f9ace7", + "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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
9999ls5.tacc.utexas.eduvdjrepcalc-ls5-1.0FINISHED2019-02-27 18:42:14.0008144122141623652841-242ac11c-0001-007/projects/7058216970366620136-242ac11e-0001-01...FINISHEDfd7354e7-729c-4b42-97b6-2a9dd08bf0a0schristley
\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "9999 ls5.tacc.utexas.edu vdj repcalc-ls5-1.0 FINISHED \n", + "\n", + " last_updated uuid \\\n", + "9999 2019-02-27 18:42:14.000 8144122141623652841-242ac11c-0001-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "9999 /projects/7058216970366620136-242ac11e-0001-01... FINISHED \n", + "\n", + " update_token parameters.Creator \n", + "9999 fd7354e7-729c-4b42-97b6-2a9dd08bf0a0 schristley " + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jobs_all_df[jobs_all_df.uuid == '8144122141623652841-242ac11c-0001-007']" + ] + }, + { + "cell_type": "markdown", + "id": "38d03089-6aec-4ede-a618-839c7fa7cf38", + "metadata": {}, + "source": [ + "## Look at JobEvents" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "c7aabc2b-c77e-4622-9a31-8beee6bae0e5", + "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", + " \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", + " \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", + "
idcreatedcreated_bydescriptionip_addressstatustenant_idjob_idtransfertaskuuid
054762014-03-31 14:48:10jfonnerJob accepted and queued for submission.129.114.60.167PENDINGvdjserver.org142NaNNone
154772014-03-31 14:48:20jfonnerNo inputs for the given job. Skipping staging129.114.60.167STAGEDvdjserver.org142NaNNone
254782014-03-31 14:48:30jfonnerAttempt [1] Preparing job for execution and st...129.114.60.167SUBMITTINGvdjserver.org142NaNNone
354792014-03-31 14:50:18jfonnerFailed to submit job 0001396295290656-5056a550...129.114.60.167FAILEDvdjserver.org142NaNNone
454802014-03-31 15:27:56jfonnerJob accepted and queued for submission.129.114.60.167PENDINGvdjserver.org143NaNNone
.................................
341856235858022025-01-25 15:38:25vdjJob running on execution system172.17.0.5RUNNINGvdjserver.org5038650.064c47eaa-102e-4106-bae7-4af2b2a3e3a0-028
341857235858032025-01-25 15:43:33vdjJob completed execution172.17.0.5CLEANING_UPvdjserver.org5038650.0b62a2f3c-b5f6-4ba7-b764-e49091263b76-028
341858235858042025-01-25 15:43:33vdjTransferring job output to archive system172.17.0.5ARCHIVINGvdjserver.org5038650.009c31ec9-7736-4d8a-a4dd-ead09386eea1-028
341859235858052025-01-25 15:43:37vdjJob archiving in progress: agave://ls6.tacc.ut...172.17.0.5ARCHIVINGvdjserver.org503865560378724.0d0d6f978-8813-4829-abe0-ce78c5dd326e-028
341860235858062025-01-25 15:43:52vdjJob completed successfully172.17.0.5FINISHEDvdjserver.org5038650.0f93fc121-4027-4e5f-a654-32b7df137a94-028
\n", + "

341861 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " id created created_by \\\n", + "0 5476 2014-03-31 14:48:10 jfonner \n", + "1 5477 2014-03-31 14:48:20 jfonner \n", + "2 5478 2014-03-31 14:48:30 jfonner \n", + "3 5479 2014-03-31 14:50:18 jfonner \n", + "4 5480 2014-03-31 15:27:56 jfonner \n", + "... ... ... ... \n", + "341856 23585802 2025-01-25 15:38:25 vdj \n", + "341857 23585803 2025-01-25 15:43:33 vdj \n", + "341858 23585804 2025-01-25 15:43:33 vdj \n", + "341859 23585805 2025-01-25 15:43:37 vdj \n", + "341860 23585806 2025-01-25 15:43:52 vdj \n", + "\n", + " description ip_address \\\n", + "0 Job accepted and queued for submission. 129.114.60.167 \n", + "1 No inputs for the given job. Skipping staging 129.114.60.167 \n", + "2 Attempt [1] Preparing job for execution and st... 129.114.60.167 \n", + "3 Failed to submit job 0001396295290656-5056a550... 129.114.60.167 \n", + "4 Job accepted and queued for submission. 129.114.60.167 \n", + "... ... ... \n", + "341856 Job running on execution system 172.17.0.5 \n", + "341857 Job completed execution 172.17.0.5 \n", + "341858 Transferring job output to archive system 172.17.0.5 \n", + "341859 Job archiving in progress: agave://ls6.tacc.ut... 172.17.0.5 \n", + "341860 Job completed successfully 172.17.0.5 \n", + "\n", + " status tenant_id job_id transfertask \\\n", + "0 PENDING vdjserver.org 142 NaN \n", + "1 STAGED vdjserver.org 142 NaN \n", + "2 SUBMITTING vdjserver.org 142 NaN \n", + "3 FAILED vdjserver.org 142 NaN \n", + "4 PENDING vdjserver.org 143 NaN \n", + "... ... ... ... ... \n", + "341856 RUNNING vdjserver.org 503865 0.0 \n", + "341857 CLEANING_UP vdjserver.org 503865 0.0 \n", + "341858 ARCHIVING vdjserver.org 503865 0.0 \n", + "341859 ARCHIVING vdjserver.org 503865 560378724.0 \n", + "341860 FINISHED vdjserver.org 503865 0.0 \n", + "\n", + " uuid \n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 None \n", + "4 None \n", + "... ... \n", + "341856 64c47eaa-102e-4106-bae7-4af2b2a3e3a0-028 \n", + "341857 b62a2f3c-b5f6-4ba7-b764-e49091263b76-028 \n", + "341858 09c31ec9-7736-4d8a-a4dd-ead09386eea1-028 \n", + "341859 d0d6f978-8813-4829-abe0-ce78c5dd326e-028 \n", + "341860 f93fc121-4027-4e5f-a654-32b7df137a94-028 \n", + "\n", + "[341861 rows x 10 columns]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "job_events_df" + ] + }, + { + "cell_type": "markdown", + "id": "fc85305a-7c00-4491-a7f2-c22eb210b52d", + "metadata": {}, + "source": [ + "## Filter Metadata file by removing users with only READ Acess and Usernames that contains test" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "f0cdc3bd-0291-471b-9ac4-3744a8ebabe1", + "metadata": {}, + "outputs": [], + "source": [ + "metadata_perms_df\n", + "#filter metadata keeping only items that has permission for both READ_WRITE and ALL\n", + "filtered_metadata_perms_df = metadata_perms_df[~(metadata_perms_df.permission == 'READ')]\n", + "# Filter out usernames containing 'test'\n", + "filtered_metadata_perms_df = filtered_metadata_perms_df[~filtered_metadata_perms_df['username'].str.contains('test', case=False)]" + ] + }, + { + "cell_type": "markdown", + "id": "cf1864e5-72cb-4ebe-a429-165c5c0c59e8", + "metadata": {}, + "source": [ + "## Plot Number of Unique Users for Each Year" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "b1e5203a-54ce-451b-90e5-cf8f7939faf8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "year\n", + "2014 741\n", + "2015 5495\n", + "2016 10172\n", + "2017 51812\n", + "2018 65288\n", + "2019 61059\n", + "2020 52641\n", + "2021 54077\n", + "2022 31584\n", + "2023 87717\n", + "2024 34663\n", + "2025 3887\n", + "Name: uuid, dtype: int64\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHpCAYAAACY8RRtAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXoBJREFUeJzt3XlYVHX///HXACOL4QIpiLmQW265Z2luKZiluVRWmEtZeqflnkZ1J7Zo2qJlu+XSwrfuFtvuUrFMM1vct8zSXNIkTQkUDEb4/P7oZn5OgM5BYIbT83FdXDqf+Zxz3q85A7w5c+aMwxhjBAAAANhAgK8LAAAAAEoKzS0AAABsg+YWAAAAtkFzCwAAANuguQUAAIBt0NwCAADANmhuAQAAYBs0twAAALANmlsAAADYBs0tUIoWLlwoh8OhkJAQ7du3r8D9Xbt2VbNmzXxQmfTFF1/I4XDonXfe8cn2rdq7d6+uvvpqRUREyOFwaNy4cUXOdTgcuvPOOwu975133pHD4dAXX3xRrBocDocWLlxoedmyVFr5faVr165yOByFfm3btq1Utz1s2LAit+1wOEptu3Xr1lXv3r0tL/f222/L4XBo7ty5hd4/YsQIBQcHa8uWLedaIuC3gnxdAPBPkJ2drfvvv1+vvfaar0spt8aPH69vv/1W8+fPV3R0tGrUqFHmNdSoUUNff/216tWrV+bb/qe78MIL9cYbbxQYL4t9ERoaqs8//7zUt1MSrr/+eiUkJOiee+5Rr169VL9+ffd9y5Yt07x58zRjxgxdfPHFPqwSKF00t0AZuPLKK5WcnKxJkyapRYsWvi6nTJ08eVIhISHnfJRr27ZtuuSSS9SvX7+SKawYgoODdemll/ps++VVVlaWwsLCzmkdoaGhpfbYnzx5UqGhoUXeHxAQUK72+zPPPKMvvvhCw4YN06pVqxQQEKCMjAzddtttuuyyy3T33XeXSR0lsd+B4uC0BKAMTJ48WZGRkZoyZcoZ553pZW+Hw6GkpCT37aSkJDkcDm3ZskXXX3+9KleurIiICE2YMEGnTp3Szp07deWVVyo8PFx169bVrFmzCt3mn3/+qQkTJig6OlqhoaHq0qWLNm7cWGDeunXrdM011ygiIkIhISFq1aqV/vOf/3jMyT8NY9myZbr11ltVrVo1hYWFKTs7u8jM+/fv180336zq1asrODhYjRs31hNPPKG8vDxJ///0iV27dunTTz91vxy8d+/eMz6WVuSfHrJ27Vp16tRJYWFhuvDCC/Xoo4+665CK3j///e9/1bJlSwUHBys2NlaPP/64e/+cbVmp4L6VpJ9++kkJCQkej8uzzz5bYplPt3HjRvXu3du9rZiYGF199dU6cOCAe44xRs8995xatmyp0NBQVa1aVdddd51+/vlnj3XlP5arVq1Shw4dFBYWpltvvVWS9Pnnn6tr166KjIxUaGioateurWuvvVZZWVnnnOHPP/9UYmKiYmNjVaFCBdWsWVOjR4/WH3/84TEv/+X+9957T61atVJISIimTZtWItufOHGiWrZs6f5evOyyy/TBBx8UmJuXl6e5c+e6H8sqVaro0ksv1Ycfflhg7pIlS9S6dWuFhobqoosu0vz5889aS9WqVfXKK6/oq6++0uzZsyX99crH0aNHtWjRIgUGBiojI0OTJk3yeLzGjRunzMxMj3U9++yz6ty5s6pXr66KFSuqefPmmjVrllwul8e8M+13oKxx5BYoA+Hh4br//vs1duxYff7557riiitKbN0DBw7UzTffrJEjRyolJcX9i2f58uUaNWqUJk2apOTkZE2ZMkX169fXgAEDPJa/99571bp1a7388stKT09XUlKSunbtqo0bN+rCCy+UJK1YsUJXXnml2rdvrxdeeEGVK1fWm2++qRtuuEFZWVkaNmyYxzpvvfVWXX311XrttdeUmZkpp9NZaO1HjhxRhw4dlJOTo4ceekh169bVxx9/rEmTJmn37t167rnn1Lp1a3399dfq37+/6tWrp8cff1ySSvy0hNTUVA0aNEgTJ07U1KlTtXjxYiUmJiomJkZDhgwpcrnPPvtMffv21WWXXaY333xTubm5mjVrln777bdi1/L999+rQ4cOql27tp544glFR0dr6dKlGjNmjH7//XdNnTq12Ov+u8zMTMXFxSk2NlbPPvusoqKilJqaqhUrVuj48ePueSNHjtTChQs1ZswYzZw5U8eOHdODDz6oDh06aPPmzYqKinLPPXTokG6++WZNnjxZ06dPV0BAgPuc6U6dOmn+/PmqUqWKDh48qCVLlignJ8erI3ynTp3yuB0QEKCAgAAZY9SvXz999tlnSkxMVKdOnbRlyxZNnTpVX3/9tb7++msFBwe7l9uwYYN27Nih+++/X7GxsapYsaLlbZ++femvU4+OHTumSZMmqWbNmsrJydHy5cs1YMAALViwwOM5NGzYML3++usaPny4HnzwQVWoUEEbNmwo8Afb5s2bNXHiRN1zzz2KiorSyy+/rOHDh6t+/frq3LnzGeu98sorNXLkSN1///0KCAjQ/Pnz9cwzz6hBgwbKyspSly5ddODAAd177726+OKLtX37dj3wwAPaunWrli9f7v7DbPfu3UpISHA3wZs3b9YjjzyiH374oUCjXdh+B3zCACg1CxYsMJLM2rVrTXZ2trnwwgtN27ZtTV5enjHGmC5dupimTZu65+/Zs8dIMgsWLCiwLklm6tSp7ttTp041kswTTzzhMa9ly5ZGknnvvffcYy6Xy1SrVs0MGDDAPbZixQojybRu3dpdjzHG7N271zidTnPbbbe5xy666CLTqlUr43K5PLbVu3dvU6NGDZObm+uRd8iQIV49Pvfcc4+RZL799luP8TvuuMM4HA6zc+dO91idOnXM1Vdf7dV6JZnRo0cXet/bb79tJJkVK1a4x7p06VJoHU2aNDE9e/Z03y5s/7Rv397ExMSYkydPuscyMjJMRESEOf1HrJV927NnT3PBBReY9PR0j3l33nmnCQkJMceOHTtTfEv5161bZySZ999/v8j1ff3114U+13755RcTGhpqJk+e7B7Lfyw/++wzj7nvvPOOkWQ2bdp0xtoLk7/Ov38NGjTIGGPMkiVLjCQza9Ysj+XeeustI8m89NJL7rE6deqYwMBAj+fWmQwdOrTQbUsy3bt3L3K5U6dOGZfLZYYPH25atWrlHl+1apWRZO67774zbrdOnTomJCTE7Nu3zz128uRJExERYUaOHOlV7cePHzcXXnihkWR69Ojh/j6fMWOGCQgIMGvXrvWYn7+PPvnkk0LXl5uba1wul3n11VdNYGCgx/OwqP0O+AJ/VgFlpEKFCnr44Ye1bt26Ai/nn4u/v6O6cePGcjgc6tWrl3ssKChI9evXL/SKDQkJCR4vn9epU0cdOnTQihUrJEm7du3SDz/8oEGDBkn66whW/tdVV12lQ4cOaefOnR7rvPbaa72q/fPPP1eTJk10ySWXeIwPGzZMxpgyfRNPdHR0gTouvvjiQh+zfJmZmVq7dq0GDBigkJAQ93h4eLj69OlTrDr+/PNPffbZZ+rfv7/CwsIKPN5//vmnvvnmm2KtuzD169dX1apVNWXKFL3wwgv6/vvvC8z5+OOP5XA4dPPNN3vUEx0drRYtWhS48kLVqlULvDrRsmVLVahQQSNGjNCiRYsKnM5wNvXq1dPatWs9vh566CFJcj9P/v4KwvXXX6+KFSvqs88+8xi/+OKL1bBhQ6+3HRoaWmDba9eu1XPPPecx7+2331bHjh113nnnKSgoSE6nU6+88op27NjhnvPpp59KkkaPHn3W7bZs2VK1a9d23w4JCVHDhg3P+Jw83XnnnafJkydLkqZNm+b+Pv/444/VrFkztWzZ0mN/9uzZs8CVNDZu3KhrrrlGkZGRCgwMlNPp1JAhQ5Sbm6sff/zRY3uF7XfAF2hugTJ04403qnXr1rrvvvsKnLNWXBERER63K1SooLCwMI9mK3/8zz//LLB8dHR0oWNHjx6VJPfL65MmTZLT6fT4GjVqlCTp999/91je21MGjh49WujcmJgY9/3FERgYqNzc3ELvy395+e+nSkRGRhaYGxwcrJMnTxa5nbS0NOXl5RX5GBbH0aNHderUKc2dO7fA433VVVdJKvh4/52V/JUrV9bKlSvVsmVL3XvvvWratKliYmI0depU93P0t99+kzFGUVFRBWr65ptvvNr/9erV0/Lly1W9enWNHj1a9erVU7169fTUU0959biEhISobdu2Hl+xsbHuxywoKEjVqlXzWMbhcHg8l89U35kEBAQU2Hbbtm09GuT33ntPAwcOVM2aNfX666/r66+/1tq1a3Xrrbd6fN8dOXJEgYGBXj0/ivOcLGy+9Nf3f77ffvtNW7ZsKbAvw8PDZYxx78/9+/erU6dOOnjwoJ566il9+eWXWrt2rfvc77/X4YsrmACF4ZxboAw5HA7NnDlTcXFxeumllwrcn9+Q/v0NWMVt8ryRmppa6Fj+L9bzzz9fkpSYmFjgfN18jRo18rjt7ZURIiMjdejQoQLjv/76q8e2rYqKitLBgwcLvS9//PRzRIuratWqcjgcRT6Gp/N231atWlWBgYEaPHhwkUf38pu6oljN37x5c7355psyxmjLli1auHChHnzwQYWGhuqee+7R+eefL4fDoS+//NLj3NV8fx8rav936tRJnTp1Um5urtatW6e5c+dq3LhxioqK0o033njGTGcSGRmpU6dO6ciRIx4NrjFGqampateunVf1nYvXX39dsbGxeuuttzzW//f9Xa1aNeXm5io1NdVnzeD555+v0NDQIt+clv999/777yszM1Pvvfee6tSp475/06ZNhS5Xmtf9BazgyC1Qxnr06KG4uDg9+OCDOnHihMd9UVFRCgkJKXCB9cLecV1S/u///k/GGPftffv2ac2aNerataukvxrXBg0aaPPmzYUevWrbtq3Cw8OLte3u3bvr+++/14YNGzzGX331VTkcDnXr1q1Y6+3Ro4dWrFihI0eOeIwbY/T222+rbt26Htf/LK6KFSvqkksu0XvvvedxdO748eP66KOPPOZ6u2/DwsLUrVs3bdy4URdffHGhj3dhR/ROV9z8DodDLVq00OzZs1WlShX3fundu7eMMTp48GCh9TRv3vzsD9ZpAgMD1b59e/cRwL/vf6u6d+8u6a8G83TvvvuuMjMz3feXJofDoQoVKng0eKmpqQX2b/7pQs8//3yp11SU3r17a/fu3YqMjCx0f9atW1fS/29WT//jxRijefPm+aJswGscuQV8YObMmWrTpo0OHz6spk2busfzz2ucP3++6tWrpxYtWui7775TcnJyqdVy+PBh9e/fX7fffrvS09M1depUhYSEKDEx0T3nxRdfVK9evdSzZ08NGzZMNWvW1LFjx7Rjxw5t2LBBb7/9drG2PX78eL366qu6+uqr9eCDD6pOnTr673//q+eee0533HGHpfMiT/fAAw/oo48+Uvv27XXPPfeoQYMGSk1N1bx587R27doSPef5oYce0pVXXqm4uDhNnDhRubm5mjlzpipWrKhjx46551nZt0899ZQuv/xyderUSXfccYfq1q2r48ePa9euXfroo4/Oei6ylfwff/yxnnvuOfXr108XXnihjDF677339McffyguLk6S1LFjR40YMUK33HKL1q1bp86dO6tixYo6dOiQVq9erebNm+uOO+44Y00vvPCCPv/8c1199dWqXbu2/vzzT/eRwx49enj9eBcmLi5OPXv21JQpU5SRkaGOHTu6r5bQqlUrDR48+JzWn5eXV+R5zq1atVJwcLD78mKjRo3Sddddp19++UUPPfSQatSooZ9++sk9v1OnTho8eLAefvhh/fbbb+rdu7eCg4O1ceNGhYWF6a677jqnWr0xbtw4vfvuu+rcubPGjx+viy++WHl5edq/f7+WLVumiRMnqn379oqLi1OFChV00003afLkyfrzzz/1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QtzjvXr10qpVq0q0OAAAAMAKy83t2rVrNXLkyALjNWvWVGpqaokUBQAAABSH5eY2JCREGRkZBcZ37typatWqlUhRAAAAQHFYbm779u2rBx98UC6XS5LkcDi0f/9+3XPPPbr22mtLvEAAAADAW5ab28cff1xHjhxR9erVdfLkSXXp0kX169dXeHi4HnnkkdKoEQAAAPCK5aslVKpUSatXr9bnn3+uDRs2KC8vT61bt1aPHj1Koz4AAADAa5ab23xXXHGFrrjiCkl/XfcWAAAA8DXLpyXMnDlTb731lvv2wIEDFRkZqZo1a2rz5s0lWhwAAABgheXm9sUXX1StWrUkSSkpKUpJSdGnn36qXr166e677y7xAgEAAABvWT4t4dChQ+7m9uOPP9bAgQMVHx+vunXrqn379iVeIAAAAOAty0duq1atql9++UWStGTJEvcbyYwxys3NLdnqAAAAAAssH7kdMGCAEhIS1KBBAx09elS9evWSJG3atEn169cv8QIBAAAAb1lubmfPnq26devql19+0axZs3TeeedJ+ut0hVGjRpV4gQAAAIC3LDe3TqdTkyZNKjA+bty4kqgHAAAAKDavm9tXX3210PHKlSurUaNGuuiii0qsKAAAgHIjqb+1+QFOqcUgacYgKc9lYTuLrW3nH8rr5nbs2LGFjp84cUJ5eXm66qqrlJycrPDw8BIrDgAAALDC66slpKWlFfqVnZ2tb775Rvv379e0adNKs1YAAADgjCxfCqzACgIC1K5dOz3xxBP66KOPLC27atUq9enTRzExMXI4HHr//fc97jfGKCkpSTExMQoNDVXXrl21fft2jznZ2dm66667dP7556tixYq65pprdODAgXONBQAAgHLonJvbfPXr17fcVGZmZqpFixZ65plnCr1/1qxZevLJJ/XMM89o7dq1io6OVlxcnI4fP+6eM27cOC1evFhvvvmmVq9erRMnTqh3795ccxcAAOAfyPLVEoqye/duXXDBBZaW6dWrl/s6uX9njNGcOXN03333acCAAZKkRYsWKSoqSsnJyRo5cqTS09P1yiuv6LXXXnN/mMTrr7+uWrVqafny5erZs+e5hQIAAEC5cs7NrTFGGzdu1MSJE9WnT5+SqEmStGfPHqWmpio+Pt49FhwcrC5dumjNmjUaOXKk1q9fL5fL5TEnJiZGzZo105o1a4ps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8tx5br31Vve/1apVkyR3huzsbDVt2tTv8vw9S0BAgNq2batnn31WH3zwgY4fP67rr79eN998syQpIyNDVapUUVhYmI8rL9zevXv1wQcfKC0tTfXr19fNN9+soKAgjRo1StOnT9fNN9+s119/XRdddJGkv76vQkNDFRoa6uPKC1dYnr9/H9WsWVNjxoyRJE2YMEELFizQl19+qfXr1/vV8+30LPXq1dPgwYM9nnenyz9d6d///rceeeQR9enTxxcln1FR+yY3N1dBQUG67bbbPOanpaWpSpUqatWqlY8qPrPC8gQGBkoqfz1BYVkk+bYfKLW2GW7ff/+9cTgcpk+fPu6x04/cbN682dStW9c0btzY4wjNH3/8Yfbs2VOWpXqlqDxnejPCvffea5o1a+Z+6dVfFJbl9KMa27dvNzfffLNxOBxm4sSJ5vHHHzcTJ040kZGRfvlGn7M91/5uyJAhpl69eiYrK6ssyrPsbPvHmL+OQIeGhpo1a9aY9evXmwceeMCcf/75fndEurAsZzuyPHHiRNO6dWtz9OjR0i7Psi1btpiaNWuaHj16mHbt2png4GAzbdo09/1Lly41vXr1MlWrVjWvvPKKefvtt80999xjIiIi3G+Q8SeF5XnwwQeLnP/zzz+biy66yERERJjNmzeXYaVnV1iWhx56yGNO/vfRVVddZR555BHz9NNPm+DgYL98lcCbffP3n3P333+/adCggdm7d29ZluqVs+UpTz2B1e8bY8qmH6C5LWWHDh0yHTt2NF26dHGfe5Lv9F/SCxYs8LtfxoU5U57CmqgvvvjC/Otf/zJVq1Z1v7TvL86UJf/lIWOMycrKMk8//bS59NJLTZs2bcyVV15pNm3a5IuSz8jKvsl/7v3nP/8x7dq1M6mpqWVaqzfOlic/0/79+81NN91kHA6Hady4sWnevHm5eq4V9lL28uXLzR133GEqVarkd1mMMWbv3r2mXr16ZvLkySYvL89kZGSYF1980TRp0sT89NNP7nm7du0ykydPNjExMaZJkyamXbt2ZsOGDT6svHBnynP6Obf5cnNzzaRJk0xQUJDfXf3BapaEhAQTGBhowsPD/fI9EVbzfPnll2b06NGmatWq5fq5Vh56grNl+fvvnbLsB2huS9n7779vbrzxRrNq1Srz+eefm+rVq3v8Yss/F628OFue039R//bbb2b2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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Convert 'last_updated' to datetime format\n", + "df = filtered_metadata_perms_df\n", + "df['last_updated'] = pd.to_datetime(df['last_updated'])\n", + "\n", + " # Extract the year from 'last_updated'\n", + "df['year'] = df['last_updated'].dt.year\n", + "\n", + "print(df.groupby('year')['uuid'].nunique())\n", + "# Count the number of unique users per year\n", + "unique_users_by_year = df.groupby('year')['username'].nunique()\n", + "\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "unique_users_by_year.plot(kind='bar', color='coral')\n", + "plt.title('Number of Unique Users For Each Year')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Unique Users')\n", + "plt.xticks(rotation=45)\n", + "plt.grid(True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "id": "02cea1a5-d43d-4eec-a370-86854414a511", + "metadata": {}, + "source": [ + "## Plot Top n Users with Unique Projects" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "9f2affbe-e6df-452a-8b0a-bef83881f5a0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Hj2q4cOHS5JOnTqlW265Rbt379bTTz+tunXr6vTp01q2bJkOHDigBg0aXHEbSc/2C+A6YAAAn+vcubPlypXLefz222+bJPv000+92r388ssmyaKjo51pkixHjhx28OBBZ9qFCxfsxhtvtPLly6c5y/fff29ZsmSxAQMGeE2vUKGCtWjRIkX7f/75xyTZmDFjrjjfS1/jpXLlymWdO3d2HoeHh1v79u2vOM8bb7zRatasafHx8V7T27RpY0WLFrWEhAQzM/vwww9Nkj388MMp5pE7d27r37//FZeTmoceesjKli3rPG7WrJn16NHD8uXLZ9OnTzczs59//jnF+9WoUSNr1KiR8/jIkSMmyYYPH55iGcOHDzdJNm7cOK/pffr0sezZs1tiYuIVMzZq1MiqVKmS6nOpLTctyytVqpTX+/X000+bx+OxjRs3ev1t8+bNTZItWbLksn+bPG/ydTN27FjLkiWLrV271qvd559/bpLs22+/vcwrvyhpm4uPj7f4+Hg7cuSIvfHGG+bxeOymm27yyhMQEGDbtm3z+vv777/fgoKCbO/evV7TW7VqZTlz5rR///3XzMx27dplkuzDDz902rRo0cKKFy9uMTExXn/7+OOPW/bs2e348eNmZjZq1CiTZAsXLrzs67jSNpLe7RfA/za6RwJABvjhhx+UK1euFGfJks4cLV682Gt606ZNVbhwYedxQECA7rvvPu3YscOri+PVrF+/Xh07dlS9evU0duzYFM9f6ayGr68Nu/nmm/Xdd9/pmWee0Y8//qhz5855Pb9jxw798ccfevDBByVJFy5ccP7dcccdOnDggLZt2+b1N3fffXeqy5k2bZpeeOEFrVq1SvHx8deUr2nTptq5c6d27dql8+fPa/ny5WrZsqWaNGmihQsXSrp49i0oKEi33HJLelaBo127dl6Pq1WrpvPnz+vw4cP/0Xx9ubwlS5aoSpUqql69utf0/2SAmgULFig8PFw1atTwen9btGhxzaOrJp1RDQwMVKFChdS/f3+1atVK8+bN82pXrVo1rzPL0sXPYdOmTZ3rOpN06dJFZ8+eTTGgUJLz589r8eLFuuuuu5QzZ84U2+b58+e1atUqSdJ3332nihUrqlmzZmlYM/8nvdsvgP9tFG0AkAGOHTumIkWKpCiEQkJClDVr1hRdn4oUKZJiHknTrrWb1IYNG9S8eXNVqFBB3377rYKCgryeL1CgQKrzOn78uCQpf/78V5x/1qxZU72NQJILFy54XV/35ptv6umnn9aXX36pJk2aKH/+/Grfvr3+/PNPSRe740nS4MGDnZ3ypH99+vSRpBRD5RctWjTFcufMmaPOnTvrvffeU/369ZU/f349/PDDOnjw4BVfT9JO9qJFi7R8+XLFx8fr9ttvV7NmzZyietGiRWrYsOE1D2hxOQUKFPB6nPTeXFrIXupK6/zChQuSlOo1jelZXtI2e6nUpl2rQ4cOadOmTSne3zx58sjMrulWCDly5NDatWu1du1abdq0Sf/++6+++eabFAOQpLZtHDt2LNXpoaGhzvOpOXbsmC5cuKCJEyemyH7HHXdI+r9t88iRIypevPhVX8flpHf7BfC/jWvaACADFChQQKtXr5aZeRVuhw8f1oULF1SwYEGv9qntoCVNu3QHPDUbNmxQs2bNVKpUKUVHRys4ODhFm6pVq+qTTz7RhQsXvK5r++233yTpsvcDS1K4cGGdP39ex48fT1HgHTt2TLGxsV5nC3PlyqWRI0dq5MiROnTokHPWrW3btvrjjz+cdTBkyBB16NAh1WWGhYV5PU7tbGDBggX1+uuv6/XXX9fevXv19ddf65lnntHhw4cVFRV12ddTvHhxVaxYUYsWLVLp0qVVp04d3XDDDWratKn69Omj1atXa9WqVc6AFpmhcOHCWrt2bYrtSJL279/vtPGFAgUKXHE7TC579uwpBtSRLhYyybftggULKkeOHJe9lu7Sz0FqsmTJojp16ly1XWrbRoECBXTgwIEU0//5558rLj9fvnwKCAhQp06d9Nhjj6XapkyZMpIuXpuWlrPhl0rv9gvgfxtn2gAgAzRt2lSnT5/Wl19+6TX9o48+cp5PbvHixc6ZJ0lKSEjQnDlzVK5cuasexd+4caOaNWum4sWLa+HChcqXL1+q7e666y6dPn1ac+fO9Zo+ffp0hYaGqm7duldcTtKZqdTujZU02uPluogVLlxYXbp00QMPPKBt27bp7NmzCgsLU4UKFfTrr7+qTp06qf7LkyfPFTNdqmTJknr88cfVvHlzrV+//qrtmzVrph9++EELFy5U8+bNJUkVK1ZUyZIlNWzYMMXHx1+129u1njVLj2bNmunkyZOp7rx/+umnypIli26//XafLKtJkybasmWLfv31V6/p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AAAAuCjNRdvu3buVkJCQYnpsbKz27dvnk1AAAAAAgIuuuT/j119/7fz/999/r+DgYOdxQkKCFi9erDJlyvg2HQAAAABc5665aGvfvr0kyePxqHPnzl7PBQYGqnTp0ho/frxPwwEAAADA9e6ai7ake7OVKVNGa9euVcGCBf0WCgAAAABwUZqHe9y1a5c/cgAAAAAAUpHmgUj69u2rN998M8X0SZMmqX///r7IBAAAAAD4/9JctM2dO1cNGzZMMb1Bgwb6/PPPfRIKAAAAAHBRmou2Y8eOeY0cmSRv3rw6evSoT0IBAAAAAC5Kc9FWvnx5RUVFpZj+3XffqWzZsj4JBQAAAAC4KM0DkQwcOFCPP/64jhw5ottvv12StHjxYo0fP16vv/66r/MBAAAAwHUtzUVbt27dFBsbqxdffFGjR4+WJJUuXVpTpkzRww8/7POAAAAAAHA9S3PRJkm9e/dW7969deTIEeXIkUO5c+f2dS4AAAAAgNJxTZskXbhwQYsWLdIXX3whM5Mk/fPPPzp9+rRPwwEAAADA9S7NZ9r27Nmjli1bau/evYqNjVXz5s2VJ08ejRs3TufPn9fbb7/tj5wAAAAAcF1K85m2fv36qU6dOjpx4oRy5MjhTL/rrru0ePFin4YDAAAAgOtdms+0LV++XD///LOyZcvmNb1UqVLav3+/z4IBAAAAANJxpi0xMVEJCQkppu/bt0958uTxSSgAAAAAwEVpLtqaN2/udT82j8ej06dPa/jw4brjjjt8mQ0AAAAArntp7h752muvqUmTJqpcubLOnz+vyMhI/fnnnypYsKA++eQTf2QEAAAAgOtWmou20NBQbdy4UZ988onWr1+vxMREde/eXQ8++KDXwCQAAAAAgP9cum6unSNHDnXr1k3dunXzdR4AAAAAQDLXVLR9/fXXatWqlQIDA/X1119fsW3u3Ll14403KjQ01CcBAQAAAOB6dk1FW/v27XXw4EGFhISoffv2V20fEBCgcePGacCAAf9pPgAAAAC4rl3T6JGJiYkKCQlx/v9K/86fP693331X48aN82twAAAAALgepOuativJli2b7r77bm3atMnXswYAAACA6066ira//vpLr7/+urZu3SqPx6NKlSqpX79+KleunCQpT548mjBhgk+DAgAAAMD1KM031/7+++9VuXJlrVmzRtWqVVN4eLhW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Un///beNGjXKRo4cmdlRrF+/fvbwww87j/fv328dO3a08uXL2+eff55puZK2o40bN1qOHDmsb9++1rZtW7v//vud31Q3SPpu+OabbywiIsLrc5GZeYYNG2bdunUzM7M//vjDHn/8cWvVqpV17tzZVqxYYWaZ93uwb98+a9SokX333Xc2a9Ys83g89u2332ZKltQkrcPt27db165drX79+vb2229naqaPPvrIPB6PvfTSS5ma41pQtLnA5Xake/bsaXXq1LF///03M2JdVuXKlW3w4MGZmmH8+PHm8Xjsq6++svPnz5uZ2fLly11XuL399tsWEhJi69evt9jY2MyO47i0OPviiy+sfv369uuvv5pZxv/gXLrjnvQ4MTHRHn74YXvkkUfs3LlzmbKD379/f3vnnXec7WzgwIFWsGBBCwkJsfLly9ttt91mmzZtMrPMPbjSr18/y5cvn23cuNHuuusue+WVV8ws44uitWvXOoVsYmKiHTlyxBo3bmzjx483M7OzZ8/agQMH7L333rOff/45Q7OZmZ0+fdqGDRtmvXr1spiYGGvZsqUVKVLEFYXb0aNHrVixYtagQQPbuHGjJSYm2o4dOywsLMz5/sisA2Xz5s2zfPny2ezZs+3MmTO2fPlya9WqlY0dOzZTcyVJTEy0nTt3WvHixS0kJMRGjx6dqXlOnTplw4YNs6pVq9qAAQOc6WvXrrWePXtapUqV7LPPPsvwXEnv0/r16y1Pnjz23HPPmZnZqFGjrHTp0rZ//34zc8eBYjOzuXPnWp48eez555+3devWZWqWpHXSvn17Gz16tMXHx1vRokXtkUcesa5du9pdd91lWbNmtejoaDPLnM9EXFycNW/e3MqVK2dZs2Z1Dt655f1M7vfff7cuXbpYvXr1Mq1w++mnn6xcuXIWERFhQUFBzveZW1G0ucilhcbChQvt5ptvtuXLl5tZyh1tf7v0Qx4bG2uJiYk2ZswYa9mypZ04ccLMMu/H+v7777f8+fO7pnDbs2dPimmPPvqo9e7d28z+7/3L7J2bqVOnWtGiRW3KlCm2ZcsWMzOLiYmxSpUqOVkzy0svvWTvvvuubd261Zk2depUCw0NzbSdicaNG1vVqlVt5syZ9s0331i1atXsp59+sqNHj9q8efPszjvvtLCwMPv9998zNFdykydPtoCAAOdIdKdOneyxxx4zs5RnCf25/S1cuNDy5s1rEyZMcM4qnz592qpVq2Zjx4618+fP25NPPmkNGza00NBQy5o1q82ePdtveVKTmJhoy5cvt59++smZ1qJFCytatKhFR0enWF8ZYeXKlbZ3714zMzt+/LiVKlXK6tata1u2bLG1a9daWFiYnT17NsNzJTly5Ih16NDBnn/+ea/p/fv3t7p162b6d1pyEyZMsNy5c1vr1q1t165dmZrlxIkT9sorr1jt2rXt8ccfd6b/8ssv1r1790wp3BISEuzw4cPm8Xjs6aefdqafOXPGihUrZn379s3QPFfy559/WokSJeytt97ymr5t27ZM/TwMHz7cGjZsaEOHDrVOnTo5B3uOHDlivXr1shtvvNH++eefDM+VtI8RHR1tgYGBVqJECZs/f75z9jSzPqdJy92wYYN9/vnnNmvWLOf3fMeOHZlWuJ0/f95effVV69Gjh23bts0mT55sWbJk8Src3PTdZkbR5hozZsywbNmy2QsvvGBLly41s4sbS6NGjaxdu3aZmu3SLgl//PGH5cqVK9OOjCQ/Gn7ffffZDTfckOmF2yOPPGJ33nmn17TY2FirXbu2de3a1ZmW9AUQFxdnmzdvzpCzb8nPWiUkJNhff/1lPXv2tMaNG1vBggVt6NChtmXLFouOjraaNWtm2tHMU6dOWd++fa1o0aJWt25d6927t/PD17ZtW6/1mBGSF4f33HOP3XTTTTZ48GDr1auXV7vVq1dbixYtrFu3bhl+NjXpPV2yZIn9+eefzvQePXqk+N7IqILkiSeesHLlytkbb7xhhw4dMjOzp59+2kqXLm05c+a0O++806ZMmWIJCQl233332V133ZXhhXjS8pL/ILdo0cI545aQkGAnTpyw9957z687h4mJibZkyRLLlSuXjR071tmROX78uJUuXdpuv/12++ijj6x8+fL2+uuv24cffmjz58+3Tz/91CZNmmQrV670W7bkjh49akOHDnXOICStv08++cRuvvlmS0xMzJSdm8stc8KECVakSBEbOnSo/f333xmcyvsAa1RUlPXu3dty585tQ4YMcaZndOF26Wfsxx9/TJH3ueees5tuuinVA5CZYfny5ValShU7f/68HT9+3CZPnmxNmjSxoKAge+ihh+yvv/7KkByff/65zZgxw3kcFRVljRo1smrVqln//v292iZ1vc7Mg3hr1qyxr7/+2tq2bWvVq1e3OXPmOPtHyT8zGXki4LPPPrNChQpZWFiYlS5d2vLmzWuffvqpmV0szrt06WK33nqrvf766xmWyezi/mxSj4+4uDibOHGiZcmSxcaMGePVzi1nKinaMknyHWmzi0doRo4caXfccYflz5/funXrZj/99JOtWLHCbr755ky7pueLL76w0qVLW7NmzWzZsmV28OBBMzMbOXKkNW3aNMX1KRkl+c7nvffem2rhli9fPnvwwQed6+/86eTJk86yjx075kx/4YUXrEqVKs7Z0iR//PGH3X///bZ582a/5kr+RXPq1Cmva+oOHjxo06ZNs3r16lmtWrWsUqVKVqJECZs+fXqKv/V3tuS2bdtmM2fOtAoVKljdunXtrrvusl69ellERIQdPnzYzDLu6FfyH7W7777bPB6P3XzzzSmKs1GjRlmFChUy5CBB8vV26TpMOqI6atQoa9q0qZldXFdNmza1O++806/rLflnsn///hYWFmZvvPGGnT171o4ePWpLly61Tz75xGvdRUZG2qBBg/z+fib9MG/fvt2OHj1qZuYUGskPArVs2dJCQ0Ntzpw5VrduXWvcuHGG/Fg/88wzVqZMGXv55Zed79SkM24ej8fCwsKsRo0aVrNmTatfv75VqVLFwsLC7I8//vB7tiS7d+92/j/p/Vq0aJHVrVvX673fsGFDhuRJyrB8+XIbPXq0jRw50mvHeuzYsVasWDEbNmxYpv1ODRw40OrWrWv33XeflS1b1kJCQqxfv37O80mF24033ujXwi1pG969e7fNmjXrsu3WrVtn2bNntw8++MBvWdJi//79li1bNmvbtq1VqlTJ2rdvb88//7wtWLDAsmbNanPmzPF7hg8//NA8Ho/dfvvtdvr0aWf6wIEDzePxWLVq1bzOqm3bts1q1arl99/25JI+CwcOHLDDhw87B3/i4uLsjjvusOrVq9tnn33m7KN88MEHGVqEbNy40fLnz28ffvihHT161I4cOWJPPPGEZc+e3b744gszM9u6davdc889FhER4fTi8qfL/ebExsbapEmTvAq3gwcP2ptvvun1HZhZKNoyQfIPy+HDh+3AgQPO45iYGFu8eLE1a9bM6tata8WKFbOQkBB7+eWXzcz/O6uXzn/Pnj32448/WvPmza127dpWs2ZN+/LLL23q1KlWtWpV56xMRnwBXLqM5Fk7dOiQonD7+eefzePx2PDhw/2W6dNPP3V2As0uXqhfqFAhp3vfsmXLrH79+nb//ffbkiVLzOzihfLt2rWzW265xa9HupKvn7Fjx1rjxo2tXLly1q5dO/vpp5+cnef9+/fbzz//bHfddZcFBwdbmTJlvLZJf0j+Xn7wwQf23HPP2QMPPGArVqywM2fOmNnFL8+ZM2daly5dzOPxmMfjsddee82vuZJc7mjkww8/bAULFrQpU6Z4FWjfffed3XjjjX7/Uk++3qZOnWpdu3a1Tp06pTgq+N5771mVKlXs7Nmz1qpVK6tQoYKzY+2v75Ck+a5atcqmT59u+fPnt8KFC6c6AM++ffvs2Weftfz58ztddP3lvffes2LFilmpUqWscOHCFhER4RwES8qcvHBr1qyZeTweq1q1ql/X2dSpU23BggXO42effdZKlizpVbj9+++/VqlSJatevbqtWbPGyRMXF+f3s7qbNm2ytWvXOoNhJUn+efjss88sLCzMeRwREWENGjTwa67k5s6da7ly5bK2bdtaeHi4lS5d2lq1auU8/9JLL1np0qVt0KBBzo5sRvnqq68sX758tmLFCktMTLRjx47Z888/b5UqVUpxjVuPHj2sdu3azm+ELyV9Z2zatMny589vTZo0SbVd0jbep08fq1WrVoZ370ta/t9//2379++3bdu2mdnFojwyMtKGDx9uf/31l7P93X777TZz5ky/Znr77bctMDDQevbsacHBwbZmzRqv5/v162eFChWy1q1b288//2zr1q2z1q1bW9OmTTOsKEpab1999ZXVr1/fKleubDfeeKO98MILZnbxu61NmzZWu3ZtGz16tD311FPm8Xic9ZsRFixYYNWrV7djx455fZf26dPHChQo4JwM2LFjh9+3u2vpOXH+/HmbNGmSZc2a1Z5//nlr2LChVa5c2RVn2yjaMljyDXb06NF28803W+nSpa1u3br29ddfOzuCMTExtnnzZnvsscesZMmSVrBgQb/v3CTfIPfv32+HDh3yyvvjjz/akCFDrFSpUnb//febx+OxNm3aZEiXsOTZ3n//fevVq5c9+uijXjvxqZ1x27Rpk98GF4iKijKPx2OjR492Bos5duyY1a5d2ypXrux8KX711VfWqlUrK1CggJUrV84qV65stWrVcnbA/P1FMHToUCtSpIh98MEHtmXLFitUqJDddtttqXaBiYqKsltvvdXmzp1rZv7ZWU2+0/fkk09a8eLF7ZFHHrEHH3zQsmbNaq+88oqdOnXK629++ukn69WrlzVq1MjvO1/J34+4uDhnW0rSoUMHq1Spko0dO9Z27txpf/31lzVt2tQaNWqUYWcAn3rqKStSpIgNGTLERo8ebR6Px6v76Oeff26lSpWy2267zatg8/dAGwsWLLAsWbLYyy+/bC+++KK1b9/e8uXL51W4fffdd9alSxcrW7as38/K/PTTT5YnTx6bPn267du3zz777DN74IEHLE+ePPbll1+a2f9t4wkJCXbq1Clr1KiR1a9f31lXvl5niYmJtnfvXmvZsmWK7l3PPPNMisLt+PHjVrJkSbvlllts3bp1GbKNvfvuu1asWDErXbq0BQcHW7NmzezHH39M8Z01Z84cq1q1qiUkJFjr1q0tLCwsw64J3L17t5UuXdrefPNNM7vYk+C7776zkiVLWuvWrZ12o0aNssqVKzuD4/jLpe/LtGnTrGzZsl6jMR48eNDpKpn8+sBffvnF6tev7+xo+0ryUSJz5sxpLVu2tNy5c9vXX3992b/5/PPPLTQ01LlMIyMkrbsvv/zSqlevbuHh4Va4cGF79tlnU+0p89xzz1nRokX9es3iW2+9ZYGBgTZv3jwzM2vSpInddddddvbsWa/fiAkTJljTpk3N4/FYzZo17ZZbbsmw3/Yk3333nWXPnt0mTZpkmzZtsrFjx5rH47Hvv//ezC7+5nbq1Mnp0unv793UPgvZs2d3Dsgm/abu2rXLihcvnmGjW06fPt1atGhxTd1/4+Pj7aWXXjKPx2M33XRThr+nl0PRlklGjhxpRYoUsTlz5tjhw4etUqVKVq1aNduxY0eKDX7lypXWvHlzZxQgX/9oz5o1y3bu3Ok8HjJkiNWsWdMKFixokZGR9uGHH3q1X7NmjU2fPt3q1atnJUqUsLVr15pZxmzMScPn9+vXz5599lnzeDz2xBNPOM/fd999VrBgQZs9e7bXzoO/dlanTJliWbJksVGjRjk7pcePH7e6detahQoVbPv27WZmtnPnTluyZImNHz/ePv/8c6dw8edOdGJiou3evdtq1qzpfCn+9NNPljNnTnv33XedNmbehVTTpk2tS5cuPs8zePBgrzMu8+fPtxIlSjjXTK5du9Y8Ho9XN6Hk2/pPP/1kRYsW9esQ48m34VdeecXuvfdeq1Klir3zzjteB03uuecey5YtmxUrVszuvvtua9u2bYZ9qa9cudIqVKjgdLmdN2+e5cyZ0+ti/V9//dWyZMni9WPj723t3Llz1qxZM+vTp4/Xc71797YbbrjB3njjDTtz5ozt37/fZs+enSGDRLz//vvWqFEjr2k7d+603r17W/bs2e27775zpl+4cMGGDh1qoaGhGbLOko74rl271ikgzS5fuOXNm9eaNWuW4iCCry1btszy5ctnn3/+uW3ZssU2b95stWvXtho1atj06dO9DtL9+OOPVqdOHWvYsKGVK1cuww4OmF3syleiRAmvMwZxcXE2f/58K1eunNc6Td5l3d/ef/99mzRpkkVFRVn58uVTfF+tX7/e8uXLZ7ly5XJGeDUza9CggfXu3dtnv++XDus/ZMgQS0xMtFatWtlDDz1k58+fv+yyqlat6nXGMiNER0dbzpw5bcqUKXbgwAGbOnWqeTwemz9/vtfZpI4dO1rRokVt/fr1fsuyYMECCwoKcg5empm9/PLLVqZMGWdfKfnnICEhwTZu3Gi7du1y1ntGjkT76KOPOgcB9uzZY+XKlbNHH33UyZb030OHDmVI10Ozi7frSTqQeOrUKatevbp17tzZ64Ds33//beXLl7eFCxf6Pc+3335r+fLls4CAALvtttuu2mX66NGjVqtWLatVq5bfDuClB0VbBkj+I5v0walXr57Tl3fRokWWJ08emzp1qtPGzHtHOjIy0u644w6fZ5s/f74FBATY888/b0eOHLFp06ZZ4cKFbcaMGfb6669b586drXjx4vbGG2+k+Nv4+HirXr16ho04uHTpUitbtqxz0egXX3xhQUFBKQZEuf32261FixZ+zZJ8x/ytt94yj8dz2cLtct0QMuIi4G3btjndl77++mvLnTu3TZkyxcwufpF+8sknzvaZ9Jq6du1qHTt29OkZ1JYtW1rdunW9PgvTp0+3u+66y8wuHjjIkyePU3icPHnS2alPvq7Dw8OdgtOfhgwZYoUKFbKXXnrJhg4damXKlLHu3bs7ByjMLq6ngIAA+/LLLzP0h3ru3LlWu3ZtM7tYsOXOndv5DJw8edKioqIsMTHR3nnnnQw5OJBcs2bNbNCgQWbm/b13xx13WOnSpW3s2LEZOqrru+++a/nz50/R5WbPnj3WvXt3q169utcALrt37/b7Orv0OtNbb73VGjVq5HX2Y8iQIVaiRIkUXSWTZ/WXDz/80GrVquV1/U5cXJzdeeedVrNmTfvqq6+c6V9++aV5PB6vngMZta3t27fPihQpYtOmTfOafvToUStVqlSqv1n+du7cOWvVqpW1b9/ejhw5YmFhYdalSxevg6JJt+SYOXOms62dPn3a6tWr5/MzIL///rsFBATYs88+60wbP3685c6d2znbkFpX8K+++so54OhvSZ+Hvn37OoN6/PXXX1ahQgXr0aOHV9tFixZZ3759vUYX9oclS5Y4+xlJ6+TcuXNWokQJr4NSlztAl5FnY2JjY61GjRo2bdo0i4mJsWLFilnPnj2d93XKlCkZftY0MTHR5syZY1WqVHEOGE+aNMluueUWe+ihh+zIkSO2Z88eGzZsmJUsWdLvgwUljerZt29f27hxo1WsWNHq169/2cLtwoUL9tZbb3ldr+uGgs2Mos3v7rnnHhs3bpzXD+Du3budo5Lfffed14706dOn7d1333WOhiR9+Hv37m0tW7b0y40vX3/9dStevLiNGTPGHn/8cXv//fed5/bs2WMjRoywcuXKOafazf5v0IG33nrLbrvtthTd2Xzh0sFaZs6cabfccouZXSzYcufO7RS6MTExFhUV5fxtRnxpJi+6Jk+enGrhVq9ePatcuXKGXJSc2lHTo0ePWoUKFaxPnz6WN29erwJ306ZNdtttt3kNff7LL79YqVKlfHoT0/Xr11upUqWcgmfZsmUWFxdn48aNswYNGlh0dLTlzZvX60zRtGnTrFevXl47+O+//77lzp3b7zuun332mZUrV865fmHVqlXm8XisXLly9tBDD3ntWD311FNeRzL9Ken9Xbx4sbVq1cqmTp3qVbCZXdzZiIyM9LomMSMODiRle+ihhyw8PNyZnlT4Dx482G644QarU6dOht5gfvXq1VatWjV7/fXXvb6DzS6eua1UqVKqXXMy4vsjaad55cqV1qxZM7vjjju8zg4NGTLEypYta8OHD8/Q64smTJhg5cqVc97TpN+c8+fPW6NGjbwG4tm0aZM9+eSTfj0SfbmRKWNiYqx9+/bWrl0754bGSe0bN25skydP9nmWK0nKmHRma+nSpbZmzRpnJOP33nvPVq9ebRERERYZGek1krCZf9bd+vXr7dVXX/XKFxcXZzVq1LBHHnkkU7t6JeVJ6u7esGFDmzx5sp07dy5F4fHGG28477E/L8e49Lvy0gPoL7zwgtWoUcN27Njhtwzp8eSTT9rDDz9sxYoVs169ejm5z549a507d7axY8f6vei49PrgPXv2WLt27ZyzbWfOnLGJEyda7dq1LSAgwKpUqWLFixfPkNGqz58/b7NmzbJly5Y52a5WuO3duzdTzppeDUWbn/Xr188CAwNtypQpzk5DfHy81axZ0zp27Gh58uTxOnPw559/2i233OK1I7F161arXLmyz4/CJf/CHj9+vBUrVsxy587tXCOQZOfOndawYcNUbzp433332U033eTXYbGTdvK++uora9u2rbPznnxnNTo62rp27ep1RNMfP0hX6nL55ptvplq4lS1b1h544AGfZ0ku+WuNiYnxGtL8qaeesrx583p1eTx37py1adPG7rjjjhTrKWmERl9I6g5Xq1Yte+mll6xr165Wt25di4mJsW3btlmNGjXM4/HYxIkTnb85e/astW3b1rp37+61s/bLL7/4/Qir2cVtKanb0tdff2033HCDTZs2zbktR+fOnVOMBuqPwuhy2++WLVusTJky5vF4nAGKzMwZdOTBBx/MsAGL/v77b/vnn3+c7md79+61kiVLpuhaNXjwYJs7d65zwXlG6tmzp4WGhtoXX3yRomth5cqVbcSIERmaJyEhwXbu3Gl58uRxtqOVK1da48aNUxRuffv2tfDwcK/Bjvxt165dljt3bhs2bJgzLWm9HT9+3PLly5dqQeTrHZukAzZJ8128eLENHTrU+vTpY8uWLbPExET77bffrFq1ata6dWubPHmyrVmzxgYOHGj58uXz+451ap+xpG7CSQMEmV08kJI0Kmm5cuWsXr16GdKV+nLfAQkJCfbUU09Z9erVnev8MuteVHPnzrWqVavakSNHbPTo0dasWTMrUqSI9enTx/lOvXDhgkVGRtrTTz+dYTvPX3zxRao78xs2bLBcuXLZO++8Y2YZu94uXLjgLO/UqVNeB6E++eQTy5cvn9WtW9e532N8fLw9++yzVrp06QwrMr/77jtr376900tm9erVFhgY6JwIiIuLs7Nnz9rXX39ty5cv9/sZtuSfr0u3neSFW/JbrSxcuNDr77hP23Ui+Rs9dOhQy5Ili02ePNkZsOKll16yQoUK2T333OO0O3v2rLVu3doiIiJS7AT6qx9y8g156tSpliNHDmvbtm2KD/k999zjldXs4lnBli1b2urVq/2Szezi/esGDRpksbGxtnbtWitZsqR5PB7n6KHZ/+2sdunSxW8fsEsHgXnzzTetU6dO1qNHD3v//fed9+uNN95wBidJKtxOnjyZYfdDGT16tDVv3twaNmxo0dHRFh8fb9u3b7d7773XypYta7169bKnn37amjRpYuHh4V47D77egbj11ludm7e+8sorVqRIEQsKCrJFixaZ2cXtZ/To0RYeHm5dunSxbdu2WVRUlLVq1cqqVavmbJsZfTT4xIkTdujQITt27Jg1bNjQxo0bZ2YXPyvly5e3kJAQe/HFF83M/yMxml3s4vfcc8/ZgAED7LfffjOzi92EsmTJYl27drX333/fvvzyS2vatKlVrVrVWW/+/rH5/PPP7cYbb7SiRYvafffd51yw//3331vJkiWtUqVK1q1bN7v77rstW7ZsGdbdyuzi5zP5PbHatm1rISEhNm3aNOc7+N9//7U6deo41wr7U2rvxd133201a9Z0Ct7Vq1c7hVvyrpK+PIhyrdmS7nOW/ABefHy8nTt3zurVq+d8JvxlxowZlitXLmc01rlz51r27Nnt9ttvt9q1a1uePHnsiSeesGPHjtlvv/1mDzzwgBUtWtTKly9vVapU8ev1TpeaOHGiTZ482WvAjI8//thy5crlnK0/fvy47d+/3zZv3pypR++T3ut9+/ZZ3rx5ne+xjJKQkOBk2L17t0VERDi9ZRYsWGCVK1f26rIcGxtrzz33nJUsWTJDugabXbweuHz58s7vVNJvd1Lu/v37W9WqVTNsNNJLB4358ssv7eabb7bw8HBr1aqVcz3YG2+8YWXKlLEmTZrYgw8+aB06dLACBQpkyGchad1ERESYx+OxKlWq2Ntvv227d++2t99+2ypUqGC//PKL33OklsnsYm+Z1D5vu3fvtooVK1rDhg1tw4YNVq9ePbv//vtdV6glR9HmR8k3ktGjR1tAQIBzhHLfvn3Wo0cPK1u2rLVr18569eplt956q9cw08m/4HzpSkcRXn/9dStSpIg9+eSTzk7WyZMn7aabbvIapji11+gLl+YZNWqUFSlSxPnxnjZtmnk8Huvbt6/NmTPHvvvuO2vWrJnXTr6v11n//v3tpptuck6tv/jii5Y7d27r1auXNWjQwLloO2n5EydOtICAAHvyySe9uvf5u3CbMmWKhYSE2JgxY6xZs2ZWuHBhmzBhgsXFxdnu3btt4sSJVqtWLbvnnnts4MCBfu3SNGDAAKtUqZLz+LnnnnO6GL766qvOD96JEyfstddes1q1almOHDmsVq1aXoN6ZOTNPy+1c+dOK1++vM2fP9/MLp5F6tatm3300Ud+LSSTzzupW2HTpk2tRo0aljNnTmfE1G+++caaN29uhQoVsltvvdXuvffeDFtv27dvt2LFitnEiRPtrbfesg4dOlidOnVs9uzZZmb2zz//WM+ePZ2DPZs2bfJrnuROnTplTz/9tBUuXNhrNL4HH3zQKlasaLfddpv16dPHbrnlFgsPD8/Qnefdu3c7Z602b95sjRo1srFjxzpdvtauXWvNmjXz6m3hzx2I5Nva8ePH7fTp03bhwgU7efKkDRgwwBkQJXn7mjVr+v0GuEk9TpIGfhgwYIBXz4p3333XqlWr5vwmnTlzxo4ePWp//vlnhna/PXPmjPXr18+CgoKsdevWXiNCdu7c2Vq0aJHqpQOZcYYt+SipZhe/oxs2bJghZ78vvZ/gmjVr7IknnrC2bdvaoUOHnOkTJ060m266yapUqWJ33XWXtWrVygoVKpShRbiZWfPmzS0iIiLV57755hsLDAx0ijp/2rFjh3k8HouMjDSzi8VHUFCQPfnkkzZ58mS77bbbrEqVKs7lNfPmzbNnn33W2rRpY8OHD/f7fRwv3dZ27Nhhd955p0VERFiPHj2sffv21rt3b+vcubMNHz7c74MomZkzQmWSOXPmWMWKFVOMapuUfe/evVaxYkXzeDxWqVKlDBv9Nr0o2vxg+fLlzo/w6NGjne4uzz//vGXJksUmTZpkZheH/50zZ461aNHCOnfubEOHDvX7KDWX3ufpkUceSTF0/iuvvGKFChWy8PBwe/jhh61Dhw5Wo0aNDLvPk5l5/fDefvvtVq9ePSf7+++/b7fddpvlzZvXGjZsaO3bt/frzuqWLVusWrVq1rJlS/v666+tXbt2zn2eLly4YJ9++qnVrl3b7rnnHidj0vVaGbXDZXbxSFvym8s++eSTVrJkSRs/frxzFPjS9eOvnfsBAwY4Z2bfeecdGzZsmO3YscNGjBhhlSpVshdeeMG5Tic+Pt4SExNtw4YNXreZyOx+5Js3b7bw8HB7+umn7csvv7TWrVtbixYtUh1x0x8OHjxoDzzwgK1bt855r5977jkrUKCA093kxIkTdvDgQfv3338zbL1t3LjRhg0bZoMHD3ambdq0ybp162Y1a9a0jz76yKu9v/OktgO8f/9+Gz16tBUvXtxGjRrlTP/444+tX79+1qFDBxswYECGHhxYv369eTwe69atm3NWctSoUVavXj2nS5PZxa6Sbdq08ZrmD8m/m8aMGWMtW7a0sLAw69y5s61cudLOnj1rI0aMsBw5clizZs2sa9eu1qhRI6tcuXKGfDZ3795tTZs2tZCQELvpppssOjra6/l33nnHcufO7TU4UGbZvn27PfPMM3bjjTdauXLlbMKECfbcc89Z27ZtnbPjGSHpPV26dKmNGjXKevfubdHR0c7Bw+SflR9++ME8Ho/XteD+MHfuXKtWrZp9/vnnzrQhQ4ZYgQIFLCQkJMXw6wsXLrSXXnrJIiMj7aWXXvLrGfpLD/Qm7betWLHCqlWrdtlRDTOqq2ZiYqLNnz/fChQoYF27drWvv/7aRo4c6dXm0UcftcqVKzsHlTPawoULLSoqyulq++KLL9qQIUPs559/ttmzZ1vRokUta9aslidPHr9f3nDXXXfZ008/7fSmMLt4r73mzZubWer7ridOnLBatWpZw4YNXTVK5OVQtPnYX3/9ZdWrV7e7777bHn/8cQsICPA6ypzUVXLSpEmXregzYgfiqaeesoIFC9qjjz5qERERVrp0aWvatKnz/OTJky1nzpxWp04dmz59eoaOQjdmzBhr27atffrpp2Z2sbtCgwYNvIZHPn78uO3Zs8frZo3+yJb0urdv325VqlSxJk2aWI0aNbzur3T27Fl77733rEaNGl4X1V46kIovJZ/n3LlzbcqUKfbAAw84O4NJnnzySStVqpS99tprGTaYQWJior322mtWvXp1a9KkiXk8Hq/rA4YMGWKVKlWy0aNHew2YkXyHIrPvhZLk1VdftUqVKlnZsmXt1ltv9fuBiyTvvfeehYSEWK1atWzPnj1eyxswYIAVLFgw1TMK/j5IcPToUWvXrp0VKFDA7r//fq/nf/31V+eaxUtHdM0Il57N279/v40aNcqKFy+eohtY8vWUUT/QP/74o4WEhFjjxo3toYcesq5du1pMTIyVLVvWGZ47SUYckU7y7LPPWoECBezTTz+1zz//3Bo0aGAhISEWExNjZ86csTVr1ti9995rDz/8sPXr189ZX/76nUr67G/dutXWr1/v3BM06VYgyQeiqFSpktfZrcwUHx9vZ8+etX79+lm7du0sODg4xXWnGSFpkK6HHnrIbrnlFmvQoIENHDjQucQi+fv2yCOP+H1H+qeffrL27dtbkyZNvG7n8sorrzgDZ2T0jc8vvaQjqXBN2vYOHDhgN998sz355JNe7S79XfLXd8ezzz7rDLySkJBgCxYssHz58lnWrFnt8ccfT7HsevXqWYcOHfyS5Wp69OhhBQoUsJ49e9qKFSvs4MGDVqVKFafXxd69e61z585WunTpFPel9LWXXnrJsmTJYmPGjHGKyPHjx1vHjh1TbX/+/Hnr2bOnFS9e3HWjRF4ORZuPxcfH25w5c6xgwYKWM2dO5x4tyUd9HDp0qGXNmtWmTJnidUQgo6xevdpKlChhS5YsMbOLF4cuXrzYSpcubW3atHHavfTSS3bPPfdk2JkFs4vXOT3wwAOWI0cOK1++vD3yyCO2Z88e69Wrl91zzz3OUblLs/i7G6nZxeGTa9WqZR6PJ8W96/bv32+5cuVKcZbB3wXbk08+ablz57Ybb7zRPB6P3X333Sku7n3mmWcsKCjIPvnkE59nuZKKFStarly5bMCAASneryFDhljlypXtxRdfzNCR8S59P65lyOadO3fazp07M+xalMTERPvqq6+sQYMGFhwc7BS8Sd0+9u3bZyEhIV6jufo7T3Lff/+9tW7d2kJDQ1OMvLhp0ya79957rXHjxqneFNdfoqKirFChQl4j35pdXFf9+/e34OBgp4dDRkt+U+ehQ4dawYIFbfXq1dayZUtr1aqVde7c2XLlyuV1JiKj7Nq1y26++Wbnt+C7776zvHnzOtcZXa7Lub8/A/PmzbNKlSrZzz//bNu3b7eIiAgLDQ31OusSGxtrtWvXtvHjx/s1y7VKvo7++usv++CDD6xNmzYZuhO4atUqK1mypHOd5t9//225c+e2ChUqWK9evZz9jaTvY393BUs+omZkZKQ1bdrU695nw4cPt5o1a9ozzzzjHMDz9wG7QYMG2SOPPOJk++WXXyxXrlxWtWpVGzlypHOLnq+++spCQkJs5cqVfs1zqYSEBHvooYfs119/9Zr27bffWunSpa1Ro0bOgYuk93H06NHWsGHDDOnal9o+zezZs61z585OL5Bx48ZZkSJFnFGzT58+7df7wyXPNGnSJGdcgcTERBs2bNhli7YLFy7Yjz/++F9xhi0JRZuPJP+iWbx4sXMh/n333ef0aU9+9HTYsGHm8Xice7VlRLak/3755ZdWuHBhrxHJ4uLi7IsvvrCwsDD78ccfnen+PFt0OQsWLLAmTZrYvHnzrGnTptapUycbPHiwBQQE+P0C+NRERUU5oyHt2LHDqlevbrfddpvXTvOxY8esUqVKztGljLB+/Xq75557bOXKlXb+/Hl74YUXrHr16vb000+nGPlq8uTJGXZ9WGxsrB04cMCKFCli9957r1WrVs3GjRuX4sxQUle/S++z5C87duxwfuxeeOGFq15nlXwEzkun+VJq8zx//rxFR0db+fLlrVatWl5tduzYYaGhoU4X3Yzw008/2b333us8/vHHH61NmzbWtGlTrxtUm13sTpyRhbjZxbN8vXr1ssqVK6c4oLJ06VLLlStXqgdb/O2XX36xVq1aeY1QGRkZacOHDzezi92oO3ToYB6Pxzp27Oj3M2yXbmu//fabhYaG2okTJ+yrr77yuv3M2bNn7Z133vF7N80kSZ+zY8eO2V133eV1n7WdO3dakyZNrGjRojZt2jT78ssvbciQIRYcHOz363bS4nK/k/7YGezXr5998MEHXtNmzZpljzzyiJldXGflypWzbt262fPPP28FCxa0/v37Z+iNxpN+c/766y9nJMNL7/U3dOhQq1mzpj333HN+P+N24sQJ27Ztm/N+JG3bMTEx9uSTT9odd9xhOXPmtJEjR9o777xjDz74oDMYT2ZcX71w4UKn2+OFCxdswYIFdsMNN1hkZKTXiYAHH3zQmjdv7tfbIZj93/a9atUqmzNnjteZ0/3799usWbMsX7581q5dOytSpIgNGDAgww7epVa4TZkyxQYMGGCtWrWyVatW2YIFC2zp0qW2fv16+/jjj71OmmTm9fNpQdHmA5fuUB04cMD++ecf++STT+ymm26yu+++2xmeNfmGNW3aNL9X9sl3lJPux7Vt2zYrUaKE0/0wye7duy1fvnwpCo+MKNjeffddGzp0qPO4e/fuTnfNKVOm2KBBg8zj8ZjH4/G6J4+/rVq1yipWrGiPPvqoc5bvjz/+sPDwcKtRo4Y988wz9tFHH1m7du3sxhtv9OsHP/n7kHTPujvuuMNrRy/pPjJPPfVUqj+A/u7SlJrevXtbeHi4vfLKKykKt7ffftvvX5aJiYnO9URz5syxxx9/3HLmzHlNO3vJX9f/a++8A6I6ujZ+VgQBpYiIAgoogvQiTRSwAnbFhki3S7EEURGNqBB7jWKJINgNtljBhoIdwRZbFLF3VDoI7PP9wbf33WU1b/KGXTDM7x/l7u7d2Xtn5s6Zc85zqtf5qgmEz3/lyhWcPXtWJOn+9OnT0NfXh4WFBQ4cOIDDhw+jb9++sLKyktpDprKyEvHx8WjVqhW8vb254ydPnsSAAQPQvXt3qXr9vvW7Hzx4gKCgIBgaGop43G7fvg1fX1/s2bNH6g/mu3fvYsaMGWjXrh1cXFxw+fJlbNq0CWPHjuXC0v744w8sXboUd+/elVq7Ll++jC9fvuDhw4fo3LkzfvrpJ6ioqHAGG1C1KTRs2DCpzrenTp2Cq6srXF1dRTwNQJUR0qtXL/B4PPTo0QMRERE1XganppHUs1NQ57K6QEdBQQHu3buHL1++wN3dnauRxefzoa+vj5YtW2Ly5MlSDT9PSkqCmpoaQkND4ePjA01NTXTq1Elk/REVFQU9PT3MmzdPYmN0woQJIuGOu3btgpWVFY4ePcodKyoqwsaNGzFo0CAuesXIyEgi9XH/CoMGDYKsrCxXGoTP53OGW8eOHeHv748pU6agSZMmYuNFUhw8eBCKioowMDCAurq6SHQWUCUiFBoaCmVlZRgYGIiIsUmCb22qrly5EjweD02bNoWGhgYcHBygrq4OXV1dmJiYwMbGps6kYfwdmNH2DxG+6XPmzBFRGSwtLUV8fDzs7OwwfPhwrpbZuHHjRHanJWW4HTp0CD4+Pnj16hUmTZoEHo+H9+/f4+3bt3B3d8fgwYNF6k3l5ubCyspKKt4/AXw+H58+fcKCBQugpKSEXr16IS0tDUVFRRg0aBB++uknAFWy13PnzoWLi4vUF16LFi1Cp06dEBQUxBluDx484EIlBw4ciFmzZkk016P65LJhwwaYmppCS0tLTP0rJiYGtra2GD9+vEholqSonty+fft2nDt3TkSiOSgoCGZmZli2bNlXc7GkcU9nzpwJeXl5KCoqcjkNf7aoEn5t8+bNWLhwocQe3uHh4dDW1oauri5kZGQQEBDAyYWfPn0apqam4PF4GDNmDObPn8+FSkprLBQWFiIxMRFGRkbw9PTkjp88eRIeHh6wsbGRuJpa9d+6YcMGTJ8+HePHj0dWVhYqKirw/PlzBAUFQU9PD/Pnz8fVq1fRp08fBAYGSiXMW/Ad9+/fx5UrV7iFlMBT5OzsDD8/PxgbG4tsUkkTgbS6IAJk6NCh4PF4mDVrFveeoqIi9OnT56t1HCVJdnY2lJWVwePxRLwxAh49eoRu3brBxMSkzqu8SYtjx46J5ZBmZ2fDyMiI88a/fPkSHh4emDt3rsRrYwnz5s0bmJubi0TIpKWlYcCAAXB0dBS5xz/99JNIndWa5uDBg1yfKSoqQmZmJtzd3eHq6ioWLfDu3TvcvXsXAQEBXE64NBDMH4L5vbKyEsOHD0ezZs24TXc+n4+jR4/C0NAQDRo0QGpqqlTqsAk2zDw9PZGYmIg3b95w5V26desmtsF59epVid5PQLw+rbASKVD13ObxeJg2bRrevHmD/Px8FBUVobi4uFaiyGoCZrT9A4RvdkREBFq2bIn9+/eLiCuUlZVh69at6NChA0xMTNCzZ09oaWlJ1MO2aNEiPH/+HMeOHYOGhgbMzc3RrFkzLr4YqJLctbKygqurK+bMmYP9+/dzsuKSXgh+axHw/Plz9OjRAy4uLvD29sayZcswceLEr+5AS6KNwvezepjSkiVL4ODggKCgIC6kIjs7G5qamiKhT5Jo1+nTpznDbMaMGZwa3pYtW2BmZgZPT08xBa4ZM2ZItG7d1wgPD0eLFi1gZGQEFRUVdOvWDdu2beNeDwkJgaWlJebOnSvx3TdhBA/q+Ph4yMvLQ1ZWFjt37vyqFLcA4eu2ceNGyMjIiBQ9/qcIj4H169ejefPmOH/+PF6+fInk5GRYWVlh6NChuHPnDvh8Po4dO4ZOnTrB0dGRmzskWdAeAJfbIaCwsBBbtmyBsbGxSLH4o0ePwsvLiyvLIQmCgoLQvn177rdPmzYNKioqGDBgAMzMzKCpqYkFCxYgLy8PL1++RHR0NBQUFNC+fXs4ODhIRUBGcO4DBw5AT08PRkZGkJeXR2BgIBeS9vPPPyMgIICLGpDmBpmAjx8/olmzZty8VVZWBjc3N2hrayMsLAwzZ85E165dYWpqKpUi0AIE3/Hs2TNoaGjA2dn5q97wJ0+eSLSv1XX4fL5IPxakWvzyyy/csT/++ANmZmaYP38+Xr9+jblz56J79+5SDY0Eqvqajo6OmFGZlpaG5s2bw97eHjt27JBoG6qP+YSEBPTq1Qtv377FzZs30adPH7FoAcFzvKysDGPGjEH//v0l2kZhTp8+DV9fX27dU1lZydVcExhuFRUV3DwjvN6UBMJhy+/evcPo0aO5urV8Ph+XLl2Crq4uunfvLtUNHuHvio6OhpOTE7S0tBAYGChSE2716tVo0KABFi5cKJZXxzxt9QTBwBGQlZWFtm3b4syZMwCqdkmeP3+OvXv3cjsgZ8+exZQpUxAcHCxRj8yDBw/g6enJPWzHjh2LBg0aYMCAAWK7HllZWQgODkabNm1gZ2eHfv36SVwCW3iQHD58GKtWrcLOnTu5QVZYWIj4+HgMGDAAPB4PcnJyiIyMFDmHpA2R+Ph4REREiA3wxYsXw8DAAKGhoVzO2JMnT8SKb9YkeXl5aNWqFTp27IgxY8ZAWVlZJAxi/fr1cHZ2hre3t1juiTR3krZu3QoNDQ2kp6ejrKwMFy5cQGBgIOzs7ETi3v38/ODj4yOVNl28eJH7njVr1mDnzp3Iy8tDREQE5OTkEBcXJ1bTBRD1fG/YsAHKysoiyfP/hOTkZK6/CP4NDAxEQEAAgP/cq/T0dOjq6mLmzJkAqhYPKSkpsLCwEElElxSPHz+GkZERp1QmID8/H+vWrYOamhomTJjAHf/adaxJLl68CAMDAzg7O+Pdu3cYPHgw54kEqqIczM3NuR1xPp+PFy9e4ObNm1ItZpySkgJVVVVs3LgRZWVlOHbsGCcQJJgzXr16hcWLF0NLS0viO+TV8zIF/Wb58uVwd3cX8bpMmzYN/fr1Q79+/RAeHi7x5HzhxWD1HfJHjx5BTU0NvXr1kmpR9u+Jc+fOcXN+TEwMeDweJyBTWlqK0NBQGBgYQFtbGy1bthRRNpYkws+d9+/fw9nZGbNnz0Z5ebnI89/DwwPa2toYNGgQ8vLypLbBGBsbi44dO8LLywvv3r37puEmWAudPXsW2traEvcaCTh16hQaNmyIUaNGcRtnwoabcKikJEL2v8b+/fthZGSEzp07Q1lZGefOneNe4/P5uHz5Mtq1awdra2upG0KzZ89Gy5YtsX79eqSnp0NDQwP9+vUTKWWxZs0a8Hg8JCYmSrVtkoAZbX+T6OhoeHh4iOx2paamQkdHB8+fP8fFixcxdepUztvg7Oz81UrwklxACNqVnJyM0aNHY9euXdDR0YG/vz8nviBcaLO4uFjq9bGmTZsGTU1NWFtbw8TEBM2bN+e8MhUVFSgqKsKSJUvA4/Hg6Ogo8fYIM2bMGFhaWiImJkZM3dPT0xMaGhoYOXKkyA6XJL2ThYWFaNy4MRo3bszVjRH+PoHh5ufnxwmmCJDWgzAsLAwDBw4UOXb9+nUMGDAAfn5+In3qawIfNc3Dhw9hZmaGkSNHcqHBwh7bsLAwyMnJITExkTM4xo4dK+KNFhhsNaXqt3LlShgYGGD9+vUiJTSGDh3KFU8tLy/nXlu1apWIYFB5eTlOnjyJ1q1bo1evXjXSpm8hCEe2sLAQqccGVKkhCoqRVjc2Jcm1a9fQtm1bGBoaws7OTmwRFRYWBi0tLakXMxaQl5eHcePGcXWUBEIQQ4cOhaqqKvr37y9igEjT21xd1v3cuXNQU1PDkSNHRI4LaiYKkNS8JviOQ4cOwdbWFoaGhrCwsMDhw4e5/i4w3Pr27StxWfrvjfz8fLi4uGDs2LHc4j06Oho8Hg+xsbEAqjzxqamp+O2336TimRTc04KCApHxtmjRIsjJyWHPnj0iz4HRo0dj0aJFUinuXZ2EhAQ4OTnB09PzTw03oGqtoq+vL5Gi7Xw+/6tzU2pqKtTU1ODv7y9iuA0fPhw8Hk8qipaC+3n9+nVoa2tj1qxZWLx4Mdq1awcHBweRnHk+n4/z58/DwsJCql7wEydOwMTEhDMiL126hEaNGkFLSwsODg4idfZ+/fXX70Id8r/BjLa/yd27d7kbLwjdKC0tRYsWLWBiYoLGjRtjwoQJ2L9/Px48eAANDQ3s3LlT6u189eoVjIyMEBgYiJKSEqSlpaF169bw9/cXWZgePnxY5HPSWHwlJSVBXV0dFy9eREVFBVeYVEZGRsQrAwAZGRkS9WR9azE3depUdOjQAQsWLBCZrKOiomBnZ4epU6dKdCEofO4nT55ASUkJWlpacHFx4XbHqxdKNzAwECu8Kem2CZgzZw6cnZ3FFqJxcXFQUFAQUxOU9CK6tLQU27Ztg7q6Oho3bsxtnAiHFIaFhUFBQQFBQUFwcnJCmzZtuLEdGxsLFRWVGpVhz83Nhbe3N5ycnEQMt/Xr14PH43HlQQT9PD4+Ho6OjiJ5dOXl5Thz5kyN17sRHluC/79//x4LFy6EkZGRiOFWWFiIgIAAbNq0SephahkZGXB0dIScnBxXtFjgPfr8+TNUVFRqNIz171BWVoakpCQ8evQIubm5sLa2xujRowFUiR7weDz06dOHM9yktaHy22+/QUlJCb6+vkhJSeHG3uTJk+Hg4IB3795JpR3VOXLkCJSVlbFgwQLcu3cPAwcOhIGBAWJjY0UMNx6Ph6FDh7IctmpERkbCxsaG23QqKCjgPG7CgjLS5PDhw+jUqRPc3d0RGhrKHZ88eTLk5OQQFhaGpUuXIiQkBC1atJBqfh0gOua2bNkiYrjduHEDffr0QY8ePUQUtMeOHVvjBdyPHj0qEjFz7949sfzz06dPQ1VVFT4+PtycUVlZCV9fX7HQdUmRmZmJ+Ph4kXzXnJwcGBgYoHPnzmKGm6QFW6qvG7Kysri+npKSAjU1NWzbtg3v3r2DsrIy+vTpIxaC/r0bbsxo+xsID/jDhw+jZcuWnALShw8fsGrVKpw4cUJkYejo6FgrRhtQNeBsbGwwatQofPz4EefPn4euri5GjhyJX3/9FX379kWLFi3EYuQlzeLFi0UKeQNVse8hISGwtbXFmzdvxAanpMU9Ll68iIyMDJGQqx9++AEdOnRAVFQUXr58icrKSowYMQK7d+8W8VRKsl2XLl3iFivv379Hu3bt0LlzZzFJf6Bq10ma+YgpKSmct2Pfvn1QVFTErl27xIRJOnToUCu12FJSUqClpYX27dvDz8+Py1MUzldcuHAhhg8fDh8fH+46f/nyBQEBAWIbCP8EwX359OkTRo4ciU6dOomUYfDy8oKKigpOnTqFDx8+4PPnz3B3d8fAgQMlHuYqOG9aWhp++uknTJgwASkpKSgsLERRUREWLVoEQ0NDBAQEICMjA9OmTZPKYv9bY+vatWswMDCAvb29iJx0dnY2WrduLXFBlD9DsGjZsWMHHB0duUXprl270LVrV+jq6orln9Y01fvJw4cPceLECXTu3BkODg6wsbHByZMnsWHDBvTt25fbLJCmwNPz58/h5OTECVR8+PABbdu2Rdu2bdGiRQvExsZyi9jHjx/XKVl/aSHo/9+qSVpcXAwdHR2RDZWioiIsXLiwVspbXL58GY0aNUJ4eDjGjh0LQ0NDODk5ca8LQnKNjY3RqVMnMeVLafEtw02Q4+bu7g5vb2+Rkkg1yZs3b9CmTRsEBgbi1q1bKCoqAo/HQ3BwsNh3njp1Cg0aNEBQUBC3SSUNBB5AfX19btNE+Lrl5OSgXbt26NKli9QMb+HnwYYNG3DlyhUUFRXh9evXKC4uhru7O+bNm8cJptjZ2UFWVhZTpkyRSvukBTPa/iLCHfbKlSs4efIk/Pz8YG5uLpbvIgg37N27Nzp06FCr9R+ysrJgZWXFGW6XLl2CnZ0dlxsj6QT9ry281q1bB21tbbGF/IEDB6Curi6iOigNfvjhBzRv3hyamppo2rQpJk6cyBneM2bMgJ2dHRfKaWRkxO3USNpgi4iIgK2tLXbs2MEtTnNycqCvrw8XFxfk5OSgrKwMw4cPx9KlS7nPSTqkCai6LoIiroKd3qlTp0JeXh6bNm3C9evX8fLlS7i6uqJHjx5S2RSofj8+fPiAJ0+eIDExEdbW1vDy8uK8MsLvFd55k2SumOC+fPz4EV5eXnB0dMT69etRWVmJ169fY/To0ZCVlUW7du1gZGQES0tLqQhoAMDevXuhqKgINzc3ODo6okmTJpgwYQIePnyI4uJixMfHQ09PDzo6Omjbtq3EF1zC9+fo0aNYt24dduzYwYV3Z2VlQV9fH9bW1khISMChQ4fQp08fqZZC+DOio6NhZmbGeelnzpyJn3/+WeLeIuHr9uHDB5SUlHBzWV5eHq5evQpfX1/Y2dmhU6dO4PF48PX1lWibvsabN28QGxuLt2/f4s2bNzA0NORyJN3d3aGvr49ly5ZJRf22rlJ9jF2/fh35+fki89WKFSvQtWtXkbD4oqIiLF++XKolJG7duoXk5GTuOVRWVoazZ89CV1cXnTp14t6Xm5uLoqIiqYYGfw3h+TQ+Ph5OTk4YMWIEPn78iL1798LQ0FCiYZuZmZmws7PDmDFjUFBQgIMHD6Jhw4YICwsT6/MODg7g8XgICQmRmrdZWMXSwcEBrVq1wuXLl8UigAR5p5KccwVaEUDVs/rRo0do0aKFSD7wp0+fYGNjg02bNgGo2pgdN24cF831b4IZbX8B4Y4aFhaG1q1b4927d8jIyIC/vz9MTEy4kJyKigrExsbC3t4enTp1kriwx19BYLiNHj0a79+/R1FREbKzsyWeoF9ddOTcuXP48uULLl++DEtLSyxYsEAkL+zmzZswMTH5r0WP/ynCE/alS5fQpk0bnD9/HteuXcOBAwegpKSEIUOGcO9JTk7GsmXLsHjxYomKyAgzZ84cNG/eHCdOnBB7wAkMN21tbVhZWaF9+/ZSDR1aunQpNDQ0cPnyZbHCmREREWjVqhXU1NRgamoKW1tbqSjQCZ/7xo0buHnzJhdCUlpais2bN8Pa2hre3t7cPQwODhbJX5Bm+G1ubi5GjBiBjh07YuPGjdz7Tp48iZ07d4rUFJN0OIcg90rwwAOqivRaWVkhKCgIRUVF4PP5yM/Px40bNyS6kK7u9Z8+fTpat24NNzc3ODk5wdjYmItuyMjIgJWVFbegmTlzZp2Yb4GqBXajRo3QuXNn9OjRQ0xASBIIX7fo6Gh07doV7du3x7Bhw8S8jxcvXkRiYiJMTU2hp6cnJq4lqbY9ffqU2+QRbNpFRERg4MCBXP7w1KlToaKiAnt7e4nkEX0P7N+/H5qamvj06RPKy8vx6dMnNGvWDNbW1pg0aRJ37f744w+oq6uLjF1p8/r1a+jq6kJWVhYxMTHc8YqKCpw9exZ6enpwcXGptfZ9i+o1c52cnDBr1iysXr0aSkpKEo8kEN5Qz8/P50SLqhtuYWFh2Lp1q8RDIr/1/CssLIShoSE6dOiAzMxMkfc9ffpUopvsmzZtgqqqKhISErhjT548gY6OjojwWm5uLszNzTFgwACsWrUKrq6u6NChg1TKvEgbZrT9DXJzcxEcHCyS3JiZmckZboKaIw8fPkRsbKzUFl1/haysLNjY2GDIkCEiu3KSWkgLD+zw8HDo6OggLi6OkxyeM2cOTE1N8cMPPyA9PR137tyBu7s7nJ2dpaY+FB8fj4CAAEyaNEnk+PXr1yEnJ/fN/DBJTwB3796FsbEx189yc3Nx48YNrFy5khMOKC0txfz587FixQqJqrwJe574fD7KysrQp08frn6eAOHvvn37NlJTU3Hy5EmpjAHhvjZz5kzo6elBW1sbioqKmDZtGl6/fo3y8nLExcXB2toalpaWcHV1lXjpDeF+fOHCBSQlJeHWrVucUt6HDx84wy02NvarbZFUaQvha/bgwQPo6uqKLdy3b98ORUVFkVqOkqR6mM2OHTugpaXFFXdevXo1GjVqJFKU99q1a2jZsiUmTpzIHasL8y1QZRj5+PggODhYJI9Y0syZMwfNmjVDXFwcoqKiMGLECDRq1EgsfxmoWgBZWFiILLZrGkFfO3jwIExNTZGQkCCiehcYGAhfX18ubDksLAzJyckSlzKvy+Tk5HAh8ILr8ObNG8yfPx/dunWDsrIy5s+fj/v372Pz5s0wNjaWeNjttygqKkJiYiLat28PV1dXkdcqKyuRlpYGJSUl9O7du1ba92cIz4PTpk1Dly5dcPv2bamF4wobbgUFBTh69ChkZGQwZswYbNq0CREREdDR0RETRKtpBNfh3LlzWLhwISZMmIDMzExOQbuwsBAGBgbo0KEDrl+/LrV0mlu3biEkJATGxsaIj48HUCWSZWJiwhm2gvn+5s2bsLCwgL29Pdzc3KQWpSJtmNH2F9myZQtkZWVhbm7O1agQkJmZiYCAAJiZmWHPnj0ir9UlC//KlSsIDAyUqiTrmjVr0KJFC1y8eFEs9CwmJgZdu3YFj8eDhYUFOnbsKLW6QC9fvsSQIUOgoqIiUnNK0MZ58+bB1tYWnz59kvo9fPbsGSwsLJCQkICLFy9i9OjRMDU1hZmZGWRlZbF9+3axz0iijSNHjsSgQYNE5Nw/fPiAFi1acHV3hO9TcXGxWNkBSbXta6xcuRLq6upITU3FjRs3sHPnTjRt2hSBgYHIz89HaWkpjh8/juDgYEycOFGiXtPqoaR6enrQ1dWFubk5xo4dy80hHz58gJeXF5ycnLB06VKpjs29e/fiwIEDyMrKQrNmzbgwFOGcXHNzc6kUgQ4KCkJ4eDiA/9yPWbNmcUIe+/btg5KSEtfvCgoKuPCY+/fv16l5VpjKykqpLhpevXoFGxsbEcP2zZs3mDx5MlRUVERk3wXXLCYmBvb29n9at/CfcvToUSgoKGD16tViO/OhoaFo27Yt5s6di1GjRqFJkyZSk1eva+zatUvk77t370JRUZHLT6uoqMCXL1+wdOlSuLu7Q0NDAw4ODlBVVa3RHNy/S15eHnbt2oUWLVpgxIgRIq9VVFTgwoULUk97+KsIxmdUVBT09PSkHrpZ3XBLTU2FjY0NDA0NYWJiIrXcv/3790NVVRV9+/ZF9+7d0bx5c6xYsYJ7phcWFsLY2Bht2rSReNQA8J+1xd27dxESEgIjIyPEx8fj2bNnMDExESsTAlRtIBQUFEhVCV3aMKPtL3Lnzh306dMHcnJyXOK2cEhaVlYWBgwYAG9v79pq4l9CkgIaX/seDw8PrtaUAOHrVlRUhCtXrki9nhJQZcR6eXmhUaNGYopzK1asQIcOHaSuhgRULbIGDhwIGxsbyMjIICQkBEeOHEFubi66d+/OJe9LmmPHjkFJSQmjRo0SMdw8PDy44qTCv+Hy5csIDw+XWAL3f2PYsGGYOnWqyLGTJ0+iUaNGWLFixVc/I+m+tnjxYmhra3OSxJMmTYKqqio8PDy4MODc3Fy4u7tj/PjxEl/gC85/9+5d8Hg8zgjy8vKClpaWSEhQWVkZ5wWUNAcPHuTmBUH/mTx5MqKjo3HixAk0adJEZKNgx44dWLlypcj4rKuGmzR58OABFBQUxPKsc3Jy4OTkxI0D4X7m6emJHj16SGyuKy4uRq9evTB9+nSR48JjT7Bx0alTJ9y4cUMi7ajrPH/+HI0aNYKbmxt37PHjxxg/fjzU1NTEBM2ePXuG5ORkWFhYoEWLFlIxioRl4Hft2oWdO3dyoZr5+fnYtWsXWrduLWa41XX4fD5+/fXXWut7wobb+/fvUVJSgnfv3kntWXrp0iVoaWkhLi4OQNUarWHDhtDW1kZ0dDTn9S0oKICNjY1UN1UuX76M8+fPcx63cePGoW3bthgyZAjGjRuHsWPHYtSoURg2bJjIpsf3WDj7r8CMtq/wtYVcZWUlHjx4gM6dO6NNmzZcyILwex88ePBddBRJq9AJKCoqgpmZGRYuXAhAdFFVUlKCa9euieViSeP6Cbfz+vXr8PLyQtu2bbFv3z6Ulpbiw4cP6NGjB/r27SvRRbTwb718+TKSk5O5Hay8vDxcuHCBCw0T4ODggNWrV0usTQIE9+rMmTNQUlLCuHHjuBCNDRs2wNraGjNmzOCOFRQUoF+/fnBzc5PKPaz+HcXFxXB0dOSMtvLycm5sRkZGwsLCAgUFBRI10pYtWyby9/Pnz9GrVy9usXXs2DEoKyvD398fpqamGDx4MOdxy8vLk0r9OqDqAb1v3z5ERUVxxx4+fIguXbqgZcuWOHToEI4ePYpZs2ZBTU1NoovB6r9169atXNHnPXv2gMfjQVZWViSnIT8/H66urpgxY4bE2vU98PjxYy4yYOnSpdzGSu/evREUFMSFogvo2rUrgoKCuL/5fD6KiopgZGSEK1euSKydnz9/hoGBAXcPhZ8DlZWV3N9FRUVSKxZcVzl37hx0dHREQglzcnIwZcoUKCkpfXVR+vHjR6kItgjG6r59+9C6dWuYm5vDwcEBrVu35sJ/CwoKsHv3brRt27ZOhkPWZbKysmBrawtPT0+pisgAVaHwgvn08ePH0NPTw6RJkxAREYGGDRti0aJFnKEm6eeT8LN9xowZaNasGd6+fYvbt28jJCQEurq6UFNTw/z58+Hr6wsfHx+MGTMGo0aN+ld61qrDjDYhqoeH7Nu3D2vXrsWxY8e4Y9nZ2XBwcIC+vj6nLlS9o3wPhpskEc5FGDFiBExNTbmQK8G1uX//PiZPnlxrUs7CE09GRgZXtFJfXx8BAQHo1KkTl2NR0/fza2ILWlpa0NPTg5ycHIYPHy6imFRYWIjs7Gz06tUL1tbWEp+YhBdVmZmZiIqKAo/HQ2hoKHct5s2bBzs7O+7hbGVlBXNzc6nEkQvfj4yMDO47o6Ojoaqqyu2WCn7HwoUL0bVrV4m26cyZM7C3txe5dnw+H6dOncKbN29w9epVaGtrY926dQCqvEhNmjSBi4uLSIK5pOeOV69ewc3NDTweD4GBgSKvZWdnw8/PD5qamjAwMICVlZXUZbljY2Ph6OiIkSNH4tmzZ5gzZw5kZWVx4sQJPHz4EA8ePICbmxtsbGzqxQP6W1y4cAH6+vo4cOAAVzxe0I9iYmJgbm6On3/+mRMKKioqQufOnUVy1yQVQiQ4r/CGnK2tLcaMGcP9LRgnt2/fxsaNG0VCcus76enp0NTURK9evbhjjx8/5gy33bt3A6i6ztIaA4J7Kij6vHHjRgDA+fPnwePxoK6uzhn+BQUFSExMhJmZ2VdL0zC+zdWrV9GlSxeJl8gR3M8bN27g5cuXePHiBe7cuYOSkhK4u7tzYekAoK2tDVVVVS5/Xlrh3m/evMH06dNFxMLu3r2LyZMnw9TUlNOQqM6/PeKCGW3/j4eHB4KDgzm1qoiICCgqKsLGxgY8Hg9BQUGcgEd2djY6duwIQ0NDkeKC9RXhheb69esxcOBAzkN06dIlWFhYoE+fPigsLERFRQXy8vLQp08fdOvWrVYN3OoeNx8fH+jr64uEg9W0BHx1sYWNGzeiefPmOHfuHD59+oQjR47Azc0N/fr1Q1paGoCqvEB3d3e4uLhIVR1v+vTpaNu2LSZPnoyuXbtCTk4O/v7+3Ovnzp1DdHQ0QkNDsWzZMokKoggQvmeRkZGwtbXF+vXrwefz8fDhQ3h4eMDS0pLL3SkuLoabm5tI3qIkqKio4Np29OhR7rjA8J89ezY8PT25/rR48WJ06dIFkZGRUhsDWVlZGD16NHbv3o2ePXtCV1eX26gSvq5//PEHXr16VWthrgkJCXB2dsbw4cNx9uxZhIWFoXHjxmjevDlsbW3h7OxcZ1Qia5OhQ4eiefPmaNKkiZinLDQ0FGZmZnBxcUFwcDA6d+4MU1PTr47NmlyECc515swZrF27lss7nDdvHmxsbLjFvoDw8PB6rRIpoPo9SE9Ph7a2toiwh8BwU1NTE/E8S4qkpCQurBuoMsZmzJjBCXS9ePECOjo68Pf3R79+/dC0aVNuw6ywsLDWZf2/VySdkiHoawcOHICmpibmzJnDeelzcnJgaWnJOSpevHgBHx8fhIeHSzUncffu3dwm+rVr10Reu3PnDoKDg2FsbIyVK1dyx/9tgiPfghlt/8/69evB4/EQERHB7XZcvXoVfD4fycnJUFFRwejRozkX8ePHj9G2bVsMHz68llteu1QvBB0aGgp5eXl4enpyIRP79u2DjY0NmjdvDgcHB1haWsLKykqioiPVB/C3vqN6/T1B6NqJEydqvE1fE1sYNWoU/Pz8RN4nSEQWvPfZs2dISkqSqBJj9etz7tw5qKiocA/t0tJSHDx4EIqKiggICBApUC2MtBbRc+fORbNmzXD27FmRXcn09HQMGzYMsrKysLKygqmpqcQ9gMLX7sGDB+DxeBg3bpzIe6ZMmQJHR0eurYMHD8bGjRullmMKVKkv2tjY4PLly7hw4QKMjIxgbW3NhaQJDMraevgJf29cXBy6du2K4cOH48OHD7h//z5SUlJw5coVqee+1iWEvfTr1q2Duro6dHV1sXfvXrHQwu3bt2PSpEkYOHAgpk6dKvFyJYJ27d27F0pKSpg7dy7n/Xv16hVGjhyJDh06wMvLC0uXLoW3tzeUlZXrbQ6bAMF1u3nzJo4fP46DBw/i/fv3SEtLg76+Pnr27Mm9NycnB2PGjEHr1q2Rn58vkbHK5/Px9u1bNG/eHH379sWlS5e4186ePYtLly4hLy8P9vb2GD9+PADgxIkT4PF44PF4YotsRt3jyJEjUFBQwC+//CLieLh9+za0tbWRmJiIJ0+eICoqCi4uLlL3hOfk5MDb2xsyMjI4fvw4ANH5/v79+/Dx8YGXl1e9MdYEMKMN/5k0t23bxoUN+fj4iIR3HD9+HKqqqhg9ejTncXv58mW93ukVJiwsDDo6Opg5cyYCAwPRqFEjeHh4cLHZ7969w7Jly/DTTz9h/fr1EjVAHj16xC1Ao6Oj/2vdN+FBf/XqVfj7+0NLS0vELV8TfE1sYdSoUfDw8AAgunBfvnw51NTUxPJSJNHfPDw8kJGRIXLs2LFjaN26tZi3RTBGwsPDJS5D/C2eP38OBwcHEYU84XtYUFCAffv2YeXKldi8ebNUPIAAsHnzZpw4cQJJSUlQVlZGcHAw99qWLVtgY2MDCwsLWFpaihRpl3SOqbCIjIuLC7p37w6gapPF2toatra23Htqez77WtFbT09PZGdni7yvPoagC1+bgwcPIigoCI8fP0ZgYCDat2+PrVu3itxrAcI795IeA+fPn/+mJ6iwsBCxsbFwcXGBvb09hg4ditu3b0u0Pd8LSUlJaNasGVd30MnJCatWreIMN2GP25MnTyRa+FnA9evXYWJigkGDBnFRHwLOnz8PBwcH/PHHHwCqwtQFwhD37t2TeNsY/zslJSUYNmwYZs2aBQBc3d5Fixbh9OnT6NmzJ9TU1NCuXTuoq6uLKM5Kgm/N5Tk5ORgwYADU1dW5daTw8+nJkydSywOvS9R7o616h9myZQt4PB7atGnD1T0RdIjk5GQ0a9YMgwcPFtndr+2FjrSJjY0V2R29cOEC1NXVReo8paamQkNDAwMGDPjmTmpNXzc+n4+srCzweDzs2bMHISEhUFRU/Et5c8JtSUlJQUhIiNhC8Z+0S5jExES4u7vj5cuX+PXXX8Hj8cRqZO3ZswcdO3aUSohJYGCgmJfl999/R8OGDcXixu/fvw91dXXweDyJ1nYSpvoYvX//PpSVlbmadcKUlpZKrd6ZcLtWrVoFDQ0N3L59G1++fMGvv/4KBQUFkfphCQkJiIqKQkREhNSKtB8/fhxeXl5ITk4GUBXuoqenx9XZS0tLg729Pdq1a/fVBX9tUN1wc3Z2hqenZ72VgQdE+9rt27dhaWkJW1tbLozJ19cX7du3x86dOzkveGhoqFR3yCsrK7F9+3Z069YNQNXi8MiRI/Dw8EDv3r059U+gyqtbXYSqvpKVlQV1dXVs3rwZHz9+xOvXr+Hn54du3bph7dq1SEtLg66uLhwdHaXSnsrKSu7eXL58Ge3atcOIESNw4cIF7j2C8DWBlyYyMhKDBw9muYnfAcXFxbC1tUVoaChyc3MREhLCiVDp6enh559/xm+//YZDhw6J1PSVBNXz0zMyMkSMxOfPn6N3795o3rw5txlQ3zUk6rXRVl29T/CwE6iWhYeHi3k6Dh48CHd393rXUQQ8fvwYrVq1wrhx4zjluytXrkBLS0tMAOLUqVPg8Xjw9fUV8eRIeldk5syZkJeXh6KiIpfr8WffWX2RuHLlSonmWAiLLbx8+ZKroXTs2DE8efIEnz59gqurK/r16yfRa1XdYFi9ejVSUlJQVlaG8vJyBAQEoHPnziLF5N+8eYPx48cjPT1dKpsVwuNs//79ePLkCZ4/f4727dvjl19+4a6P4N/jx48jJiZGqhspt2/fxvTp00WU3SoqKjjDbcKECV/9nKS9Hnw+H2PHjgWPx0PTpk3x448/Ijs7GzExMfDw8OCKpCYnJ6Nr1651yigS7vcJCQlwcXHBjBkzUFpaWq92Vaszbdo0DBkyBJ06dYKamhr09fU5eX8/Pz8YGRkhNDQUbm5uUFVVlVoIaUZGBsaPH4+5c+fCwsICq1evRq9evdCvXz/0798fkyZNQps2bXD9+nWptOd7YseOHTAxMUFeXh7Xt1+/fg0vLy907doVRUVFOHPmDIyMjKRSQFs4zHXmzJkwNTVFgwYN4OrqyoVKFhcXw9nZGXJycnByckLjxo2lUruLUTMkJiZCQUEBysrK8PDwQGJiIgAgJCQErq6uUlfxnj17NvT19dGuXTsoKSlh+fLl3DP8xYsX6NOnDzQ1NZlnHvXYaPuaoEFsbCzXWbdu3crluFU33ATUV8NNIE07ZswY3Lt3D0+fPkXjxo25wuJlZWWcnLShoSE0NDQQGBiIT58+SbRdgt3B+Ph4yMvLQ1ZWFjt37vzTorHC/WDjxo3g8XhiNdskgbDYwtWrVzFjxgwoKCigVatWMDExEcn5k9QitXr/NTc3h6amJpfHdvHiRQwePBjGxsZYsmQJdu3aBVdXVzg5OUmleKXw746IiIC2tjbWrFkDoGqBqqGhgfPnz3PvKy4uRv/+/REQECCVhT2fz0daWhp4PB4UFBTE6ihVVFQgKSkJSkpKGDlypMTbI2iTMIJahNHR0bC3t8fEiRMxZswYGBsbY+nSpQCqxk1d8bIJI/xbpk2bBicnpxoXBvqe2LJlC1RVVZGZmcl5ZNzc3GBra8vNWREREfDw8MCQIUOkKtayZs0adOzYESkpKRgxYgQsLCwwevRobi7JzMyElZVVjUUv/JvYtWsX9PX1xcoI5eTkgMfjfbXovaRJTU2FnJwcfvnlF5w+fRpHjhyBhoYG+vTpw9WpffnyJRYvXoyYmBgRBVzG98GdO3e43H3BWiA4OBi+vr7fzFmXBPPnz0eLFi1w7tw5FBYWIjQ0FDweD7NnzxYx3Ozt7dG3b1+ptauuUm+NNgHCggbCUvVA1W6EoPNIow7K90RWVhasra0xevRoPH36FNHR0ZCXlxdRm8rPz8eECROwfft2yMjIYPv27RJpy8WLF7kF3po1a7Bz507k5eUhIiICcnJyiIuL++qiVNjg2LBhA5SVlcWK0tY01b16Xbp0gaenJz5+/IibN28iKSlJ4qIj1Tlw4AD3/65du6JVq1bcfczKykJkZCTU1NRgaWmJbt26SUXWX5j58+dDXV0dV69e5Qx/Pp+P4cOHQ0NDA+PGjcPkyZPh4uICU1NTqbdv+fLlXEmE6h7aiooKJCYmonv37lLb5Dl9+jQ2b94MoOphHBISgoCAAOTl5WHDhg2c943H4+H8+fNSadP/iuAeRkVFoW3btrWWR1kXiIyMhJOTEyorK7m+JFjM6OnpcXMXn8+X+PzxtXzJzp07Y+DAgQAgFtY9e/ZsWFpa4u3btxJpz/fMo0eP0KhRI0RGRoocf/LkCczMzESEQKSFoK8Jc/36dairq6Nnz54iaqX12fP9b+HevXuYNWsWVFRUpOrNunfvHvr27culOhw8eBCqqqrw9/eHjIwM5syZw23UvXv3rt46SoSp10bb1wQNANEHncBwE47HZ1QhMNzGjh2L5ORkhIaGokGDBvjxxx+xYsUK9OjRA/b29gCqHugCpama5OHDhzAzM8PIkSO5ekXChSnDwsIgJyeHxMREboExduxYTtkS+I/Btnfv3hpv39f4lthC9eKV0tghf/LkCXg8nkiZAxcXFxHDDagq4Prx40epeNiEyc3NRc+ePTmD/8WLF0hNTcW4ceOQlJSEwMBA+Pr6olevXpgyZYpERUf+7IGxYMEC8Hg8rFq1SsyzK/w5ST90KioqEBMTAx6PBz8/P84TaW1tjblz5wKoWlCHhoZCS0uLExKoy/D5fPz666/1VmVQMObmz58PW1tbTlhEsDmRmpoKRUVFdO3alYt2EP6cpPhWvqRAEh4ADh06hKlTp0JVVZWFRv4J27dvh5ycHCIiIvDw4UO8ffsWkZGRaN26da2UFYqIiICDgwOAqn4knDrSqFEj9O7dmyvrw/i+uXbtGry8vGBsbCzxObb68+/du3fYsGEDCgoKkJ6ejlatWmHt2rUAqnLteTweJk+eLNVnaF2nXhltf0fQoKioiHsoHj16tF7KS/8VBKGSgjynX375BWZmZujQoQP69+/P7ZJ07twZixYtqvHvLy0txbZt26Curo7GjRtzcsPCoSRhYWFQUFBAUFAQnJyc0KZNG+5+xsbGQkVFRWoGm4C6IrZQUVGBiRMnwsfHR8RL1KVLF+jo6ODs2bNiIWnSnDQ/fvwILS0tREZG4ty5c/D09IS9vT1sbGygra3NGZvC41PSBltCQgKmTZuGGTNmcIVuAeDHH39EgwYNsHr16j8NyZUGN2/ehJubGzp37ozJkyfj+PHj6N+/v4jgjaTDlRk1y61btyAjI4OoqCiR48nJyRgyZAi6d++Onj17SiWE9M/yJYcMGYIrV66grKwMwcHBcHd3Z7ko/wU+n4+dO3dCSUkJOjo6MDQ0RKtWrSSu3Cfslf3w4QM3b12+fJkT9BK8D6jKK7axsYGtra1YzVHG90lxcTHS0tLw7NkziX6P8DP04cOHePHihUgY5qRJk+Dr68ttSs2YMQPdu3eHi4sL8+YKUW+Mtv9F0GDBggUSXwz+G8jMzISNjQ3Gjh3Lhb8Ie4kE+Ug1XZxRcK9SUlKgpaWF9u3bw8/Pj5sIhCeEhQsXYvjw4SKlHL58+YKAgAAkJSXVaLv+KtIWW/iWsXXw4EE0adKEy1UQ0L17d8jJySErK6vG2/J32Lx5M5o2bQplZWVMnz6dE0bx9vYWq3En6ck9PDwczZo1g7e3NywtLWFiYgJPT0/u9aioKMjKyiImJqbWldTevHmDbdu2wcrKCk2aNEGbNm0wc+bMWm0T45+xZcsWyMrKYvr06bh27Rqys7PRt29fxMTE4O7du+DxeCLCQTXJ38mXXLJkCYAqmf9v5YQzxHny5AmSk5Nx9OhRiRpFR48eFfGq7Nu3D/b29mjbti0GDBiA+Ph4rFq1CgoKCti9ezcqKirA5/MRGRmJ+fPni9UEZDD+DOG5Y8aMGTA0NIS6ujq6dOnCeda6d+8Ob29vAFVrs4EDB+Lo0aNfPUd9pl4YbXVd0ODfQFZWFmxsbDBkyBDOOLt9+zYmT56Mli1b1ujCv7rx8eHDBzx58gSJiYmwtraGl5cXt9ss/F5ho7uuCBrUhthCRkaGmEdv+PDhcHNzE8tFCQkJqRMlLZ4+fSoSyldZWYkePXqI5YFIktTUVLRq1YrLAysuLkZiYiLMzMwwatQo7n3Tp08XEWupbSoqKvDDDz9AXl4eGhoaUikjwZAMfD4fSUlJ0NDQQKtWraCtrQ1ra2uUlJTgyZMnMDAwkKiK39/Jl6xexoRRN3jz5g3atGmDwMBAZGdn486dO1BWVkZ0dDQWLVqEoKAgKCgoIDg4GCtXrgSPx4OZmRksLS3RpEkTFubK+FsIr8F27doFTU1NHDx4EAkJCQgPD0fDhg2xadMmJCcng8fjoX///rCwsIC5ubnEa5l+j9QLo01AXRc0+N65cuUKAgMDuUH68eNHnDhxokZrfQhPADdu3MDNmzc55arS0lJs3rwZ1tbW8Pb25gZ8cHCwSKHsunY/pSm2kJ6eDiUlJXTq1AkrVqzgvis5ORkWFha4evUqANGCvEDdqUUoiH3v16+fyKQuCaoX7ty6dSt0dHRE7k9+fj5WrVoFGxsbEQW16p772kL4+0+fPo0nT57UYmsYNcWLFy9w6dIlpKWlcf105syZMDIyEhPUqin+jfmS9ZXMzEzY2toiODgYkZGRmDZtGvfa58+fERsbC0VFRezYsQNZWVlYunQpli5dylQiGf8zqampGDNmDFasWMEdy8/Px5o1a6CoqIjdu3cjKSkJ3t7e+OGHH6RWy/R7o94YbXVJ0ODfjCRFNIQXoDNnzoSenh60tbWhqKiIadOm4fXr1ygvL0dcXBysra1haWkJV1dXaGlp1fn7KCmxha8ZDSdPnsTy5cvRpEkT9OjRA3PnzkVZWRns7e3Fwg3rEnw+H6mpqejXrx/c3d0lKmkurIonCBtNS0uDgYEB0tLSRN77xx9/oGHDhiKhHIL21gXqSjsYkuH333+Hr68vmjVrJhUvCMuX/HeQmZkJe3t76OrqIjg4WOS1T58+ITAwECNGjKil1jH+Tbx+/Rr6+vpQUlJCdHS0yGu5ubkYNGgQQkNDAYhGQdX1dVttUG+MtroiaFAfkPQiceXKlVBXV0dqaipu3LiBnTt3omnTpggMDER+fj5KS0tx/PhxBAcHY+LEifV2x0bYK/np0yex3JKcnBxERkbCzMwMZmZm6NWrF3g8Xq1ITP9VSktLkZWVxf02SYzRX3/9FUFBQQCAKVOmQEtLC3l5eXj27BlMTEzg4+ODR48ece9/8eIFrKyscPbs2RpvC4PxZ5SXlyMrKwthYWEiiriShuVL/ju4efMm9PT0YGRkJGbwz5o1CxYWFtzmGIPxT7h58yb09fXRoUMHsXSZ0aNHw93dvZZa9n3BAwCqJ8TFxVF4eDhVVlbShAkTyNXVlXr27Ek+Pj4kIyNDiYmJ3HsBEI/Hq8XWMr7F8OHDqVWrVrRixQru2KlTp6hfv360cOFCmjp1qthnKioqqGHDhtJsZq2Bqs0YatCgARERLVmyhH777TcqKSmh1q1b065du0hRUZGIqq4Ln8+nBQsW0KlTp6hBgwaUlpZGMjIytfkT/hJ8Pp/7jTXJb7/9Rh4eHmRjY0OPHj2itLQ0Mjc3JyKiixcv0oABA6hLly7UrVs3MjU1pUWLFlFubi5duXLlu7hujH8f5eXlJCsrK/XvrayspOnTp1NsbCwpKyvTo0ePSElJSertYPzv3L59m7y9vcnW1pYmTZpEVlZWREQ0YcIEevToEf3222/UuHHj2m0k41/BrVu3yM/Pj6ysrGjKlClkZWVFBQUF1Lt3bzI2NqZffvmltptY56lXRhsR0bNnz6isrIwMDAyIqGrh5+bmRh07dqTo6Ohabh2jOtUX5iUlJdSjRw/q2LEjrVixgioqKoiIqGHDhjR79mw6fPgwXbhwgeTl5euNkfZnREZG0pYtW2j27Nmkr69P/v7+ZGZmRuvXr+fGgIDnz5+TtrY2NWjQgCorK+udASJs7A4cOJCOHDlCnp6eFBcXRwoKCtxGTkZGBsXExNCNGzdIRUWFWrZsSUeOHCFZWdl6ed0Y9RPhjc0zZ86Qvr4+6erq1nKrGP8L169fJz8/PyoqKqIuXbpQo0aNaO/evXTq1CnOiGMwaoLr16+Tj48P5ebmkp2dHcnJyVFOTg5dvnyZ5OTkmMPkv1Dz29R1HB0dHTIwMKDCwkI6f/48DRw4kN69e0dRUVG13TRGNYQNtmvXrlF5eTkpKChQ3759acuWLXTz5k1q2LAhN8CbNGlCampq1Lhx43ppsM2ePZvWrl3L/Z2SkkKHDx+mPXv2UFBQEPH5fCouLqbff/+dBg8eTA8fPiSiqsUXEVHr1q2pQYMGxOfz653hwefzicfjcf2tR48etGzZMtq9ezdNnz6d3r17RzwejyorK8nOzo527txJWVlZdPDgQUpOTiZZWVmqqKiod9eNUX/h8Xjc3NG9e3dmsH3HWFtb086dO0lGRobOnDlDenp6lJmZyQw2Ro1jbW1Ne/bsIUVFRcrLyyNXV1fKysoiOTk5Ki8vZwbbf6HeGW1EVYvUa9eu0eLFi6m8vJwyMzOpYcOGVFlZWdtNY/w/wuF9s2fPpokTJ1JcXBwBIE9PT+rWrRv5+/tTVlYWycjIUElJCaWmppKmpma9HPSfP3+mCxcuUFJSEm3ZsoWIiFRUVMjPz4+cnZ0pJSWFfH19aenSpXTlyhV6+/YtBQUF0b1798SulyRCDusywpsDa9eupZ9++onGjBlDU6dOpQMHDtC6detowYIF9P79e84ou3DhAqmpqVGbNm2Ix+MRn8+vlxsFjPpNfZxr/62Ym5vT7t27qX379jR69GhmhDMkhpmZGe3fv5++fPlCWVlZ9OjRIyKiWgnx/t6od+GRAsrKyuju3btkaWlJDRo0qFc5T98TUVFRtHbtWtq3bx8ZGhqSpqYmERGdP3+e1qxZQwcPHiRTU1MqLy+nBg0aUGZmJsnKytYrF7vgt757946Cg4MpNzeX/P39yd/fn3Jzc0lBQYEGDBhAnTp1ovnz59OnT5/I3d2drl27Rl5eXrRjx47a/gl1gunTp9OOHTto+vTp1K9fP9LX1yciokOHDtHgwYNp7Nix5OnpSStWrKCnT5/SjRs3iIgtXBkMxr+H0tJSkpeXr+1mMOoB169fpwkTJlDbtm1p7ty5ZGRkVNtNqvPUW6NNGEkJGjD+GS9evKChQ4dSWFgYDRs2jIhE8ygKCwvpxIkT9OzZM1JSUiJ/f39q2LBhvTPAhfOoLl26RBEREVRSUkKTJ0+mkSNH0ufPn8nW1pZWr15Nffv2pcLCQgoODqaIiAgyNDSst31feNzv37+fQkJCaN++feTo6EhEojluR48epbFjx1Lz5s1JXl6ezp8/X+82BxgMBoPBqEkyMjIoPDycdu3axW3KM75N/VnZ/gn1ddFa16huPBcVFdG9e/c4pUOi/3g1ysrKSF5engYPHixyjsrKynplsBERZ7CFhYVRdnY2lZSU0L1792j+/PlUXl5Ovr6+pKqqSosXL6bPnz9TXFwcFRcXcwZbfRPP2LRpE40bN06krwm87gKDTYAgx69v376Unp5ORUVFZGZmxrzzDAaDwWD8Q+zs7Cg5OZl5d/8izFph1AmEDbYDBw7Q06dPqXHjxqSpqUmvX7/mEt4F/6amptKSJUvE8hDrk/EhzNatWyk+Pp7mzJlDx44do/v375OOjg6tW7eO9u7dS5s3b6aysjJavHgxNWzYkNLT0+ul6EhCQgIdP35crN+UlpbS58+fqaSkhDvG4/GooqKCDhw4QAUFBaSvr08WFhbcdWMGG4PBYDAY/wxmsP11mNHGqHWERUdmzZpFoaGhdOjQIWrVqhU5ODhQZGQkXbx4kQtFKykpodjYWHr48CHzkv4/2dnZZGxsTNbW1qSmpkZaWlqcIMmcOXPo0aNHdOHCBTp79iylpKRwaof17fr169eP9u7dy6mkCdDX16fff/+dTp8+TXw+nzteXFxM8fHxdPjwYZHz1LfrxmAwGAwGo3ZhOW2MOsOCBQtozZo1dOzYMTIwMCBVVVUCQCNGjKCzZ8/SoEGDSEFBga5fv065ubl0/fr1ep9XJPjtixYtoqSkJEpPTydFRUWu2O6pU6do0KBBpKurS0uWLKG+ffsSUf3M4xT+zenp6eTv709Dhw6lJUuWEBHRiBEjKDk5mdasWUMWFhYkJydHP/zwA338+JEuXbpUrzySDAaDwWAw6hb1a9XGqLN8/PiR0tLSaNWqVWRnZ0dFRUV09uxZmjBhAg0bNoz69u1LJSUl9ODBA+rQoQPduHGD8xbVV4ON6D85fv3796dbt27RsmXLiOg/0rlfvnyhHj160KBBg6h3797c5+qbwUb0n9+8Y8cOOnToEPn7+9OxY8do5syZRES0e/duGj58OM2dO5ecnZ1p5MiRVFhYSBcuXCAZGRlWEoTBYDAYDEatwZIyGHUCHo9Hd+/epXv37lFaWhrFxsZSTk4OVVZW0tGjRykyMpImTpwoIv7AhCD+g6mpKf3yyy80btw4KigooGHDhpGamhqtW7eOLCwsKCYmhoio3omOVKe0tJS2bdtGTZs2pbi4OJKRkaHt27cTj8ejhQsX0qZNm+jmzZuUn59PcnJyZGdnx0RHGAwGg8Fg1DosPJJRZ4iLi6Pw8HCqrKykCRMmkKurK/Xs2ZN8fHxIRkaGEhMTuffW55DIbwGA9u3bR8HBwSQrK0s8Ho+aN29OV65cqfdhpET/6TM3b94kR0dHSkpKom7dutHy5ctp586dNGjQIFq4cKHY5+pjKCmDwWAwGIy6BTPaGHWKZ8+eUVlZGRkYGBBR1YLZzc2NOnbsSNHR0bXcuu+DV69e0atXr6iwsJCcnZ1JRkamXnqKvmakAqCysjIKDg6miooKSkxMpFevXlF8fDzt2bOHunXrRmvWrKmlFjMYDAaDwWB8HWa0MeokhYWFdOPGDVq8eDE9ffqUsrKy6p3RUVPU95DItWvXUoMGDcjHx4eUlZWJiGj79u00ceJESk1NJVtbW3r16hWtWrWKXr58yYVLMhgMBoPBYNQVmNHGqHMAoHPnztHy5cupvLycDh8+TLKysvXe+GD8fYqLi2nWrFm0YcMG6tmzJ1lbW9OCBQuIiCggIIDevHlDe/fupSZNmtDHjx+padOmxOPx6n0oKYPBYDAYjLoFM9oYdZKysjK6e/cuWVpaMiEIxj/m4cOHFB8fTwcPHqTy8nIKDg6m3NxcunXrFsXExJC5uTn3XmawMRgMBoPBqGswo41R52FCEIyaoKKigsrLyykiIoJycnLo3LlzlJ+fT4sWLaLp06fXdvMYDAaDwWAwvgkz2hgMRr1A2IP2+PFjOnfuHO3fv58OHDjAvLgMBoPBYDDqNMxoYzAY9YZvhT6y8FsGg8FgMBh1GWa0MRiMegvLX2MwGAwGg/E9wBKFGAxGvYUZbAwGg8FgML4HmNHGYDAYDAaDwWAwGHUYZrQxGAwGg8FgMBgMRh2GGW0MBoPBYDAYDAaDUYdhRhuDwWAwGAwGg8Fg1GGY0cZgMBgMBoPBYDAYdRhmtDEYDAaDwWAwGAxGHYYZbQwGg8FgMBgMBoNRh2FGG4PBYDAYDAaDwWDUYZjRxmAwGIx6RdeuXWnKlClixw8ePMgKrjMYDAajTsKMNgaDwWAwJMyXL19quwkMBoPB+I5hRhuDwWAwGNW4efMmdevWjZSUlEhZWZlsbGzo2rVr3OsXL14kFxcXUlBQoNatW9OkSZOoqKiIe11PT4+io6MpICCAVFRUaOzYsZSQkECqqqqUkpJCxsbG1KRJE+rVqxe9fv2a+1xGRga5urqSuro6qaioUJcuXSgrK0ukbTwejzZu3Ej9+vUjRUVFMjY2pkuXLtGjR4+oa9eu1LhxY3J0dKTs7GyRzx0+fJhsbGxIXl6e2rZtS/PmzaOKigoJXUEGg8Fg1CTMaGMwGAwGoxre3t7UqlUrysjIoMzMTJo5cybJysoSEdHt27fJ3d2dBg8eTLdu3aI9e/bQ+fPnKSQkROQcS5cuJTMzM8rMzKQ5c+YQEVFxcTEtW7aMtm3bRmlpafTs2TOaNm0a95mCggLy9/en9PR0unz5MhkYGFCfPn2ooKBA5NwLFiwgPz8/unHjBhkZGdHIkSNp/PjxFBERwRmXwu1JSUkhHx8fmjRpEt29e5c2btxICQkJFBMTI5Hrx2AwGIwaBgwGg8Fg1CO6dOmCyZMnix0/cOAABI9FJSUlJCQkfPXzvr6+GDdunMix9PR0NGjQACUlJQAAXV1dDBo0SOQ9W7ZsARHh0aNH3LF169ahRYsW32xrRUUFlJSUcPjwYe4YEWH27Nnc35cuXQIRIS4ujju2a9cuyMvLc387Ozvjp59+Ejn3tm3boKmp+c3vZjAYDEbdoWHtmowMBoPBYNQ9fvjhBxozZgxt27aNevbsScOGDSN9fX0iIsrMzKRHjx7Rjh07uPcDID6fTzk5OWRsbExERLa2tmLnVVRU5M5DRKSpqUnv3r3j/n737h39+OOPdObMGXr79i1VVlZScXExPXv2TOQ8FhYW3P9btGhBRETm5uYix0pLSyk/P5+UlZUpMzOTMjIyRDxrlZWVVFpaSsXFxaSoqPg/XScGg8FgSAdmtDEYDAajXqGsrEx5eXlixz9//kzKyspERBQVFUUjR46ko0eP0vHjx2nu3Lm0e/du8vDwID6fT+PHj6dJkyaJnUNHR4f7f+PGjcVeF4RYCuDxeASA+zsgIIDev39Pq1atIl1dXWrUqBE5OjqKCZkIn0egePm1Y3w+n/t33rx5NHjwYLE2ycvLix1jMBgMRt2CGW0MBoPBqFcYGRnR8ePHxY5nZGRQ+/btub8NDQ3J0NCQpk6dSl5eXrRlyxby8PCgDh060J07d6hdu3Y13rb09HSKjY2lPn36EBHR8+fP6cOHD//4vB06dKAHDx5IpM0MBoPBkDxMiITBYDAY9YqgoCDKzs6m4OBgunnzJv3xxx+0bt06iouLo/DwcCopKaGQkBA6e/YsPX36lC5cuEAZGRlc2OOMGTPo0qVLFBwcTDdu3KCHDx/SoUOHKDQ09B+3rV27drRt2za6d+8eXblyhby9vUlBQeEfn/fHH3+krVu3UlRUFN25c4fu3btHe/bsodmzZ//jczMYDAZD8jCjjcFgMBj1Cj09PUpPT6fs7Gxyc3MjOzs7SkhIoISEBBo2bBjJyMhQbm4u+fn5kaGhIQ0fPpx69+5N8+bNI6KqfLJz587Rw4cPydnZmaytrWnOnDmkqan5j9sWHx9Pnz59Imtra/L19aVJkyaRhobGPz6vu7s7HTlyhE6ePEl2dnbUsWNHWrFiBenq6v7jczMYDAZD8vAgHEzPYDAYDAaDwWAwGIw6BfO0MRgMBoPBYDAYDEYdhhltDAaDwWAwGAwGg1GHYUYbg8FgMBgMBoPBYNRhmNHGYDAYDAaDwWAwGHUYZrQxGAwGg8FgMBgMRh2GGW0MBoPBYDAYDAaDUYdhRhuDwWAwGAwGg8Fg1GGY0cZgMBgMBoPBYDAYdRhmtDEYDAaDwWAwGAxGHYYZbQwGg8FgMBgMBoNRh2FGG4PBYDAYDAaDwWDUYf4Pk8uwid8Nxi4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# number of unique users\n", + "n = 20\n", + "# Group by 'username' and count the number of unique 'id' (projects) each user has\n", + "user_unique_projects = df.groupby('username')['uuid'].nunique()\n", + "# Sort users by the number of unique projects (descending order)\n", + "top_n_users = user_unique_projects.sort_values(ascending=False).head(n)\n", + "# Plot the top 15 users with their unique number of projects\n", + "plt.figure(figsize=(10, 6))\n", + "top_n_users.plot(kind='bar', color='royalblue')\n", + "plt.title(f'Top {n} Users with Unique Projects')\n", + "plt.xlabel('Username')\n", + "plt.ylabel('Number of Unique Projects')\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "ddf99fea-77bd-4f7a-a443-dd4582fca0d7", + "metadata": {}, + "source": [ + " ## Plot the Top n Users by Number of Projects in a Year" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "87da77f4-c687-4b0d-a285-9174c7017514", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAJnCAYAAAD4C5DSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAyU9JREFUeJzs3XmcjfX///HnMcZgMBliTPalCUNkp+xmyFKpj0qNkjUKoaI+GClFmw9aJEVUtKBFDSotspPKWpJ9ZxprM2Pm9fvD71zfOcYyh+Ecx+N+u82Nc13v65zX66zX63q/r/flMjMTAAAAAOCyy+HrAAAAAADgakVBBgAAAAA+QkEGAAAAAD5CQQYAAAAAPkJBBgAAAAA+QkEGAAAAAD5CQQYAAAAAPkJBBgAAAAA+QkEGAAAAAD5CQQbAZ1wuV5b+vv/++0sey3vvvad77rlHUVFRypEjh0qXLn3WtkePHlW/fv0UGRmp3Llzq1q1apo+fXqWHufBBx9Uvnz5zro+X758evDBB72M3nfi4+Plcrl04MCBS/o4Dz74oFwulypXrqy0tLRM610ulx555JFLGsPZXK7nILt8++23qlmzpkJDQ+VyuTR79uwzttuyZYvH5zBHjhwqVKiQbr31Vi1evDhbY3rwwQfP+Zm7WF999ZXi4+Oz9T5Lly6drZ/V7777Tg899JBuuOEGhYaG6rrrrtNtt92mlStXnrH9qlWr1Lx5c+XLl0/XXHON2rdvr82bN2dqN2bMGLVv315lypSRy+VS48aNzxrDggUL1KJFCxUpUkT58uVT1apVNXbs2DN+5gBkn5y+DgDA1ev0nboRI0ZowYIF+u677zyWV6pU6ZLHMnXqVO3Zs0e1a9dWenq6UlNTz9q2ffv2Wr58uV544QVdf/31+uCDD3TvvfcqPT1dHTt2vOSxXs3WrVunyZMnq0uXLr4O5YpkZurQoYOuv/56ff755woNDVVUVNQ5t3n00UfVsWNHpaWlae3atRo+fLiaNGmixYsXq3r16tkS15AhQ9S3b99sua8z+eqrr/Taa69la1E2a9YsFShQINvu74033tDBgwfVt29fVapUSfv379fLL7+sunXrau7cuWratKnTdsOGDWrcuLGqVaumjz76SP/++6+GDh2qW265RatXr9a1117rtH3zzTcVGhqqpk2b6osvvjjr43/zzTeKjY1Vw4YNNXHiRIWGhurzzz9X37599ddff+l///tftuUKwBMFGQCfqVu3rsfta6+9Vjly5Mi0/HKYO3eucuQ4NWigTZs2WrNmzRnbffXVV5o/f75ThElSkyZNtHXrVj3++OO6++67FRQUdNnivlgnTpxQ7ty55XK5fB3KeYWGhuqmm27SsGHD1LFjR+XJk8fXIV1Wx48fV968eS/qPnbt2qVDhw7pjjvuULNmzbK0TcmSJZ3PZIMGDVS+fHk1a9ZMr7/+uiZOnHjGbbx9X5UrVy5rCfiR7CpG3V577TUVKVLEY1nLli1Vvnx5jRw50qMgGzp0qEJCQvTll186RWGNGjVUoUIFvfTSSxo1apTTdt26dc53W3R09Fkff/LkyQoODtaXX36p0NBQSVLz5s21ceNGTZ48mYIMuIQYsgjArx06dEi9evXSddddp1y5cqls2bJ6+umnlZyc7NHOPWRtwoQJuv766xUSEqJKlSpleSihe4flfGbNmqV8+fLpP//5j8fyzp07a9euXVq6dGnWEsui48ePa+DAgSpTpoxy586t8PBw1axZUx9++KFHuxUrVqhdu3YKDw9X7ty5Vb16dX300UcebSZPniyXy6V58+bpoYce0rXXXqu8efMqOTlZ+/fvV/fu3VWiRAmFhITo2muvVYMGDfTNN99kKc7t27erffv2KlCggMLCwnT//fdr//79zvouXbooPDxcx48fz7Rt06ZNVbly5Sw9zqhRo7Rz587z7hy6c92yZYvH8u+//z7TMNjGjRsrOjpaixcvVv369ZUnTx6VLl1a7777riRpzpw5uummm5Q3b15VqVJFCQkJF/QcuM2YMUP16tVTaGio8uXLp9jYWP3yyy8ebdxDW3///XfFxMQof/785y2gFi5cqGbNmil//vzKmzev6tevrzlz5jjr4+PjVbx4cUnSk08+KZfLdUHDBN3F2datWyWd+32Vnp6u0aNH64YbblBISIiKFCmiTp06aceOHZnyPT0WM9Prr7+uatWqKU+ePCpYsKDuuuuuMw7LS0hIULNmzRQWFqa8efOqYsWKev755537fu211yR5DpN2vzc+/vhj1alTx9m2bNmyeuihh877PJw+ZNH93vrwww/19NNPKzIyUgUKFHCKmvM5vRiTTg1hrlSpkrZv3+4sO3nypL788kvdeeedHj10pUqVUpMmTTRr1iyP+8jqd1twcLBy5cqV6UDHNddco9y5c2fpPgBcGAoyAH7r33//VZMmTfTee++pf//+mjNnju6//36NHj1a7du3z9T+888/19ixY/XMM8/ok08+UalSpXTvvffqk08+ybaY1qxZo4oVKypnTs8BBlWrVnXWZ6f+/fvrjTfeUJ8+fZSQkKCpU6fqP//5jw4ePOi0WbBggRo0aKB//vlHb775pj777DNVq1ZNd999tyZPnpzpPh966CEFBwdr6tSp+uSTTxQcHKy4uDjNnj1bQ4cO1bx58/T222+refPmHo9zLnfccYfKly+vTz75RPHx8Zo9e7ZiY2OdoZ99+/ZVYmKiPvjgA4/t1q1bpwULFqh3795Zepx69erpjjvu0KhRo3To0KEsbZMVe/bsUefOndW1a1d99tlnqlKlih566CE988wzGjx4sJ544gl9+umnypcvn26//Xbt2rUr032c7zmQpJEjR+ree+9VpUqV9NFHH2nq1Kk6cuSIbrnlFq1bt87j/lJSUtSuXTs1bdpUn332mYYPH37W+H/44Qc1bdpUSUlJmjRpkj788EPlz59fbdu21YwZMyRJXbt21cyZMyWdGoa4ePHiTDvvWbFp0yZJ8hgWJ535ffXwww/rySefVIsWLfT5559rxIgRSkhIUP369c97zl2PHj3Ur18/NW/eXLNnz9brr7+utWvXqn79+tq7d6/TbtKkSbr11luVnp6uN998U1988YX69OnjFH1DhgzRXXfdJenUMGn3X7FixbR48WLdfffdKlu2rKZPn645c+Zo6NChOnnypNfPi9tTTz2lrVu36u2339Zbb72lP//8U23btr2g87CSkpK0atUqjwMWf/31l06cOOF852RUtWpVbdq0Sf/++6/Xj9WzZ0+lpKSoT58+2rVrl/755x9NnTpVs2bN0hNPPOH1/QHwggGAn3jggQcsNDTUuf3mm2+aJPvoo4882o0aNcok2bx585xlkixPnjy2Z88eZ9nJkyfthhtusPLly3sVR+vWra1UqVJnXFehQgWLjY3NtHzXrl0myUaOHHnO+z49x9OFhobaAw884NyOjo6222+//Zz3ecMNN1j16tUtNTXVY3mbNm2sWLFilpaWZmZm7777rkmyTp06ZbqPfPnyWb9+/c75OGcybNgwk2SPPfaYx/L333/fJNm0adOcZY0aNbJq1ap5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pk27mFABAAAAwCteX4fsbD755BOFh4dn190BAAAAQMDzuoesevXqHpN6mJn27Nmj/fv36/XXX8/W4AAAAAAgkHldkN1+++0et3PkyKFrr71WjRs31g033JBdcQEAAABAwPO6IBs2bNiliAMAAAAArjrZdg4ZAAAAAMA7We4hy5EjxzkvCC2dmvHw5MmTFx0UAAAAAFwNslyQzZo166zrFi1apHHjxsnMsiUoAAAAALgaZLkgu+222zIt27BhgwYPHqwvvvhC9913n0aMGJGtwQEAAABAILugc8h27dqlbt26qWrVqjp58qRWr16tKVOmqGTJktkdHwAAAAAELK8KsqSkJD355JMqX7681q5dq2+//VZffPGFoqOjL1V8AAAAABCwsjxkcfTo0Ro1apQiIiL04YcfnnEIIwAAAAAg67JckA0aNEh58uRR+fLlNWXKFE2ZMuWM7WbOnJltwQEAAABAIMtyQdapU6fzTnsPAAAAAMi6LBdkkydPvoRhAAAAAMDV54JmWQQAAAAAXDwKMgAAAADwEQoyAAAAAPARCjIAAAAA8BEKMgAAAADwEQoyAAAAAPARCjIAAAAA8BEKMgAAAADwEQoyAAAAAPARCjIAAAAA8BEKMgAAAADwEQoyAAAAAPARCjIAAAAA8BEKMgAAAADwEQoyAAAAAPARCjIAAAAA8BEKMgAAAADwkZy+DgAAEHhKD5qT5bYhQabRtaXo+LlKTnNlebstL7S+kNAAAPAr9JABAAAAgI9QkAEAAACAj1CQAQAAAICPUJABAAAAgI9QkAEAAACAj1CQAQAAAICPUJABAAAAgI9QkAEAAACAj1CQAQAAAICPUJABAAAAgI9QkAEAAACAj1CQAQAAAICPUJABAAAAgI9QkAEAAACAj1CQAQAAAICPUJABAAAAgI9QkAEAAACAj1CQAQAAAICPUJABAAAAgI9cUQXZ888/L5fLpX79+jnLzEzx8fGKjIxUnjx51LhxY61du9Zju+TkZD366KMqXLiwQkND1a5dO+3YscOjTWJiouLi4hQWFqawsDDFxcXpn3/+uQxZAQAAALhaXTEF2fLly/XWW2+patWqHstHjx6tV155RePHj9fy5csVERGhFi1a6MiRI06bfv36adasWZo+fboWLlyoo0ePqk2bNkpLS3PadOzYUatXr1ZCQoISEhK0evVqxcXF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Dhw4IJfLdcW811577TXdfPPN+vXXXyWdKsrS0tKUK1cuFSlS5IrJw23+/Pl66qmndOjQIT388MNasGDBFV+UpaSkaN26dVqyZIlq1qyp9957T2PHjlW+fPl8HZrXfvvtN9WvX199+/bVrFmzlCNHDi1btkzSlTkcM+MBs3nz5umTTz7R9OnTdfLkSblcLh9Hl3XuPNatW6c77rhDzZo1U7169fTFF1/4OrSLZmZyuVxatmyZxo0bp7feekvff/+9r8O6YO79sl27dmnv3r06duyYcuTIccV9V//6669q2LChOnfurFatWmVafyXuf7pj/vPPP/Xrr79q8eLFknTlfBcY/EqlSpVs4MCBvg7Da2lpac7/09PTnf93797datasaf/8848vwsoWb775phUpUsRWrVplycnJvg7Hay+//LK5XC777LPP7N9//zUzs4ULF1pYWJjdc889dvjwYR9HmHX9+vWzt956y8mjf//+VrhwYStSpIiVL1/eGjZsaL/99puZeb4n/dWBAwfsuuuus/r169vq1astPT3dNm3aZFFRUc57LePnyZ8dPXrUhg4daj179rSkpCRr2bKlRURE2Lx58yw1NdXX4V2UkydPWmxsrLlcLvvPf/7jsfxK8euvv5rL5bL//ve/zrKuXbtaqVKl7OjRoz6M7OINGDDArrvuOitXrpxFRkZaVFSULVmy5Ir47Lhj/P33361QoULWq1cvmz17trVo0cKqVKni8dm5EvI5k08++cQKFChg9erVs8qVK1vOnDltyJAhvg7rgs2cOdNKlSplFStWtCpVqtiGDRt8HZJXfvvtNwsLC7PHH3/czE59jy1ZssS+/vpr++mnn3wc3YVxfzZmzZplFSpUsPLly1uRIkWsa9euV8z3GwWZj5y+s5icnGzp6ek2cuRIa9mypSUmJprZlfcFfPrO/fz586127dq2cOFCM/P/HZitW7dmWtajRw97+OGHzez/4r/SXpd77rnHwsPDr/iirHHjxlalShV7//33bc6cOVa1alX76aef7MCBAzZr1iy77bbbLCoqytatW+frUM9p8eLFtm3bNjMzO3TokJUqVcrq1Klja9euteXLl1tUVJQdP37cx1F6Jz093RYuXOjxgx4bG2vFihWzefPmWUpKig+j817G7+ijR4/ac889Z08++aRVr17dunfv7qy7UvL67LPPbOjQoWb2f7ktXbrUKlSoYO+8846ZXXnfa2ZmkydPtkKFCtkvv/xiu3fvtl27dlnz5s2tZMmStnHjRjPz/7x27txpVapUsQEDBjjL1q1bZ61bt7atW7fakSNH7MSJE2Z2ZRxoymjDhg0WERFhb7zxhqWnp9uBAwdsypQpljt3bouPj/d1eFnmfg/9+eefVrhwYXv11Vdt8uTJ1rZtWwsLC7tiCpm0tDSrXbu2uVwu++eff+zkyZN26623Ws2aNS1//vxWsGBBe+ihh5z2/v7ZySghIcHy589vEyZMsP3799tHH31kLpfL4uLi7NChQ74O77woyHxs9erVHrc3bNhgoaGh9uabb/ooogs3bdo0y5Urlz377LP2ww8/mNmpD3OjRo2sXbt2Po7u/Lp27Wq33Xabx7Lk5GSrUaOGde7c2Vnm/oJKSUmxNWvW+HWvWcajq3fffbddc801V2RRlnEn5K677rJatWrZwIEDrWfPnh7tli5darGxsfbQQw/55euSnp5uCxYssNDQUHv++edt586dZnaqKCtdurQ1bdrU3nvvPStfvryNGTPG3n33Xfviiy/so48+svHjx9vixYt9nMG5uV+njD/isbGxTk9ZWlqaJSYm2ttvv+3XBWfG99u7775rP/74o508edL+/fdfe/XVV61q1arWrVs3j21WrFhxxfUEpqSkWMOGDS0mJsbXoVywoUOH2h133GFmnq9b3bp1rVGjRj6KyjvffPONPfnkk7Z9+3Zn2eDBgy0sLMzKli1rN910k/Xq1csOHDjgwygvzKJFi+z666+3Xbt2eSyfNGmS5cmTxxYtWuSjyLz3448/2hdffOHRy3z48GG77777rqiibOfOnVaiRAlr1KiRNWjQwFq2bGlLly61NWvW2MyZM61AgQLWt29fX4fplUOHDlnnzp3t+eefNzOzbdu2WZkyZeyOO+6wQoUK2X/+8x+///xQkPnQzJkzrXTp0ta8eXP78ccfbc+ePWZmNnz4cGvWrJnt2LHDxxGem3uny/3v/v37bfjw4XbrrbdaeHi4PfTQQ/bTTz/ZokWLrHbt2vbtt9/6MtzzOnz4sFOoHDx40Fn+7LPPWuXKlZ1ePrcNGzbYPffcY2vWrLmscXor4xH8//znP2csygoWLGj33XefJSUl+SrM88rYu3rnnXeay+Wy2rVrZyq8nnnmGatQoYJfF5iDBg2yMmXK2KhRo5zPubunzOVyWVRUlFWrVs2qV6/uDPOJioryu6ExGzZssJ9//tn++OMP58cuPT3d0tPTPYqTli1bWmRkpM2YMcPq1KljjRs39tsj/RmLySeffNKKFi1qY8eOdfJLSkqyMWPG2I033midOnWy/fv3W4sWLezuu+/2VcgXxP38//DDD3bNNdfYxx9/7OOILkyPHj0sOjraue3uSZo9e7aVLVvWtmzZ4qvQsiwtLc3Wr1/v3H711VfN5XLZxIkT7ZdffrEXXnjBqlatarNmzfJdkF764osv7PPPP7c1a9ZYjhw5nGLF/fly7zDPmDHDl2Fm2YkTJ6xp06bmcrnszjvv9Fh3+PBh69ixoxUuXNgWLFjgmwCzyP3879y504oWLWpVqlSx3bt3e7QZPXq0XX/99X6/D5pRSkqKvfvuu/bnn3/a/v37rVq1as5BszfffNNcLpe1a9fOGX3mjyjILqPTu363bt1q33//vbVo0cJq1Khh1atXt9mzZ9uECROsSpUqtnLlSjPzzyEKGWPat2+fxwc6KSnJvv32W2vevLnVqVPHrrvuOitSpIiNGjXKzPyvC/yjjz7yOHIyadIku/baa50fyB9//NHq1atn99xzj/Nlu337dmvXrp3dfPPNfjkM8/T3TMbnvH379pmKsp9//tlcLpcNGzbscoaZJRljz/hcd+rUyQoXLmxvvPGGR/H19ddf2w033OB3O2ITJkywL7/80rn91FNPWcmSJT2Ksn/++ccqVqxoN954oy1btswpplNSUvyux+/tt9+26667zkqVKmVFixa1mJgY56CL+zXLWJQ1b97cXC6XValSxcnL374LMnrxxRft2muvtV9++cX5PLnffydOnLCJEydauXLl7LrrrrNatWr53dDFrVu3Zulg0c6dO61+/fr2yCOPmJl//t6YnT2uJUuWWKlSpWzEiBEey93fA+6hwVeK9PR0+/rrrzPt2JcsWdIGDRrkm6C8tHTpUitQoIBNnDjRDh48aK1bt7b//Oc/zvm9Zqc+Q9WrV7epU6f6MFLvbNy40Tp06GCFCxe2P/74w8z+7zvsyJEj1rZtWytVqpTf9f4fOnTINm3alOn74MCBAzZt2rRM310vv/yyValSxY4dO3Y5w/TKmX473Psz7733nt18881Oj/PUqVPtlltuseuvv96vvw8oyC6TjD8mO3futL1793q8ob7//nsbPHiwlSpVyu655x5zuVzWpk0bv9sJM/P8IIwYMcJq165tpUuXtjp16tjnn3/u7BwnJSXZmjVrrHfv3layZEkrXLiwrV271ldhn1FCQoK5XC4bMWKEM/HIwYMHrUaNGlapUiXnHITPPvvMWrVqZYUKFbJy5cpZpUqV7KabbnK+yPxpJyZjLJMmTbKePXtajx497NVXX3WWn6mn7LfffvO7IVcZc0lJSXFidWvfvr1VrFjRnn/+edu8ebP99ddf1qxZM2vUqJHf7Oynp6fbtm3brGXLlvbXX395rBs0aFCmouzQoUNWsmRJu/nmm23lypV+k0dGP/30k+XPn9+mTJliO3bssI8//tjuvfdey58/v82ePdvM/u97Ii0tzY4cOWKNGjWyevXqOe8xf3uvZZSammr33XefPffcc2Zm9vfff9usWbOsadOm1q9fP2eY1c6dO23+/PlOoeYvOW3YsMGCgoIsMjLSfv311/O2nzRpkrlcLo9eGn+S8TMwc+ZMGzt2rC1dutROnjxpx44ds0GDBlnt2rVt8ODBlpSUZH/88Ye1bt3aYmJi/Oq7OSN3TsuWLbNly5adtd3JkyctMTHRbr31Vvvwww8vV3gX7K+//rKhQ4d6HNz78MMP7eabb7Y77rjD5s2bZ+vXr7cnn3zSihQp4ncHztzO9L2bnp5uf/31lzVp0sSKFy9uf//9t0fbo0ePOsPQ/cXvv/9u9evXtwoVKljZsmXtrrvuOu82vXv3trvvvtvvCku3jJ+dCRMm2Lx585znPT093QYPHmyVK1d22g8aNMhGjhzpl/vTGVGQXWIffPCBbd682bk9ePBgq169uhUuXNg6duxo7777rkf7ZcuW2ZQpU6xu3bpWokQJW758uZn51w6/2/Dhwy0iIsJmzJhh+/bts4oVK1rVqlVt06ZNmb7MFi9ebC1atLC3337bzPzryPgbb7xhOXLksGeeecY58fPQoUNWp04dq1ChgnMkbPPmzbZgwQJ7+eWX7ZNPPvG7nbDTPf7441asWDHr27evPfXUU+ZyuezRRx911t99991WuHBhmz59uscRMn/JJ+N7/sUXX7T//Oc/VrlyZXvrrbc8Cvu77rrLcuXKZdddd53deeed1rZtW78slN0/bsuXL3eKFrOzF2UFChSw5s2bZypC/cGkSZMynZ+zefNme/jhhy137tz29ddfO8tPnjxpQ4YMscjISOd18Zf3mFvG76P09HRLSUmxunXrWrNmzWzq1KkWGxtrzZo1szvvvNOqV69unTp1ypSDv/SUHzhwwFq2bGkdOnSwRo0aWalSpc5blG3evNliYmI8fqv80dNPP2358uWz6Ohoc7lc9vTTT9uBAwfs4MGDNmLECCtRooTly5fPoqKiPHot/el7wOz/3m8zZ8604sWLW69evTwO0p4e75AhQ+z666/32+LFbfPmzVazZk0rVqyYDR8+3GPd9OnT7Y477jCXy2WVKlWycuXK2apVq3wU6bm5X4effvrJhg4dagMGDLA5c+Y467ds2eIUZe7XxJ/2adzWr19vhQoVsieeeMK+//57mzJlilWvXt1eeumlM7bfvn27PfXUU1awYEH7/fffL3O03vn0008tf/78dv3111vx4sXtrrvucuZkWL58ueXOndsaNmxorVq1sgIFCvh9PmYUZJfUF198YUFBQfbf//7X9u/fb5MnT7aiRYvatGnTbMyYMfbAAw9Y8eLF7X//+1+mbVNTU+3GG290ZvfztYw7hWlpabZ3716rW7euzZw508xOnZTsnt3G3cbMcyelY8eOduutt17GqM8t44/e66+/bi6X66xFmbun7HT+shN2uh9++MHKli1rP//8s5md+uEPCQnJNFlM06ZNLTY21hchZtngwYPt2muvtRdeeMGGDBliZcqUsS5dujgHK8zMOnfubEFBQTZ79mzndfWXnf6M77MjR47YLbfcYo0aNbLPP//cWT548GArUaJEpuGLf/7552WPNysmTpxo4eHhmU7U37p1q3Xp0sVuvPFGj9i3bNnitwcwTt/5dZ+DtHbtWqtSpYqVKFHChg8f7vSKjR492mJiYvwuD7dVq1ZZr169bP78+Xb06FFr1qxZlooyf7w0ScZJYvbu3WsxMTHO6zBx4kQrVqyYPfbYY7Z3714zO/X5mj17ti1atMhv329uX3/9teXJk8fefvvts57vOm/ePHviiScsLCzMfvnll8sboBcyFiMvvPCCXXfdddagQYNMBX5ycrKtXbvW1qxZ47xm/mrmzJlWuHBha9mypTNqafz48c77asuWLdaiRQvLmzevXw6DO3z4sN1xxx0e+5ApKSl2zz33WIcOHTK1X7x4sbNP6s/vNTOzXbt2WadOnWzSpEmWkpJi06ZNs5YtW1rTpk2dU32+/fZbu/POO61Hjx5XRDFmRkF2yY0ZM8aKFy9uI0eOtEceecQmTZrkrNu6davFx8dbuXLlbO7cuc5y91G9119/3Ro2bGhHjhy57HFndNddd9no0aM9ruWwZcsWK1eunKWkpNjXX39t+fLlszfeeMPMTnXbT5w40Tl50v2j+vDDD1vLli2dHR5/kLGgeu21185YlNWtW9cqVark15N3nD7Byvvvv28333yzmZ36YcmXL59TLCclJVlCQoKzrb8dPc7o448/tnLlyjlDepYsWWIul8vKlStn999/v8cPxxNPPOHk4o85uS+psHjxYmvevLndeuutHj1lgwcPtrJly9qwYcMyFTr+ZunSpVa1alUbM2ZMpmu8/PTTT1axYkX76quvMm3nb69LxnjGjh1rcXFxVqdOHXvllVfs0KFDlpyc7LHjmJqaarGxsdalSxdfhJslaWlpHj0Phw8fdoqyjLP6pqWl+fUQnoyvzfbt223z5s326KOPerzf3n77bYuMjLT+/fuf8eCFvx4wO3HihHXu3NkGDx5sZqdeo19//dUGDRpkr776qm3ZssXS0tJs0KBB1rRpU7/docz4u5OxKBs7dqxVqlTJ+vXr59Gr52+f/7NZunSpRUZGOr+ZO3futDx58pjL5bL4+Hgn17/++svatm3rjKLxJ/v377du3brZtGnTzOz/nvupU6fazTffbGlpaR4jY7Zu3WqzZs3y+17yFStWWPv27S02NtbjMkWfffaZU5S59wtSU1P99oDMmVCQXSIZv3hefvllu+666yxfvnw2duxYj3abN2+2Bg0aOFN1ZnT33XdbrVq1fD6Ot2/fvhYcHGxvvPGG82OYmppq1atXtw4dOlj+/Plt4sSJTvs///zTbr75Zo8dsvXr11ulSpX84sjLuYbnjR079oxFWdmyZe3ee++9rHFeCHfMn332mbVt29YmTZpk+fLl8+gZmzdvnnXu3Nnji9dffyjnzZtnL774opmZff7553bNNdfY5MmTnUssPPDAA5lmv/S3nbC0tDTbvHmz5c+f34l18eLF1rhx40xFWZ8+fSw6Otrvp+c1O3XR98jISJs5c2amYZWVKlW6oq4xNGjQIIuMjLRhw4Y5veVdu3Z1eo0OHz5sM2fOtNatW1t0dLTfTkpy+ufYffvIkSMePWUnT560ESNGONeG8mdPPPGERUVFWe7cua1UqVKZzreaNGmSlSxZ0rp27ep35++cS+vWra1Zs2a2Z88ee+ihh6xx48ZWvXp1Cw0NdQr+1NRUjxl//Yn7ffPNN99Y586d7fbbb7c+ffo4+wgvv/yyVa9e3R577LEzXt/TX508edImT57sTG2/bds2K1mypPXu3dvZP3j11Vf9vgc2OTnZY3/L/XpNmTLFatas6bHMzV/3AzJ6/fXXrXLlylaoUCHbtGmTx7rPPvvM2rRpYzfddFOWzp31NxRkl1DGD+qECRMsT5481rZt20xvorvuuivTiZZHjx51rg3hKxk/rEOGDLEcOXLYa6+95uykvPDCC3bttdd6xH78+HHnZOrTd4x9Pd3o6ROKuI+Id+vWzSZNmuTE+7///c+Z6MNd4Bw+fNjvdvRPN23aNBswYIAlJyfb8uXLrWTJkuZyuTzGix8/ftxatWplDz74oN/viJmdes/s3bvXDh48aA0aNLDRo0eb2anPVvny5a1IkSLOxAv+lM+ZYnGff+TewVq6dKlTlGUcvrhv377LFqe3xo4d6xzVNzNr27atFSlSxCZPnux8L/zzzz9Ws2ZN53xRf7dkyRIrX768c423lStXWo4cOWzKlClOG/clLu644w6/m5QkMTExSzvt7uGL5cqVs7vuustcLpffTbJk5vnZmTNnjhUvXtw+/PBDGzZsmJUpU8buv//+TNfvHDt2rN12221+9R1wJqtWrXJmT5w7d66VK1fOQkJC7M4773Smf3/rrbesZs2aPv+9zIpZs2ZZvnz5rFevXvbGG29YeHi43XLLLbZ//34zO3Xub61ataxbt25+OazvdO4DYZs3b7Zly5bZv//+a82bN7euXbvayZMnbefOnVakSBFzuVz2wgsv+DjazPbu3WuLFy92Ync7/bqK1atXd27369fPWrZsaWb+9Rt6LpMnT7bo6Gi7/fbbM02U9fHHH9tdd93l9+dbngkFWTbL+MY//c09ZswYi4iIsMcff9zp4j58+LDVqlXLHnvssUz35Q8/+BljGDFihAUFBdlrr71mZmY7duywbt26WdmyZa1du3bWs2dPu+WWWzymtU5LS/OLD3m/fv2sVq1a9uOPP5qZ2XPPPWf58uWznj17Wv369a1KlSrWqlUrJ99x48ZZUFCQPf744x7j+/2pKDv9eX3mmWcsIiLC+SKaPHmyuVwu69Onj82YMcO+/vpra968uVWtWtXJ0x9em6zYvHmzlS9f3r744gszO3XU8qGHHrL33nvPr4/qbdmyxflhXLNmjTVq1Mief/55Z6jY8uXLrXnz5h49yv76mhw5csS5Ltezzz7rLL/vvvvs+uuvt4YNG1qvXr3s5ptvtujoaL/4/sqKBQsWWP369c3MbMaMGR7Dr5OSkpxCbefOnX53fuLatWutVKlSNnz48CztwB88eNDCwsKsUKFCfjFa4Vxmz55tPXv29DjHetq0aVazZk178MEHMx0BP9uEGP5i//791qhRI2vevLnznjp48GCmiwk/8sgjdscdd/jV0P4z2bt3r1WvXt1eeeUVMzt1ICYyMtIeeeQRj++wYcOGWcOGDZ3rrPqrtWvXWr58+TxGjmzfvt1uuukm53Ie+/fvt65du9qECRNs3bp1vgr1jH777TeLioqyqlWrmsvlsieffPKM+yuffvqp3XTTTWZ2aph8aGio8370N+730bp16+yXX37xGIr95ptvWsOGDe2ee+5xZrt08/VpPheKgiwbZfwhmDBhgnXt2jXTdOPua9tER0dbp06drH379latWjW/GwKzcOFCZ6dxxIgRzrCq//73v5YjRw4bP368mZnt2bPHZsyYYbGxsfbAAw/YkCFD/O4IstmpL9uqVatay5Yt7fPPP7d27do5X7InT560jz76yGrUqGF33XWX8zqOHj3a6tev7zevSUYZY3L34pmdmqSjbt26Tg6TJk2yhg0bWoECBaxBgwZ2++23O+81fyouz2fNmjUWHR1tTz75pM2ePdtat25tsbGxzvPgj7msWrXKXC6XPfTQQ84FXZ955hmrW7eux9HixYsXW5s2bfzuCPKZdmx37txpI0aMsOLFi9szzzzjLJ86dar17dvX2rdvb4899pjfvsfOlFNCQoKVKlXKJkyYYGFhYfb66687677++mtr27atXw7v3bFjh910000WFRVlISEh9uyzz55zYo7U1FTr2bOn5cqVy6/PhzU71SNZv359CwsLyzRbn7soO31iHzP/+f08m88++8yaN29u7dq1s++//95j3a+//mqPP/64XXPNNX473Crj87tjxw678cYb7fjx47Z9+3aLjIy07t27O+sznqfsj0OwTz/v2sysSZMm1r59e+f6W2vXrjWXy2XvvPOOHThwwP773/9a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OtqqVatmgwYNsvfee8/atWtnN9xwg1/8wJ/LxIkTPX4sunTp4gyJfeONN2zAgAHmcrnM5XL53Q99enq6c27VjBkz7JFHHrG8efPahg0bzrttxveoPx7pNzvVA/vkk09a+fLlrWHDhrZkyRJ76623rFu3brZ+/XozOzV09sUXX/Srk8LT09PP+r7fuHGj9erVy66//nqPnrLff//d4uLibMaMGX7/mTH7v+9r9/fXgQMHLDo62mrXru0xjG/Xrl0e7zV/+X7LOELh9AIg43eye/jiiBEj7MEHH7RChQr5/bWFhg0bZhERETZt2jTbtm2blS5d2m666SbnvEr3NYbq1KnjlzNDmp363XS/jz7++GNr3769mZ36jbzpppusS5cuHgee5s6da3Xq1LEOHTrY9u3bfRLzuZxeLLsLl9O/q3/44Qfr0aOHFS1a1KpXr26xsbHnPcDmK+6cMp4D9uijj1r58uXt448/tltuucUaN25sDz74oN1www2ZJlzxNxlfo3feecdeeeUV69ixo3Xt2tWjXffu3a1evXpnPcXEX2TMZ+vWrU5PX8aJfczMjh07Zq+++qoVLlzY9u7d6zf70ReLguwCff7553b//ffbrl27rE+fPuZyuWz//v22d+9ei42Ntfbt23tcH+ngwYNWrVo1v+xNyvjjPmTIEI/ZCP/991975513rFatWtahQwfnmmjdu3e3r7/+2tnOX3ZazuaFF16w+vXrW69evZyibOPGjc7wxdtuu82eeuopJw9/3MFMT0+3xMREGzFihOXPn99atmxpP/74ox07dsxuv/12GzlypJmdmjbdPbOVP+Zhduq6T7lz57a8efM6R73P9aWacd3bb79tzz//vF/MQuaOa8OGDbZ06VKnJ2Lz5s3WpEkTu+WWW6xTp05WsWJFvz3ievp75M0337QnnnjCevToYatWrbKTJ0/a9u3brVevXla6dGl75plnbNmyZXbrrbda586d/XLY9eleeeUVq1u3rm3cuNFj+YEDB6xs2bJWt25d+/HHH89Z6PjS+vXrLS4uzr755htn2bmG/LqHL4aFhfndSfsZdwrT0tJs586dVqtWLfvss8/M7NSslxkvZO82ffp069evn1/2jKenp1vHjh0tV65cNnLkSHO5XDZ58mRn/eTJk61GjRr20EMPOTPaPf300zZs2DC/6q1wP7cZLxi+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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# number of unique users\n", + "n = 20# Filter the dataframe for a specific year, e.g., 2014\n", + "year_of_interest = 2018\n", + "# Group by 'username' and 'year' and count the number of records for each user in the specified year\n", + "user_project_counts = df[df['year'] == year_of_interest].groupby('username').size()\n", + "\n", + "# Sort the users by the number of projects (in descending order)\n", + "top_15_users = user_project_counts.sort_values(ascending=False).head(15)\n", + "\n", + "# Plot the top 10 users based on the number of projects (or records)\n", + "plt.figure(figsize=(10, 6))\n", + "top_15_users.plot(kind='bar')\n", + "plt.title(f'Top 10 Users by Number of Projects in {year_of_interest}')\n", + "plt.xlabel('Username')\n", + "plt.ylabel('Number of Projects')\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "e80f7930-0f5d-42f9-af6e-f84470817ce0", + "metadata": {}, + "source": [ + "## For each Project How many Jobs are there?" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "fa6b967f-34b6-44b9-9acb-de7f85a82025", + "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", + " \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", + "
uuidownerprojectUuidjobUuidlastUpdated
00001400192074855-5056a550b8-0001-012vdj0001399309581559-5056a550b8-0001-0120001399315558601-5056a550b8-0001-0072014-05-15T17:14:34.855-05:00
10001400254373114-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400254372814-5056a550b8-0001-0072014-05-16T10:32:53.114-05:00
20001400273862423-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400273862119-5056a550b8-0001-0072014-05-16T15:57:42.423-05:00
30001400274448495-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400274448320-5056a550b8-0001-0072014-05-16T16:07:28.494-05:00
40001400274714655-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400274714490-5056a550b8-0001-0072014-05-16T16:11:54.655-05:00
..................
63505097479121213854191-242ac118-0001-012vdj6589143665654501871-242ac118-0001-012ad02cb34-250e-48cb-a06e-973e431b62ee-0072025-01-08T12:13:35.460-06:00
63511948444895656078865-242ac118-0001-012vdj5456400192359305711-242ac118-0001-012c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-0072025-01-13T16:44:05.995-06:00
63521819643224410746385-242ac118-0001-012vdj5199144433477554666-242ac116-0001-012773a5cb7-b369-4517-a221-83d57e3899e5-0072025-01-20T03:06:57.762-06:00
63532845695380777266705-242ac118-0001-012vdj5456400192359305711-242ac118-0001-0129188bf80-e868-4e05-a6b4-308c044108d7-0072025-01-23T15:05:59.570-06:00
63543203620026767118831-242ac118-0001-012vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0072025-01-24T20:57:54.599-06:00
\n", + "

6355 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "0 0001400192074855-5056a550b8-0001-012 vdj \n", + "1 0001400254373114-5056a550b8-0001-012 vdj \n", + "2 0001400273862423-5056a550b8-0001-012 vdj \n", + "3 0001400274448495-5056a550b8-0001-012 vdj \n", + "4 0001400274714655-5056a550b8-0001-012 vdj \n", + "... ... ... \n", + "6350 5097479121213854191-242ac118-0001-012 vdj \n", + "6351 1948444895656078865-242ac118-0001-012 vdj \n", + "6352 1819643224410746385-242ac118-0001-012 vdj \n", + "6353 2845695380777266705-242ac118-0001-012 vdj \n", + "6354 3203620026767118831-242ac118-0001-012 vdj \n", + "\n", + " projectUuid \\\n", + "0 0001399309581559-5056a550b8-0001-012 \n", + "1 0001400250478554-5056a550b8-0001-012 \n", + "2 0001400250478554-5056a550b8-0001-012 \n", + "3 0001400250478554-5056a550b8-0001-012 \n", + "4 0001400250478554-5056a550b8-0001-012 \n", + "... ... \n", + "6350 6589143665654501871-242ac118-0001-012 \n", + "6351 5456400192359305711-242ac118-0001-012 \n", + "6352 5199144433477554666-242ac116-0001-012 \n", + "6353 5456400192359305711-242ac118-0001-012 \n", + "6354 5456400192359305711-242ac118-0001-012 \n", + "\n", + " jobUuid lastUpdated \n", + "0 0001399315558601-5056a550b8-0001-007 2014-05-15T17:14:34.855-05:00 \n", + "1 0001400254372814-5056a550b8-0001-007 2014-05-16T10:32:53.114-05:00 \n", + "2 0001400273862119-5056a550b8-0001-007 2014-05-16T15:57:42.423-05:00 \n", + "3 0001400274448320-5056a550b8-0001-007 2014-05-16T16:07:28.494-05:00 \n", + "4 0001400274714490-5056a550b8-0001-007 2014-05-16T16:11:54.655-05:00 \n", + "... ... ... \n", + "6350 ad02cb34-250e-48cb-a06e-973e431b62ee-007 2025-01-08T12:13:35.460-06:00 \n", + "6351 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 2025-01-13T16:44:05.995-06:00 \n", + "6352 773a5cb7-b369-4517-a221-83d57e3899e5-007 2025-01-20T03:06:57.762-06:00 \n", + "6353 9188bf80-e868-4e05-a6b4-308c044108d7-007 2025-01-23T15:05:59.570-06:00 \n", + "6354 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 2025-01-24T20:57:54.599-06:00 \n", + "\n", + "[6355 rows x 5 columns]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectJob" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "bf9407ef-de0b-4d73-9713-236d9a820376", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total number of ProjectJob: \t\t\t\t6355\n", + "Total number of Unique projectUuid: \t\t\t1086\n", + "Total number of Unique projectUuid after filtration: \t890\n" + ] + }, + { + "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", + " \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", + "
uuidownerprojectUuidjobUuidlastUpdated
360001402415655966-5056a550b8-0001-012vdj0001402413135675-5056a550b8-0001-0120001402415655772-5056a550b8-0001-0072017-01-12T17:35:19.626-06:00
370001402584065947-5056a550b8-0001-012vdj0001402413135675-5056a550b8-0001-0120001402584065562-5056a550b8-0001-0072017-01-12T17:35:16.665-06:00
640001404239409839-5056a550b8-0001-012vdj0001402413135675-5056a550b8-0001-0120001404239409637-5056a550b8-0001-0072017-01-12T17:35:13.705-06:00
1570001410472799189-5056a550b8-0001-012vdj0001410472310261-5056a550b8-0001-0120001410472799004-5056a550b8-0001-0072017-01-12T17:36:48.130-06:00
2140001415039388759-5056a550b8-0001-012vdj0001415029221897-5056a550b8-0001-0120001415039388481-5056a550b8-0001-0072017-01-12T17:37:17.842-06:00
..................
63505097479121213854191-242ac118-0001-012vdj6589143665654501871-242ac118-0001-012ad02cb34-250e-48cb-a06e-973e431b62ee-0072025-01-08T12:13:35.460-06:00
63511948444895656078865-242ac118-0001-012vdj5456400192359305711-242ac118-0001-012c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-0072025-01-13T16:44:05.995-06:00
63521819643224410746385-242ac118-0001-012vdj5199144433477554666-242ac116-0001-012773a5cb7-b369-4517-a221-83d57e3899e5-0072025-01-20T03:06:57.762-06:00
63532845695380777266705-242ac118-0001-012vdj5456400192359305711-242ac118-0001-0129188bf80-e868-4e05-a6b4-308c044108d7-0072025-01-23T15:05:59.570-06:00
63543203620026767118831-242ac118-0001-012vdj5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-0072025-01-24T20:57:54.599-06:00
\n", + "

5505 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "36 0001402415655966-5056a550b8-0001-012 vdj \n", + "37 0001402584065947-5056a550b8-0001-012 vdj \n", + "64 0001404239409839-5056a550b8-0001-012 vdj \n", + "157 0001410472799189-5056a550b8-0001-012 vdj \n", + "214 0001415039388759-5056a550b8-0001-012 vdj \n", + "... ... ... \n", + "6350 5097479121213854191-242ac118-0001-012 vdj \n", + "6351 1948444895656078865-242ac118-0001-012 vdj \n", + "6352 1819643224410746385-242ac118-0001-012 vdj \n", + "6353 2845695380777266705-242ac118-0001-012 vdj \n", + "6354 3203620026767118831-242ac118-0001-012 vdj \n", + "\n", + " projectUuid \\\n", + "36 0001402413135675-5056a550b8-0001-012 \n", + "37 0001402413135675-5056a550b8-0001-012 \n", + "64 0001402413135675-5056a550b8-0001-012 \n", + "157 0001410472310261-5056a550b8-0001-012 \n", + "214 0001415029221897-5056a550b8-0001-012 \n", + "... ... \n", + "6350 6589143665654501871-242ac118-0001-012 \n", + "6351 5456400192359305711-242ac118-0001-012 \n", + "6352 5199144433477554666-242ac116-0001-012 \n", + "6353 5456400192359305711-242ac118-0001-012 \n", + "6354 5456400192359305711-242ac118-0001-012 \n", + "\n", + " jobUuid lastUpdated \n", + "36 0001402415655772-5056a550b8-0001-007 2017-01-12T17:35:19.626-06:00 \n", + "37 0001402584065562-5056a550b8-0001-007 2017-01-12T17:35:16.665-06:00 \n", + "64 0001404239409637-5056a550b8-0001-007 2017-01-12T17:35:13.705-06:00 \n", + "157 0001410472799004-5056a550b8-0001-007 2017-01-12T17:36:48.130-06:00 \n", + "214 0001415039388481-5056a550b8-0001-007 2017-01-12T17:37:17.842-06:00 \n", + "... ... ... \n", + "6350 ad02cb34-250e-48cb-a06e-973e431b62ee-007 2025-01-08T12:13:35.460-06:00 \n", + "6351 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 2025-01-13T16:44:05.995-06:00 \n", + "6352 773a5cb7-b369-4517-a221-83d57e3899e5-007 2025-01-20T03:06:57.762-06:00 \n", + "6353 9188bf80-e868-4e05-a6b4-308c044108d7-007 2025-01-23T15:05:59.570-06:00 \n", + "6354 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 2025-01-24T20:57:54.599-06:00 \n", + "\n", + "[5505 rows x 5 columns]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(f'Total number of ProjectJob: \\t\\t\\t\\t{df_projectJob.shape[0]}')\n", + "print(f'Total number of Unique projectUuid: \\t\\t\\t{df_projectJob.projectUuid.nunique()}')\n", + "\n", + "#Filter projectJob Based on Metadata permission file\n", + "filtered_df_projectJob = df_projectJob[df_projectJob.projectUuid.isin(filtered_metadata_perms_df['uuid'])]\n", + "print(f'Total number of Unique projectUuid after filtration: \\t{filtered_df_projectJob.projectUuid.nunique()}')\n", + "\n", + "filtered_df_projectJob" + ] + }, + { + "cell_type": "markdown", + "id": "53013c07-503c-41b5-9bf5-281e30c70d6f", + "metadata": {}, + "source": [ + "## Number of Unique ProjectUUID Each Year for filtered_df_projectJob" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "c88364c4-3855-4a5d-9fcb-41d0f8bb9c71", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHpCAYAAACY8RRtAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAYhxJREFUeJzt3XlclOX+//H3ACOKgrsCRohrKmq5ZGm5pOC+VlpoatpemtuxrFNii5Zlmp4yj5laHrKsPNWpVFzLbFHTXDMt93AFAVFhgOv3Rz/m2wToDAyMDK/n4zEPneters9n7hn4cM91X7fFGGMEAAAAeAEfTwcAAAAAuAvFLQAAALwGxS0AAAC8BsUtAAAAvAbFLQAAALwGxS0AAAC8BsUtAAAAvAbFLQAAALwGxS0AAAC8BsUtSqVFixbJYrGobNmyOnz4cK7lHTt2VGRkpAcik9avXy+LxaKPPvrII/276tChQ+rZs6eqVKkii8WiMWPG5LuuxWLRY489lueyjz76SBaLRevXry9QDBaLRYsWLXJ52+JUu3ZtWSwW+6NChQpq06aN3n33Xbf2k/P+PnTokFv3m2PPnj2KjY3Nc/+X++ycOXNGFotFsbGx9rbY2FhZLBadOXMmz20iIyPVsWNH+/OcY/3qq6/a23I+MzmPMmXKqHr16mrXrp2efvrpPD/jecnZd16PVq1aObWPwsivb4vFouHDhxdJn4X5edOrVy9VqlRJR48ezbUsMTFRISEhateunbKzs90RKuA0P08HAHhSenq6/vnPf+q9997zdCgl1tixY/XDDz/onXfeUXBwsEJCQoo9hpCQEH333XeqW7dusfftqnbt2tkLs2PHjunVV1/VsGHDlJaWpocfftgtffTs2VPfffddkR2LPXv2aMqUKerYsaNq165dJH0UxNSpU9WpUydlZWXp7Nmz9vflzJkzNX/+fA0ePNip/YwaNUoxMTEObRUqVCiKkHO54447NH78+Fzt1atXL5b+XfH2228rMjJS9913n1auXOmw7LHHHlNqaqoWL14sHx/Oo6F4UdyiVOvWrZvi4uI0YcIENW/e3NPhFKuLFy+qbNmyslgshdrPrl27dOONN6pfv37uCawA/P39ddNNN3msf1dUqlTJIdYuXbooPDxcr732Wr7FbVZWljIzM+Xv7+9UH9WrV78qi6GiVr9+fYfXtk+fPho/fry6dOmi4cOHq1mzZmratOkV93PttdcWyfvJZrPJYrHIzy//X701a9YsMe/l4OBgvfnmmxo0aJDmzZunBx98UJK0fPlyvf/++3rzzTdVr169Io/D1c8HvB9/TqFUmzhxoqpWraonnnjisutd7mvv/L5m3bFjh+68805VrFhRVapU0bhx45SZmal9+/apW7duCgwMVO3atTV9+vQ8+7x06ZLGjRun4OBglStXTh06dNC2bdtyrbdlyxb16dNHVapUUdmyZXXDDTfoww8/dFgn52vqVatWacSIEapevboCAgKUnp6eb85HjhzRkCFDVKNGDfn7+6tRo0aaMWOG/SvGnK8zDxw4oK+++sr+9ak7vwrP+Yp78+bNuvXWWxUQEKA6deropZdecviqM7/j88UXX+j666+Xv7+/IiIi9Oqrr9qPz5W2lXIfW0nav3+/YmJiHF6XN954o8A5VqpUSQ0bNrR/dZ4Tz/Tp0/XCCy8oIiJC/v7+WrdunSTps88+080336yAgAAFBgYqKipK3333ncM+8xuWsHr1anXu3FlBQUEKCAhQu3bttGbNmlwx/fLLL7r77rtVs2ZN+fv769prr9XQoUOVnp6uRYsW6c4775QkderUyX7cr9YhIVWqVNG8efOUmZmpmTNnumWfu3btUt++fVW5cmWVLVtW119/vRYvXuywTs7n47333tP48eNVq1Yt+fv768CBA4Xuf8uWLbrrrrtUu3ZtlStXTrVr19bdd9+d5/CL48eP64EHHlBYWJjKlCmj0NBQ3XHHHTp58qTDejabTU8//bRCQ0MVFBSkLl26aN++fVeMZeDAgbrrrrs0YcIEHTp0SGfPntVDDz2kqKgo+x9rzvyMOn36tB555BE1btxYFSpUUI0aNXTbbbfpm2++cVjvSp8PQKK4RSkXGBiof/7zn1q5cqXWrl3r1n0PHDhQzZs318cff6z7779fM2fO1NixY9WvXz/17NlTy5cv12233aYnnnhCn3zySa7tn3rqKf3+++96++239fbbb+uPP/5Qx44d9fvvv9vXWbdundq1a6dz587prbfe0qeffqrrr79egwYNyrPYGDFihKxWq9577z199NFHslqtecZ++vRptW3bVqtWrdLzzz+vzz77TF26dNGECRPsY2ZbtGih7777TsHBwWrXrp2+++67Ivkq/MSJExo8eLCG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69atFRQUJIvFoh49ejh8Lk6fPu30sfz75yzn4qzLfc7+zt/f3+G97MrPqNdee03jx4/XQw89pOeff17VqlWTr6+vnnnmmTyLW0/MyoKSg+IW0J8XDr388suKiorSv//971zLcwrSv1+AVdAizxknTpzIsy3nl1C1atUk/TmmL7+CvGHDhg7PnZ0ZoWrVqkpISMjV/scffzj07aqaNWvq+PHjeS7Laa9Zs2aB9v1XlStXlsViyfc1/Ctnj23lypXl6+ure+65R48++mie/UZERFwxtooVKzo1Z+rfj1XOcc/vuPj4+Khy5cp57ivneM2ZMyffK/Fr1qyprKws+fr66tixY1eMLz81a9bU5s2bZYzJlUNexzjn/8ePH8917I0xSkhIKPQcsz/++KNOnDihkSNHFmo/kuufjcLORvJ3ycnJ+t///qfJkyfrySeftLenp6fbx63mqF69eqGOZWG58jNqyZIl6tixo+bOneuwPDU1Nc/t3P26wrswLAH4/7p06aKoqCg999xzOn/+vMOymjVrqmzZstqxY4dD+6efflpk8bz//vsOX6UePnxYmzZtsk9o37BhQ9WvX18///yzWrVqlecjMDCwQH137txZe/bs0U8//eTQ/u6778pisahTp04F2m+XLl20bt06nT592qHdGKNly5apdu3abpk6qHz58rrxxhv1ySef6NKlS/b21NRUff755w7rOntsAwIC1KlTJ23btk3NmjXL8/XO6yyzuzRs2FC1atVSXFycw/siLS1NH3/8sX0Ghby0a9dOlSpV0p49e/J9r5QpU8Y+K8eyZcsuexb6cmf1unTpopSUFK1YsSLXsg8//FA+Pj667bbb7G233XabLBaLPvjgg1zrr1ixQikpKerSpUv+L8wVJCYm6qGHHpLVatXYsWMLvJ8cnTt31tq1a+3FbI53331XAQEBRT6Nl8VikTEm17RXb7/9dq6z3927d9e6deucmvWgKLjyM8piseTKaceOHbmGeQDO4Mwt8Bcvv/yyWrZsqVOnTqlJkyb2dovFoiFDhuidd95R3bp11bx5c/3444+Ki4srslhOnTql/v376/7771dycrImT56ssmXLatKkSfZ15s2bp+7du6tr164aPny4atWqpcTERO3du1c//fSTli1bVqC+x44dq3fffVc9e/bUc889p/DwcH3xxRd688039fDDD6tBgwYF2u+zzz6rzz//XG3atNGTTz6p+vXr68SJE5o/f742b97s1jHPzz//vLp166aoqCiNHz9eWVlZevnll1W+fHmHM1yuHNvXX39dt9xyi2699VY9/PDDql27tlJTU3XgwAF9/vnnRToW2cfHR9OnT9fgwYPVq1cvPfjgg0pPT9crr7yic+fO6aWXXsp32woVKmjOnDkaNmyYEhMTdccdd6hGjRo6ffq0fv75Z50+fdp+xuy1117TLbfcYj9G9erV08mTJ/XZZ59p3rx5CgwMtN+B7N///rcCAwNVtmxZRUREqGrVqho8eLDefPNNDRw4UE8++aRat26tixcv6ssvv9T8+fM1atQo1alTxx5b3bp19dhjj9nz6NGjh8qVK6fNmzfrpZdeUqtWrXLdUCE/+/fv1/fff6/s7Gz7TRwWLFiglJQUvfvuuw6f6YKaPHmy/ve//6lTp0569tlnVaVKFf3nP//RF198oenTp6tixYqF2v/JkyfzHLsdFBSkxo0bKygoSO3bt9crr7yiatWqqXbt2tqwYYMWLFigSpUqOWyTM9tF+/bt9dRTT6lp06Y6d+6cVqxYoXHjxhXLDAPO/ozq1auXnn/+eU2ePFkdOnTQvn379NxzzykiIsI+nAVwmueuZQM856+zJfxdTEyMkZTriu/k5GRz3333mZo1a5ry5cub3r17m0OHDjl99fewYcNM+fLlc/X396vLc65efu+998zo0aNN9erVjb+/v7n11lvNli1bcm3/888/m4EDB5oaNWoYq9VqgoODzW233Wbeeustp/LNz+HDh01MTIypWrWqsVqtpmHDhuaVV17JdXWzK7MlGGPM/v37zZAhQ0xISIjx8/MzlSpVMtHR0WbNmjW51s3vyvthw4aZ8PBw+/P8Zjz47LPPTLNmzUyZMmXMtddea1566SX78fkrZ49tTl8jRowwtWrVMlar1VSvXt20bdvWvPDCC1fM3ZnXKq/ZAP7qv//9r2nTpo0pW7asKV++vOncubP59ttvHdbJOd6HDh1yaN+wYYPp2bOnqVKlirFaraZWrVqmZ8+euWYZ2LNnj7nzzjtN1apV7a/d8OHDzaVLl+zrzJo1y0RERBhfX99cr31KSoqZOHGiqV+/vilTpowJCAgwrVq1Mm+99ZbDDCA5srOzzdy5c02rVq1MQECAKVOmjKlfv7554oknTGpq6hVfn5zPTM7Dz8/PVK1a1dx8883mqaeeyvU65OdKr32OnTt3mt69e5uKFSuaMmXKmObNm+d67zkzg8PfSfnPltCuXTv7eseOHTO33367qVy5sgkMDDTdunUzu3btMuHh4WbYsGEO+zx69KgZMWKECQ4ONlar1YSGhpqBAweakydPXjbOy80ikp/8Pq/O/IxKT083EyZMMLVq1TJly5Y1LVq0MP/973/z/axf6RihdLMY48IlpABQwsXGxmrKlCkuXT1f0rz++usaM2aMUlNTi+22sQBwtWBYAgB4ieTkZH333XdatGiRIiMjKWwBlEpcUAYAXmLbtm3q37+/ypQpk+t2sABQWjAsAQAAAF6DM7cAAADwGhS3AAAA8BoUtwAAAPAazJYgKTs7W3/88YcCAwO5pR8AAMBVyBij1NRUhYaGyscn//OzFLf6857gYWFhng4DAAAAV3D06FFdc801+S6nuJXs97Y+evSogoKCirVvm82mVatWKTo6WlartVj79iTyJu/SgLzJuzQgb/IuLikpKQoLC7PXbfmhuJXsQxGCgoI8UtwGBAQoKCio1H04yJu8vR15k3dpQN7kXdyuNISUC8oAAADgNShuAQAA4DUobgEAAOA1KG4BAADgNTxa3M6dO1fNmjWzX8h1880366uvvrIvHz58uCwWi8PjpptucthHenq6Ro0apWrVqql8+fLq06ePjh07VtypAAAA4Crg0eL2mmuu0UsvvaQtW7Zoy5Ytuu2229S3b1/t3r3bvk63bt2UkJBgf3z55ZcO+xgzZoyWL1+upUuXauPGjTp//rx69eqlrKys4k4HAAAAHubRqcB69+7t8PzFF1/U3Llz9f3336tJkyaSJH9/fwUHB+e5fXJyshYsWKD33ntPXbp0kSQtWbJEYWFhWr16tbp27Vq0CQAAAOCqctXMc5uVlaVly5YpLS1NN998s719/fr1qlGjhipVqqQOHTroxRdfVI0aNSRJW7dulc1mU3R0tH390NBQRUZGatOmTfkWt+np6UpPT7c/T0lJkfTn3G02m60o0stXTn/F3a+nkTd5lwbkTd6lAXmTd3H3fSUWY4wp4lgua+fOnbr55pt16dIlVahQQXFxcerRo4ck6YMPPlCFChUUHh6ugwcP6plnnlFmZqa2bt0qf39/xcXF6d5773UoVCUpOjpaERERmjdv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p5Sdne2wnNvuAgAAwFNcLm7vu+8+bdiwQffcc49CQkIYZwsAAICrhsvF7VdffaUvvvhC7dq1K4p4AAAAgAJzecxt5cqVVaVKlaKIBQAAACgUl4vb559/Xs8++6wuXLhQFPEAAAAABebysIQZM2bot99+U82aNVW7dm1ZrVaH5T/99JPbggMAAABc4XJx269fvyIIAwAAACg8l4vbyZMnF0UcQMkR27/g2/pYpeaDpWmDpWxbAfpeXvC+AQAoBbiJAwAAALyG08Wtj4+PfH19cz0qV66sm266SZ988klRxgkAAABckdPDEpYvz/vr0HPnzunHH3/UkCFDtHjxYt15551uCw4AAABwhdPFbd++ffNdNmzYMDVu3FivvvoqxS0AAAA8xm1jbqOjo/Xrr7+6a3cAAACAy9xW3F68eFFly5Z11+4AAAAAl7mtuJ0/f75uuOEGd+0OAAAAcJnTY27HjRuXZ3tycrK2bNmi3377Td98841LnX/99dd65ZVXtHXrViUkJGj58uUON4kYPny4Fi9e7LBNmzZt9P3339ufp6ena8KECXr//fd18eJFde7cWW+++aauueYal2IBAABAyed0cbtt27Y824OCgtStWzc98sgjCg8Pd6nztLQ0NW/eXPfee69uv/32PNfp1q2bFi5caH9epkwZh+VjxozR559/rqVLl6pq1aoaP368evXqpa1bt8rX19eleAAAAFCyOV3crlu3zu2dd+/eXd27d7/sOv7+/goODs5zWXJyshYsWKD33ntPXbp0kSQtWbJEYWFhWr16tbp27er2mAEAAHD1cvn2u8Vt/fr1qlGjhipVqqQOHTroxRdfVI0aNSRJW7dulc1mU3R0tH390NBQRUZGatOmTfkWt+np6UpPT7c/T0lJkSTZbDbZbAW4JWoh5PRX3P26hY+1wJvafPwc/nV9Bx58vUpr3oVQot/nhUDe5F0akDd5F3ffV2IxxpgijsUpFosl15jbDz74QBUqVFB4eLgOHjyoZ555RpmZmdq6dav8/f0VFxene++916FQlf6cliwiIkLz5s3Ls6/Y2FhNmTIlV3tcXJwCAgLcmhcAAAAK78KFC4qJiVFycrKCgoLyXe+qPnM7aNAg+/8jIyPVqlUrhYeH64svvtCAAQPy3c4YI4vFku/ySZMmOVwgl5KSorCwMEVHR1/2xSoKNptN8fHxioqKktVa8DOCHjFtcIE3tfn4Kb7pIEXt/EDW7EzXdzDpPwXuu9BKa96FUKLf54VA3uRdGpA3eReXnG/ar+SqLm7/LiQkROHh4dq/f78kKTg4WBkZGUpKSlLlypXt6506dUpt27bNdz/+/v7y9/fP1W61Wj32BvVk3wWWXfivJKzZmbIWZD+efK1Ka95uUCLf525A3qULeZcu5F28fTrDqXluW7RooaSkJEnSc889pwsXLhQ8skI4e/asjh49qpCQEElSy5YtZbVaFR8fb18nISFBu3btumxxCwAAAO/kVHG7d+9epaWlSZKmTJmi8+fPu6Xz8+fPa/v27dq+fbsk6eDBg9q+fbuOHDmi8+fPa8KECfruu+906NAhrV+/Xr1791a1atXUv39/SVLFihU1cuRIjR8/XmvWrNG2bds0ZMgQNW3a1D57AgAAAEoPp4YlXH/99br33nt1yy23yBijV199VRUqVMhz3Weffdbpzrds2aJOnTrZn+eMgx02bJjmzp2rnTt36t1339W5c+cUEhKiTp066YMPPlBgYKB9m5kzZ8rPz08DBw6038Rh0aJFzHELAABQCjlV3C5atEiTJ0/W//73P1ksFn311Vfy88u9qcVicam47dixoy43WcPKlSuvuI+yZctqzpw5mjNnjtP9AgAAwDs5Vdw2bNhQS5culST5+PhozZo19rlmAQAAgKuFy7MlZGdnF0UcAAAAQKEVaCqw3377TbNmzdLevXtlsVjUqFEjPf7446pbt6674wMAAACc5tRsCX+1cuVKNW7cWD/++KOaNWumyMhI/fDDD2rSpInDlFwAAABAcXP5zO2TTz6psWPH6qWXXsrV/sQTTygqKsptwQEAAACucPnM7d69ezVy5Mhc7SNGjNCePXvcEhQAAABQEC4Xt9WrV7ffdOGvtm/fzgwKAAAA8CiXhyXcf//9euCBB/T777+rbdu2slgs2rhxo15++WWNHz++KGIEAAAAnOJycfvMM88oMDBQM2bM0KRJkyRJoaGhio2N1ejRo90eIAAAAOAsl4tbi8WisWPHauzYsUpNTZUkh9vhAgAAAJ5SoHluc1DUAgAA4Gri8gVlAAAAwNWK4hYAAABeg+IWAAAAXsOl4tZms6lTp0769ddfiyoeAAAAoMBcKm6tVqt27doli8VSVPEAAAAABebysIShQ4dqwYIFRREL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wyh2e/bs0Ysvvqi0tDRPh0JxezXauXOnbrnlFgUEBCg5OdnT4RSb7du365ZbblFKSoreeustJSYmejqkYrFz50517NhRgwcP1vXXX6/Y2FhPh1Qsdu3apdtvv1233XabOnbsqLffflunT5/2dFhFbteuXerTp49uvvlmtW3bVv/+97918uRJT4dV5H799Vd9/vnnkiSLxVJqCtxffvlFDz/8sKKiojRs2DD9+OOP8vHx8fr89+zZY/98t2zZUqtWrZKPj/eXHMeOHVPt2rXVr18//fLLL54Op9j8/PPPioyMlNVqVfny5SV59o9Y73+nlTBJSUkaOnSoYmJi9MYbb6hZs2bKyMjQiRMnPB1akfr555/Vtm1bPfbYY3rnnXe0c+dOJSQkSPLuv/YPHDigqKgo9e/fX8uWLdM777yj5557TseOHfN0aEXq119/VadOndSkSRPdc8896tevnx544AFNmDBBmzdv9nR4Reb3339X+/btFRkZqaFDh6pfv34aPXq0Jk6c6NV579+/X61bt1bfvn313nvvSSodBe6uXbvUrl07Wa1WNWzYUFlZWRo2bJgOHjzo1d/I5eTduHFjPfzww+revbtGjhypc+fOSfLuM/cWi0VNmjRRRkaGevbsqb1793o6pCK3Y8cOtW3bVhMnTtSkSZPs7TlDFDxyvA2uKvv37zc33nijSUxMNNnZ2ebOO+807dq1MwEBAWb06NHm22+/9XSIbvfTTz8Zi8Vinn76aXtb06ZNze233+7BqIrH008/bXr16mV/npqaanr06GG2bt1qvv32W3Py5EkPRld0Hn/8cRMTE+PQNnjwYFOmTBkzdOhQs3fvXg9FVrRmzJhh2rVr59C2cuVK06BBAxMTE2N27NjhociKztmzZ82AAQNMnz59zKhRo0xgYKBZuHChfXl2drbngitCCQkJpnXr1uYf//iHvW3r1q2madOm5n//+58xxjtzP3z4sGnSpImZNGmSvW316tWmX79+5uzZs+b48eMejK5oZWZmmoSEBNOlSxezd+9e06VLF1OvXj3z22+/GWOM2bJli4cjdL/9+/ebChUqmOHDh9vbXn75ZTN8+HBz5513mi+++MIjcXHm9iqTlpamxMREpaamqm/fvjp//rxGjx6t119/XevWrdPMmTO1b98+T4fpNllZWfroo4/0j3/8Qy+88IL9L7377rtPv/76q37++WdJ3vuX/vHjx+Xj42Mfkzd79mytXLlSDz30kLp166YHH3xQP/74o4ejdC9jjA4cOKCqVatK+r9xtw0bNlT37t316aefKi4uzr6uN0lLS1NGRoays7OVlZWlrKwsRUdH61//+pfWr1+vRYsWSfKuvJOTk1WpUiU99NBDeuKJJ/TII49o9OjR9ly99QzuL7/8ogoVKigmJsaeX4sWLVSxYkVt377ds8EVoRMnTqhJkya6//777W3r16/Xhg0b1KFDBzVt2lTPPvvsVTEu0918fX0VHBysihUr6vTp01q6dKlq1qypnj17ql+/foqNjVVKSoqnw3SrgwcPKj09XaGhodq9e7fat2+vFStWKDExUTabTb169dKrr74qqZh/rnmkpEa+fvvtN1OzZk3z5ptvmqFDh5pffvnFvuzbb781NWvWNPPnz/dghO53/vx5+/9zzmQcPHjQVKlSxUyePNlDURWPBQsWGB8fHzNkyBD7mcv//ve/Jjk52Wzbts00aNDAPPvss54O0+2eeOIJExERYf744w9jjDHHjh0zQUFB5uuvvzYLFiww5cuXN4cPH/ZwlO63bNky4+vrazZv3myMMcZms9nf8x9++KHx8fEx3333nSdDLBK///67/f9HjhwxEydOzHUG12azmYsXL3oguqLx+++/mw8//ND+3GazGWOMiY6OzvPnWlZWVnGFVuSOHTtm///8+fONv7+/WbRokdmyZYv5z3/+YywWi/nkk088GGHRyPks9+/f38TGxtrbg4ODjcViMR9//LGnQitSy5YtM7Vq1TLBwcGmX79+5o8//rC/n2fPnm18fHzMjz/+WKwxceb2KmD+8tdMnTp1NGLECD366KNatmyZfUosY4zatm2rdu3a6ZtvvvFUqG6VM5Y2Z/C59OdZnOzsbNWuXVv/+Mc/9O6773rdmCVjjP2YjxgxQvPnz1e9evV08eJF3Xffferbt68qVKig66+/Xm3bttU333yjzMxMD0ddeH99n99xxx1q0KCBGjRooL59+6pBgwa6++67deutt6pDhw4KCgrSmTNnPBht0ejXr59uv/12DR48WL/88ov8/PzsZ+379eun6667Tlu3bvVwlO4XHh5u/39YWJhGjx6thx9+2OEM7rhx4zR//nyvGWMfERGhO+64Q9KfP+v8/PwkSZUqVbIfc0maMmWKfvjhB6+62CokJESS7D+31q5dq2HDhqlly5aKiYnRDTfcoK+//tqTIRaJnPduly5d7G1Dhw6VJDVv3lzPPPOMdu3a5ZHYitIdd9yh2bNnq0GDBpo4caJCQkLs7+eYmBjVrFlTP/30U7HG5FesvcHByZMnVbNmTYev5SwWix555BGdPHlSCxcu1MaNGxUZGWn/wWiMUd26dT0ZdqHl5J1zxfDfL6zI+VDcfPPNmj17tnbu3KlGjRopOzu7RP8C+Ovxzs7Otuc9YsQI+7/Vq1eXJHuu6enpatKkiVfl7ePjo1atWumNN97Qp59+qtTUVN15550aMmSIJCklJUWVKlVSQECAhyMvnEOHDunTTz9VUlKS6tWrpyFDhsjPz0+PPPKIpk6dqiFDhmjJkiW67rrrJP352S9XrpzKlSvn4cgLJ6+8//5Zr1WrlkaPHi3pz6J24cKF+uabb7R169YS+17/a95169bVPffc4/Ce/6uc4VfPPPOMXnzxRfXu3dsTIbtFfsc7KytLfn5+uu+++xzWT0pKUqVKlXTDDTd4KGL3yCtvX19fSVJoaKg+++wz3Xnnnfrmm2+0evVqRUREqE2bNho+fLg2bdqkMmXKeDiDgskrb0kaMGCAmjdvrtDQUEmyf97Pnz+vmjVrKiIiongDLdbzxLDbs2ePsVgspnfv3va2v34ttXv3bjNkyBBjsVjM+PHjzauvvmrGjx9vqlatWqIvtskr78tdVDF06FBTt25dc+HCheIIr8hc6XgbY8y0adNMuXLlzKZNm8zWrVvNs88+a6pVq2b27NlT3OG6TV5553w9m5/x48ebFi1amLNnzxZ1eEVmx44dplatWqZLly6mdevWxt/f30yZMsW+fOXKlaZ79+6mcuXKZsGCBWbZsmXmySefNFWqVLFffFIS5ZX3c889l+/6v//+u7nuuutMlSpVzM8//1yMkbpXXnk///zzDuvkfN579OhhXnzxRTN79mzj7+9vtm7d6omQ3cKZ4/33n+///Oc/Tf369c2hQ4eKM1S3ulLeP//8s6ldu7Zp1KiRw/E9d+6cOXjwoAcidg9XP9/GGPPUU0+ZyMhI+xC04kJx6wEJCQmmXbt2pkOHDvYxKjkyMzPt/79w4YKZPXu2uemmm0zLli1Nt27dzPbt2z0RsltcLu+//wDM+UXw4YcfmtatW5sTJ04Ua6zudKW8c3I/cuSIufvuu43FYjGNGjUyTZs2Ndu2bfNQ1IV3ubzzGl+4evVq8/DDD5ugoKASnfehQ4dM3bp1zcSJE012drZJSUkx8+bNM40bNzb79++3r3fgwAEzceJEExoaaho3bmxat25tfvrpJw9GXjiXy/uvY25zZGVlmQkTJhg/P78SPUuEq3nHxMQYX19fExgYWOzjEN3J1by/+eYb8+ijj5rKlSuXivf5woULS/SJib+7Ut5//x2+fv1689BDD5nKlSt75Oc5xa0H/Pe//zV33XWX+frrr83atWtNjRo1HH7x//3MVmJiosnMzHS48KokulLeeRU8ly5dMgkJCcUZpttdKe+//kFjjDFff/212b59e4mfBszV4/3DDz+Ye+65x+zatau4Q3WbrKws8/LLL5tu3bqZ5ORke/uWLVtM9erV8/xld/ToUZOUlGSSkpKKMVL3Kmjed999d4n+Q6YgeT/++OMmMDDQ7Ny5szhDdStX8z516pSZO3eu6dKlS6nK21u4mvfJkyfNrFmzTNu2bT32hyvFrQckJSWZr776yv485xd/37597W1ZWVledfWsMc7l7Y3zPjqTd2Zmptfl7uzx/mvely5dKs4Qi8SaNWvMtGnT7M+zs7NNRkaGqVOnTp7zVHvL59zVvI0xXjE7gqt5b9u2zRw9erQ4QywSruadnJxszp07V5whFomCvM+9gat5JyYmevQPdorbq0B2drZZt25drl/8b731ltm0aZPnAiti5E3exvyZd84PR28o8DMyMuz//2s+devWNatXr7Y/j4+P95rC1hjX8r7SuOuSxNm8V61aVaxxFTVX8i6t7/PSmPeqVauuip/jzJZQDI4cOWK/nWzPnj1VsWJFBQQE2K+itVgsat++vT744AMNGjRIAwYMUGhoqN58800dOHDA0+EXGHmTt6t5l8Rbkubk/ccff6hXr14KCgqS1WpVVlaWfH19lZmZqfT0dGVmZtpnQvjnP/+pqVOn6tixY/ari0sa8nY976NHj6pWrVoezqBgON7kXaLy9nR17e1+/vlnU7NmTXPDDTeYSpUqmbCwMDNhwgT7wPO//2UXHx9vLBaLqVKlSom+VR95kzd5/3mGw2azmbS0NBMeHm62bdtmpk6daipUqGC/kUNJRN7kTd7kfTXnTXFbhJKSkkzLli3NP/7xD5OYmGiMMWbKlCnm1ltvNX369LFfOZ1zCj8rK8vcf//9pnz58mb37t0ei7uwyJu8ybuPw8wIxhjTokUL07p1a1OmTJmr5hdAQZA3eZM3eee4WvOmuC1Chw8fNuHh4WblypUO7YsXLzbt27c3MTExDnO/rV+/3jRr1uyqeoMUBHmTtzHkHRMTY5/pIzEx0VSsWLHET3tlDHmT95/Im7yv5rxL5q1gSghfX1+VK1dOf/zxh6T/uxXh0KFDNXjwYO3atUvx8fH29Vu2bKnVq1erVatWHonXXcibvCXy3rVrl1atWiVJqly5st544w3t3LlTTZs29VjM7kDe5C2RN3lf3XlbjPnLDd/hdn369NHRo0e1bt06VapUSZmZmfZb6d555506fvy4Nm3alOdtaEsy8iZv8v6/vCWV+NtH/xV5kzd5k7d09eZ99UVUgqWlpSk1NVUpKSn2tnfeeUfJyckaOHCgMjIy7G8QSeratauMMcrIyCjRv/DJm7zJO/+809PTJemq/AXgDPImb/Im7xwlJe+rM6oSaM+ePRowYIA6dOigRo0a6T//+Y+ys7NVrVo1xcXF6ZdfflF0dLT27dunS5cuSZJ+/PFHBQYGqiSfPCdv8ibvy+ddkpE3eZM3eZfIvIt3iK932r17t6lataoZO3asiYuLM+PGjTNWq9Xh/tk7d+40TZs2NXXr1jWtWrUyvXv3NoGBgWb79u0ejLxwyJu8yftP5E3e5F0ykbd35s2Y20JKTEzU3Xffreuuu06vv/66vf22225T06ZN9frrrzuMM3zjjTd07NgxlStXToMGDVLDhg09FXqhkDd5S+RN3uRN3uRd0pSGvLlDWSHZbDadO3dOd9xxh6T/G1xdp04dnT17VtKfd13KuavHo48+6slw3Ya8yZu8yZu8ybskI2/vzZsxt4VUs2ZNLVmyRLfeeqskKSsrS5JUq1Yth4HWvr6+Sk1NtT8v6SfMyZu8JfLOQd5/Iu+SibzJW/KuvClu3aB+/fqS/vzrx2q1SvrzzXLy5En7OtOmTdP8+fPtc8aV5KvGc5A3eZP3n8ibvEs68iZvb8qbYQlu5OPjYx+nYrFY5OvrK0l69tln9cILL2jbtm0OU2p4C/Imb4m8ydu7kDd5S+RdUvPmzK2b5Zy29/X1VVhYmF599VVNnz5dW7ZsUfPmzT0cXdEhb/Imb/L2NuRN3uRdMvMueeX4VS5nvIrVatX8+fMVFBSkjRs3qkWLFh6OrGiRN3mTt/cib/Imb+/ljXlz5raIdO3aVZK0adMmtWrVysPRFB/yJu/SgLzJuzQgb/IuqZjntgilpaWpfPnyng6j2JF36ULepQt5ly7kXbp4S94UtwAAAPAaDEsAAACA16C4BQAAgNeguAUAAIDXoLgFAACA16C4BQAAgNeguAUAAIDXoLgFAACA16C4BYCrmDFGXbp0sd896K/efPNNVaxYUUeOHPFAZABwdaK4BYCrmMVi0cKFC/XDDz9o3rx59vaDBw/qiSee0Ouvv65rr73WrX3abDa37g8AihPFLQBc5cLCwvT6669rwoQJOnjwoIwxGjlypDp37qwbb7xRPXr0UIUKFVSzZk3dc889OnPmjH3bFStW6JZbblGlSpVUtWpV9erVS7/99pt9+aFDh2SxWPThhx+qY8eOKlu2rJYsWeKJNAHALbj9LgCUEP369dO5c+d0++236/nnn9fmzZvVqlUr3X///Ro6dKguXryoJ554QpmZmVq7dq0k6eOPP5bFYlHTpk2VlpamZ599VocOHdL27dvl4+OjQ4cOKSIiQrVr19aMGTN0ww03yN/fX6GhoR7OFgAKhuIWAEqIU6dOKTIyUmfPntVHH32kbdu26YcfftDKlSvt6xw7dkxhYWHat2+fGjRokGsfp0+fVo0aNbRz505FRkbai9tZs2bp8ccfL850AKBIMCwBAEqIGjVq6IEHHlCjRo3Uv39/bd26VevWrVOFChXsj+uuu06S7EMPfvvtN8XExKhOnToKCgpSRESEJOW6CK1Vq1bFmwwAFBE/TwcAAHCen5+f/Pz+/NGdnZ2t3r176+WXX861XkhIiCSpd+/eCgsL0/z58xUaGqrs7GxFRkYqIyPDYf3y5csXffAAUAwobgGghGrRooU+/vhj1a5d217w/tXZs2e1d+9ezZs3T7feeqskaePGjcUdJgAUK4YlAEAJ9eijjyoxMVF33323fvzxR/3+++9atWqVRowYoaysLFWuXFlVq1bVv//9bx04cEBr167VuHHjPB02ABQpilsAKKFCQ0P17bffKisrS127dlVkZKQef/xxVaxYUT4+PvLx8dHSpUu1detWRUZGauzYsXrllVc8HTYAFClmSwAAAIDX4MwtAAAAvAbFLQAAALwGxS0AAAC8BsUtAAAAvAbFLQAAALwGxS0AAAC8BsUtAAAAvAbFLQAAALwGxS0AAAC8BsUtAAAAvAbFLQAAALzG/wPcBnodDpyXswAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = filtered_df_projectJob.copy()\n", + "df['lastUpdated'] = pd.to_datetime(df['lastUpdated'], utc=True)\n", + " # Extract the year from 'last_updated'\n", + "df['lastUpdated'] = df['lastUpdated'].dt.year\n", + "#Count the number of unique users per year\n", + "unique_users_by_year = df.groupby('lastUpdated')['projectUuid'].nunique()\n", + "# Plot the number of unique users per year\n", + "plt.figure(figsize=(8, 5))\n", + "unique_users_by_year.plot(kind='bar', color='coral')\n", + "plt.title('Number of Unique ProjectUUID For Each Year')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Number of Unique ProjectUUID')\n", + "plt.xticks(rotation=45)\n", + "plt.grid(True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d10bbd4d-621e-48d2-889c-f4f0221ba7d1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "46ae18e3-355d-48d2-8d50-43bf51985573", + "metadata": {}, + "outputs": [], + "source": [ + "# # number of unique users\n", + "# n = 20\n", + "# # Group by 'username' and count the number of unique 'id' (projects) each user has\n", + "# user_unique_projects = filtered_df_projectJob.groupby('username')['uuid'].nunique()\n", + "# # Sort users by the number of unique projects (descending order)\n", + "# top_n_users = user_unique_projects.sort_values(ascending=False).head(n)\n", + "# # Plot the top 15 users with their unique number of projects\n", + "# plt.figure(figsize=(10, 6))\n", + "# top_n_users.plot(kind='bar', color='royalblue')\n", + "# plt.title(f'Top {n} Users with Unique Projects')\n", + "# plt.xlabel('Username')\n", + "# plt.ylabel('Number of Unique Projects')\n", + "# plt.xticks(rotation=45, ha='right')\n", + "# plt.grid(True)\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "6960ed90-610f-4bb6-bf9a-045cbc2e6e73", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "projectUuid\n", + "0001430750947192-5056a550b8-0001-012 121\n", + "3057760388135251475-242ac11a-0001-012 114\n", + "0001428091338341-5056a550b8-0001-012 103\n", + "5199144433477554666-242ac116-0001-012 100\n", + "46850669884665370-242ac114-0001-012 73\n", + " ... \n", + "8068155099655311846-242ac11c-0001-012 1\n", + "5211345989129277926-242ac11c-0001-012 1\n", + "7349712692870124006-242ac11c-0001-012 1\n", + "7671983811578696166-242ac11c-0001-012 1\n", + "4542076765918597606-242ac11c-0001-012 1\n", + "Name: count, Length: 1086, dtype: int64" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectJob.projectUuid.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "ac66f5f2-f7e1-45df-b6df-13f85ff430ca", + "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", + " \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", + " \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", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
10001396029083309-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395939852441-5056a550b8-0001-002Nonevdjauthuploadedgitprep-latest.zipapplication/zip2014-03-28T12:51:23.309-05:00
20001396029805022-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395956517022-5056a550b8-0001-002NonevdjauthuploadedInduction-28.zipapplication/zip2014-03-28T13:03:25.022-05:00
30001396030144907-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396030144691-5056a550b8-0001-002Nonevdjauthuploadedtest10.txttext/plain2014-03-28T13:09:04.907-05:00
40001396039988083-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396039987794-5056a550b8-0001-002Nonevdjauthuploadedtest11.txttext/plain2014-03-28T15:53:08.083-05:00
50001396043273330-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396043273029-5056a550b8-0001-002Nonevdjauthuploadedtest14.txttext/plain2014-03-28T16:47:53.330-05:00
..............................
359435338423137409494545-242ac118-0001-0125456400192359305711-242ac118-0001-0126793987554023894545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R1_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359441335427718191574545-242ac118-0001-0125456400192359305711-242ac118-0001-0122833383462017494545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R2_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359451840700597200490991-242ac118-0001-0125456400192359305711-242ac118-0001-012366925519251050991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R1_001.fastq.gzNone2025-01-13T16:40:43.277-06:00
359465023614960920170991-242ac118-0001-0125456400192359305711-242ac118-0001-0123549539235260010991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R2_001.fastq.gzNone2025-01-13T16:40:43.281-06:00
359477830832104257678865-242ac118-0001-0125456400192359305711-242ac118-0001-0128017190735231118865-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneprimers.fastaNone2025-01-13T16:41:49.035-06:00
\n", + "

29194 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "1 0001396029083309-5056a550b8-0001-012 \n", + "2 0001396029805022-5056a550b8-0001-012 \n", + "3 0001396030144907-5056a550b8-0001-012 \n", + "4 0001396039988083-5056a550b8-0001-012 \n", + "5 0001396043273330-5056a550b8-0001-012 \n", + "... ... \n", + "35943 5338423137409494545-242ac118-0001-012 \n", + "35944 1335427718191574545-242ac118-0001-012 \n", + "35945 1840700597200490991-242ac118-0001-012 \n", + "35946 5023614960920170991-242ac118-0001-012 \n", + "35947 7830832104257678865-242ac118-0001-012 \n", + "\n", + " projectUuid \\\n", + "1 0001395346788177-5056a550b8-0001-012 \n", + "2 0001395346788177-5056a550b8-0001-012 \n", + "3 0001395346788177-5056a550b8-0001-012 \n", + "4 0001395346788177-5056a550b8-0001-012 \n", + "5 0001395346788177-5056a550b8-0001-012 \n", + "... ... \n", + "35943 5456400192359305711-242ac118-0001-012 \n", + "35944 5456400192359305711-242ac118-0001-012 \n", + "35945 5456400192359305711-242ac118-0001-012 \n", + "35946 5456400192359305711-242ac118-0001-012 \n", + "35947 5456400192359305711-242ac118-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "1 0001395939852441-5056a550b8-0001-002 \n", + "2 0001395956517022-5056a550b8-0001-002 \n", + "3 0001396030144691-5056a550b8-0001-002 \n", + "4 0001396039987794-5056a550b8-0001-002 \n", + "5 0001396043273029-5056a550b8-0001-002 \n", + "... ... \n", + "35943 6793987554023894545-242ac112-0001-002 \n", + "35944 2833383462017494545-242ac112-0001-002 \n", + "35945 366925519251050991-242ac112-0001-002 \n", + "35946 3549539235260010991-242ac112-0001-002 \n", + "35947 8017190735231118865-242ac112-0001-002 \n", + "\n", + " associationIds_2 owner task_type \\\n", + "1 None vdjauth uploaded \n", + "2 None vdjauth uploaded \n", + "3 None vdjauth uploaded \n", + "4 None vdjauth uploaded \n", + "5 None vdjauth uploaded \n", + "... ... ... ... \n", + "35943 5456400192359305711-242ac118-0001-012 vdj None \n", + "35944 5456400192359305711-242ac118-0001-012 vdj None \n", + "35945 5456400192359305711-242ac118-0001-012 vdj None \n", + "35946 5456400192359305711-242ac118-0001-012 vdj None \n", + "35947 5456400192359305711-242ac118-0001-012 vdj None \n", + "\n", + " file_name mimeType \\\n", + "1 gitprep-latest.zip application/zip \n", + "2 Induction-28.zip application/zip \n", + "3 test10.txt text/plain \n", + "4 test11.txt text/plain \n", + "5 test14.txt text/plain \n", + "... ... ... \n", + "35943 4468_S24_L001_R1_001.fastq.gz None \n", + "35944 4468_S24_L001_R2_001.fastq.gz None \n", + "35945 6634_S25_L001_R1_001.fastq.gz None \n", + "35946 6634_S25_L001_R2_001.fastq.gz None \n", + "35947 primers.fasta None \n", + "\n", + " last_updated \n", + "1 2014-03-28T12:51:23.309-05:00 \n", + "2 2014-03-28T13:03:25.022-05:00 \n", + "3 2014-03-28T13:09:04.907-05:00 \n", + "4 2014-03-28T15:53:08.083-05:00 \n", + "5 2014-03-28T16:47:53.330-05:00 \n", + "... ... \n", + "35943 2025-01-13T16:40:40.230-06:00 \n", + "35944 2025-01-13T16:40:40.230-06:00 \n", + "35945 2025-01-13T16:40:43.277-06:00 \n", + "35946 2025-01-13T16:40:43.281-06:00 \n", + "35947 2025-01-13T16:41:49.035-06:00 \n", + "\n", + "[29194 rows x 9 columns]" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_projectFiles = df_projectFiles[df_projectFiles.projectUuid.isin(filtered_metadata_perms_df['uuid'])]\n", + "filtered_projectFiles" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "c78f0e99-576a-4d64-aa3b-b95e263a45c4", + "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", + " \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", + " \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", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
00001395955349445-5056a550b8-0001-012NoneNonevdjauthNoneNone2014-03-27T16:22:29.444-05:00
10001396029083309-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395939852441-5056a550b8-0001-002Nonevdjauthuploadedgitprep-latest.zipapplication/zip2014-03-28T12:51:23.309-05:00
20001396029805022-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395956517022-5056a550b8-0001-002NonevdjauthuploadedInduction-28.zipapplication/zip2014-03-28T13:03:25.022-05:00
30001396030144907-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396030144691-5056a550b8-0001-002Nonevdjauthuploadedtest10.txttext/plain2014-03-28T13:09:04.907-05:00
40001396039988083-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396039987794-5056a550b8-0001-002Nonevdjauthuploadedtest11.txttext/plain2014-03-28T15:53:08.083-05:00
..............................
359435338423137409494545-242ac118-0001-0125456400192359305711-242ac118-0001-0126793987554023894545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R1_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359441335427718191574545-242ac118-0001-0125456400192359305711-242ac118-0001-0122833383462017494545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R2_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359451840700597200490991-242ac118-0001-0125456400192359305711-242ac118-0001-012366925519251050991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R1_001.fastq.gzNone2025-01-13T16:40:43.277-06:00
359465023614960920170991-242ac118-0001-0125456400192359305711-242ac118-0001-0123549539235260010991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R2_001.fastq.gzNone2025-01-13T16:40:43.281-06:00
359477830832104257678865-242ac118-0001-0125456400192359305711-242ac118-0001-0128017190735231118865-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneprimers.fastaNone2025-01-13T16:41:49.035-06:00
\n", + "

35948 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "0 0001395955349445-5056a550b8-0001-012 \n", + "1 0001396029083309-5056a550b8-0001-012 \n", + "2 0001396029805022-5056a550b8-0001-012 \n", + "3 0001396030144907-5056a550b8-0001-012 \n", + "4 0001396039988083-5056a550b8-0001-012 \n", + "... ... \n", + "35943 5338423137409494545-242ac118-0001-012 \n", + "35944 1335427718191574545-242ac118-0001-012 \n", + "35945 1840700597200490991-242ac118-0001-012 \n", + "35946 5023614960920170991-242ac118-0001-012 \n", + "35947 7830832104257678865-242ac118-0001-012 \n", + "\n", + " projectUuid \\\n", + "0 \n", + "1 0001395346788177-5056a550b8-0001-012 \n", + "2 0001395346788177-5056a550b8-0001-012 \n", + "3 0001395346788177-5056a550b8-0001-012 \n", + "4 0001395346788177-5056a550b8-0001-012 \n", + "... ... \n", + "35943 5456400192359305711-242ac118-0001-012 \n", + "35944 5456400192359305711-242ac118-0001-012 \n", + "35945 5456400192359305711-242ac118-0001-012 \n", + "35946 5456400192359305711-242ac118-0001-012 \n", + "35947 5456400192359305711-242ac118-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "0 None \n", + "1 0001395939852441-5056a550b8-0001-002 \n", + "2 0001395956517022-5056a550b8-0001-002 \n", + "3 0001396030144691-5056a550b8-0001-002 \n", + "4 0001396039987794-5056a550b8-0001-002 \n", + "... ... \n", + "35943 6793987554023894545-242ac112-0001-002 \n", + "35944 2833383462017494545-242ac112-0001-002 \n", + "35945 366925519251050991-242ac112-0001-002 \n", + "35946 3549539235260010991-242ac112-0001-002 \n", + "35947 8017190735231118865-242ac112-0001-002 \n", + "\n", + " associationIds_2 owner task_type \\\n", + "0 None vdjauth \n", + "1 None vdjauth uploaded \n", + "2 None vdjauth uploaded \n", + "3 None vdjauth uploaded \n", + "4 None vdjauth uploaded \n", + "... ... ... ... \n", + "35943 5456400192359305711-242ac118-0001-012 vdj None \n", + "35944 5456400192359305711-242ac118-0001-012 vdj None \n", + "35945 5456400192359305711-242ac118-0001-012 vdj None \n", + "35946 5456400192359305711-242ac118-0001-012 vdj None \n", + "35947 5456400192359305711-242ac118-0001-012 vdj None \n", + "\n", + " file_name mimeType \\\n", + "0 None None \n", + "1 gitprep-latest.zip application/zip \n", + "2 Induction-28.zip application/zip \n", + "3 test10.txt text/plain \n", + "4 test11.txt text/plain \n", + "... ... ... \n", + "35943 4468_S24_L001_R1_001.fastq.gz None \n", + "35944 4468_S24_L001_R2_001.fastq.gz None \n", + "35945 6634_S25_L001_R1_001.fastq.gz None \n", + "35946 6634_S25_L001_R2_001.fastq.gz None \n", + "35947 primers.fasta None \n", + "\n", + " last_updated \n", + "0 2014-03-27T16:22:29.444-05:00 \n", + "1 2014-03-28T12:51:23.309-05:00 \n", + "2 2014-03-28T13:03:25.022-05:00 \n", + "3 2014-03-28T13:09:04.907-05:00 \n", + "4 2014-03-28T15:53:08.083-05:00 \n", + "... ... \n", + "35943 2025-01-13T16:40:40.230-06:00 \n", + "35944 2025-01-13T16:40:40.230-06:00 \n", + "35945 2025-01-13T16:40:43.277-06:00 \n", + "35946 2025-01-13T16:40:43.281-06:00 \n", + "35947 2025-01-13T16:41:49.035-06:00 \n", + "\n", + "[35948 rows x 9 columns]" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectFiles.task_type.nunique()\n", + "df_projectFiles.associationIds_1.nunique()\n", + "df_projectFiles.projectUuid.value_counts()\n", + "df_projectFiles" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "3cd9e0c3-37c9-41d9-bb98-3373235ad548", + "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", + " \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", + " \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", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
10001396029083309-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395939852441-5056a550b8-0001-002Nonevdjauthuploadedgitprep-latest.zipapplication/zip2014-03-28T12:51:23.309-05:00
20001396029805022-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395956517022-5056a550b8-0001-002NonevdjauthuploadedInduction-28.zipapplication/zip2014-03-28T13:03:25.022-05:00
30001396030144907-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396030144691-5056a550b8-0001-002Nonevdjauthuploadedtest10.txttext/plain2014-03-28T13:09:04.907-05:00
40001396039988083-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396039987794-5056a550b8-0001-002Nonevdjauthuploadedtest11.txttext/plain2014-03-28T15:53:08.083-05:00
50001396043273330-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396043273029-5056a550b8-0001-002Nonevdjauthuploadedtest14.txttext/plain2014-03-28T16:47:53.330-05:00
..............................
359435338423137409494545-242ac118-0001-0125456400192359305711-242ac118-0001-0126793987554023894545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R1_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359441335427718191574545-242ac118-0001-0125456400192359305711-242ac118-0001-0122833383462017494545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R2_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359451840700597200490991-242ac118-0001-0125456400192359305711-242ac118-0001-012366925519251050991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R1_001.fastq.gzNone2025-01-13T16:40:43.277-06:00
359465023614960920170991-242ac118-0001-0125456400192359305711-242ac118-0001-0123549539235260010991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R2_001.fastq.gzNone2025-01-13T16:40:43.281-06:00
359477830832104257678865-242ac118-0001-0125456400192359305711-242ac118-0001-0128017190735231118865-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneprimers.fastaNone2025-01-13T16:41:49.035-06:00
\n", + "

29194 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "1 0001396029083309-5056a550b8-0001-012 \n", + "2 0001396029805022-5056a550b8-0001-012 \n", + "3 0001396030144907-5056a550b8-0001-012 \n", + "4 0001396039988083-5056a550b8-0001-012 \n", + "5 0001396043273330-5056a550b8-0001-012 \n", + "... ... \n", + "35943 5338423137409494545-242ac118-0001-012 \n", + "35944 1335427718191574545-242ac118-0001-012 \n", + "35945 1840700597200490991-242ac118-0001-012 \n", + "35946 5023614960920170991-242ac118-0001-012 \n", + "35947 7830832104257678865-242ac118-0001-012 \n", + "\n", + " projectUuid \\\n", + "1 0001395346788177-5056a550b8-0001-012 \n", + "2 0001395346788177-5056a550b8-0001-012 \n", + "3 0001395346788177-5056a550b8-0001-012 \n", + "4 0001395346788177-5056a550b8-0001-012 \n", + "5 0001395346788177-5056a550b8-0001-012 \n", + "... ... \n", + "35943 5456400192359305711-242ac118-0001-012 \n", + "35944 5456400192359305711-242ac118-0001-012 \n", + "35945 5456400192359305711-242ac118-0001-012 \n", + "35946 5456400192359305711-242ac118-0001-012 \n", + "35947 5456400192359305711-242ac118-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "1 0001395939852441-5056a550b8-0001-002 \n", + "2 0001395956517022-5056a550b8-0001-002 \n", + "3 0001396030144691-5056a550b8-0001-002 \n", + "4 0001396039987794-5056a550b8-0001-002 \n", + "5 0001396043273029-5056a550b8-0001-002 \n", + "... ... \n", + "35943 6793987554023894545-242ac112-0001-002 \n", + "35944 2833383462017494545-242ac112-0001-002 \n", + "35945 366925519251050991-242ac112-0001-002 \n", + "35946 3549539235260010991-242ac112-0001-002 \n", + "35947 8017190735231118865-242ac112-0001-002 \n", + "\n", + " associationIds_2 owner task_type \\\n", + "1 None vdjauth uploaded \n", + "2 None vdjauth uploaded \n", + "3 None vdjauth uploaded \n", + "4 None vdjauth uploaded \n", + "5 None vdjauth uploaded \n", + "... ... ... ... \n", + "35943 5456400192359305711-242ac118-0001-012 vdj None \n", + "35944 5456400192359305711-242ac118-0001-012 vdj None \n", + "35945 5456400192359305711-242ac118-0001-012 vdj None \n", + "35946 5456400192359305711-242ac118-0001-012 vdj None \n", + "35947 5456400192359305711-242ac118-0001-012 vdj None \n", + "\n", + " file_name mimeType \\\n", + "1 gitprep-latest.zip application/zip \n", + "2 Induction-28.zip application/zip \n", + "3 test10.txt text/plain \n", + "4 test11.txt text/plain \n", + "5 test14.txt text/plain \n", + "... ... ... \n", + "35943 4468_S24_L001_R1_001.fastq.gz None \n", + "35944 4468_S24_L001_R2_001.fastq.gz None \n", + "35945 6634_S25_L001_R1_001.fastq.gz None \n", + "35946 6634_S25_L001_R2_001.fastq.gz None \n", + "35947 primers.fasta None \n", + "\n", + " last_updated \n", + "1 2014-03-28T12:51:23.309-05:00 \n", + "2 2014-03-28T13:03:25.022-05:00 \n", + "3 2014-03-28T13:09:04.907-05:00 \n", + "4 2014-03-28T15:53:08.083-05:00 \n", + "5 2014-03-28T16:47:53.330-05:00 \n", + "... ... \n", + "35943 2025-01-13T16:40:40.230-06:00 \n", + "35944 2025-01-13T16:40:40.230-06:00 \n", + "35945 2025-01-13T16:40:43.277-06:00 \n", + "35946 2025-01-13T16:40:43.281-06:00 \n", + "35947 2025-01-13T16:41:49.035-06:00 \n", + "\n", + "[29194 rows x 9 columns]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_df_projectFiles = df_projectFiles[df_projectFiles.projectUuid.isin(filtered_metadata_perms_df['uuid'])]\n", + "filtered_df_projectFiles" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "96384f71-90ec-41d0-8b3b-4cda8e4a93fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1916" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectFiles.projectUuid.nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "552ed66a-fa62-4cdd-9b88-2b2ee726cc05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1223" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_df_projectFiles.projectUuid.nunique()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "ed51ee48-e1e0-4629-8e20-b601b98f0b46", + "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", + " \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", + " \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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
0ls6.tacc.utexas.eduvdjrepcalc-ls6-2.0u8FINISHED2025-01-25 15:43:51.678c7cd08ad-a560-4574-a363-b9cc4c5e051d-007/projects/5456400192359305711-242ac118-0001-01...FINISHEDeb27e311-4a37-4aeb-b649-056704dd2711schristley
1ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FINISHED2025-01-24 04:20:37.8919188bf80-e868-4e05-a6b4-308c044108d7-007/projects/5456400192359305711-242ac118-0001-01...FINISHED5e2528fd-25d6-4473-9287-6a67a8de8391schristley
2ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FAILED2025-01-22 15:04:46.891773a5cb7-b369-4517-a221-83d57e3899e5-007/projects/5199144433477554666-242ac116-0001-01...FAILED_SKIP_ARCHIVE78b89c14-3dec-4aa8-acf8-d2592064e3a4scott_public
3ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-14 22:31:02.980c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007/projects/5456400192359305711-242ac118-0001-01...FINISHED1e2f122d-5e5b-4f14-931f-ca55803115ffschristley
4ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-09 04:21:12.476ad02cb34-250e-48cb-a06e-973e431b62ee-007/projects/6589143665654501871-242ac118-0001-01...FINISHED1069949d-1d9a-453f-80b8-7372019aba31schristley
.................................
15515lonestar.tacc.utexas.edumlevinvdj_pipe-0.0.16u2FINISHED2014-11-04 18:33:43.0000001415039388481-5056a550b8-0001-007/projects/0001415029221897-5056a550b8-0001-012...FINISHEDf1941c26-0827-4812-a7e3-c03e6ba53803NaN
15574lonestar.tacc.utexas.edumlevinvdj_pipe-0.0.16u2FINISHED2014-09-11 17:09:18.0000001410472799004-5056a550b8-0001-007/projects/0001410472310261-5056a550b8-0001-012...FINISHED522d82f1-159e-4b9e-8766-3ad0a23b6985NaN
15672lonestar.tacc.utexas.eduesalinavdj_pipe-0.0.12u1FINISHED2014-07-01 13:34:09.0000001404239409637-5056a550b8-0001-007/projects/0001402413135675-5056a550b8-0001-012...FINISHED5300feea-5337-4955-aa40-8a4c9b955e5dNaN
15700lonestar.tacc.utexas.eduesalinavdj_pipe-0.0.12u1FINISHED2014-06-12 09:43:38.0000001402584065562-5056a550b8-0001-007/projects/0001402413135675-5056a550b8-0001-012...FINISHEDeded8505-6fc6-477a-b5c5-ffb3e50eb731NaN
15701lonestar.tacc.utexas.eduesalinavdj_pipe-0.0.12u1FINISHED2014-06-10 10:55:42.0000001402415655772-5056a550b8-0001-007/projects/0001402413135675-5056a550b8-0001-012...FINISHEDa1227a4c-2c94-4ff9-9542-69ea1db4e164NaN
\n", + "

5477 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "0 ls6.tacc.utexas.edu vdj repcalc-ls6-2.0u8 FINISHED \n", + "1 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FINISHED \n", + "2 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FAILED \n", + "3 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "4 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "... ... ... ... ... \n", + "15515 lonestar.tacc.utexas.edu mlevin vdj_pipe-0.0.16u2 FINISHED \n", + "15574 lonestar.tacc.utexas.edu mlevin vdj_pipe-0.0.16u2 FINISHED \n", + "15672 lonestar.tacc.utexas.edu esalina vdj_pipe-0.0.12u1 FINISHED \n", + "15700 lonestar.tacc.utexas.edu esalina vdj_pipe-0.0.12u1 FINISHED \n", + "15701 lonestar.tacc.utexas.edu esalina vdj_pipe-0.0.12u1 FINISHED \n", + "\n", + " last_updated uuid \\\n", + "0 2025-01-25 15:43:51.678 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "1 2025-01-24 04:20:37.891 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "2 2025-01-22 15:04:46.891 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "3 2025-01-14 22:31:02.980 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "4 2025-01-09 04:21:12.476 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "... ... ... \n", + "15515 2014-11-04 18:33:43.000 0001415039388481-5056a550b8-0001-007 \n", + "15574 2014-09-11 17:09:18.000 0001410472799004-5056a550b8-0001-007 \n", + "15672 2014-07-01 13:34:09.000 0001404239409637-5056a550b8-0001-007 \n", + "15700 2014-06-12 09:43:38.000 0001402584065562-5056a550b8-0001-007 \n", + "15701 2014-06-10 10:55:42.000 0001402415655772-5056a550b8-0001-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "0 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "1 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "2 /projects/5199144433477554666-242ac116-0001-01... FAILED_SKIP_ARCHIVE \n", + "3 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "4 /projects/6589143665654501871-242ac118-0001-01... FINISHED \n", + "... ... ... \n", + "15515 /projects/0001415029221897-5056a550b8-0001-012... FINISHED \n", + "15574 /projects/0001410472310261-5056a550b8-0001-012... FINISHED \n", + "15672 /projects/0001402413135675-5056a550b8-0001-012... FINISHED \n", + "15700 /projects/0001402413135675-5056a550b8-0001-012... FINISHED \n", + "15701 /projects/0001402413135675-5056a550b8-0001-012... FINISHED \n", + "\n", + " update_token parameters.Creator \n", + "0 eb27e311-4a37-4aeb-b649-056704dd2711 schristley \n", + "1 5e2528fd-25d6-4473-9287-6a67a8de8391 schristley \n", + "2 78b89c14-3dec-4aa8-acf8-d2592064e3a4 scott_public \n", + "3 1e2f122d-5e5b-4f14-931f-ca55803115ff schristley \n", + "4 1069949d-1d9a-453f-80b8-7372019aba31 schristley \n", + "... ... ... \n", + "15515 f1941c26-0827-4812-a7e3-c03e6ba53803 NaN \n", + "15574 522d82f1-159e-4b9e-8766-3ad0a23b6985 NaN \n", + "15672 5300feea-5337-4955-aa40-8a4c9b955e5d NaN \n", + "15700 eded8505-6fc6-477a-b5c5-ffb3e50eb731 NaN \n", + "15701 a1227a4c-2c94-4ff9-9542-69ea1db4e164 NaN \n", + "\n", + "[5477 rows x 10 columns]" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_jobs_all_df = jobs_all_df[jobs_all_df.uuid.isin(filtered_df_projectJob['jobUuid'])]\n", + "filtered_jobs_all_df" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "59652cd5-4817-4cd8-9bc4-fb4f013f0c27", + "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", + " \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", + " \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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
0ls6.tacc.utexas.eduvdjrepcalc-ls6-2.0u8FINISHED2025-01-25 15:43:51.678c7cd08ad-a560-4574-a363-b9cc4c5e051d-007/projects/5456400192359305711-242ac118-0001-01...FINISHEDeb27e311-4a37-4aeb-b649-056704dd2711schristley
1ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FINISHED2025-01-24 04:20:37.8919188bf80-e868-4e05-a6b4-308c044108d7-007/projects/5456400192359305711-242ac118-0001-01...FINISHED5e2528fd-25d6-4473-9287-6a67a8de8391schristley
2ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FAILED2025-01-22 15:04:46.891773a5cb7-b369-4517-a221-83d57e3899e5-007/projects/5199144433477554666-242ac116-0001-01...FAILED_SKIP_ARCHIVE78b89c14-3dec-4aa8-acf8-d2592064e3a4scott_public
3ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-14 22:31:02.980c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007/projects/5456400192359305711-242ac118-0001-01...FINISHED1e2f122d-5e5b-4f14-931f-ca55803115ffschristley
4ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-09 04:21:12.476ad02cb34-250e-48cb-a06e-973e431b62ee-007/projects/6589143665654501871-242ac118-0001-01...FINISHED1069949d-1d9a-453f-80b8-7372019aba31schristley
.................................
15776my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 16:38:39.0000001396301879424-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/foo123-201...FINISHED3b188d18-7955-49b6-bc21-10a557ced542NaN
15777my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 15:44:00.0000001396298592090-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FINISHEDc9dd99e9-2ef2-4fd7-b211-26b56162b21eNaN
15778my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 15:35:18.0000001396298085562-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FINISHED282196b2-9972-4615-944d-777e1ee7826cNaN
15779my-lonestarjfonnermy-vdj_pipe-0.0.4FAILED2014-03-31 15:28:36.0000001396297676287-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FAILEDdc81e8a3-9869-47cc-8bee-3d254bb805d1NaN
15780my-lonestarjfonnermy-vdj_pipe-0.0.4FAILED2014-03-31 14:50:18.0000001396295290656-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FAILED08f920a6-e4c1-4029-9ac2-e1de96e7d23aNaN
\n", + "

15781 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "0 ls6.tacc.utexas.edu vdj repcalc-ls6-2.0u8 FINISHED \n", + "1 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FINISHED \n", + "2 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FAILED \n", + "3 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "4 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "... ... ... ... ... \n", + "15776 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15777 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15778 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15779 my-lonestar jfonner my-vdj_pipe-0.0.4 FAILED \n", + "15780 my-lonestar jfonner my-vdj_pipe-0.0.4 FAILED \n", + "\n", + " last_updated uuid \\\n", + "0 2025-01-25 15:43:51.678 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "1 2025-01-24 04:20:37.891 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "2 2025-01-22 15:04:46.891 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "3 2025-01-14 22:31:02.980 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "4 2025-01-09 04:21:12.476 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "... ... ... \n", + "15776 2014-03-31 16:38:39.000 0001396301879424-5056a550b8-0001-007 \n", + "15777 2014-03-31 15:44:00.000 0001396298592090-5056a550b8-0001-007 \n", + "15778 2014-03-31 15:35:18.000 0001396298085562-5056a550b8-0001-007 \n", + "15779 2014-03-31 15:28:36.000 0001396297676287-5056a550b8-0001-007 \n", + "15780 2014-03-31 14:50:18.000 0001396295290656-5056a550b8-0001-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "0 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "1 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "2 /projects/5199144433477554666-242ac116-0001-01... FAILED_SKIP_ARCHIVE \n", + "3 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "4 /projects/6589143665654501871-242ac118-0001-01... FINISHED \n", + "... ... ... \n", + "15776 /scratch/01114/jfonner/vdj/analyses/foo123-201... FINISHED \n", + "15777 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FINISHED \n", + "15778 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FINISHED \n", + "15779 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FAILED \n", + "15780 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FAILED \n", + "\n", + " update_token parameters.Creator \n", + "0 eb27e311-4a37-4aeb-b649-056704dd2711 schristley \n", + "1 5e2528fd-25d6-4473-9287-6a67a8de8391 schristley \n", + "2 78b89c14-3dec-4aa8-acf8-d2592064e3a4 scott_public \n", + "3 1e2f122d-5e5b-4f14-931f-ca55803115ff schristley \n", + "4 1069949d-1d9a-453f-80b8-7372019aba31 schristley \n", + "... ... ... \n", + "15776 3b188d18-7955-49b6-bc21-10a557ced542 NaN \n", + "15777 c9dd99e9-2ef2-4fd7-b211-26b56162b21e NaN \n", + "15778 282196b2-9972-4615-944d-777e1ee7826c NaN \n", + "15779 dc81e8a3-9869-47cc-8bee-3d254bb805d1 NaN \n", + "15780 08f920a6-e4c1-4029-9ac2-e1de96e7d23a NaN \n", + "\n", + "[15781 rows x 10 columns]" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_jobs_all_df['parameters.Creator'].value_counts()\n", + "filtered_jobs_all_df['uuid'].value_counts()\n", + "jobs_all_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "33845402-0431-4f5a-a7c3-ef8e62e943d7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(5505, 5)\n" + ] + }, + { + "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", + "
uuidownerprojectUuidjobUuidlastUpdated
360001402415655966-5056a550b8-0001-012vdj0001402413135675-5056a550b8-0001-0120001402415655772-5056a550b8-0001-0072017-01-12T17:35:19.626-06:00
370001402584065947-5056a550b8-0001-012vdj0001402413135675-5056a550b8-0001-0120001402584065562-5056a550b8-0001-0072017-01-12T17:35:16.665-06:00
640001404239409839-5056a550b8-0001-012vdj0001402413135675-5056a550b8-0001-0120001404239409637-5056a550b8-0001-0072017-01-12T17:35:13.705-06:00
1570001410472799189-5056a550b8-0001-012vdj0001410472310261-5056a550b8-0001-0120001410472799004-5056a550b8-0001-0072017-01-12T17:36:48.130-06:00
2140001415039388759-5056a550b8-0001-012vdj0001415029221897-5056a550b8-0001-0120001415039388481-5056a550b8-0001-0072017-01-12T17:37:17.842-06:00
\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "36 0001402415655966-5056a550b8-0001-012 vdj \n", + "37 0001402584065947-5056a550b8-0001-012 vdj \n", + "64 0001404239409839-5056a550b8-0001-012 vdj \n", + "157 0001410472799189-5056a550b8-0001-012 vdj \n", + "214 0001415039388759-5056a550b8-0001-012 vdj \n", + "\n", + " projectUuid \\\n", + "36 0001402413135675-5056a550b8-0001-012 \n", + "37 0001402413135675-5056a550b8-0001-012 \n", + "64 0001402413135675-5056a550b8-0001-012 \n", + "157 0001410472310261-5056a550b8-0001-012 \n", + "214 0001415029221897-5056a550b8-0001-012 \n", + "\n", + " jobUuid lastUpdated \n", + "36 0001402415655772-5056a550b8-0001-007 2017-01-12T17:35:19.626-06:00 \n", + "37 0001402584065562-5056a550b8-0001-007 2017-01-12T17:35:16.665-06:00 \n", + "64 0001404239409637-5056a550b8-0001-007 2017-01-12T17:35:13.705-06:00 \n", + "157 0001410472799004-5056a550b8-0001-007 2017-01-12T17:36:48.130-06:00 \n", + "214 0001415039388481-5056a550b8-0001-007 2017-01-12T17:37:17.842-06:00 " + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(filtered_df_projectJob.shape)\n", + "filtered_df_projectJob.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "a5a1c832-2af1-4387-a3d8-b522e35268dd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(642544, 7)\n" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idlast_updatedpermissionusernameuuidtenant_idyear
3142014-01-29 10:28:16READ_WRITEjfonner0001389977207738-5056a550b8-0001-012vdjserver.org2014
4172014-01-29 14:06:38READ_WRITEadshkl;dasfhkdf0001391025968832-5056a550b8-0001-012vdjserver.org2014
5182014-02-20 10:07:51READ_WRITEVDJAuth0001392912471365-5056a550b8-0001-012vdjserver.org2014
6192014-02-20 10:14:20READ_WRITEVDJAuth0001392912860303-5056a550b8-0001-012vdjserver.org2014
7212014-02-20 11:10:54READ_WRITEwscarbor0001392914178983-5056a550b8-0001-012vdjserver.org2014
\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "3 14 2014-01-29 10:28:16 READ_WRITE jfonner \n", + "4 17 2014-01-29 14:06:38 READ_WRITE adshkl;dasfhkdf \n", + "5 18 2014-02-20 10:07:51 READ_WRITE VDJAuth \n", + "6 19 2014-02-20 10:14:20 READ_WRITE VDJAuth \n", + "7 21 2014-02-20 11:10:54 READ_WRITE wscarbor \n", + "\n", + " uuid tenant_id year \n", + "3 0001389977207738-5056a550b8-0001-012 vdjserver.org 2014 \n", + "4 0001391025968832-5056a550b8-0001-012 vdjserver.org 2014 \n", + "5 0001392912471365-5056a550b8-0001-012 vdjserver.org 2014 \n", + "6 0001392912860303-5056a550b8-0001-012 vdjserver.org 2014 \n", + "7 0001392914178983-5056a550b8-0001-012 vdjserver.org 2014 " + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(filtered_metadata_perms_df.shape)\n", + "filtered_metadata_perms_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "8c20a1c5-4a2e-468c-bf43-51818121b61d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(29194, 9)\n" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
10001396029083309-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395939852441-5056a550b8-0001-002Nonevdjauthuploadedgitprep-latest.zipapplication/zip2014-03-28T12:51:23.309-05:00
20001396029805022-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395956517022-5056a550b8-0001-002NonevdjauthuploadedInduction-28.zipapplication/zip2014-03-28T13:03:25.022-05:00
30001396030144907-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396030144691-5056a550b8-0001-002Nonevdjauthuploadedtest10.txttext/plain2014-03-28T13:09:04.907-05:00
40001396039988083-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396039987794-5056a550b8-0001-002Nonevdjauthuploadedtest11.txttext/plain2014-03-28T15:53:08.083-05:00
50001396043273330-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396043273029-5056a550b8-0001-002Nonevdjauthuploadedtest14.txttext/plain2014-03-28T16:47:53.330-05:00
\n", + "
" + ], + "text/plain": [ + " uuid projectUuid \\\n", + "1 0001396029083309-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "2 0001396029805022-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "3 0001396030144907-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "4 0001396039988083-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "5 0001396043273330-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "\n", + " associationIds_1 associationIds_2 owner task_type \\\n", + "1 0001395939852441-5056a550b8-0001-002 None vdjauth uploaded \n", + "2 0001395956517022-5056a550b8-0001-002 None vdjauth uploaded \n", + "3 0001396030144691-5056a550b8-0001-002 None vdjauth uploaded \n", + "4 0001396039987794-5056a550b8-0001-002 None vdjauth uploaded \n", + "5 0001396043273029-5056a550b8-0001-002 None vdjauth uploaded \n", + "\n", + " file_name mimeType last_updated \n", + "1 gitprep-latest.zip application/zip 2014-03-28T12:51:23.309-05:00 \n", + "2 Induction-28.zip application/zip 2014-03-28T13:03:25.022-05:00 \n", + "3 test10.txt text/plain 2014-03-28T13:09:04.907-05:00 \n", + "4 test11.txt text/plain 2014-03-28T15:53:08.083-05:00 \n", + "5 test14.txt text/plain 2014-03-28T16:47:53.330-05:00 " + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(filtered_df_projectFiles.shape)\n", + "filtered_df_projectFiles.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "e9f3c204-082c-4a38-af88-fa0bc9caf433", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(5477, 10)\n" + ] + }, + { + "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", + " \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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
0ls6.tacc.utexas.eduvdjrepcalc-ls6-2.0u8FINISHED2025-01-25 15:43:51.678c7cd08ad-a560-4574-a363-b9cc4c5e051d-007/projects/5456400192359305711-242ac118-0001-01...FINISHEDeb27e311-4a37-4aeb-b649-056704dd2711schristley
1ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FINISHED2025-01-24 04:20:37.8919188bf80-e868-4e05-a6b4-308c044108d7-007/projects/5456400192359305711-242ac118-0001-01...FINISHED5e2528fd-25d6-4473-9287-6a67a8de8391schristley
2ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FAILED2025-01-22 15:04:46.891773a5cb7-b369-4517-a221-83d57e3899e5-007/projects/5199144433477554666-242ac116-0001-01...FAILED_SKIP_ARCHIVE78b89c14-3dec-4aa8-acf8-d2592064e3a4scott_public
3ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-14 22:31:02.980c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007/projects/5456400192359305711-242ac118-0001-01...FINISHED1e2f122d-5e5b-4f14-931f-ca55803115ffschristley
4ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-09 04:21:12.476ad02cb34-250e-48cb-a06e-973e431b62ee-007/projects/6589143665654501871-242ac118-0001-01...FINISHED1069949d-1d9a-453f-80b8-7372019aba31schristley
\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "0 ls6.tacc.utexas.edu vdj repcalc-ls6-2.0u8 FINISHED \n", + "1 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FINISHED \n", + "2 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FAILED \n", + "3 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "4 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "\n", + " last_updated uuid \\\n", + "0 2025-01-25 15:43:51.678 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "1 2025-01-24 04:20:37.891 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "2 2025-01-22 15:04:46.891 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "3 2025-01-14 22:31:02.980 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "4 2025-01-09 04:21:12.476 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "0 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "1 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "2 /projects/5199144433477554666-242ac116-0001-01... FAILED_SKIP_ARCHIVE \n", + "3 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "4 /projects/6589143665654501871-242ac118-0001-01... FINISHED \n", + "\n", + " update_token parameters.Creator \n", + "0 eb27e311-4a37-4aeb-b649-056704dd2711 schristley \n", + "1 5e2528fd-25d6-4473-9287-6a67a8de8391 schristley \n", + "2 78b89c14-3dec-4aa8-acf8-d2592064e3a4 scott_public \n", + "3 1e2f122d-5e5b-4f14-931f-ca55803115ff schristley \n", + "4 1069949d-1d9a-453f-80b8-7372019aba31 schristley " + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print(filtered_jobs_all_df.shape)\n", + "filtered_jobs_all_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "477c89ac-850a-4290-b65f-3cc448e398a1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/projects/5456400192359305711-242ac118-0001-012/analyses/2025-01-25-02-57-35-54-my-job-24-jan-2025-8:57:09-pm'" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_jobs_all_df.iloc[0]['archive_path']" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "8cd2247b-1d55-423c-a1ce-c0bc57cff592", + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
359237235888630211276305-242ac118-0001-0125456400192359305711-242ac118-0001-0128704853344789196305-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneUTSW3_S41_L001_R2_001.fastq.gzNone2025-01-13T16:40:05.824-06:00
359245435653088092876305-242ac118-0001-0125456400192359305711-242ac118-0001-0126303726458799395311-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneUTSW3_S41_L001_R1_001.fastq.gzNone2025-01-13T16:40:05.774-06:00
359254056925636403916305-242ac118-0001-0125456400192359305711-242ac118-0001-0125515926026855116305-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneUTSW33_S42_L001_R1_001.fastq.gzNone2025-01-13T16:40:09.288-06:00
35926364542252032716305-242ac118-0001-0125456400192359305711-242ac118-0001-0121826420270572236305-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneUTSW33_S42_L001_R2_001.fastq.gzNone2025-01-13T16:40:09.197-06:00
359271356193445436789231-242ac118-0001-0125456400192359305711-242ac118-0001-01298898524775116305-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneUTSW34_S43_L001_R1_001.fastq.gzNone2025-01-13T16:40:12.427-06:00
359283037157745745269231-242ac118-0001-0125456400192359305711-242ac118-0001-0121563855114198389231-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneUTSW34_S43_L001_R2_001.fastq.gzNone2025-01-13T16:40:12.462-06:00
359298703939788065402385-242ac118-0001-0125456400192359305711-242ac118-0001-0128250904445705589231-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone0436_S17_L001_R1_001.fastq.gzNone2025-01-13T16:40:16.264-06:00
359305832496452651642385-242ac118-0001-0125456400192359305711-242ac118-0001-0127280888273881722385-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone0436_S17_L001_R2_001.fastq.gzNone2025-01-13T16:40:16.297-06:00
359312306929598057082385-242ac118-0001-0125456400192359305711-242ac118-0001-0123790067704711802385-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone0830_S18_L001_R1_001.fastq.gzNone2025-01-13T16:40:19.713-06:00
359321173454200583623151-242ac118-0001-0125456400192359305711-242ac118-0001-012311831389719162385-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone0830_S18_L001_R2_001.fastq.gzNone2025-01-13T16:40:19.708-06:00
359333108766464161223151-242ac118-0001-0125456400192359305711-242ac118-0001-0121655950826616263151-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone1484_S19_L001_R1_001.fastq.gzNone2025-01-13T16:40:23.114-06:00
359345421348655019463151-242ac118-0001-0125456400192359305711-242ac118-0001-0123945254294730183151-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone1484_S19_L001_R2_001.fastq.gzNone2025-01-13T16:40:23.089-06:00
359356681449109992903151-242ac118-0001-0125456400192359305711-242ac118-0001-0125205741296760263151-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone1977_S20_L001_R1_001.fastq.gzNone2025-01-13T16:40:26.325-06:00
359367745355458885063151-242ac118-0001-0125456400192359305711-242ac118-0001-0126281072258659783151-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone1977_S20_L001_R2_001.fastq.gzNone2025-01-13T16:40:26.297-06:00
359378329106378551848465-242ac118-0001-0125456400192359305711-242ac118-0001-0128594599342323143151-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone2228_S21_L001_R1_001.fastq.gzNone2025-01-13T16:40:30.584-06:00
359385841031823979048465-242ac118-0001-0125456400192359305711-242ac118-0001-0127325028924092968465-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone2228_S21_L001_R2_001.fastq.gzNone2025-01-13T16:40:30.584-06:00
359392014473661280808465-242ac118-0001-0125456400192359305711-242ac118-0001-0123476695277204008465-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone2315_S22_L001_R1_001.fastq.gzNone2025-01-13T16:40:33.910-06:00
359402661285435182617071-242ac118-0001-0125456400192359305711-242ac118-0001-0121196701587246617071-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone2315_S22_L001_R2_001.fastq.gzNone2025-01-13T16:40:33.916-06:00
359416100051000725017071-242ac118-0001-0125456400192359305711-242ac118-0001-0124621895056133657071-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone2991_S23_L001_R1_001.fastq.gzNone2025-01-13T16:40:37.285-06:00
359428601653389564374545-242ac118-0001-0125456400192359305711-242ac118-0001-0128376899063680537071-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone2991_S23_L001_R2_001.fastq.gzNone2025-01-13T16:40:37.282-06:00
359435338423137409494545-242ac118-0001-0125456400192359305711-242ac118-0001-0126793987554023894545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R1_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359441335427718191574545-242ac118-0001-0125456400192359305711-242ac118-0001-0122833383462017494545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R2_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359451840700597200490991-242ac118-0001-0125456400192359305711-242ac118-0001-012366925519251050991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R1_001.fastq.gzNone2025-01-13T16:40:43.277-06:00
359465023614960920170991-242ac118-0001-0125456400192359305711-242ac118-0001-0123549539235260010991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R2_001.fastq.gzNone2025-01-13T16:40:43.281-06:00
359477830832104257678865-242ac118-0001-0125456400192359305711-242ac118-0001-0128017190735231118865-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneprimers.fastaNone2025-01-13T16:41:49.035-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "35923 7235888630211276305-242ac118-0001-012 \n", + "35924 5435653088092876305-242ac118-0001-012 \n", + "35925 4056925636403916305-242ac118-0001-012 \n", + "35926 364542252032716305-242ac118-0001-012 \n", + "35927 1356193445436789231-242ac118-0001-012 \n", + "35928 3037157745745269231-242ac118-0001-012 \n", + "35929 8703939788065402385-242ac118-0001-012 \n", + "35930 5832496452651642385-242ac118-0001-012 \n", + "35931 2306929598057082385-242ac118-0001-012 \n", + "35932 1173454200583623151-242ac118-0001-012 \n", + "35933 3108766464161223151-242ac118-0001-012 \n", + "35934 5421348655019463151-242ac118-0001-012 \n", + "35935 6681449109992903151-242ac118-0001-012 \n", + "35936 7745355458885063151-242ac118-0001-012 \n", + "35937 8329106378551848465-242ac118-0001-012 \n", + "35938 5841031823979048465-242ac118-0001-012 \n", + "35939 2014473661280808465-242ac118-0001-012 \n", + "35940 2661285435182617071-242ac118-0001-012 \n", + "35941 6100051000725017071-242ac118-0001-012 \n", + "35942 8601653389564374545-242ac118-0001-012 \n", + "35943 5338423137409494545-242ac118-0001-012 \n", + "35944 1335427718191574545-242ac118-0001-012 \n", + "35945 1840700597200490991-242ac118-0001-012 \n", + "35946 5023614960920170991-242ac118-0001-012 \n", + "35947 7830832104257678865-242ac118-0001-012 \n", + "\n", + " projectUuid \\\n", + "35923 5456400192359305711-242ac118-0001-012 \n", + "35924 5456400192359305711-242ac118-0001-012 \n", + "35925 5456400192359305711-242ac118-0001-012 \n", + "35926 5456400192359305711-242ac118-0001-012 \n", + "35927 5456400192359305711-242ac118-0001-012 \n", + "35928 5456400192359305711-242ac118-0001-012 \n", + "35929 5456400192359305711-242ac118-0001-012 \n", + "35930 5456400192359305711-242ac118-0001-012 \n", + "35931 5456400192359305711-242ac118-0001-012 \n", + "35932 5456400192359305711-242ac118-0001-012 \n", + "35933 5456400192359305711-242ac118-0001-012 \n", + "35934 5456400192359305711-242ac118-0001-012 \n", + "35935 5456400192359305711-242ac118-0001-012 \n", + "35936 5456400192359305711-242ac118-0001-012 \n", + "35937 5456400192359305711-242ac118-0001-012 \n", + "35938 5456400192359305711-242ac118-0001-012 \n", + "35939 5456400192359305711-242ac118-0001-012 \n", + "35940 5456400192359305711-242ac118-0001-012 \n", + "35941 5456400192359305711-242ac118-0001-012 \n", + "35942 5456400192359305711-242ac118-0001-012 \n", + "35943 5456400192359305711-242ac118-0001-012 \n", + "35944 5456400192359305711-242ac118-0001-012 \n", + "35945 5456400192359305711-242ac118-0001-012 \n", + "35946 5456400192359305711-242ac118-0001-012 \n", + "35947 5456400192359305711-242ac118-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "35923 8704853344789196305-242ac112-0001-002 \n", + "35924 6303726458799395311-242ac112-0001-002 \n", + "35925 5515926026855116305-242ac112-0001-002 \n", + "35926 1826420270572236305-242ac112-0001-002 \n", + "35927 98898524775116305-242ac112-0001-002 \n", + "35928 1563855114198389231-242ac112-0001-002 \n", + "35929 8250904445705589231-242ac112-0001-002 \n", + "35930 7280888273881722385-242ac112-0001-002 \n", + "35931 3790067704711802385-242ac112-0001-002 \n", + "35932 311831389719162385-242ac112-0001-002 \n", + "35933 1655950826616263151-242ac112-0001-002 \n", + "35934 3945254294730183151-242ac112-0001-002 \n", + "35935 5205741296760263151-242ac112-0001-002 \n", + "35936 6281072258659783151-242ac112-0001-002 \n", + "35937 8594599342323143151-242ac112-0001-002 \n", + "35938 7325028924092968465-242ac112-0001-002 \n", + "35939 3476695277204008465-242ac112-0001-002 \n", + "35940 1196701587246617071-242ac112-0001-002 \n", + "35941 4621895056133657071-242ac112-0001-002 \n", + "35942 8376899063680537071-242ac112-0001-002 \n", + "35943 6793987554023894545-242ac112-0001-002 \n", + "35944 2833383462017494545-242ac112-0001-002 \n", + "35945 366925519251050991-242ac112-0001-002 \n", + "35946 3549539235260010991-242ac112-0001-002 \n", + "35947 8017190735231118865-242ac112-0001-002 \n", + "\n", + " associationIds_2 owner task_type \\\n", + "35923 5456400192359305711-242ac118-0001-012 vdj None \n", + "35924 5456400192359305711-242ac118-0001-012 vdj None \n", + "35925 5456400192359305711-242ac118-0001-012 vdj None \n", + "35926 5456400192359305711-242ac118-0001-012 vdj None \n", + "35927 5456400192359305711-242ac118-0001-012 vdj None \n", + "35928 5456400192359305711-242ac118-0001-012 vdj None \n", + "35929 5456400192359305711-242ac118-0001-012 vdj None \n", + "35930 5456400192359305711-242ac118-0001-012 vdj None \n", + "35931 5456400192359305711-242ac118-0001-012 vdj None \n", + "35932 5456400192359305711-242ac118-0001-012 vdj None \n", + "35933 5456400192359305711-242ac118-0001-012 vdj None \n", + "35934 5456400192359305711-242ac118-0001-012 vdj None \n", + "35935 5456400192359305711-242ac118-0001-012 vdj None \n", + "35936 5456400192359305711-242ac118-0001-012 vdj None \n", + "35937 5456400192359305711-242ac118-0001-012 vdj None \n", + "35938 5456400192359305711-242ac118-0001-012 vdj None \n", + "35939 5456400192359305711-242ac118-0001-012 vdj None \n", + "35940 5456400192359305711-242ac118-0001-012 vdj None \n", + "35941 5456400192359305711-242ac118-0001-012 vdj None \n", + "35942 5456400192359305711-242ac118-0001-012 vdj None \n", + "35943 5456400192359305711-242ac118-0001-012 vdj None \n", + "35944 5456400192359305711-242ac118-0001-012 vdj None \n", + "35945 5456400192359305711-242ac118-0001-012 vdj None \n", + "35946 5456400192359305711-242ac118-0001-012 vdj None \n", + "35947 5456400192359305711-242ac118-0001-012 vdj None \n", + "\n", + " file_name mimeType last_updated \n", + "35923 UTSW3_S41_L001_R2_001.fastq.gz None 2025-01-13T16:40:05.824-06:00 \n", + "35924 UTSW3_S41_L001_R1_001.fastq.gz None 2025-01-13T16:40:05.774-06:00 \n", + "35925 UTSW33_S42_L001_R1_001.fastq.gz None 2025-01-13T16:40:09.288-06:00 \n", + "35926 UTSW33_S42_L001_R2_001.fastq.gz None 2025-01-13T16:40:09.197-06:00 \n", + "35927 UTSW34_S43_L001_R1_001.fastq.gz None 2025-01-13T16:40:12.427-06:00 \n", + "35928 UTSW34_S43_L001_R2_001.fastq.gz None 2025-01-13T16:40:12.462-06:00 \n", + "35929 0436_S17_L001_R1_001.fastq.gz None 2025-01-13T16:40:16.264-06:00 \n", + "35930 0436_S17_L001_R2_001.fastq.gz None 2025-01-13T16:40:16.297-06:00 \n", + "35931 0830_S18_L001_R1_001.fastq.gz None 2025-01-13T16:40:19.713-06:00 \n", + "35932 0830_S18_L001_R2_001.fastq.gz None 2025-01-13T16:40:19.708-06:00 \n", + "35933 1484_S19_L001_R1_001.fastq.gz None 2025-01-13T16:40:23.114-06:00 \n", + "35934 1484_S19_L001_R2_001.fastq.gz None 2025-01-13T16:40:23.089-06:00 \n", + "35935 1977_S20_L001_R1_001.fastq.gz None 2025-01-13T16:40:26.325-06:00 \n", + "35936 1977_S20_L001_R2_001.fastq.gz None 2025-01-13T16:40:26.297-06:00 \n", + "35937 2228_S21_L001_R1_001.fastq.gz None 2025-01-13T16:40:30.584-06:00 \n", + "35938 2228_S21_L001_R2_001.fastq.gz None 2025-01-13T16:40:30.584-06:00 \n", + "35939 2315_S22_L001_R1_001.fastq.gz None 2025-01-13T16:40:33.910-06:00 \n", + "35940 2315_S22_L001_R2_001.fastq.gz None 2025-01-13T16:40:33.916-06:00 \n", + "35941 2991_S23_L001_R1_001.fastq.gz None 2025-01-13T16:40:37.285-06:00 \n", + "35942 2991_S23_L001_R2_001.fastq.gz None 2025-01-13T16:40:37.282-06:00 \n", + "35943 4468_S24_L001_R1_001.fastq.gz None 2025-01-13T16:40:40.230-06:00 \n", + "35944 4468_S24_L001_R2_001.fastq.gz None 2025-01-13T16:40:40.230-06:00 \n", + "35945 6634_S25_L001_R1_001.fastq.gz None 2025-01-13T16:40:43.277-06:00 \n", + "35946 6634_S25_L001_R2_001.fastq.gz None 2025-01-13T16:40:43.281-06:00 \n", + "35947 primers.fasta None 2025-01-13T16:41:49.035-06:00 " + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "project_uuid = '5456400192359305711-242ac118-0001-012'\n", + "filtered_df_projectFiles[filtered_df_projectFiles.projectUuid == project_uuid]" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "c15b5301-6b71-48a4-bdbc-fae7e018cfab", + "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", + " \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", + " \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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
0ls6.tacc.utexas.eduvdjrepcalc-ls6-2.0u8FINISHED2025-01-25 15:43:51.678c7cd08ad-a560-4574-a363-b9cc4c5e051d-007/projects/5456400192359305711-242ac118-0001-01...FINISHEDeb27e311-4a37-4aeb-b649-056704dd2711schristley
1ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FINISHED2025-01-24 04:20:37.8919188bf80-e868-4e05-a6b4-308c044108d7-007/projects/5456400192359305711-242ac118-0001-01...FINISHED5e2528fd-25d6-4473-9287-6a67a8de8391schristley
2ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FAILED2025-01-22 15:04:46.891773a5cb7-b369-4517-a221-83d57e3899e5-007/projects/5199144433477554666-242ac116-0001-01...FAILED_SKIP_ARCHIVE78b89c14-3dec-4aa8-acf8-d2592064e3a4scott_public
3ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-14 22:31:02.980c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007/projects/5456400192359305711-242ac118-0001-01...FINISHED1e2f122d-5e5b-4f14-931f-ca55803115ffschristley
4ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-09 04:21:12.476ad02cb34-250e-48cb-a06e-973e431b62ee-007/projects/6589143665654501871-242ac118-0001-01...FINISHED1069949d-1d9a-453f-80b8-7372019aba31schristley
.................................
15776my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 16:38:39.0000001396301879424-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/foo123-201...FINISHED3b188d18-7955-49b6-bc21-10a557ced542NaN
15777my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 15:44:00.0000001396298592090-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FINISHEDc9dd99e9-2ef2-4fd7-b211-26b56162b21eNaN
15778my-lonestarjfonnermy-vdj_pipe-0.0.4FINISHED2014-03-31 15:35:18.0000001396298085562-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FINISHED282196b2-9972-4615-944d-777e1ee7826cNaN
15779my-lonestarjfonnermy-vdj_pipe-0.0.4FAILED2014-03-31 15:28:36.0000001396297676287-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FAILEDdc81e8a3-9869-47cc-8bee-3d254bb805d1NaN
15780my-lonestarjfonnermy-vdj_pipe-0.0.4FAILED2014-03-31 14:50:18.0000001396295290656-5056a550b8-0001-007/scratch/01114/jfonner/vdj/analyses/vdj_test20...FAILED08f920a6-e4c1-4029-9ac2-e1de96e7d23aNaN
\n", + "

15781 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "0 ls6.tacc.utexas.edu vdj repcalc-ls6-2.0u8 FINISHED \n", + "1 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FINISHED \n", + "2 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FAILED \n", + "3 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "4 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "... ... ... ... ... \n", + "15776 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15777 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15778 my-lonestar jfonner my-vdj_pipe-0.0.4 FINISHED \n", + "15779 my-lonestar jfonner my-vdj_pipe-0.0.4 FAILED \n", + "15780 my-lonestar jfonner my-vdj_pipe-0.0.4 FAILED \n", + "\n", + " last_updated uuid \\\n", + "0 2025-01-25 15:43:51.678 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "1 2025-01-24 04:20:37.891 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "2 2025-01-22 15:04:46.891 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "3 2025-01-14 22:31:02.980 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "4 2025-01-09 04:21:12.476 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "... ... ... \n", + "15776 2014-03-31 16:38:39.000 0001396301879424-5056a550b8-0001-007 \n", + "15777 2014-03-31 15:44:00.000 0001396298592090-5056a550b8-0001-007 \n", + "15778 2014-03-31 15:35:18.000 0001396298085562-5056a550b8-0001-007 \n", + "15779 2014-03-31 15:28:36.000 0001396297676287-5056a550b8-0001-007 \n", + "15780 2014-03-31 14:50:18.000 0001396295290656-5056a550b8-0001-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "0 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "1 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "2 /projects/5199144433477554666-242ac116-0001-01... FAILED_SKIP_ARCHIVE \n", + "3 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "4 /projects/6589143665654501871-242ac118-0001-01... FINISHED \n", + "... ... ... \n", + "15776 /scratch/01114/jfonner/vdj/analyses/foo123-201... FINISHED \n", + "15777 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FINISHED \n", + "15778 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FINISHED \n", + "15779 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FAILED \n", + "15780 /scratch/01114/jfonner/vdj/analyses/vdj_test20... FAILED \n", + "\n", + " update_token parameters.Creator \n", + "0 eb27e311-4a37-4aeb-b649-056704dd2711 schristley \n", + "1 5e2528fd-25d6-4473-9287-6a67a8de8391 schristley \n", + "2 78b89c14-3dec-4aa8-acf8-d2592064e3a4 scott_public \n", + "3 1e2f122d-5e5b-4f14-931f-ca55803115ff schristley \n", + "4 1069949d-1d9a-453f-80b8-7372019aba31 schristley \n", + "... ... ... \n", + "15776 3b188d18-7955-49b6-bc21-10a557ced542 NaN \n", + "15777 c9dd99e9-2ef2-4fd7-b211-26b56162b21e NaN \n", + "15778 282196b2-9972-4615-944d-777e1ee7826c NaN \n", + "15779 dc81e8a3-9869-47cc-8bee-3d254bb805d1 NaN \n", + "15780 08f920a6-e4c1-4029-9ac2-e1de96e7d23a NaN \n", + "\n", + "[15781 rows x 10 columns]" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jobs_all_df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16f7f9c3-9fd9-47fe-824a-9234ca9d8aa1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e58ab1da-a1f4-4eae-a61e-7009dd057a5e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "97468a6f-9372-43f9-8e4c-6fc5f678b8ee", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\"/community/cache/6378122916818653676-242ac117-0001-012/statistics/6977444714660359700-242ac117-0001-012\"\n", + "set()\n" + ] + }, + { + "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", + " \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", + " \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", + "
app_idstatusproject_folderprojectUUIDJobUuidremote_outcomeproject_creatorlast_updated
0repcalc-ls6-2.0u8FINISHEDprojects5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-007FINISHEDschristley2025-01-25 15:43:51.678
1igblast-ls6-1.20u6FINISHEDprojects5456400192359305711-242ac118-0001-0129188bf80-e868-4e05-a6b4-308c044108d7-007FINISHEDschristley2025-01-24 04:20:37.891
2igblast-ls6-1.20u6FAILEDprojects5199144433477554666-242ac116-0001-012773a5cb7-b369-4517-a221-83d57e3899e5-007FAILED_SKIP_ARCHIVEscott_public2025-01-22 15:04:46.891
3vdj_pipe-ls6-0.1.7u2FINISHEDprojects5456400192359305711-242ac118-0001-012c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007FINISHEDschristley2025-01-14 22:31:02.980
4vdj_pipe-ls6-0.1.7u2FINISHEDprojects6589143665654501871-242ac118-0001-012ad02cb34-250e-48cb-a06e-973e431b62ee-007FINISHEDschristley2025-01-09 04:21:12.476
...........................
982immuneml-ls6-2.2FINISHEDarchivejobsbbb69fb7-5325-4b02-96c1-1cae7152d9e9-007FINISHEDscott_test12022-04-04 14:03:49.907
983immuneml-ls6-2.2FINISHEDarchivejobscf37345f-e7da-4f85-a404-6663d688f576-007FINISHEDscott_test12022-04-01 16:19:13.528
984immuneml-ls6-2.2FINISHEDarchivejobs6419b7a4-15a2-4732-82d1-79553d1435c1-007FINISHEDscott_test12022-04-01 15:27:23.091
985vdj_pipe-stampede2-0.1.7u4FINISHEDprojects8557415777028206100-242ac118-0001-0122d35173f-30e5-4908-bf33-5784bcc42dcd-007FINISHEDareceveur2022-04-01 09:37:15.693
986vdj_pipe-stampede2-0.1.7u4FINISHEDprojects8557415777028206100-242ac118-0001-0122c48d618-bf09-483d-aa43-44872f0b416b-007FINISHEDareceveur2022-03-31 22:01:50.356
\n", + "

987 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " app_id status project_folder \\\n", + "0 repcalc-ls6-2.0u8 FINISHED projects \n", + "1 igblast-ls6-1.20u6 FINISHED projects \n", + "2 igblast-ls6-1.20u6 FAILED projects \n", + "3 vdj_pipe-ls6-0.1.7u2 FINISHED projects \n", + "4 vdj_pipe-ls6-0.1.7u2 FINISHED projects \n", + ".. ... ... ... \n", + "982 immuneml-ls6-2.2 FINISHED archive \n", + "983 immuneml-ls6-2.2 FINISHED archive \n", + "984 immuneml-ls6-2.2 FINISHED archive \n", + "985 vdj_pipe-stampede2-0.1.7u4 FINISHED projects \n", + "986 vdj_pipe-stampede2-0.1.7u4 FINISHED projects \n", + "\n", + " projectUUID \\\n", + "0 5456400192359305711-242ac118-0001-012 \n", + "1 5456400192359305711-242ac118-0001-012 \n", + "2 5199144433477554666-242ac116-0001-012 \n", + "3 5456400192359305711-242ac118-0001-012 \n", + "4 6589143665654501871-242ac118-0001-012 \n", + ".. ... \n", + "982 jobs \n", + "983 jobs \n", + "984 jobs \n", + "985 8557415777028206100-242ac118-0001-012 \n", + "986 8557415777028206100-242ac118-0001-012 \n", + "\n", + " JobUuid remote_outcome \\\n", + "0 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 FINISHED \n", + "1 9188bf80-e868-4e05-a6b4-308c044108d7-007 FINISHED \n", + "2 773a5cb7-b369-4517-a221-83d57e3899e5-007 FAILED_SKIP_ARCHIVE \n", + "3 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 FINISHED \n", + "4 ad02cb34-250e-48cb-a06e-973e431b62ee-007 FINISHED \n", + ".. ... ... \n", + "982 bbb69fb7-5325-4b02-96c1-1cae7152d9e9-007 FINISHED \n", + "983 cf37345f-e7da-4f85-a404-6663d688f576-007 FINISHED \n", + "984 6419b7a4-15a2-4732-82d1-79553d1435c1-007 FINISHED \n", + "985 2d35173f-30e5-4908-bf33-5784bcc42dcd-007 FINISHED \n", + "986 2c48d618-bf09-483d-aa43-44872f0b416b-007 FINISHED \n", + "\n", + " project_creator last_updated \n", + "0 schristley 2025-01-25 15:43:51.678 \n", + "1 schristley 2025-01-24 04:20:37.891 \n", + "2 scott_public 2025-01-22 15:04:46.891 \n", + "3 schristley 2025-01-14 22:31:02.980 \n", + "4 schristley 2025-01-09 04:21:12.476 \n", + ".. ... ... \n", + "982 scott_test1 2022-04-04 14:03:49.907 \n", + "983 scott_test1 2022-04-01 16:19:13.528 \n", + "984 scott_test1 2022-04-01 15:27:23.091 \n", + "985 areceveur 2022-04-01 09:37:15.693 \n", + "986 areceveur 2022-03-31 22:01:50.356 \n", + "\n", + "[987 rows x 8 columns]" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_jobs_list = []\n", + "other_folders = set()\n", + "for i in range(len(jobs_all_df)):\n", + " archive_path = jobs_all_df['archive_path'][i]\n", + " # Check if the 'archive_path' is not None or NaN and contains at least one '/'\n", + " if pd.notna(archive_path) and '/' in archive_path:\n", + " split_path = archive_path.split('/')\n", + " if len(split_path) > 3: # Ensure there is at least two elements after splitting\n", + " app_id = jobs_all_df['app_id'][i]\n", + " status = jobs_all_df['status'][i]\n", + " project_folder = split_path[1]\n", + " if project_folder in ['community']:\n", + " projectUUID = split_path[3] #nor sure if 3rd or 5th\n", + " print(json.dumps(archive_path, indent = 4))\n", + " break\n", + " elif project_folder in ['projects']:\n", + " projectUUID = split_path[2]\n", + " else:\n", + " projectUUID = split_path[2]\n", + " JobUuid = jobs_all_df['uuid'][i]\n", + " remote_outcome = jobs_all_df['remote_outcome'][i]\n", + " project_creator = jobs_all_df['parameters.Creator'][i]\n", + " last_updated = jobs_all_df['last_updated'][i]\n", + " all_jobs_list.append({\n", + " 'app_id': app_id,\n", + " 'status': status,\n", + " 'project_folder': project_folder,\n", + " 'projectUUID': projectUUID,\n", + " 'JobUuid': JobUuid,\n", + " 'remote_outcome': remote_outcome,\n", + " 'project_creator': project_creator,\n", + " 'last_updated': last_updated\n", + " })\n", + " # print(split_path)\n", + "df_allJobs = pd.DataFrame(all_jobs_list)\n", + "print(other_folders)\n", + "df_allJobs" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "f63f8ac0-2463-4014-bcb2-312a8debb568", + "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", + " \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", + " \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", + "
app_idstatusproject_folderprojectUUIDJobUuidremote_outcomeproject_creatorlast_updated
0repcalc-ls6-2.0u8FINISHEDprojects5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-007FINISHEDschristley2025-01-25 15:43:51.678
1igblast-ls6-1.20u6FINISHEDprojects5456400192359305711-242ac118-0001-0129188bf80-e868-4e05-a6b4-308c044108d7-007FINISHEDschristley2025-01-24 04:20:37.891
2igblast-ls6-1.20u6FAILEDprojects5199144433477554666-242ac116-0001-012773a5cb7-b369-4517-a221-83d57e3899e5-007FAILED_SKIP_ARCHIVEscott_public2025-01-22 15:04:46.891
3vdj_pipe-ls6-0.1.7u2FINISHEDprojects5456400192359305711-242ac118-0001-012c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007FINISHEDschristley2025-01-14 22:31:02.980
4vdj_pipe-ls6-0.1.7u2FINISHEDprojects6589143665654501871-242ac118-0001-012ad02cb34-250e-48cb-a06e-973e431b62ee-007FINISHEDschristley2025-01-09 04:21:12.476
...........................
963repcalc-stampede2-1.0u7FINISHEDprojects3087851897075012076-242ac118-0001-012fdcee8a4-b88b-4f44-b347-21c6c31f8401-007FINISHEDdiary2022-04-09 07:02:15.731
964igblast-stampede2-1.14u6FINISHEDprojects3087851897075012076-242ac118-0001-0124419f0fc-67dc-4f21-a66a-ff178393a4de-007FINISHEDdiary2022-04-07 16:42:24.925
967presto-stampede2-0.5u2FINISHEDprojects3087851897075012076-242ac118-0001-0123eb742ae-6caa-43c1-b65b-3fa35ad7754b-007FINISHEDdiary2022-04-06 10:42:46.132
985vdj_pipe-stampede2-0.1.7u4FINISHEDprojects8557415777028206100-242ac118-0001-0122d35173f-30e5-4908-bf33-5784bcc42dcd-007FINISHEDareceveur2022-04-01 09:37:15.693
986vdj_pipe-stampede2-0.1.7u4FINISHEDprojects8557415777028206100-242ac118-0001-0122c48d618-bf09-483d-aa43-44872f0b416b-007FINISHEDareceveur2022-03-31 22:01:50.356
\n", + "

812 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " app_id status project_folder \\\n", + "0 repcalc-ls6-2.0u8 FINISHED projects \n", + "1 igblast-ls6-1.20u6 FINISHED projects \n", + "2 igblast-ls6-1.20u6 FAILED projects \n", + "3 vdj_pipe-ls6-0.1.7u2 FINISHED projects \n", + "4 vdj_pipe-ls6-0.1.7u2 FINISHED projects \n", + ".. ... ... ... \n", + "963 repcalc-stampede2-1.0u7 FINISHED projects \n", + "964 igblast-stampede2-1.14u6 FINISHED projects \n", + "967 presto-stampede2-0.5u2 FINISHED projects \n", + "985 vdj_pipe-stampede2-0.1.7u4 FINISHED projects \n", + "986 vdj_pipe-stampede2-0.1.7u4 FINISHED projects \n", + "\n", + " projectUUID \\\n", + "0 5456400192359305711-242ac118-0001-012 \n", + "1 5456400192359305711-242ac118-0001-012 \n", + "2 5199144433477554666-242ac116-0001-012 \n", + "3 5456400192359305711-242ac118-0001-012 \n", + "4 6589143665654501871-242ac118-0001-012 \n", + ".. ... \n", + "963 3087851897075012076-242ac118-0001-012 \n", + "964 3087851897075012076-242ac118-0001-012 \n", + "967 3087851897075012076-242ac118-0001-012 \n", + "985 8557415777028206100-242ac118-0001-012 \n", + "986 8557415777028206100-242ac118-0001-012 \n", + "\n", + " JobUuid remote_outcome \\\n", + "0 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 FINISHED \n", + "1 9188bf80-e868-4e05-a6b4-308c044108d7-007 FINISHED \n", + "2 773a5cb7-b369-4517-a221-83d57e3899e5-007 FAILED_SKIP_ARCHIVE \n", + "3 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 FINISHED \n", + "4 ad02cb34-250e-48cb-a06e-973e431b62ee-007 FINISHED \n", + ".. ... ... \n", + "963 fdcee8a4-b88b-4f44-b347-21c6c31f8401-007 FINISHED \n", + "964 4419f0fc-67dc-4f21-a66a-ff178393a4de-007 FINISHED \n", + "967 3eb742ae-6caa-43c1-b65b-3fa35ad7754b-007 FINISHED \n", + "985 2d35173f-30e5-4908-bf33-5784bcc42dcd-007 FINISHED \n", + "986 2c48d618-bf09-483d-aa43-44872f0b416b-007 FINISHED \n", + "\n", + " project_creator last_updated \n", + "0 schristley 2025-01-25 15:43:51.678 \n", + "1 schristley 2025-01-24 04:20:37.891 \n", + "2 scott_public 2025-01-22 15:04:46.891 \n", + "3 schristley 2025-01-14 22:31:02.980 \n", + "4 schristley 2025-01-09 04:21:12.476 \n", + ".. ... ... \n", + "963 diary 2022-04-09 07:02:15.731 \n", + "964 diary 2022-04-07 16:42:24.925 \n", + "967 diary 2022-04-06 10:42:46.132 \n", + "985 areceveur 2022-04-01 09:37:15.693 \n", + "986 areceveur 2022-03-31 22:01:50.356 \n", + "\n", + "[812 rows x 8 columns]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_allJobs_filtered = df_allJobs[df_allJobs.projectUUID.isin(filtered_metadata_perms_df['uuid'])]\n", + "df_allJobs_filtered\n" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "a926b58d-bb4f-488f-a454-1bf0b20c6ae3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "project_folder\n", + "projects 812\n", + "archive 175\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_allJobs.project_folder.value_counts()\n", + "# df_allJobs.projectUUID" + ] + }, + { + "cell_type": "markdown", + "id": "e3c7ad43-2cd5-4467-85fc-242c77a4843f", + "metadata": {}, + "source": [ + "## Find Verified Users With Their ProjectUUID" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "b8c591c5-53eb-4bf4-95b1-759cdbd6348e", + "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", + "
uuidusernameisVerifiedlast_updated
00001422658903072-5056a550b8-0001-012jdoeTrue2015-01-30T17:01:42.936-06:00
10001422658903349-5056a550b8-0001-012jfonnerTrue2015-01-30T17:01:43.349-06:00
\n", + "
" + ], + "text/plain": [ + " uuid username isVerified \\\n", + "0 0001422658903072-5056a550b8-0001-012 jdoe True \n", + "1 0001422658903349-5056a550b8-0001-012 jfonner True \n", + "\n", + " last_updated \n", + "0 2015-01-30T17:01:42.936-06:00 \n", + "1 2015-01-30T17:01:43.349-06:00 " + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_df_userVerification.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "399d4564-1d61-4f2a-8010-63a99c2392f2", + "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", + "
idlast_updatedpermissionusernameuuidtenant_idyear
3142014-01-29 10:28:16READ_WRITEjfonner0001389977207738-5056a550b8-0001-012vdjserver.org2014
4172014-01-29 14:06:38READ_WRITEadshkl;dasfhkdf0001391025968832-5056a550b8-0001-012vdjserver.org2014
\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "3 14 2014-01-29 10:28:16 READ_WRITE jfonner \n", + "4 17 2014-01-29 14:06:38 READ_WRITE adshkl;dasfhkdf \n", + "\n", + " uuid tenant_id year \n", + "3 0001389977207738-5056a550b8-0001-012 vdjserver.org 2014 \n", + "4 0001391025968832-5056a550b8-0001-012 vdjserver.org 2014 " + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_metadata_perms_df.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "46894eb7-9330-4b8f-981f-fc7d05363fcb", + "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", + "
uuidfirstNamelastNameemailcitystatecountrycreatedlastUpdated
00001389976523746-5056a550b8-0001-012WalterScarboroughwscarbor@tacc.utexas.eduAustinTXUSA2014-01-17T10:35:23.649-06:002016-04-27T15:07:26.261-05:00
10001391029872321-5056a550b8-0001-012Test19test19@test.comNone2014-01-29T15:11:12.321-06:002014-01-29T15:12:33.955-06:00
\n", + "
" + ], + "text/plain": [ + " uuid firstName lastName \\\n", + "0 0001389976523746-5056a550b8-0001-012 Walter Scarborough \n", + "1 0001391029872321-5056a550b8-0001-012 Test 19 \n", + "\n", + " email city state country \\\n", + "0 wscarbor@tacc.utexas.edu Austin TX USA \n", + "1 test19@test.com None \n", + "\n", + " created lastUpdated \n", + "0 2014-01-17T10:35:23.649-06:00 2016-04-27T15:07:26.261-05:00 \n", + "1 2014-01-29T15:11:12.321-06:00 2014-01-29T15:12:33.955-06:00 " + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_profile.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "id": "ae1e132c-0c06-426a-a0ea-5f50debb29be", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
00001395955349445-5056a550b8-0001-012NoneNonevdjauthNoneNone2014-03-27T16:22:29.444-05:00
10001396029083309-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395939852441-5056a550b8-0001-002Nonevdjauthuploadedgitprep-latest.zipapplication/zip2014-03-28T12:51:23.309-05:00
20001396029805022-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001395956517022-5056a550b8-0001-002NonevdjauthuploadedInduction-28.zipapplication/zip2014-03-28T13:03:25.022-05:00
30001396030144907-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396030144691-5056a550b8-0001-002Nonevdjauthuploadedtest10.txttext/plain2014-03-28T13:09:04.907-05:00
40001396039988083-5056a550b8-0001-0120001395346788177-5056a550b8-0001-0120001396039987794-5056a550b8-0001-002Nonevdjauthuploadedtest11.txttext/plain2014-03-28T15:53:08.083-05:00
\n", + "
" + ], + "text/plain": [ + " uuid projectUuid \\\n", + "0 0001395955349445-5056a550b8-0001-012 \n", + "1 0001396029083309-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "2 0001396029805022-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "3 0001396030144907-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "4 0001396039988083-5056a550b8-0001-012 0001395346788177-5056a550b8-0001-012 \n", + "\n", + " associationIds_1 associationIds_2 owner task_type \\\n", + "0 None None vdjauth \n", + "1 0001395939852441-5056a550b8-0001-002 None vdjauth uploaded \n", + "2 0001395956517022-5056a550b8-0001-002 None vdjauth uploaded \n", + "3 0001396030144691-5056a550b8-0001-002 None vdjauth uploaded \n", + "4 0001396039987794-5056a550b8-0001-002 None vdjauth uploaded \n", + "\n", + " file_name mimeType last_updated \n", + "0 None None 2014-03-27T16:22:29.444-05:00 \n", + "1 gitprep-latest.zip application/zip 2014-03-28T12:51:23.309-05:00 \n", + "2 Induction-28.zip application/zip 2014-03-28T13:03:25.022-05:00 \n", + "3 test10.txt text/plain 2014-03-28T13:09:04.907-05:00 \n", + "4 test11.txt text/plain 2014-03-28T15:53:08.083-05:00 " + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectFiles.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "bb4abce9-ef95-479f-bab2-c72f07dd9869", + "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", + "
uuidownerprojectUuidjobUuidlastUpdated
00001400192074855-5056a550b8-0001-012vdj0001399309581559-5056a550b8-0001-0120001399315558601-5056a550b8-0001-0072014-05-15T17:14:34.855-05:00
10001400254373114-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400254372814-5056a550b8-0001-0072014-05-16T10:32:53.114-05:00
\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "0 0001400192074855-5056a550b8-0001-012 vdj \n", + "1 0001400254373114-5056a550b8-0001-012 vdj \n", + "\n", + " projectUuid jobUuid \\\n", + "0 0001399309581559-5056a550b8-0001-012 0001399315558601-5056a550b8-0001-007 \n", + "1 0001400250478554-5056a550b8-0001-012 0001400254372814-5056a550b8-0001-007 \n", + "\n", + " lastUpdated \n", + "0 2014-05-15T17:14:34.855-05:00 \n", + "1 2014-05-16T10:32:53.114-05:00 " + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_projectJob.head(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "id": "b9085eba-89d3-448f-aae6-0059289917a4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1501, 7)" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_metadata_perms_df[filtered_metadata_perms_df.uuid.isin(df_projectFiles.projectUuid)].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "id": "4d4276fe-0bc7-467e-a2cb-06b15dd7557a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(37689, 7)" + ] + }, + "execution_count": 118, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_metadata_perms_df[filtered_metadata_perms_df.uuid.isin(df_projectFiles.uuid)].shape" + ] + }, + { + "cell_type": "markdown", + "id": "acc4f9cf-2af5-48aa-958c-35cc30c185d8", + "metadata": {}, + "source": [ + "## get filtered metadata for ProjectFiles" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "id": "ff9b7b11-f196-431f-8c91-57d33e05b5aa", + "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", + " \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", + " \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", + "
indexidlast_updatedpermissionusernameuuidtenant_idyear
039682014-03-27 16:12:46READ_WRITEwscarbor0001395346788177-5056a550b8-0001-012vdjserver.org2014
140722014-04-03 10:24:15READ_WRITEvdj0001396538655269-5056a550b8-0001-012vdjserver.org2014
2641302014-04-28 13:14:19READ_WRITEwscarbor0001398708859776-5056a550b8-0001-012vdjserver.org2014
3761422014-04-28 14:37:17READ_WRITEwscarbor0001398713837326-5056a550b8-0001-012vdjserver.org2014
4781532014-04-28 15:05:44READ_WRITEwscarbor0001398715544223-5056a550b8-0001-012vdjserver.org2014
...........................
149675639214407882025-01-08 11:36:56READ_WRITEsamwol6589143665654501871-242ac118-0001-012vdjserver.org2025
149775745314418492025-01-08 11:46:30READ_WRITEsamwol2024481073312951825-242ac118-0001-012vdjserver.org2025
149875851214429082025-01-08 11:53:00READ_WRITEsamwol7301395953249218065-242ac118-0001-012vdjserver.org2025
149975949614438922025-01-08 11:58:21READ_WRITEsamwol1710750072586572271-242ac118-0001-012vdjserver.org2025
150076020114445972025-01-13 15:13:55READ_WRITEschristley5456400192359305711-242ac118-0001-012vdjserver.org2025
\n", + "

1501 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " index id last_updated permission username \\\n", + "0 39 68 2014-03-27 16:12:46 READ_WRITE wscarbor \n", + "1 40 72 2014-04-03 10:24:15 READ_WRITE vdj \n", + "2 64 130 2014-04-28 13:14:19 READ_WRITE wscarbor \n", + "3 76 142 2014-04-28 14:37:17 READ_WRITE wscarbor \n", + "4 78 153 2014-04-28 15:05:44 READ_WRITE wscarbor \n", + "... ... ... ... ... ... \n", + "1496 756392 1440788 2025-01-08 11:36:56 READ_WRITE samwol \n", + "1497 757453 1441849 2025-01-08 11:46:30 READ_WRITE samwol \n", + "1498 758512 1442908 2025-01-08 11:53:00 READ_WRITE samwol \n", + "1499 759496 1443892 2025-01-08 11:58:21 READ_WRITE samwol \n", + "1500 760201 1444597 2025-01-13 15:13:55 READ_WRITE schristley \n", + "\n", + " uuid tenant_id year \n", + "0 0001395346788177-5056a550b8-0001-012 vdjserver.org 2014 \n", + "1 0001396538655269-5056a550b8-0001-012 vdjserver.org 2014 \n", + "2 0001398708859776-5056a550b8-0001-012 vdjserver.org 2014 \n", + "3 0001398713837326-5056a550b8-0001-012 vdjserver.org 2014 \n", + "4 0001398715544223-5056a550b8-0001-012 vdjserver.org 2014 \n", + "... ... ... ... \n", + "1496 6589143665654501871-242ac118-0001-012 vdjserver.org 2025 \n", + "1497 2024481073312951825-242ac118-0001-012 vdjserver.org 2025 \n", + "1498 7301395953249218065-242ac118-0001-012 vdjserver.org 2025 \n", + "1499 1710750072586572271-242ac118-0001-012 vdjserver.org 2025 \n", + "1500 5456400192359305711-242ac118-0001-012 vdjserver.org 2025 \n", + "\n", + "[1501 rows x 8 columns]" + ] + }, + "execution_count": 144, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = filtered_metadata_perms_df[filtered_metadata_perms_df.uuid.isin(df_projectFiles.projectUuid)].reset_index()\n", + "df\n" + ] + }, + { + "cell_type": "markdown", + "id": "d13b0405-926c-4db1-9752-4a43935665ab", + "metadata": {}, + "source": [ + "## Unique # of User with Project" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "id": "ae17ea46-7e91-47fc-a221-0b18116a4b4f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "573" + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.username.nunique()" + ] + }, + { + "cell_type": "markdown", + "id": "ce6a1dbb-cc0c-4f82-ab3c-06c7469a0dbd", + "metadata": {}, + "source": [ + "## Unique Number of ProjectUUID" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "id": "6361278c-8a03-494b-8949-5bb2dd4ddda5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1223" + ] + }, + "execution_count": 147, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.uuid.nunique()" + ] + }, + { + "cell_type": "markdown", + "id": "d5604775-e9a1-44f4-9eb4-61ca5205cb73", + "metadata": {}, + "source": [ + "## FInd Number of Project Each User Has" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "id": "256738c3-befc-422b-8546-444768dee6e2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "username\n", + "schristley 128\n", + "wscarbor 87\n", + "wrounds 72\n", + "esalina 67\n", + "itoby 49\n", + " ... \n", + "mohanapriya_r 1\n", + "san4011 1\n", + "emsen24 1\n", + "xiaojianhan 1\n", + "rosepeterson1010 1\n", + "Name: count, Length: 573, dtype: int64" + ] + }, + "execution_count": 154, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = filtered_metadata_perms_df[filtered_metadata_perms_df.uuid.isin(df_projectFiles.projectUuid)].reset_index()\n", + "df.username.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "id": "b36ca5a7-09e1-4315-9a7e-4ad70188eecc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1501" + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(info_list)\n", + "len(project_uuids)" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "id": "e6d6ffd3-5494-49b0-8615-4611942ddd3d", + "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", + "
projectUuidsubject_countfile_count
12186842772679323545105-242ac118-0001-01201
12194478944862770032145-242ac118-0001-01201
12202405101561928094191-242ac118-0001-01202
12216589143665654501871-242ac118-0001-012037
12225456400192359305711-242ac118-0001-012025
\n", + "
" + ], + "text/plain": [ + " projectUuid subject_count file_count\n", + "1218 6842772679323545105-242ac118-0001-012 0 1\n", + "1219 4478944862770032145-242ac118-0001-012 0 1\n", + "1220 2405101561928094191-242ac118-0001-012 0 2\n", + "1221 6589143665654501871-242ac118-0001-012 0 37\n", + "1222 5456400192359305711-242ac118-0001-012 0 25" + ] + }, + "execution_count": 226, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from collections import defaultdict\n", + "project_uuids = filtered_metadata_perms_df[filtered_metadata_perms_df.uuid.isin(df_projectFiles.projectUuid)].uuid.unique()\n", + "info_list = []\n", + "all_names = defaultdict(int)\n", + "for project_uuid in project_uuids:\n", + " subject_cnt = 0\n", + " file_cnt = 0\n", + " for item in jsonarray:\n", + " if project_uuid in item.get('associationIds', None):\n", + " all_names[item['name']] += 1\n", + " if item['name'] in ['subject', 'projectFile']:\n", + " \n", + " if item['name'] == 'subject':\n", + " subject_cnt += 1\n", + " elif item['name'] == 'projectFile':\n", + " file_cnt += 1\n", + " info_list.append({\n", + " 'projectUuid': project_uuid,\n", + " 'subject_count':subject_cnt,\n", + " 'file_count':file_cnt\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_count = pd.DataFrame(info_list)\n", + "# Print the DataFrame\n", + "df_count.tail()\n", + "\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 262, + "id": "23948e21-1af4-4d54-aafe-b9a7354d43ac", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "defaultdict(int,\n", + " {'projectFile': 24297,\n", + " 'projectJob': 5500,\n", + " 'processMetadata': 3368,\n", + " 'projectJobFile': 384891,\n", + " 'subject': 2307,\n", + " 'cellProcessing': 958,\n", + " 'nucleicAcidProcessing': 1346,\n", + " 'projectJobArchive': 453,\n", + " 'sample': 8316,\n", + " 'diagnosis': 102,\n", + " 'sampleGroup': 223,\n", + " 'sampleColumns': 49,\n", + " 'subjectColumns': 41,\n", + " 'repertoire': 1362,\n", + " 'projectLoad': 16,\n", + " 'rearrangementLoad': 1806,\n", + " 'cellProcessingColumns': 27,\n", + " 'nucleicAcidProcessingColumns': 29,\n", + " 'diagnosisColumns': 7,\n", + " 'bioProcessingColumns': 1,\n", + " 'bioProcessing': 5,\n", + " 'sample_processing': 324,\n", + " 'data_processing': 420})" + ] + }, + "execution_count": 262, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_names" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "id": "253030fe-29bf-4f0f-baeb-9d6591f5c189", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 0, 0, ..., 2, 37, 25], shape=(1223,))" + ] + }, + "execution_count": 234, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_count.file_count.values\n", + "# df_count[ df_count.projectUuid=='520125623043878425-242ac11c-0001-012']" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "id": "506a547d-21a8-40e2-8505-ba627da50cbf", + "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", + " \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", + " \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", + "
idlast_updatedpermissionusernameuuidtenant_idyearprojectUuidsubject_countfile_count
0682014-03-27 16:12:46READ_WRITEwscarbor0001395346788177-5056a550b8-0001-012vdjserver.org20140001395346788177-5056a550b8-0001-01200
1722014-04-03 10:24:15READ_WRITEvdj0001396538655269-5056a550b8-0001-012vdjserver.org20140001396538655269-5056a550b8-0001-01200
21302014-04-28 13:14:19READ_WRITEwscarbor0001398708859776-5056a550b8-0001-012vdjserver.org20140001398708859776-5056a550b8-0001-01200
31422014-04-28 14:37:17READ_WRITEwscarbor0001398713837326-5056a550b8-0001-012vdjserver.org20140001398713837326-5056a550b8-0001-01200
41532014-04-28 15:05:44READ_WRITEwscarbor0001398715544223-5056a550b8-0001-012vdjserver.org20140001398715544223-5056a550b8-0001-01200
.................................
149614407882025-01-08 11:36:56READ_WRITEsamwol6589143665654501871-242ac118-0001-012vdjserver.org20256589143665654501871-242ac118-0001-012037
149714418492025-01-08 11:46:30READ_WRITEsamwol2024481073312951825-242ac118-0001-012vdjserver.org20252024481073312951825-242ac118-0001-0120101
149814429082025-01-08 11:53:00READ_WRITEsamwol7301395953249218065-242ac118-0001-012vdjserver.org20257301395953249218065-242ac118-0001-0120101
149914438922025-01-08 11:58:21READ_WRITEsamwol1710750072586572271-242ac118-0001-012vdjserver.org20251710750072586572271-242ac118-0001-012091
150014445972025-01-13 15:13:55READ_WRITEschristley5456400192359305711-242ac118-0001-012vdjserver.org20255456400192359305711-242ac118-0001-012025
\n", + "

1501 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "0 68 2014-03-27 16:12:46 READ_WRITE wscarbor \n", + "1 72 2014-04-03 10:24:15 READ_WRITE vdj \n", + "2 130 2014-04-28 13:14:19 READ_WRITE wscarbor \n", + "3 142 2014-04-28 14:37:17 READ_WRITE wscarbor \n", + "4 153 2014-04-28 15:05:44 READ_WRITE wscarbor \n", + "... ... ... ... ... \n", + "1496 1440788 2025-01-08 11:36:56 READ_WRITE samwol \n", + "1497 1441849 2025-01-08 11:46:30 READ_WRITE samwol \n", + "1498 1442908 2025-01-08 11:53:00 READ_WRITE samwol \n", + "1499 1443892 2025-01-08 11:58:21 READ_WRITE samwol \n", + "1500 1444597 2025-01-13 15:13:55 READ_WRITE schristley \n", + "\n", + " uuid tenant_id year \\\n", + "0 0001395346788177-5056a550b8-0001-012 vdjserver.org 2014 \n", + "1 0001396538655269-5056a550b8-0001-012 vdjserver.org 2014 \n", + "2 0001398708859776-5056a550b8-0001-012 vdjserver.org 2014 \n", + "3 0001398713837326-5056a550b8-0001-012 vdjserver.org 2014 \n", + "4 0001398715544223-5056a550b8-0001-012 vdjserver.org 2014 \n", + "... ... ... ... \n", + "1496 6589143665654501871-242ac118-0001-012 vdjserver.org 2025 \n", + "1497 2024481073312951825-242ac118-0001-012 vdjserver.org 2025 \n", + "1498 7301395953249218065-242ac118-0001-012 vdjserver.org 2025 \n", + "1499 1710750072586572271-242ac118-0001-012 vdjserver.org 2025 \n", + "1500 5456400192359305711-242ac118-0001-012 vdjserver.org 2025 \n", + "\n", + " projectUuid subject_count file_count \n", + "0 0001395346788177-5056a550b8-0001-012 0 0 \n", + "1 0001396538655269-5056a550b8-0001-012 0 0 \n", + "2 0001398708859776-5056a550b8-0001-012 0 0 \n", + "3 0001398713837326-5056a550b8-0001-012 0 0 \n", + "4 0001398715544223-5056a550b8-0001-012 0 0 \n", + "... ... ... ... \n", + "1496 6589143665654501871-242ac118-0001-012 0 37 \n", + "1497 2024481073312951825-242ac118-0001-012 0 101 \n", + "1498 7301395953249218065-242ac118-0001-012 0 101 \n", + "1499 1710750072586572271-242ac118-0001-012 0 91 \n", + "1500 5456400192359305711-242ac118-0001-012 0 25 \n", + "\n", + "[1501 rows x 10 columns]" + ] + }, + "execution_count": 240, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_df = pd.merge(filtered_metadata_perms_df, df_count, left_on='uuid', right_on='projectUuid', how='inner')\n", + "merged_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 244, + "id": "41a33317-0037-4e57-a0f6-51dd7b30fcec", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unique Numner of Users with Subjects:89\n", + "Unique Numner of Users with Files:528\n" + ] + } + ], + "source": [ + "n_subjects = merged_df[merged_df.subject_count > 0].username.nunique()\n", + "print(f\"Unique Numner of Users with Subjects:{n_subjects}\")\n", + "\n", + "n_files = merged_df[merged_df.file_count > 0].username.nunique()\n", + "print(f\"Unique Numner of Users with Files:{n_files}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 267, + "id": "ed40415c-48b6-4ba5-900a-478fece2cb6d", + "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", + " \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", + " \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", + "
app_idstatusproject_folderprojectUUIDJobUuidremote_outcomeproject_creatorlast_updated
0repcalc-ls6-2.0u8FINISHEDprojects5456400192359305711-242ac118-0001-012c7cd08ad-a560-4574-a363-b9cc4c5e051d-007FINISHEDschristley2025-01-25 15:43:51.678
1igblast-ls6-1.20u6FINISHEDprojects5456400192359305711-242ac118-0001-0129188bf80-e868-4e05-a6b4-308c044108d7-007FINISHEDschristley2025-01-24 04:20:37.891
2igblast-ls6-1.20u6FAILEDprojects5199144433477554666-242ac116-0001-012773a5cb7-b369-4517-a221-83d57e3899e5-007FAILED_SKIP_ARCHIVEscott_public2025-01-22 15:04:46.891
3vdj_pipe-ls6-0.1.7u2FINISHEDprojects5456400192359305711-242ac118-0001-012c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007FINISHEDschristley2025-01-14 22:31:02.980
4vdj_pipe-ls6-0.1.7u2FINISHEDprojects6589143665654501871-242ac118-0001-012ad02cb34-250e-48cb-a06e-973e431b62ee-007FINISHEDschristley2025-01-09 04:21:12.476
...........................
963repcalc-stampede2-1.0u7FINISHEDprojects3087851897075012076-242ac118-0001-012fdcee8a4-b88b-4f44-b347-21c6c31f8401-007FINISHEDdiary2022-04-09 07:02:15.731
964igblast-stampede2-1.14u6FINISHEDprojects3087851897075012076-242ac118-0001-0124419f0fc-67dc-4f21-a66a-ff178393a4de-007FINISHEDdiary2022-04-07 16:42:24.925
967presto-stampede2-0.5u2FINISHEDprojects3087851897075012076-242ac118-0001-0123eb742ae-6caa-43c1-b65b-3fa35ad7754b-007FINISHEDdiary2022-04-06 10:42:46.132
985vdj_pipe-stampede2-0.1.7u4FINISHEDprojects8557415777028206100-242ac118-0001-0122d35173f-30e5-4908-bf33-5784bcc42dcd-007FINISHEDareceveur2022-04-01 09:37:15.693
986vdj_pipe-stampede2-0.1.7u4FINISHEDprojects8557415777028206100-242ac118-0001-0122c48d618-bf09-483d-aa43-44872f0b416b-007FINISHEDareceveur2022-03-31 22:01:50.356
\n", + "

812 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " app_id status project_folder \\\n", + "0 repcalc-ls6-2.0u8 FINISHED projects \n", + "1 igblast-ls6-1.20u6 FINISHED projects \n", + "2 igblast-ls6-1.20u6 FAILED projects \n", + "3 vdj_pipe-ls6-0.1.7u2 FINISHED projects \n", + "4 vdj_pipe-ls6-0.1.7u2 FINISHED projects \n", + ".. ... ... ... \n", + "963 repcalc-stampede2-1.0u7 FINISHED projects \n", + "964 igblast-stampede2-1.14u6 FINISHED projects \n", + "967 presto-stampede2-0.5u2 FINISHED projects \n", + "985 vdj_pipe-stampede2-0.1.7u4 FINISHED projects \n", + "986 vdj_pipe-stampede2-0.1.7u4 FINISHED projects \n", + "\n", + " projectUUID \\\n", + "0 5456400192359305711-242ac118-0001-012 \n", + "1 5456400192359305711-242ac118-0001-012 \n", + "2 5199144433477554666-242ac116-0001-012 \n", + "3 5456400192359305711-242ac118-0001-012 \n", + "4 6589143665654501871-242ac118-0001-012 \n", + ".. ... \n", + "963 3087851897075012076-242ac118-0001-012 \n", + "964 3087851897075012076-242ac118-0001-012 \n", + "967 3087851897075012076-242ac118-0001-012 \n", + "985 8557415777028206100-242ac118-0001-012 \n", + "986 8557415777028206100-242ac118-0001-012 \n", + "\n", + " JobUuid remote_outcome \\\n", + "0 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 FINISHED \n", + "1 9188bf80-e868-4e05-a6b4-308c044108d7-007 FINISHED \n", + "2 773a5cb7-b369-4517-a221-83d57e3899e5-007 FAILED_SKIP_ARCHIVE \n", + "3 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 FINISHED \n", + "4 ad02cb34-250e-48cb-a06e-973e431b62ee-007 FINISHED \n", + ".. ... ... \n", + "963 fdcee8a4-b88b-4f44-b347-21c6c31f8401-007 FINISHED \n", + "964 4419f0fc-67dc-4f21-a66a-ff178393a4de-007 FINISHED \n", + "967 3eb742ae-6caa-43c1-b65b-3fa35ad7754b-007 FINISHED \n", + "985 2d35173f-30e5-4908-bf33-5784bcc42dcd-007 FINISHED \n", + "986 2c48d618-bf09-483d-aa43-44872f0b416b-007 FINISHED \n", + "\n", + " project_creator last_updated \n", + "0 schristley 2025-01-25 15:43:51.678 \n", + "1 schristley 2025-01-24 04:20:37.891 \n", + "2 scott_public 2025-01-22 15:04:46.891 \n", + "3 schristley 2025-01-14 22:31:02.980 \n", + "4 schristley 2025-01-09 04:21:12.476 \n", + ".. ... ... \n", + "963 diary 2022-04-09 07:02:15.731 \n", + "964 diary 2022-04-07 16:42:24.925 \n", + "967 diary 2022-04-06 10:42:46.132 \n", + "985 areceveur 2022-04-01 09:37:15.693 \n", + "986 areceveur 2022-03-31 22:01:50.356 \n", + "\n", + "[812 rows x 8 columns]" + ] + }, + "execution_count": 267, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp" + ] + }, + { + "cell_type": "code", + "execution_count": 268, + "id": "a88aa2d2-cda8-433a-9f3e-d8afece08175", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unique Number of Projects with Jobs:160\n", + "Unique Number of users with Jobs:106\n" + ] + } + ], + "source": [ + "project_with_files = merged_df[merged_df.file_count > 0]\n", + "temp = df_allJobs_filtered[df_allJobs_filtered.projectUUID.isin(project_with_files.projectUuid)]\n", + "temp\n", + "print(f\"Unique Number of Projects with Jobs:{temp.projectUUID.nunique()}\")\n", + "k = merged_df[merged_df.projectUuid.isin(temp.projectUUID)].username.nunique()\n", + "\n", + "print(f\"Unique Number of users with Jobs:{k}\")\n", + "project_uuid_with_jobs = temp.projectUUID.unique()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 270, + "id": "456ae649-8367-4176-baa7-b89af477ce9c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['lliu', 'schristley', 'itoby', 'lgcowell', 'jostmey',\n", + " 'scott_public', 'ockenhoc', 'jjy76', 'eyecatch', 'jjy_ff',\n", + " 'yxy0824', 'areceveur', 'diary', 'liamckealy', 'fvale',\n", + " 'tapgeorge1', 'mmedapj', 'fjessica_paran', 'aislinn.jennings',\n", + " 'alaaselim99', 'felipelopesassis', 'paran.ux', 'lmorales',\n", + " 'dexwel25', 'jtearnest', 'zhouhao961004', 'parkak11', 'marius101',\n", + " 'raghwendra088', 'bi213', 'keiophadbc', 'keiophadbcdt', 'laostzu',\n", + " 'mcavallaro2', 'sikhlas', 'sysbio_ibm', 'pnamxencor8349',\n", + " 'mabrockman', 'npacalin', 'vdjexplore007', 'marilia', 'htejedam',\n", + " 'phaedras', 'kshiming', 'yuka', 'beryl_cummings', 'havanap1',\n", + " 'ashvindprabahran', 'th', 'counseler', 'shaojunliu',\n", + " 'victorialopez', 'okd03', 'clancey', 'aboli', 'benbaran',\n", + " 'umm_ikc', 'khani', 'im2211', 'nmurray', 'bdandres',\n", + " 'mvcarlosdominguez', 'silviapc', 'smherrin', 'araapp',\n", + " 'raffaele.iorio', 'menezko', 'jennifer_gonzalez77', 'antibody2976',\n", + " 'ustilago', 'lili', 'ugg1', 'andreher', 'huangtao', 'calebsmall72',\n", + " 'jianche', 'krloritz', 'tomcaniels', 'mark.kelly', '2u35',\n", + " 'cs2023', 'kunhuilu', 'stewarte', 'shbeck', 'altvatet',\n", + " 'mapt19222', 'pswanenberg13', 'pat21778', 'bgarcia17', 'landmat',\n", + " 'loubna_boutkhil', 'emmatouizer', 'tanno-hd', 'san4011',\n", + " 'nakhan05', 'harrywhite', 'laraschlegel2009', 's234499',\n", + " 'terresroxane', 'tcukkry', 'mcprado', 'minici.claudia',\n", + " 'nianbinli', 'crushseven', 'sharsh23', 'samwol'], dtype=object)" + ] + }, + "execution_count": 270, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#project_uuids = merged_df[merged_df.file_count > 0].projectUuid.unique()\n", + "# all_users = {}\n", + "# for project_uuid in project_uuids:\n", + " \n", + "merged_df[merged_df.projectUuid.isin(temp.projectUUID)].username.unique() \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 279, + "id": "dd14bd18-083f-416f-88bd-56b73984819e", + "metadata": {}, + "outputs": [], + "source": [ + "nakhans_job = merged_df[merged_df.username =='nakhan05'].uuid.values" + ] + }, + { + "cell_type": "code", + "execution_count": 280, + "id": "2a9d911e-06cb-4cc6-b38d-3dfb5468f4e0", + "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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
app_idstatusproject_folderprojectUUIDJobUuidremote_outcomeproject_creatorlast_updated
5repcalc-ls6-2.0u8FINISHEDprojects5261827584879226385-242ac118-0001-01256208591-7b9d-4ed7-8ef8-8c9519b515e2-007FINISHEDschristley2024-12-18 04:16:58.081
6igblast-ls6-1.20u6FINISHEDprojects5261827584879226385-242ac118-0001-012abdc1398-2d71-4d96-940e-cc5a66a15de8-007FINISHEDschristley2024-12-17 13:30:24.879
7igblast-ls6-1.20u6FINISHEDprojects5261827584879226385-242ac118-0001-0123fdac741-cb54-4457-8748-925a2f8226d5-007FINISHEDschristley2024-12-16 10:33:08.101
8igblast-ls6-1.20u6FINISHEDprojects5261827584879226385-242ac118-0001-0122912131a-c8ba-4290-9190-8ab330b2e1ac-007FINISHEDschristley2024-12-14 05:53:45.705
9repcalc-ls6-2.0u8FINISHEDprojects5261827584879226385-242ac118-0001-012cb6ca396-d185-4a47-b0da-0e6fa326f410-007FINISHEDnakhan052024-12-13 01:44:54.856
19igblast-ls6-1.20u6FINISHEDprojects5261827584879226385-242ac118-0001-012cfbbaa44-ea65-4c59-9e50-ca365f0e8f04-007FINISHEDschristley2024-11-12 08:28:52.057
38igblast-ls6-1.20u6FINISHEDprojects5333187196986060305-242ac118-0001-012a1715da0-ff82-4fbe-b1ae-b2c763304c4f-007FINISHEDschristley2024-09-10 08:19:33.314
41repcalc-ls6-2.0u8FINISHEDprojects5333187196986060305-242ac118-0001-012b5d671cd-f9bb-4cd7-9a68-07c22cd2c402-007FINISHEDschristley2024-08-31 20:05:27.119
42igblast-ls6-1.20u6FINISHEDprojects5333187196986060305-242ac118-0001-012ea60242a-48f5-4e50-bf7c-0f5798c1d091-007FINISHEDschristley2024-08-30 17:44:41.069
45igblast-ls6-1.20u6FINISHEDprojects5333187196986060305-242ac118-0001-0127a32567f-725c-4a20-9ef4-e4e8f6a88c6f-007FINISHEDnakhan052024-08-02 23:30:17.374
46repcalc-ls6-2.0u8FINISHEDprojects5333187196986060305-242ac118-0001-012fd19fec3-770b-4f8d-9c7a-947ad309e50b-007FINISHEDnakhan052024-08-02 05:48:35.868
47igblast-ls6-1.20u6FINISHEDprojects5333187196986060305-242ac118-0001-012601420c9-1c21-4cc8-8847-968b2f5a8171-007FINISHEDnakhan052024-07-30 14:56:12.540
49igblast-ls6-1.20u6FINISHEDprojects5333187196986060305-242ac118-0001-012688c2784-564d-4a26-8126-08368063ff34-007FINISHEDnakhan052024-07-15 19:32:50.587
50igblast-ls6-1.20u6FINISHEDprojects5333187196986060305-242ac118-0001-0128af92a89-b38b-4ef9-8aab-526cf3a3c444-007FINISHEDschristley2024-07-09 18:55:53.449
\n", + "
" + ], + "text/plain": [ + " app_id status project_folder \\\n", + "5 repcalc-ls6-2.0u8 FINISHED projects \n", + "6 igblast-ls6-1.20u6 FINISHED projects \n", + "7 igblast-ls6-1.20u6 FINISHED projects \n", + "8 igblast-ls6-1.20u6 FINISHED projects \n", + "9 repcalc-ls6-2.0u8 FINISHED projects \n", + "19 igblast-ls6-1.20u6 FINISHED projects \n", + "38 igblast-ls6-1.20u6 FINISHED projects \n", + "41 repcalc-ls6-2.0u8 FINISHED projects \n", + "42 igblast-ls6-1.20u6 FINISHED projects \n", + "45 igblast-ls6-1.20u6 FINISHED projects \n", + "46 repcalc-ls6-2.0u8 FINISHED projects \n", + "47 igblast-ls6-1.20u6 FINISHED projects \n", + "49 igblast-ls6-1.20u6 FINISHED projects \n", + "50 igblast-ls6-1.20u6 FINISHED projects \n", + "\n", + " projectUUID \\\n", + "5 5261827584879226385-242ac118-0001-012 \n", + "6 5261827584879226385-242ac118-0001-012 \n", + "7 5261827584879226385-242ac118-0001-012 \n", + "8 5261827584879226385-242ac118-0001-012 \n", + "9 5261827584879226385-242ac118-0001-012 \n", + "19 5261827584879226385-242ac118-0001-012 \n", + "38 5333187196986060305-242ac118-0001-012 \n", + "41 5333187196986060305-242ac118-0001-012 \n", + "42 5333187196986060305-242ac118-0001-012 \n", + "45 5333187196986060305-242ac118-0001-012 \n", + "46 5333187196986060305-242ac118-0001-012 \n", + "47 5333187196986060305-242ac118-0001-012 \n", + "49 5333187196986060305-242ac118-0001-012 \n", + "50 5333187196986060305-242ac118-0001-012 \n", + "\n", + " JobUuid remote_outcome project_creator \\\n", + "5 56208591-7b9d-4ed7-8ef8-8c9519b515e2-007 FINISHED schristley \n", + "6 abdc1398-2d71-4d96-940e-cc5a66a15de8-007 FINISHED schristley \n", + "7 3fdac741-cb54-4457-8748-925a2f8226d5-007 FINISHED schristley \n", + "8 2912131a-c8ba-4290-9190-8ab330b2e1ac-007 FINISHED schristley \n", + "9 cb6ca396-d185-4a47-b0da-0e6fa326f410-007 FINISHED nakhan05 \n", + "19 cfbbaa44-ea65-4c59-9e50-ca365f0e8f04-007 FINISHED schristley \n", + "38 a1715da0-ff82-4fbe-b1ae-b2c763304c4f-007 FINISHED schristley \n", + "41 b5d671cd-f9bb-4cd7-9a68-07c22cd2c402-007 FINISHED schristley \n", + "42 ea60242a-48f5-4e50-bf7c-0f5798c1d091-007 FINISHED schristley \n", + "45 7a32567f-725c-4a20-9ef4-e4e8f6a88c6f-007 FINISHED nakhan05 \n", + "46 fd19fec3-770b-4f8d-9c7a-947ad309e50b-007 FINISHED nakhan05 \n", + "47 601420c9-1c21-4cc8-8847-968b2f5a8171-007 FINISHED nakhan05 \n", + "49 688c2784-564d-4a26-8126-08368063ff34-007 FINISHED nakhan05 \n", + "50 8af92a89-b38b-4ef9-8aab-526cf3a3c444-007 FINISHED schristley \n", + "\n", + " last_updated \n", + "5 2024-12-18 04:16:58.081 \n", + "6 2024-12-17 13:30:24.879 \n", + "7 2024-12-16 10:33:08.101 \n", + "8 2024-12-14 05:53:45.705 \n", + "9 2024-12-13 01:44:54.856 \n", + "19 2024-11-12 08:28:52.057 \n", + "38 2024-09-10 08:19:33.314 \n", + "41 2024-08-31 20:05:27.119 \n", + "42 2024-08-30 17:44:41.069 \n", + "45 2024-08-02 23:30:17.374 \n", + "46 2024-08-02 05:48:35.868 \n", + "47 2024-07-30 14:56:12.540 \n", + "49 2024-07-15 19:32:50.587 \n", + "50 2024-07-09 18:55:53.449 " + ] + }, + "execution_count": 280, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_allJobs_filtered[df_allJobs_filtered.projectUUID.isin(nakhans_job)]" + ] + }, + { + "cell_type": "code", + "execution_count": 285, + "id": "166cc6a2-2a68-401e-8f09-38ed49f5a354", + "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", + " \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", + " \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", + "
uuidownerfirstNamelastNameemailcitystatecountrycreatedlastUpdated
00001389976523746-5056a550b8-0001-012wscarborWalterScarboroughwscarbor@tacc.utexas.eduAustinTXUSA2014-01-17T10:35:23.649-06:002016-04-27T15:07:26.261-05:00
10001391029872321-5056a550b8-0001-012test19Test19test19@test.comNone2014-01-29T15:11:12.321-06:002014-01-29T15:12:33.955-06:00
20001391717057917-5056a550b8-0001-012test31test31@test.comNoneNoneNone2014-02-06T14:04:17.917-06:002014-02-06T14:04:17.917-06:00
30001391719926131-5056a550b8-0001-012test33NoneNonetest33@test.comNoneNoneNone2014-02-06T14:52:06.131-06:002014-02-06T14:52:06.131-06:00
40001391720404124-5056a550b8-0001-012test34NedFlanderstest34@test.comSpringfieldILNone2014-02-06T15:00:04.123-06:002014-02-06T15:00:46.376-06:00
.................................
18176242932598575984145-242ac118-0001-012rgarciaRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nlAmsterdamNetherlands2025-01-02T11:11:52.894-06:002025-01-02T11:11:52.894-06:00
18182755888095932968465-242ac118-0001-012rgarciavRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nl2025-01-02T11:41:52.070-06:002025-01-02T11:41:52.070-06:00
18195481029658171207185-242ac118-0001-012erichardsonEveRichardsonerichardson@lji.orgSan DiegoCaliforniaUnited States2025-01-07T18:01:25.657-06:002025-01-07T18:01:25.657-06:00
18204458895817601248785-242ac118-0001-012samwolsamuel.wollenburg@utsouthwestern.edu2025-01-07T20:24:59.390-06:002025-01-07T20:24:59.390-06:00
18219076859566261923345-242ac118-0001-012chrisjames1992Chinweike ChristopherUdoyechinweikechristopher.udoye@uksh.deLübeckSchleswig-HolsteinGermany2025-01-17T07:54:02.133-06:002025-01-17T07:54:02.133-06:00
\n", + "

1822 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "0 0001389976523746-5056a550b8-0001-012 wscarbor \n", + "1 0001391029872321-5056a550b8-0001-012 test19 \n", + "2 0001391717057917-5056a550b8-0001-012 test31 \n", + "3 0001391719926131-5056a550b8-0001-012 test33 \n", + "4 0001391720404124-5056a550b8-0001-012 test34 \n", + "... ... ... \n", + "1817 6242932598575984145-242ac118-0001-012 rgarcia \n", + "1818 2755888095932968465-242ac118-0001-012 rgarciav \n", + "1819 5481029658171207185-242ac118-0001-012 erichardson \n", + "1820 4458895817601248785-242ac118-0001-012 samwol \n", + "1821 9076859566261923345-242ac118-0001-012 chrisjames1992 \n", + "\n", + " firstName lastName \\\n", + "0 Walter Scarborough \n", + "1 Test 19 \n", + "2 \n", + "3 None None \n", + "4 Ned Flanders \n", + "... ... ... \n", + "1817 Rodrigo García Valiente \n", + "1818 Rodrigo García Valiente \n", + "1819 Eve Richardson \n", + "1820 \n", + "1821 Chinweike Christopher Udoye \n", + "\n", + " email city state \\\n", + "0 wscarbor@tacc.utexas.edu Austin TX \n", + "1 test19@test.com \n", + "2 test31@test.com None None \n", + "3 test33@test.com None None \n", + "4 test34@test.com Springfield IL \n", + "... ... ... ... \n", + "1817 r.garciavaliente@amsterdamumc.nl Amsterdam \n", + "1818 r.garciavaliente@amsterdamumc.nl \n", + "1819 erichardson@lji.org San Diego California \n", + "1820 samuel.wollenburg@utsouthwestern.edu \n", + "1821 chinweikechristopher.udoye@uksh.de Lübeck Schleswig-Holstein \n", + "\n", + " country created \\\n", + "0 USA 2014-01-17T10:35:23.649-06:00 \n", + "1 None 2014-01-29T15:11:12.321-06:00 \n", + "2 None 2014-02-06T14:04:17.917-06:00 \n", + "3 None 2014-02-06T14:52:06.131-06:00 \n", + "4 None 2014-02-06T15:00:04.123-06:00 \n", + "... ... ... \n", + "1817 Netherlands 2025-01-02T11:11:52.894-06:00 \n", + "1818 2025-01-02T11:41:52.070-06:00 \n", + "1819 United States 2025-01-07T18:01:25.657-06:00 \n", + "1820 2025-01-07T20:24:59.390-06:00 \n", + "1821 Germany 2025-01-17T07:54:02.133-06:00 \n", + "\n", + " lastUpdated \n", + "0 2016-04-27T15:07:26.261-05:00 \n", + "1 2014-01-29T15:12:33.955-06:00 \n", + "2 2014-02-06T14:04:17.917-06:00 \n", + "3 2014-02-06T14:52:06.131-06:00 \n", + "4 2014-02-06T15:00:46.376-06:00 \n", + "... ... \n", + "1817 2025-01-02T11:11:52.894-06:00 \n", + "1818 2025-01-02T11:41:52.070-06:00 \n", + "1819 2025-01-07T18:01:25.657-06:00 \n", + "1820 2025-01-07T20:24:59.390-06:00 \n", + "1821 2025-01-17T07:54:02.133-06:00 \n", + "\n", + "[1822 rows x 10 columns]" + ] + }, + "execution_count": 285, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_profile" + ] + }, + { + "cell_type": "code", + "execution_count": 291, + "id": "037e902f-fad7-45b5-b60b-89d8b9c2597e", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
owneremail
0wscarborwscarbor@tacc.utexas.edu
12jfonnerjfonner@tacc.utexas.edu
20wscarbor2test@test.com
23mlevinmlevin@svarnetics.org
24esalinaedward.salinas@utsouthwestern.edu
.........
1806nianbinlilinianbin97@tmu.edu.cn
1811jkoedijkj.b.koedijk@prinsesmaximacentrum.nl
1814crushsevenZiyue.Yan@alivexbiotech.com
1816sharsh23harshit.s@thinkbio.ai
1820samwolsamuel.wollenburg@utsouthwestern.edu
\n", + "

571 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " owner email\n", + "0 wscarbor wscarbor@tacc.utexas.edu\n", + "12 jfonner jfonner@tacc.utexas.edu\n", + "20 wscarbor2 test@test.com\n", + "23 mlevin mlevin@svarnetics.org\n", + "24 esalina edward.salinas@utsouthwestern.edu\n", + "... ... ...\n", + "1806 nianbinli linianbin97@tmu.edu.cn\n", + "1811 jkoedijk j.b.koedijk@prinsesmaximacentrum.nl\n", + "1814 crushseven Ziyue.Yan@alivexbiotech.com\n", + "1816 sharsh23 harshit.s@thinkbio.ai\n", + "1820 samwol samuel.wollenburg@utsouthwestern.edu\n", + "\n", + "[571 rows x 2 columns]" + ] + }, + "execution_count": 291, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_profile[df_profile.owner.isin(merged_df.username)][['owner', 'email']]" + ] + }, + { + "cell_type": "code", + "execution_count": 292, + "id": "49a84300-7b89-48f6-add8-2e28479ef6b7", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Emailupdated_email
012ysliu2 at stu.edu.cn12ysliu2@stu.edu.cn
118982180702 at msn.cn18982180702@msn.cn
22008110020 at alumni.sjtu.edu.cn2008110020@alumni.sjtu.edu.cn
32383920158 at qq.com2383920158@qq.com
42deepayan at gmail.com2deepayan@gmail.com
.........
571zhanxw at gmail.comzhanxw@gmail.com
572zhe.sang at gmail.comzhe.sang@gmail.com
573zicheng at utexas.eduzicheng@utexas.edu
574zluo819 at gmail.comzluo819@gmail.com
575zyf950619 at gmail.comzyf950619@gmail.com
\n", + "

576 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " Email updated_email\n", + "0 12ysliu2 at stu.edu.cn 12ysliu2@stu.edu.cn\n", + "1 18982180702 at msn.cn 18982180702@msn.cn\n", + "2 2008110020 at alumni.sjtu.edu.cn 2008110020@alumni.sjtu.edu.cn\n", + "3 2383920158 at qq.com 2383920158@qq.com\n", + "4 2deepayan at gmail.com 2deepayan@gmail.com\n", + ".. ... ...\n", + "571 zhanxw at gmail.com zhanxw@gmail.com\n", + "572 zhe.sang at gmail.com zhe.sang@gmail.com\n", + "573 zicheng at utexas.edu zicheng@utexas.edu\n", + "574 zluo819 at gmail.com zluo819@gmail.com\n", + "575 zyf950619 at gmail.com zyf950619@gmail.com\n", + "\n", + "[576 rows x 2 columns]" + ] + }, + "execution_count": 292, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mailing_list" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "MSM_TensorFlow_2", + "language": "python", + "name": "msm_tensorflow_2" + }, + "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 +} diff --git a/conversion/tapis_v2_to_v3/data_migration.ipynb b/conversion/tapis_v2_to_v3/data_migration.ipynb new file mode 100644 index 0000000..629da72 --- /dev/null +++ b/conversion/tapis_v2_to_v3/data_migration.ipynb @@ -0,0 +1,312 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 8, + "id": "ffb06a6d-cd2e-4797-a0cf-7f2a80100868", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import json\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a9064573-e9d4-44ce-9bb7-2dda54e103d2", + "metadata": {}, + "outputs": [], + "source": [ + "job_events_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobEvents.json')\n", + "job_permissions_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobPermissions.json')\n", + "jobs_all_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobs_all.json')\n", + "jobs_all_df['parameters.Creator'] = jobs_all_df['parameters'].apply(lambda x: json.loads(x).get('Creator', np.nan) if x else np.nan)\n", + "metadata_perms_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverMetadataPermissions.json')\n", + "\n", + "with open('/mnt/md0/Projects/vdjserver/vdjserverJsonArrayFeb042025.json', 'r') as f:\n", + " jsonarray = json.load(f)" + ] + }, + { + "cell_type": "markdown", + "id": "01e4616d-a406-4dd8-898f-1fb063545387", + "metadata": {}, + "source": [ + "## Look at Public Project Data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "142acf77-a163-4f86-9e3e-bf162614537c", + "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", + "
uuidstudy_idassociationIdsstudy_titlelastUpdated
04505707319090933270-242ac113-0001-0124505707319090933270-242ac113-0001-012[]Outcome and Immune Correlates of a Phase II Tr...2022-12-18T01:14:48.159-06:00
12034535426280329706-242ac113-0001-012PRJNA300878[]Individual heritable differences result in uni...2022-12-18T01:14:48.306-06:00
25350423756993719830-242ac113-0001-0121371444213709729305-242ac11c-0001-012[]T cell receptor repertoires after adoptive tra...2022-12-18T01:14:48.028-06:00
31570295022599213546-242ac113-0001-0123276777473314001386-242ac116-0001-012[]Biophysicochemical Motifs in T cell Receptor S...2022-12-18T01:14:47.900-06:00
454655627105407466-242ac113-0001-012PRJNA248475[]B cells populating the multiple sclerosis brai...2022-12-18T01:14:48.453-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "0 4505707319090933270-242ac113-0001-012 \n", + "1 2034535426280329706-242ac113-0001-012 \n", + "2 5350423756993719830-242ac113-0001-012 \n", + "3 1570295022599213546-242ac113-0001-012 \n", + "4 54655627105407466-242ac113-0001-012 \n", + "\n", + " study_id associationIds \\\n", + "0 4505707319090933270-242ac113-0001-012 [] \n", + "1 PRJNA300878 [] \n", + "2 1371444213709729305-242ac11c-0001-012 [] \n", + "3 3276777473314001386-242ac116-0001-012 [] \n", + "4 PRJNA248475 [] \n", + "\n", + " study_title \\\n", + "0 Outcome and Immune Correlates of a Phase II Tr... \n", + "1 Individual heritable differences result in uni... \n", + "2 T cell receptor repertoires after adoptive tra... \n", + "3 Biophysicochemical Motifs in T cell Receptor S... \n", + "4 B cells populating the multiple sclerosis brai... \n", + "\n", + " lastUpdated \n", + "0 2022-12-18T01:14:48.159-06:00 \n", + "1 2022-12-18T01:14:48.306-06:00 \n", + "2 2022-12-18T01:14:48.028-06:00 \n", + "3 2022-12-18T01:14:47.900-06:00 \n", + "4 2022-12-18T01:14:48.453-06:00 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public_project_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'public_project':\n", + " # json_print(item)\n", + " # break\n", + " uuid = item.get('uuid', None)\n", + " study_id = item.get('value', {}).get('study_id', None)\n", + " study_title = item.get('value', {}).get('study_title', None)\n", + " associationIds = item.get('associationIds', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " public_project_list.append({\n", + " 'uuid': uuid,\n", + " 'study_id': study_id,\n", + " 'associationIds': associationIds,\n", + " 'study_title': study_title,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_public_project = pd.DataFrame(public_project_list)\n", + "df_public_project.head()" + ] + }, + { + "cell_type": "markdown", + "id": "b42cc7fb-4a3b-4826-b5bc-54d1607fbc17", + "metadata": {}, + "source": [ + "## Convert public_project data and output into JSONL files" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "56a4a181-72fe-4a46-86fc-a6ef2ae8a275", + "metadata": {}, + "outputs": [], + "source": [ + "exclusion_names = [ 'projectLoad', 'rearrangementLoad' ]\n", + "name_map = { \"projectFile\": \"project_file\" }\n", + "permission = [ { \"username\": \"vdjserver.curation@gmail.com\", \"permission\": { \"read\":True, \"write\":True } } ]\n", + "\n", + "col_list = ['uuid', 'owner', 'associationIds', 'created', 'lastUpdated', 'name', 'value']\n", + "obj_list = {}\n", + "data_dir = 'Metadata_public_project/' \n", + "for project_uuid in df_public_project.uuid:\n", + " # Open a file in write mode\n", + " with open(f'{data_dir}{project_uuid}_metadata.jsonl', 'w') as file:\n", + " for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type in exclusion_names:\n", + " continue\n", + " if (project_uuid in item.get('uuid', None)) or (project_uuid in item.get('associationIds', None)):\n", + " if name_map.get(item_type) is not None:\n", + " item['name'] = name_map.get(item_type)\n", + " item_type = item['name']\n", + "\n", + " # migrate the object\n", + " if item_type == 'public_project':\n", + " # move old keywords\n", + " if item['value'].get('vdjserver_keywords') is not None:\n", + " if item['value'].get('vdjserver') is None:\n", + " item['value']['vdjserver'] = {}\n", + " item['value']['vdjserver']['keywords'] = item['value']['vdjserver_keywords']\n", + " del item['value']['vdjserver_keywords']\n", + " # add permissions\n", + " item['permission'] = permission\n", + " # old fields\n", + " if item['value'].get('showArchivedJobs') is not None:\n", + " del item['value']['showArchivedJobs']\n", + " if item['value'].get('owner') is not None:\n", + " del item['value']['owner']\n", + "\n", + " if item_type == 'project_file':\n", + " # eliminate old file UUID\n", + " item['associationIds'] = [ project_uuid ]\n", + "\n", + " # json_print(item) \n", + " # json_print(item)\n", + " obj = {}\n", + " for col_name in col_list:\n", + " obj[col_name] = item.get(col_name, None)\n", + " if item.get('permission') is not None:\n", + " obj['permission'] = item['permission']\n", + " # print(obj)\n", + " json.dump(obj, file)\n", + " file.write('\\n') # Add a newline after each JSON object" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "32a5a0ab-70cd-4b64-80e5-5223c1be9220", + "metadata": {}, + "outputs": [], + "source": [ + "## Write One public_project data into Json file" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f8348cd0-72d3-4efd-aab9-1eb6fa85dc0b", + "metadata": {}, + "outputs": [], + "source": [ + "col_list = ['uuid', 'owner', 'associationIds', 'created', 'lastUpdated', 'name', 'value']\n", + "obj_list = {}\n", + "project_uuid = '2034535426280329706-242ac113-0001-012'\n", + "data_dir = 'Metadata_public_project/' # Create/Change the directory\n", + "\n", + "# Open a file in write mode\n", + "with open(f'{data_dir}{project_uuid}_metadata.jsonl', 'w') as file:\n", + " for item in jsonarray:\n", + " item_type = item['name']\n", + " if (project_uuid in item.get('uuid', None)) or (project_uuid in item.get('associationIds', None)):\n", + " obj = {}\n", + " for col_name in col_list:\n", + " obj[col_name] = item.get(col_name, None)\n", + " # print(obj)\n", + " json.dump(obj, file)\n", + " file.write('\\n')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ded5cab4-d03f-4bd0-9f4c-35f89aae6cf5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "MSM_TensorFlow_2", + "language": "python", + "name": "msm_tensorflow_2" + }, + "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 +} diff --git a/conversion/tapis_v2_to_v3/public_projects.ipynb b/conversion/tapis_v2_to_v3/public_projects.ipynb new file mode 100644 index 0000000..6a2a729 --- /dev/null +++ b/conversion/tapis_v2_to_v3/public_projects.ipynb @@ -0,0 +1,755 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 53, + "id": "ffb06a6d-cd2e-4797-a0cf-7f2a80100868", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import json\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "a9064573-e9d4-44ce-9bb7-2dda54e103d2", + "metadata": {}, + "outputs": [], + "source": [ + "job_events_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobEvents.json')\n", + "job_permissions_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobPermissions.json')\n", + "jobs_all_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverJobs_all.json')\n", + "jobs_all_df['parameters.Creator'] = jobs_all_df['parameters'].apply(lambda x: json.loads(x).get('Creator', np.nan) if x else np.nan)\n", + "metadata_perms_df = pd.read_json('/mnt/md0/Projects/vdjserver/vdjserverMetadataPermissions.json')\n", + "\n", + "jsonarray_projectJob = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJsonArrayFeb042025.json')\n", + "\n", + "with open('/mnt/md0/Projects/vdjserver/vdjserverJsonArrayFeb042025.json', 'r') as f:\n", + " jsonarray = json.load(f)\n", + "\n", + "jsonarray_projectJob = [ obj for obj in jsonarray if obj['name'] == 'projectJob' ]\n", + "dict_projectJob = { obj['value']['projectUuid'] : obj for obj in jsonarray if obj['name'] == 'projectJob'}\n", + "\n", + "with open('/mnt/md0/Projects/vdjserver/vdjserverJobs_all.json', 'r') as f:\n", + " jsonarray_jobs = json.load(f)" + ] + }, + { + "cell_type": "markdown", + "id": "01e4616d-a406-4dd8-898f-1fb063545387", + "metadata": {}, + "source": [ + "## Look at Public Project Data" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "142acf77-a163-4f86-9e3e-bf162614537c", + "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", + "
uuidstudy_idassociationIdsstudy_titlelastUpdated
04505707319090933270-242ac113-0001-0124505707319090933270-242ac113-0001-012[]Outcome and Immune Correlates of a Phase II Tr...2022-12-18T01:14:48.159-06:00
12034535426280329706-242ac113-0001-012PRJNA300878[]Individual heritable differences result in uni...2022-12-18T01:14:48.306-06:00
25350423756993719830-242ac113-0001-0121371444213709729305-242ac11c-0001-012[]T cell receptor repertoires after adoptive tra...2022-12-18T01:14:48.028-06:00
31570295022599213546-242ac113-0001-0123276777473314001386-242ac116-0001-012[]Biophysicochemical Motifs in T cell Receptor S...2022-12-18T01:14:47.900-06:00
454655627105407466-242ac113-0001-012PRJNA248475[]B cells populating the multiple sclerosis brai...2022-12-18T01:14:48.453-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "0 4505707319090933270-242ac113-0001-012 \n", + "1 2034535426280329706-242ac113-0001-012 \n", + "2 5350423756993719830-242ac113-0001-012 \n", + "3 1570295022599213546-242ac113-0001-012 \n", + "4 54655627105407466-242ac113-0001-012 \n", + "\n", + " study_id associationIds \\\n", + "0 4505707319090933270-242ac113-0001-012 [] \n", + "1 PRJNA300878 [] \n", + "2 1371444213709729305-242ac11c-0001-012 [] \n", + "3 3276777473314001386-242ac116-0001-012 [] \n", + "4 PRJNA248475 [] \n", + "\n", + " study_title \\\n", + "0 Outcome and Immune Correlates of a Phase II Tr... \n", + "1 Individual heritable differences result in uni... \n", + "2 T cell receptor repertoires after adoptive tra... \n", + "3 Biophysicochemical Motifs in T cell Receptor S... \n", + "4 B cells populating the multiple sclerosis brai... \n", + "\n", + " lastUpdated \n", + "0 2022-12-18T01:14:48.159-06:00 \n", + "1 2022-12-18T01:14:48.306-06:00 \n", + "2 2022-12-18T01:14:48.028-06:00 \n", + "3 2022-12-18T01:14:47.900-06:00 \n", + "4 2022-12-18T01:14:48.453-06:00 " + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public_project_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'public_project':\n", + " # json_print(item)\n", + " # break\n", + " uuid = item.get('uuid', None)\n", + " study_id = item.get('value', {}).get('study_id', None)\n", + " study_title = item.get('value', {}).get('study_title', None)\n", + " associationIds = item.get('associationIds', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " public_project_list.append({\n", + " 'uuid': uuid,\n", + " 'study_id': study_id,\n", + " 'associationIds': associationIds,\n", + " 'study_title': study_title,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_public_project = pd.DataFrame(public_project_list)\n", + "df_public_project.head()" + ] + }, + { + "cell_type": "markdown", + "id": "e29bbbf4-98d5-4af3-9248-f9e1205bb092", + "metadata": {}, + "source": [ + "## V2 Job Data for Public Projects" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "8f4e09d2-ba9c-4dce-8478-d36413b19d0a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index(['id', 'name', 'tenant_id', 'tenant_queue', 'owner', 'roles',\n", + " 'system_id', 'app_id', 'app_uuid', 'status', 'last_message', 'accepted',\n", + " 'created', 'ended', 'last_updated', 'uuid', 'work_path', 'archive',\n", + " 'archive_on_app_error', 'archive_path', 'archive_system_id',\n", + " 'node_count', 'processor_count', 'memory_gb', 'max_hours', 'inputs',\n", + " 'parameters', 'remote_job_id', 'remote_sched_id', 'remote_queue',\n", + " 'remote_submitted', 'remote_started', 'remote_ended', 'remote_outcome',\n", + " 'remote_submit_retries', 'remote_status_checks', 'failed_status_checks',\n", + " 'last_status_check', 'blocked_count', 'visible', 'update_token',\n", + " 'parameters.Creator'],\n", + " dtype='object')\n", + "0 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007\n", + "1 9188bf80-e868-4e05-a6b4-308c044108d7-007\n", + "2 773a5cb7-b369-4517-a221-83d57e3899e5-007\n", + "3 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007\n", + "4 ad02cb34-250e-48cb-a06e-973e431b62ee-007\n", + " ... \n", + "15776 0001396301879424-5056a550b8-0001-007\n", + "15777 0001396298592090-5056a550b8-0001-007\n", + "15778 0001396298085562-5056a550b8-0001-007\n", + "15779 0001396297676287-5056a550b8-0001-007\n", + "15780 0001396295290656-5056a550b8-0001-007\n", + "Name: uuid, Length: 15781, dtype: object\n", + "7925 /projects/1002552565004824085-242ac117-0001-01...\n", + "Name: archive_path, dtype: object\n", + "[\n", + " {\n", + " \"_id\": {\n", + " \"$oid\": \"677ec04f5908010001246a0a\"\n", + " },\n", + " \"uuid\": \"5097479121213854191-242ac118-0001-012\",\n", + " \"owner\": \"vdj\",\n", + " \"tenantId\": \"vdjserver.org\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [\n", + " \"6589143665654501871-242ac118-0001-012\",\n", + " \"ad02cb34-250e-48cb-a06e-973e431b62ee-007\"\n", + " ],\n", + " \"lastUpdated\": \"2025-01-08T12:13:35.460-06:00\",\n", + " \"name\": \"projectJob\",\n", + " \"value\": {\n", + " \"projectUuid\": \"6589143665654501871-242ac118-0001-012\",\n", + " \"jobUuid\": \"ad02cb34-250e-48cb-a06e-973e431b62ee-007\",\n", + " \"secondaryInputs\": {\n", + " \"ForwardPrimerFileMetadata\": \"7669998360913571345-242ac118-0001-012\",\n", + " \"SequenceForwardPairedFilesMetadata\": [\n", + " \"906928664923345391-242ac118-0001-012\",\n", + " \"1625212254106480145-242ac118-0001-012\",\n", + " \"4324126753239920145-242ac118-0001-012\",\n", + " \"7771052756644720145-242ac118-0001-012\",\n", + " \"3675152322622591471-242ac118-0001-012\",\n", + " \"4146541469141954065-242ac118-0001-012\",\n", + " \"8931063987837997551-242ac118-0001-012\",\n", + " \"3039141951839277551-242ac118-0001-012\",\n", + " \"5078217388581907985-242ac118-0001-012\",\n", + " \"5866292560839643631-242ac118-0001-012\",\n", + " \"5499760051799003631-242ac118-0001-012\",\n", + " \"994425257640923631-242ac118-0001-012\",\n", + " \"6349109825059941905-242ac118-0001-012\",\n", + " \"6915240809950089711-242ac118-0001-012\",\n", + " \"500621254028169711-242ac118-0001-012\",\n", + " \"5903475632018615825-242ac118-0001-012\",\n", + " \"7032138206155575791-242ac118-0001-012\",\n", + " \"889776627127095791-242ac118-0001-012\"\n", + " ],\n", + " \"SequenceReversePairedFilesMetadata\": [\n", + " \"1907827843583185391-242ac118-0001-012\",\n", + " \"208946788250480145-242ac118-0001-012\",\n", + " \"2999902436537200145-242ac118-0001-012\",\n", + " \"5703154852639600145-242ac118-0001-012\",\n", + " \"8786807649956991471-242ac118-0001-012\",\n", + " \"1388184622631874065-242ac118-0001-012\",\n", + " \"6624007454493634065-242ac118-0001-012\",\n", + " \"6482503132388397551-242ac118-0001-012\",\n", + " \"165422283758637551-242ac118-0001-012\",\n", + " \"8165903950463963631-242ac118-0001-012\",\n", + " \"4968000150881243631-242ac118-0001-012\",\n", + " \"4730359610393563631-242ac118-0001-012\",\n", + " \"3002643106708581905-242ac118-0001-012\",\n", + " \"9170399288060809711-242ac118-0001-012\",\n", + " \"4740527069293449711-242ac118-0001-012\",\n", + " \"3855678174958775825-242ac118-0001-012\",\n", + " \"7848709270049975825-242ac118-0001-012\",\n", + " \"3463406930236215791-242ac118-0001-012\"\n", + " ],\n", + " \"SequenceFASTQMetadata\": []\n", + " }\n", + " },\n", + " \"created\": \"2025-01-08T12:13:35.460-06:00\"\n", + " },\n", + " {\n", + " \"_id\": {\n", + " \"$oid\": \"678597355908010001246b86\"\n", + " },\n", + " \"uuid\": \"1948444895656078865-242ac118-0001-012\",\n", + " \"owner\": \"vdj\",\n", + " \"tenantId\": \"vdjserver.org\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [\n", + " \"5456400192359305711-242ac118-0001-012\",\n", + " \"c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007\"\n", + " ],\n", + " \"lastUpdated\": \"2025-01-13T16:44:05.995-06:00\",\n", + " \"name\": \"projectJob\",\n", + " \"value\": {\n", + " \"projectUuid\": \"5456400192359305711-242ac118-0001-012\",\n", + " \"jobUuid\": \"c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007\",\n", + " \"secondaryInputs\": {\n", + " \"ForwardPrimerFileMetadata\": \"7830832104257678865-242ac118-0001-012\",\n", + " \"SequenceForwardPairedFilesMetadata\": [\n", + " \"1840700597200490991-242ac118-0001-012\",\n", + " \"5338423137409494545-242ac118-0001-012\",\n", + " \"6100051000725017071-242ac118-0001-012\",\n", + " \"2014473661280808465-242ac118-0001-012\",\n", + " \"8329106378551848465-242ac118-0001-012\",\n", + " \"6681449109992903151-242ac118-0001-012\",\n", + " \"3108766464161223151-242ac118-0001-012\",\n", + " \"2306929598057082385-242ac118-0001-012\",\n", + " \"8703939788065402385-242ac118-0001-012\",\n", + " \"1356193445436789231-242ac118-0001-012\",\n", + " \"4056925636403916305-242ac118-0001-012\",\n", + " \"5435653088092876305-242ac118-0001-012\"\n", + " ],\n", + " \"SequenceReversePairedFilesMetadata\": [\n", + " \"5023614960920170991-242ac118-0001-012\",\n", + " \"1335427718191574545-242ac118-0001-012\",\n", + " \"8601653389564374545-242ac118-0001-012\",\n", + " \"2661285435182617071-242ac118-0001-012\",\n", + " \"5841031823979048465-242ac118-0001-012\",\n", + " \"7745355458885063151-242ac118-0001-012\",\n", + " \"5421348655019463151-242ac118-0001-012\",\n", + " \"1173454200583623151-242ac118-0001-012\",\n", + " \"5832496452651642385-242ac118-0001-012\",\n", + " \"3037157745745269231-242ac118-0001-012\",\n", + " \"364542252032716305-242ac118-0001-012\",\n", + " \"7235888630211276305-242ac118-0001-012\"\n", + " ],\n", + " \"SequenceFASTQMetadata\": []\n", + " }\n", + " },\n", + " \"created\": \"2025-01-13T16:44:05.995-06:00\"\n", + " },\n", + " {\n", + " \"_id\": {\n", + " \"$oid\": \"678e12315908010001246c75\"\n", + " },\n", + " \"uuid\": \"1819643224410746385-242ac118-0001-012\",\n", + " \"owner\": \"vdj\",\n", + " \"tenantId\": \"vdjserver.org\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [\n", + " \"5199144433477554666-242ac116-0001-012\",\n", + " \"773a5cb7-b369-4517-a221-83d57e3899e5-007\"\n", + " ],\n", + " \"lastUpdated\": \"2025-01-20T03:06:57.762-06:00\",\n", + " \"name\": \"projectJob\",\n", + " \"value\": {\n", + " \"projectUuid\": \"5199144433477554666-242ac116-0001-012\",\n", + " \"jobUuid\": \"773a5cb7-b369-4517-a221-83d57e3899e5-007\"\n", + " },\n", + " \"created\": \"2025-01-20T03:06:57.762-06:00\"\n", + " },\n", + " {\n", + " \"_id\": {\n", + " \"$oid\": \"6792af375908010001246c76\"\n", + " },\n", + " \"uuid\": \"2845695380777266705-242ac118-0001-012\",\n", + " \"owner\": \"vdj\",\n", + " \"tenantId\": \"vdjserver.org\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [\n", + " \"5456400192359305711-242ac118-0001-012\",\n", + " \"9188bf80-e868-4e05-a6b4-308c044108d7-007\"\n", + " ],\n", + " \"lastUpdated\": \"2025-01-23T15:05:59.570-06:00\",\n", + " \"name\": \"projectJob\",\n", + " \"value\": {\n", + " \"projectUuid\": \"5456400192359305711-242ac118-0001-012\",\n", + " \"jobUuid\": \"9188bf80-e868-4e05-a6b4-308c044108d7-007\"\n", + " },\n", + " \"created\": \"2025-01-23T15:05:59.570-06:00\"\n", + " }\n", + "]\n", + "{\n", + " \"id\": 503865,\n", + " \"name\": \"My Job 24-Jan-2025 8:57:09 pm\",\n", + " \"tenant_id\": \"vdjserver.org\",\n", + " \"tenant_queue\": \"aloe.jobq.vdjserver.org.submit.DefaultQueue\",\n", + " \"owner\": \"vdj\",\n", + " \"roles\": \"Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/VDJ_vdj_vdj_adc_PRODUCTION,Internal/VDJ_vdj_vdj_test_PRODUCTION,Internal/VDJ_vdj_iedb_PRODUCTION,Internal/VDJ_vdj_vdj_staging_PRODUCTION,Internal/VDJ_vdj_vdj_dev_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-8e282f4085e4_PRODUCTION,Internal/VDJ_vdj_keycloak1_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-d4184ecd0b88_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-341886281d15_PRODUCTION,Internal/VDJ_vdj_DefaultApplication_PRODUCTION,Internal/vdjserver-org-services-admin,Internal/VDJ_vdj__cli-vdjserver.org-vdj-9fa7cf90e11e_PRODUCTION,Internal/VDJ_vdj_aloe_beta_client_PRODUCTION,Internal/VDJ_vdj_vdj_repair_PRODUCTION,Internal/everyone,Internal/vdjserver-org-account-manager,Internal/test_foo_PRODUCTION,Internal/VDJ_vdj_aloe_beta_client_SANDBOX,Internal/VDJ_vdj__cli-vdjserver.org-vdj-544ee46758bb_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-c66d52ca544d_PRODUCTION,Internal/vdj-metav3,Internal/VDJ_vdj_keycloak2_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-999dcb3f1b33_PRODUCTION,Internal/VDJ_vdj_vdj_airr_PRODUCTION,Internal/subscriber,Internal/VDJ_vdj_vdj_PRODUCTION,Internal/test1\",\n", + " \"system_id\": \"ls6.tacc.utexas.edu\",\n", + " \"app_id\": \"repcalc-ls6-2.0u8\",\n", + " \"app_uuid\": \"6306626279335587345-242ac119-0001-005\",\n", + " \"status\": \"FINISHED\",\n", + " \"last_message\": \"Transitioning from status ARCHIVING to FINISHED in phase ARCHIVING.\",\n", + " \"accepted\": \"2025-01-25 02:57:53.911\",\n", + " \"created\": \"2025-01-25 02:57:53.915\",\n", + " \"ended\": \"2025-01-25 15:43:51.678\",\n", + " \"last_updated\": \"2025-01-25 15:43:51.678\",\n", + " \"uuid\": \"c7cd08ad-a560-4574-a363-b9cc4c5e051d-007\",\n", + " \"work_path\": \"/scratch/01114/vdj/vdj/job-c7cd08ad-a560-4574-a363-b9cc4c5e051d-007-my-job-24-jan-2025-8-57-09-pm\",\n", + " \"archive\": 1,\n", + " \"archive_on_app_error\": 0,\n", + " \"archive_path\": \"/projects/5456400192359305711-242ac118-0001-012/analyses/2025-01-25-02-57-35-54-my-job-24-jan-2025-8:57:09-pm\",\n", + " \"archive_system_id\": \"data.vdjserver.org\",\n", + " \"node_count\": 4,\n", + " \"processor_count\": 128,\n", + " \"memory_gb\": 1,\n", + " \"max_hours\": 4,\n", + " \"inputs\": \"{\\\"repcalc_image\\\":[\\\"agave://data.vdjserver.org//singularity/repcalc-2.0-imm4.4.sif\\\"],\\\"StudyMetadata\\\":\\\"agave://data.vdjserver.org//projects/5456400192359305711-242ac118-0001-012/analyses/2025-01-25-02-57-35-54-my-job-24-jan-2025-8:57:09-pm/study_metadata.json\\\",\\\"AIRRMetadata\\\":\\\"agave://data.vdjserver.org//projects/5456400192359305711-242ac118-0001-012/analyses/2025-01-23-21-05-40-71-my-job-23-jan-2025-3:05:30-pm/study_metadata.airr.json\\\",\\\"JobFiles\\\":[\\\"agave://data.vdjserver.org//projects/5456400192359305711-242ac118-0001-012/analyses/2025-01-23-21-05-40-71-my-job-23-jan-2025-3:05:30-pm/9188bf80-e868-4e05-a6b4-308c044108d7-007.zip\\\"]}\",\n", + " \"parameters\": \"{\\\"DiversityOperations\\\":[\\\"shannon\\\"],\\\"ClonalOperations\\\":[\\\"abundance\\\"],\\\"GeneSegmentOperations\\\":[\\\"absolute\\\",\\\"relative\\\",\\\"combo\\\"],\\\"LineageOperations\\\":[\\\"reconstruction\\\"],\\\"CDR3Levels\\\":[\\\"aa\\\",\\\"v,aa\\\",\\\"vj,aa\\\"],\\\"Creator\\\":\\\"schristley\\\",\\\"DiversityFlag\\\":true,\\\"DiversityFilters\\\":[\\\"productive\\\"],\\\"GeneSegmentFlag\\\":true,\\\"ClonalFilters\\\":[\\\"productive\\\"],\\\"LineageFilters\\\":[\\\"productive\\\"],\\\"GeneSegmentFilters\\\":[\\\"productive\\\"],\\\"CDR3Operations\\\":[\\\"absolute\\\",\\\"relative\\\",\\\"length\\\",\\\"shared\\\",\\\"distribution\\\"],\\\"MutationalFilters\\\":[\\\"productive\\\"],\\\"JobSelected\\\":\\\"9188bf80-e868-4e05-a6b4-308c044108d7-007\\\",\\\"DiversityLevels\\\":[\\\"gene\\\",\\\"aa\\\"],\\\"ClonalFlag\\\":true,\\\"GeneSegmentLevels\\\":[\\\"vj\\\",\\\"vdj\\\"],\\\"LineageFlag\\\":true,\\\"CDR3Flag\\\":true,\\\"MutationalFlag\\\":true,\\\"CDR3Filters\\\":[\\\"productive\\\"]}\",\n", + " \"remote_job_id\": \"2167988\",\n", + " \"remote_sched_id\": null,\n", + " \"remote_queue\": \"normal\",\n", + " \"remote_submitted\": \"2025-01-25 02:59:57.232\",\n", + " \"remote_started\": \"2025-01-25 15:38:25.306\",\n", + " \"remote_ended\": \"2025-01-25 15:43:33.007\",\n", + " \"remote_outcome\": \"FINISHED\",\n", + " \"remote_submit_retries\": 0,\n", + " \"remote_status_checks\": 192,\n", + " \"failed_status_checks\": 0,\n", + " \"last_status_check\": \"2025-01-25 15:43:33.001\",\n", + " \"blocked_count\": 0,\n", + " \"visible\": 1,\n", + " \"update_token\": \"eb27e311-4a37-4aeb-b649-056704dd2711\"\n", + "}\n", + "[\n", + " {\n", + " \"id\": 357197,\n", + " \"name\": \"cellranger_SRR11528762\",\n", + " \"tenant_id\": \"vdjserver.org\",\n", + " \"tenant_queue\": \"aloe.jobq.vdjserver.org.submit.DefaultQueue\",\n", + " \"owner\": \"vdj\",\n", + " \"roles\": \"Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/VDJ_vdj_vdj_test_PRODUCTION,Internal/VDJ_vdj_iedb_PRODUCTION,Internal/VDJ_vdj_keycloak1_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-8e282f4085e4_PRODUCTION,Internal/VDJ_vdj_vdj_dev_PRODUCTION,Internal/VDJ_vdj_vdj_staging_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-c66d52ca544d_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-d4184ecd0b88_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-341886281d15_PRODUCTION,Internal/VDJ_vdj_DefaultApplication_PRODUCTION,Internal/vdj-metav3,Internal/vdjserver-org-services-admin,Internal/VDJ_vdj__cli-vdjserver.org-vdj-9fa7cf90e11e_PRODUCTION,Internal/VDJ_vdj_keycloak2_PRODUCTION,Internal/VDJ_vdj_vdj_airr_PRODUCTION,Internal/subscriber,Internal/VDJ_vdj_aloe_beta_client_PRODUCTION,Internal/VDJ_vdj_vdj_repair_PRODUCTION,Internal/everyone,Internal/test_foo_PRODUCTION,Internal/vdjserver-org-account-manager,Internal/VDJ_vdj_vdj_PRODUCTION,Internal/VDJ_vdj_aloe_beta_client_SANDBOX,Internal/test1\",\n", + " \"system_id\": \"stampede2.tacc.utexas.edu\",\n", + " \"app_id\": \"cellranger-stampede2-6.1\",\n", + " \"app_uuid\": \"7181865981105073685-242ac118-0001-005\",\n", + " \"status\": \"FINISHED\",\n", + " \"last_message\": \"Transitioning from status ARCHIVING to FINISHED in phase ARCHIVING.\",\n", + " \"accepted\": \"2021-08-25 16:50:57.344\",\n", + " \"created\": \"2021-08-25 16:50:57.348\",\n", + " \"ended\": \"2021-08-25 19:41:23.799\",\n", + " \"last_updated\": \"2021-08-25 19:41:23.799\",\n", + " \"uuid\": \"38a47767-343d-4d2c-9374-29c3be77905c-007\",\n", + " \"work_path\": \"/scratch/01114/vdj/vdj/job-38a47767-343d-4d2c-9374-29c3be77905c-007-cellranger_srr11528762\",\n", + " \"archive\": 1,\n", + " \"archive_on_app_error\": 0,\n", + " \"archive_path\": \"/projects/1002552565004824085-242ac117-0001-012/analyses/cellranger_SRR11528762\",\n", + " \"archive_system_id\": \"data.vdjserver.org\",\n", + " \"node_count\": 1,\n", + " \"processor_count\": 48,\n", + " \"memory_gb\": 1,\n", + " \"max_hours\": 4,\n", + " \"inputs\": \"{\\\"ForwardPairedFile\\\":\\\"agave://data.vdjserver.org//projects/1002552565004824085-242ac117-0001-012/files/SRR11528762_1.fastq.gz\\\",\\\"ReversePairedFile\\\":\\\"agave://data.vdjserver.org//projects/1002552565004824085-242ac117-0001-012/files/SRR11528762_2.fastq.gz\\\"}\",\n", + " \"parameters\": \"{\\\"Creator\\\":\\\"vdj\\\",\\\"FilesMetadata\\\":[\\\"1234\\\"],\\\"repertoire_id\\\":\\\"SRR11528762\\\",\\\"species\\\":\\\"mouse\\\"}\",\n", + " \"remote_job_id\": \"8352680\",\n", + " \"remote_sched_id\": null,\n", + " \"remote_queue\": \"skx-normal\",\n", + " \"remote_submitted\": \"2021-08-25 17:01:27.289\",\n", + " \"remote_started\": \"2021-08-25 18:04:09.136\",\n", + " \"remote_ended\": \"2021-08-25 19:33:24.642\",\n", + " \"remote_outcome\": \"FINISHED\",\n", + " \"remote_submit_retries\": 0,\n", + " \"remote_status_checks\": 51,\n", + " \"failed_status_checks\": 0,\n", + " \"last_status_check\": \"2021-08-25 19:33:24.636\",\n", + " \"blocked_count\": 0,\n", + " \"visible\": 1,\n", + " \"update_token\": \"72574690-ddbe-41c4-a741-07f47eb21c9b\"\n", + " },\n", + " {\n", + " \"id\": 357196,\n", + " \"name\": \"cellranger_SRR11528762\",\n", + " \"tenant_id\": \"vdjserver.org\",\n", + " \"tenant_queue\": \"aloe.jobq.vdjserver.org.submit.DefaultQueue\",\n", + " \"owner\": \"vdj\",\n", + " \"roles\": \"Internal/VDJ_vdj_keycloak_PRODUCTION,Internal/VDJ_vdj_vdj_test_PRODUCTION,Internal/VDJ_vdj_iedb_PRODUCTION,Internal/VDJ_vdj_keycloak1_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-8e282f4085e4_PRODUCTION,Internal/VDJ_vdj_vdj_dev_PRODUCTION,Internal/VDJ_vdj_vdj_staging_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-c66d52ca544d_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-d4184ecd0b88_PRODUCTION,Internal/VDJ_vdj__cli-vdjserver.org-vdj-341886281d15_PRODUCTION,Internal/VDJ_vdj_DefaultApplication_PRODUCTION,Internal/vdj-metav3,Internal/vdjserver-org-services-admin,Internal/VDJ_vdj__cli-vdjserver.org-vdj-9fa7cf90e11e_PRODUCTION,Internal/VDJ_vdj_keycloak2_PRODUCTION,Internal/VDJ_vdj_vdj_airr_PRODUCTION,Internal/subscriber,Internal/VDJ_vdj_aloe_beta_client_PRODUCTION,Internal/VDJ_vdj_vdj_repair_PRODUCTION,Internal/everyone,Internal/test_foo_PRODUCTION,Internal/vdjserver-org-account-manager,Internal/VDJ_vdj_vdj_PRODUCTION,Internal/VDJ_vdj_aloe_beta_client_SANDBOX,Internal/test1\",\n", + " \"system_id\": \"stampede2.tacc.utexas.edu\",\n", + " \"app_id\": \"cellranger-stampede2-6.1\",\n", + " \"app_uuid\": \"7181865981105073685-242ac118-0001-005\",\n", + " \"status\": \"STOPPED\",\n", + " \"last_message\": \"JOBS_CMD_MSG_RECEIVED Job 0afc4677-3da4-4782-adcf-a80f66eeff3d-007 received a JOB_CANCEL command from JobActionResource-cancelCmdStatus with correlation id 0afc4677-3da4-4782-adcf-a80f66eeff3d-007. \",\n", + " \"accepted\": \"2021-08-25 16:49:17.096\",\n", + " \"created\": \"2021-08-25 16:49:17.101\",\n", + " \"ended\": \"2021-08-25 16:50:02.185\",\n", + " \"last_updated\": \"2021-08-25 16:50:02.185\",\n", + " \"uuid\": \"0afc4677-3da4-4782-adcf-a80f66eeff3d-007\",\n", + " \"work_path\": \"/scratch/01114/vdj/vdj/job-0afc4677-3da4-4782-adcf-a80f66eeff3d-007-cellranger_srr11528762\",\n", + " \"archive\": 1,\n", + " \"archive_on_app_error\": 0,\n", + " \"archive_path\": \"/projects/1002552565004824085-242ac117-0001-012/analyses/cellranger_SRR11528762\",\n", + " \"archive_system_id\": \"data.vdjserver.org\",\n", + " \"node_count\": 1,\n", + " \"processor_count\": 48,\n", + " \"memory_gb\": 1,\n", + " \"max_hours\": 4,\n", + " \"inputs\": \"{\\\"ForwardPairedFile\\\":\\\"agave://data.vdjserver.org//projects/1002552565004824085-242ac117-0001-012/files/SRR11528762_1.fastq.gz\\\",\\\"ReversePairedFile\\\":\\\"agave://data.vdjserver.org//projects/1002552565004824085-242ac117-0001-012/files/SRR11528762_2.fastq.gz\\\"}\",\n", + " \"parameters\": \"{\\\"Creator\\\":\\\"vdj\\\",\\\"FilesMetadata\\\":[\\\"1234\\\"],\\\"repertoire_id\\\":\\\"SRR11528762\\\",\\\"species\\\":\\\"human\\\"}\",\n", + " \"remote_job_id\": null,\n", + " \"remote_sched_id\": null,\n", + " \"remote_queue\": \"skx-normal\",\n", + " \"remote_submitted\": null,\n", + " \"remote_started\": null,\n", + " \"remote_ended\": null,\n", + " \"remote_outcome\": null,\n", + " \"remote_submit_retries\": 0,\n", + " \"remote_status_checks\": 0,\n", + " \"failed_status_checks\": 0,\n", + " \"last_status_check\": null,\n", + " \"blocked_count\": 0,\n", + " \"visible\": 1,\n", + " \"update_token\": \"d7d76985-33a2-4cba-a61f-3c142bd5a4cc\"\n", + " }\n", + "]\n" + ] + } + ], + "source": [ + "print(jobs_all_df.keys())\n", + "print(jobs_all_df['uuid'])\n", + "job_id = '38a47767-343d-4d2c-9374-29c3be77905c-007'\n", + "project_id = '1002552565004824085-242ac117-0001-012'\n", + "print(jobs_all_df[jobs_all_df['uuid'] == job_id]['archive_path'])\n", + "\n", + "jsonarray_projectJob = [ obj for obj in jsonarray if obj['name'] == 'projectJob' ]\n", + "dict_projectJob = { obj['uuid'] : obj for obj in jsonarray if obj['name'] == 'projectJob'}\n", + "\n", + "print(json.dumps(jsonarray_projectJob[-5:-1], indent=2))\n", + "\n", + "print(json.dumps(jsonarray_jobs[0], indent=2))\n", + "\n", + "#job = {}\n", + "job = [ obj for obj in jsonarray_jobs if obj.get('archive_path') is not None and project_id in obj.get('archive_path')]\n", + "print(json.dumps(job, indent=2))" + ] + }, + { + "cell_type": "markdown", + "id": "b42cc7fb-4a3b-4826-b5bc-54d1607fbc17", + "metadata": {}, + "source": [ + "## Convert public_project data and output into JSONL files" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "56a4a181-72fe-4a46-86fc-a6ef2ae8a275", + "metadata": {}, + "outputs": [], + "source": [ + "exclusion_names = [ 'projectLoad', 'rearrangementLoad' ]\n", + "name_map = { \"projectFile\": \"project_file\" }\n", + "permission = [ { \"username\": \"vdjserver.curation@gmail.com\", \"permission\": { \"read\":True, \"write\":True } } ]\n", + "\n", + "col_list = ['uuid', 'owner', 'associationIds', 'created', 'lastUpdated', 'name', 'value']\n", + "obj_list = {}\n", + "data_dir = 'Metadata_public_project/' \n", + "for project_uuid in df_public_project.uuid:\n", + " # Open a file in write mode\n", + " with open(f'{data_dir}{project_uuid}_metadata.jsonl', 'w') as file:\n", + " for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type in exclusion_names:\n", + " continue\n", + " if (project_uuid in item.get('uuid', None)) or (project_uuid in item.get('associationIds', None)):\n", + " if name_map.get(item_type) is not None:\n", + " item['name'] = name_map.get(item_type)\n", + " item_type = item['name']\n", + "\n", + " # migrate the object\n", + " if item_type == 'public_project':\n", + " # move old keywords\n", + " if item['value'].get('vdjserver_keywords') is not None:\n", + " if item['value'].get('vdjserver') is None:\n", + " item['value']['vdjserver'] = {}\n", + " item['value']['vdjserver']['keywords'] = item['value']['vdjserver_keywords']\n", + " del item['value']['vdjserver_keywords']\n", + " # add permissions\n", + " item['permission'] = permission\n", + " # old fields\n", + " if item['value'].get('showArchivedJobs') is not None:\n", + " del item['value']['showArchivedJobs']\n", + " if item['value'].get('owner') is not None:\n", + " del item['value']['owner']\n", + "\n", + " if item_type == 'project_file':\n", + " # eliminate old file UUID\n", + " item['associationIds'] = [ project_uuid ]\n", + "\n", + " # json_print(item) \n", + " # json_print(item)\n", + " obj = {}\n", + " for col_name in col_list:\n", + " obj[col_name] = item.get(col_name, None)\n", + " if item.get('permission') is not None:\n", + " obj['permission'] = item['permission']\n", + " # print(obj)\n", + " json.dump(obj, file)\n", + " file.write('\\n') # Add a newline after each JSON object" + ] + }, + { + "cell_type": "markdown", + "id": "69f9bb9e-7afe-428e-aa97-125626f4384a", + "metadata": {}, + "source": [ + "## Convert Tapis V2 Job data into meta record" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "f8348cd0-72d3-4efd-aab9-1eb6fa85dc0b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "0\n", + "22\n", + "0\n", + "2\n", + "95\n", + "10\n", + "2\n", + "30\n", + "9\n", + "20\n", + "55\n", + "14\n", + "0\n" + ] + } + ], + "source": [ + "col_list = ['uuid', 'owner', 'associationIds', 'created', 'lastUpdated', 'name', 'value']\n", + "obj_list = {}\n", + "project_uuid = '2034535426280329706-242ac113-0001-012'\n", + "data_dir = 'Metadata_public_project_jobs/' # Create/Change the directory\n", + "\n", + "for project_uuid in df_public_project.uuid:\n", + " jobs = [ obj for obj in jsonarray_jobs if obj.get('archive_path') is not None and project_uuid in obj.get('archive_path')]\n", + " print(len(jobs))\n", + " if len(jobs) > 0:\n", + " with open(f'{data_dir}{project_uuid}_metadata.jsonl', 'w') as file:\n", + " for j in jobs:\n", + " obj = {}\n", + " obj['name'] = 'tapis_v2_job'\n", + " obj['associationIds'] = [ project_uuid ]\n", + " obj['value'] = j\n", + " obj['uuid'] = j['uuid']\n", + " del obj['value']['uuid']\n", + " obj['created'] = j['created']\n", + " obj['lastUpdated'] = j['last_updated']\n", + " \n", + " json.dump(obj, file)\n", + " file.write('\\n') # Add a newline after each JSON object\n", + " #print(dict_projectJob.get(project_uuid))\n", + "\n", + " # Open a file in write mode\n", + " #with open(f'{data_dir}{project_uuid}_metadata.jsonl', 'w') as file:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "ded5cab4-d03f-4bd0-9f4c-35f89aae6cf5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0001399309581559-5056a550b8-0001-012\n", + "{'_id': {'$oid': '53753c4ae4b0df13310ccbbe'}, 'uuid': '0001400192074855-5056a550b8-0001-012', 'owner': 'vdj', 'tenantId': 'vdjserver.org', 'schemaId': None, 'internalUsername': None, 'associationIds': [], 'lastUpdated': '2014-05-15T17:14:34.855-05:00', 'name': 'projectJob', 'value': {'projectUuid': '0001399309581559-5056a550b8-0001-012', 'jobUuid': '0001399315558601-5056a550b8-0001-007'}, 'created': '2014-05-15T17:14:34.855-05:00'}\n" + ] + } + ], + "source": [ + "for k in dict_projectJob:\n", + " print(k)\n", + " print(dict_projectJob[k])\n", + " break\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "afa42397-5786-4488-9915-01a538dedc21", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "MSM_TensorFlow_2", + "language": "python", + "name": "msm_tensorflow_2" + }, + "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 +} diff --git a/conversion/tapis_v2_to_v3/user_migration.ipynb b/conversion/tapis_v2_to_v3/user_migration.ipynb new file mode 100644 index 0000000..db3203d --- /dev/null +++ b/conversion/tapis_v2_to_v3/user_migration.ipynb @@ -0,0 +1,1326 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 28, + "id": "583622a1-6051-4e27-8003-ead9262cc186", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import json\n", + "from collections import defaultdict" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3aae211f-39ac-4c82-962f-56201a2d3c93", + "metadata": {}, + "outputs": [], + "source": [ + "job_events_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJobEvents.json')\n", + "job_permissions_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJobPermissions.json')\n", + "jobs_all_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverJobs_all.json')\n", + "jobs_all_df['parameters.Creator'] = jobs_all_df['parameters'].apply(lambda x: json.loads(x).get('Creator', np.nan) if x else np.nan)\n", + "metadata_perms_df = pd.read_json('/mnt/data2/Projects/vdjserver/vdjserverMetadataPermissions.json')\n", + "\n", + "with open('/mnt/data2/Projects/vdjserver/vdjserverJsonArrayFeb042025.json', 'r') as f:\n", + " jsonarray = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e21784e4-8c22-444e-8ef3-427e7a7e9d1e", + "metadata": {}, + "outputs": [], + "source": [ + "def json_print(item):\n", + " print(json.dumps(item, indent = 4))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3ec05085-2c72-43a2-b980-08d8dcc8f46a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Email updated_email\n", + "0 12ysliu2 at stu.edu.cn 12ysliu2@stu.edu.cn\n", + "1 18982180702 at msn.cn 18982180702@msn.cn\n", + "2 2008110020 at alumni.sjtu.edu.cn 2008110020@alumni.sjtu.edu.cn\n", + "3 2383920158 at qq.com 2383920158@qq.com\n", + "4 2deepayan at gmail.com 2deepayan@gmail.com\n", + ".. ... ...\n", + "571 zhanxw at gmail.com zhanxw@gmail.com\n", + "572 zhe.sang at gmail.com zhe.sang@gmail.com\n", + "573 zicheng at utexas.edu zicheng@utexas.edu\n", + "574 zluo819 at gmail.com zluo819@gmail.com\n", + "575 zyf950619 at gmail.com zyf950619@gmail.com\n", + "\n", + "[576 rows x 2 columns]\n" + ] + } + ], + "source": [ + "mailing_list = pd.read_csv(\"/mnt/data2/Projects/vdjserver/VDJServer_mailing_list.txt\", sep = ';', skiprows = 8)\n", + "mailing_list.columns = ['Email']\n", + "mailing_list = mailing_list.iloc[:-5]\n", + "mailing_list['updated_email'] = mailing_list['Email'].apply(lambda row: row.replace(\" at \", \"@\"))\n", + "\n", + "# mailing_list['updated_email'].to_csv('email_list.txt', index = False)\n", + "print(mailing_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "78a11a56-88d1-4c85-bb92-ac4923a1fb69", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['adc_cache', 'adc_cache_repertoire', 'adc_cache_study', 'adc_system_repositories', 'archive_project', 'async_query', 'bioProcessing', 'bioProcessingColumns', 'cellProcessing', 'cellProcessingColumns', 'communityDataSRA', 'data_processing', 'deletedProject', 'diagnosis', 'diagnosisColumns', 'feedback', 'garbage', 'irplus_analysis', 'job', 'nucleicAcidProcessing', 'nucleicAcidProcessingColumns', 'passwordReset', 'private_project', 'processMetadata', 'profile', 'project', 'projectFile', 'projectJob', 'projectJobArchive', 'projectJobFile', 'projectLoad', 'projectPublishInProcess', 'projectUnpublishInProcess', 'publicProject', 'public_project', 'rearrangementLoad', 'repertoire', 'sample', 'sampleColumns', 'sampleGroup', 'sample_processing', 'statistics_cache', 'statistics_cache_repertoire', 'statistics_cache_study', 'subject', 'subjectColumns', 'test', 'testMetadata', 'testmetadata', 'testmetadatamp', 'userVerification', 'vdjpipeWorkflow']\n", + "52\n" + ] + } + ], + "source": [ + "item_types = set()\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " item_types.add(item_type)\n", + "print(sorted(item_types))\n", + "print(len(item_types))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2de5a274-f7de-4483-8d62-77aa582bbab4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"_id\": {\n", + " \"$oid\": \"52e95a8de4b057612fefcc16\"\n", + " },\n", + " \"uuid\": \"0001391024781787-5056a550b8-0001-012\",\n", + " \"owner\": \"tester_account2000\",\n", + " \"tenantId\": \"vdjserver.org\",\n", + " \"schemaId\": null,\n", + " \"internalUsername\": null,\n", + " \"associationIds\": [],\n", + " \"lastUpdated\": \"2014-01-29T13:46:21.787-06:00\",\n", + " \"name\": \"project\",\n", + " \"value\": {\n", + " \"name\": \"Hello World\"\n", + " },\n", + " \"created\": \"2014-01-29T13:46:21.787-06:00\"\n", + "}\n" + ] + } + ], + "source": [ + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'project':\n", + " print(json.dumps(item, indent = 4))\n", + " break\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "e73f25ae-e08e-42da-b1c7-3d4a69141641", + "metadata": {}, + "source": [ + "## Look at Profile Metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "ea366f26-f621-4908-8fe8-e2ae89d6219e", + "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", + "
usernamefirstNamelastNameemaillastUpdated
1817rgarciaRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nl2025-01-02T11:11:52.894-06:00
1818rgarciavRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nl2025-01-02T11:41:52.070-06:00
1819erichardsonEveRichardsonerichardson@lji.org2025-01-07T18:01:25.657-06:00
1820samwolsamuel.wollenburg@utsouthwestern.edu2025-01-07T20:24:59.390-06:00
1821chrisjames1992Chinweike ChristopherUdoyechinweikechristopher.udoye@uksh.de2025-01-17T07:54:02.133-06:00
\n", + "
" + ], + "text/plain": [ + " username firstName lastName \\\n", + "1817 rgarcia Rodrigo García Valiente \n", + "1818 rgarciav Rodrigo García Valiente \n", + "1819 erichardson Eve Richardson \n", + "1820 samwol \n", + "1821 chrisjames1992 Chinweike Christopher Udoye \n", + "\n", + " email lastUpdated \n", + "1817 r.garciavaliente@amsterdamumc.nl 2025-01-02T11:11:52.894-06:00 \n", + "1818 r.garciavaliente@amsterdamumc.nl 2025-01-02T11:41:52.070-06:00 \n", + "1819 erichardson@lji.org 2025-01-07T18:01:25.657-06:00 \n", + "1820 samuel.wollenburg@utsouthwestern.edu 2025-01-07T20:24:59.390-06:00 \n", + "1821 chinweikechristopher.udoye@uksh.de 2025-01-17T07:54:02.133-06:00 " + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "profile_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'profile':\n", + " uuid = item.get('uuid', None)\n", + " owner = item.get('owner', None)\n", + " first_name = item.get('value', {}).get('firstName', None)\n", + " last_name = item.get('value', {}).get('lastName', None)\n", + " email = item.get('value', {}).get('email', None)\n", + " city = item.get('value', {}).get('city', None)\n", + " state = item.get('value', {}).get('state', None)\n", + " country = item.get('value', {}).get('country', None)\n", + " created = item.get('created', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " # Append the extracted data as a dictionary to the list\n", + " profile_list.append({\n", + " 'username': owner,\n", + " 'firstName': first_name,\n", + " 'lastName': last_name,\n", + " 'email': email,\n", + " \n", + " 'lastUpdated': last_updated\n", + " })\n", + "# Create a DataFrame from the list of extracted data\n", + "df_profile = pd.DataFrame(profile_list)\n", + "# Print the DataFrame\n", + "df_profile.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cfa35570-35db-4df1-b4a0-1e7dd5b07c19", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "251c61d1-6db3-447d-a2cb-0fff3a20b65d", + "metadata": {}, + "source": [ + "## Look at project Metadata" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "216b0ccc-30c8-4c16-b4da-0b1c7fcc7bb6", + "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", + "
projectUuidownerproject_namelast_updated
00001391024781787-5056a550b8-0001-012tester_account2000Hello World2014-01-29T13:46:21.787-06:00
10001391025968832-5056a550b8-0001-012tester_account2000Project 22014-01-29T14:06:08.832-06:00
20001391628100698-5056a550b8-0001-012adminDemo12014-02-05T13:21:40.698-06:00
30001392911686649-5056a550b8-0001-012test51testProj2014-02-20T09:54:46.649-06:00
40001392912386049-5056a550b8-0001-012test51testProj22014-02-20T10:06:26.048-06:00
\n", + "
" + ], + "text/plain": [ + " projectUuid owner project_name \\\n", + "0 0001391024781787-5056a550b8-0001-012 tester_account2000 Hello World \n", + "1 0001391025968832-5056a550b8-0001-012 tester_account2000 Project 2 \n", + "2 0001391628100698-5056a550b8-0001-012 admin Demo1 \n", + "3 0001392911686649-5056a550b8-0001-012 test51 testProj \n", + "4 0001392912386049-5056a550b8-0001-012 test51 testProj2 \n", + "\n", + " last_updated \n", + "0 2014-01-29T13:46:21.787-06:00 \n", + "1 2014-01-29T14:06:08.832-06:00 \n", + "2 2014-02-05T13:21:40.698-06:00 \n", + "3 2014-02-20T09:54:46.649-06:00 \n", + "4 2014-02-20T10:06:26.048-06:00 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "project_list = []\n", + "for item in jsonarray:\n", + " item_type = item.get('name')\n", + " if item_type == 'project': # filter for project items\n", + " uuid = item.get('uuid', None)\n", + " owner = item.get('owner', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " # Nested 'name' inside 'value'\n", + " project_name = item.get('value', {}).get('name', None)\n", + " project_list.append({\n", + " 'projectUuid': uuid,\n", + " 'owner': owner,\n", + " 'project_name': project_name,\n", + " 'last_updated': last_updated\n", + " })\n", + "\n", + "import pandas as pd\n", + "df_projects = pd.DataFrame(project_list)\n", + "df_projects.head()\n" + ] + }, + { + "cell_type": "markdown", + "id": "1b0dd91f-9072-4933-b945-eb572d2adf89", + "metadata": {}, + "source": [ + "## Look at ProjectFile data\n", + " - Contains only ProjectUUID\n", + " - Contains file upload information for the project\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ab5aef3c-fae5-4802-9f0d-558089c32a09", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidprojectUuidassociationIds_1associationIds_2ownertask_typefile_namemimeTypelast_updated
359435338423137409494545-242ac118-0001-0125456400192359305711-242ac118-0001-0126793987554023894545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R1_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359441335427718191574545-242ac118-0001-0125456400192359305711-242ac118-0001-0122833383462017494545-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone4468_S24_L001_R2_001.fastq.gzNone2025-01-13T16:40:40.230-06:00
359451840700597200490991-242ac118-0001-0125456400192359305711-242ac118-0001-012366925519251050991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R1_001.fastq.gzNone2025-01-13T16:40:43.277-06:00
359465023614960920170991-242ac118-0001-0125456400192359305711-242ac118-0001-0123549539235260010991-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNone6634_S25_L001_R2_001.fastq.gzNone2025-01-13T16:40:43.281-06:00
359477830832104257678865-242ac118-0001-0125456400192359305711-242ac118-0001-0128017190735231118865-242ac112-0001-0025456400192359305711-242ac118-0001-012vdjNoneprimers.fastaNone2025-01-13T16:41:49.035-06:00
\n", + "
" + ], + "text/plain": [ + " uuid \\\n", + "35943 5338423137409494545-242ac118-0001-012 \n", + "35944 1335427718191574545-242ac118-0001-012 \n", + "35945 1840700597200490991-242ac118-0001-012 \n", + "35946 5023614960920170991-242ac118-0001-012 \n", + "35947 7830832104257678865-242ac118-0001-012 \n", + "\n", + " projectUuid \\\n", + "35943 5456400192359305711-242ac118-0001-012 \n", + "35944 5456400192359305711-242ac118-0001-012 \n", + "35945 5456400192359305711-242ac118-0001-012 \n", + "35946 5456400192359305711-242ac118-0001-012 \n", + "35947 5456400192359305711-242ac118-0001-012 \n", + "\n", + " associationIds_1 \\\n", + "35943 6793987554023894545-242ac112-0001-002 \n", + "35944 2833383462017494545-242ac112-0001-002 \n", + "35945 366925519251050991-242ac112-0001-002 \n", + "35946 3549539235260010991-242ac112-0001-002 \n", + "35947 8017190735231118865-242ac112-0001-002 \n", + "\n", + " associationIds_2 owner task_type \\\n", + "35943 5456400192359305711-242ac118-0001-012 vdj None \n", + "35944 5456400192359305711-242ac118-0001-012 vdj None \n", + "35945 5456400192359305711-242ac118-0001-012 vdj None \n", + "35946 5456400192359305711-242ac118-0001-012 vdj None \n", + "35947 5456400192359305711-242ac118-0001-012 vdj None \n", + "\n", + " file_name mimeType last_updated \n", + "35943 4468_S24_L001_R1_001.fastq.gz None 2025-01-13T16:40:40.230-06:00 \n", + "35944 4468_S24_L001_R2_001.fastq.gz None 2025-01-13T16:40:40.230-06:00 \n", + "35945 6634_S25_L001_R1_001.fastq.gz None 2025-01-13T16:40:43.277-06:00 \n", + "35946 6634_S25_L001_R2_001.fastq.gz None 2025-01-13T16:40:43.281-06:00 \n", + "35947 primers.fasta None 2025-01-13T16:41:49.035-06:00 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "projectFiles_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'projectFile':\n", + " uuid = item.get('uuid', None)\n", + " associationIds = item.get('associationIds', None)\n", + " projectUuid = item.get('value', {}).get('projectUuid', None)\n", + " owner = item.get('owner', None)\n", + " task_type= item.get('value', {}).get('type', None)\n", + " file_name = item.get('value', {}).get('name', None)\n", + " mimeType = item.get('value', {}).get('mimeType', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " if associationIds:\n", + " associationIds_1 = associationIds[0]\n", + " if len(associationIds)>1:\n", + " associationIds_2 = associationIds[1]\n", + " if len(associationIds) > 2:\n", + " print(\"Length associationIds: \", len(associationIds))\n", + " else:\n", + " associationIds_2 = None\n", + " else:\n", + " associationIds_1 = None\n", + " associationIds_2 = None\n", + " # Append the extracted data as a dictionary to the list\n", + " projectFiles_list.append({\n", + " 'uuid': uuid,\n", + " 'projectUuid': projectUuid,\n", + " 'associationIds_1': associationIds_1,\n", + " 'associationIds_2': associationIds_2,\n", + " 'owner': owner,\n", + " 'task_type': task_type,\n", + " 'file_name': file_name,\n", + " 'mimeType': mimeType,\n", + " 'last_updated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_projectFiles = pd.DataFrame(projectFiles_list)\n", + "# Print the DataFrame\n", + "df_projectFiles.tail()" + ] + }, + { + "cell_type": "markdown", + "id": "c5b322ff-78b3-46fd-a5cf-6a449b6e821e", + "metadata": {}, + "source": [ + "## Look at projectJob data\n", + " - Contains ProjectUUID and JobUUID" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "072ef231-e6d6-4812-a9e7-6a068944e8f7", + "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", + "
uuidownerprojectUuidjobUuidlastUpdated
00001400192074855-5056a550b8-0001-012vdj0001399309581559-5056a550b8-0001-0120001399315558601-5056a550b8-0001-0072014-05-15T17:14:34.855-05:00
10001400254373114-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400254372814-5056a550b8-0001-0072014-05-16T10:32:53.114-05:00
20001400273862423-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400273862119-5056a550b8-0001-0072014-05-16T15:57:42.423-05:00
30001400274448495-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400274448320-5056a550b8-0001-0072014-05-16T16:07:28.494-05:00
40001400274714655-5056a550b8-0001-012vdj0001400250478554-5056a550b8-0001-0120001400274714490-5056a550b8-0001-0072014-05-16T16:11:54.655-05:00
\n", + "
" + ], + "text/plain": [ + " uuid owner \\\n", + "0 0001400192074855-5056a550b8-0001-012 vdj \n", + "1 0001400254373114-5056a550b8-0001-012 vdj \n", + "2 0001400273862423-5056a550b8-0001-012 vdj \n", + "3 0001400274448495-5056a550b8-0001-012 vdj \n", + "4 0001400274714655-5056a550b8-0001-012 vdj \n", + "\n", + " projectUuid jobUuid \\\n", + "0 0001399309581559-5056a550b8-0001-012 0001399315558601-5056a550b8-0001-007 \n", + "1 0001400250478554-5056a550b8-0001-012 0001400254372814-5056a550b8-0001-007 \n", + "2 0001400250478554-5056a550b8-0001-012 0001400273862119-5056a550b8-0001-007 \n", + "3 0001400250478554-5056a550b8-0001-012 0001400274448320-5056a550b8-0001-007 \n", + "4 0001400250478554-5056a550b8-0001-012 0001400274714490-5056a550b8-0001-007 \n", + "\n", + " lastUpdated \n", + "0 2014-05-15T17:14:34.855-05:00 \n", + "1 2014-05-16T10:32:53.114-05:00 \n", + "2 2014-05-16T15:57:42.423-05:00 \n", + "3 2014-05-16T16:07:28.494-05:00 \n", + "4 2014-05-16T16:11:54.655-05:00 " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "projectJob_list = []\n", + "for item in jsonarray:\n", + " item_type = item['name']\n", + " if item_type == 'projectJob':\n", + " # json_print(item)\n", + " uuid = item.get('uuid', None)\n", + " owner = item.get('owner', None)\n", + " projectUuid = item.get('value', {}).get('projectUuid', None)\n", + " jobUuid = item.get('value', {}).get('jobUuid', None)\n", + " last_updated = item.get('lastUpdated', None)\n", + " projectJob_list.append({\n", + " 'uuid': uuid,\n", + " 'owner': owner,\n", + " 'projectUuid': projectUuid,\n", + " 'jobUuid': jobUuid,\n", + " 'lastUpdated': last_updated\n", + " })\n", + "\n", + "# Create a DataFrame from the list of extracted data\n", + "df_projectJob = pd.DataFrame(projectJob_list)\n", + "df_projectJob.head()" + ] + }, + { + "cell_type": "markdown", + "id": "0a3633c8-1be8-4070-8d22-4919f21b0601", + "metadata": {}, + "source": [ + "## Filter Metadata file by removing users with only READ Acess and Usernames that contains test" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "2d42d186-b64f-49d0-a680-05ed516a62b1", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idlast_updatedpermissionusernameuuidtenant_id
3142014-01-29 10:28:16READ_WRITEjfonner0001389977207738-5056a550b8-0001-012vdjserver.org
4172014-01-29 14:06:38READ_WRITEadshkl;dasfhkdf0001391025968832-5056a550b8-0001-012vdjserver.org
5182014-02-20 10:07:51READ_WRITEVDJAuth0001392912471365-5056a550b8-0001-012vdjserver.org
6192014-02-20 10:14:20READ_WRITEVDJAuth0001392912860303-5056a550b8-0001-012vdjserver.org
7212014-02-20 11:10:54READ_WRITEwscarbor0001392914178983-5056a550b8-0001-012vdjserver.org
\n", + "
" + ], + "text/plain": [ + " id last_updated permission username \\\n", + "3 14 2014-01-29 10:28:16 READ_WRITE jfonner \n", + "4 17 2014-01-29 14:06:38 READ_WRITE adshkl;dasfhkdf \n", + "5 18 2014-02-20 10:07:51 READ_WRITE VDJAuth \n", + "6 19 2014-02-20 10:14:20 READ_WRITE VDJAuth \n", + "7 21 2014-02-20 11:10:54 READ_WRITE wscarbor \n", + "\n", + " uuid tenant_id \n", + "3 0001389977207738-5056a550b8-0001-012 vdjserver.org \n", + "4 0001391025968832-5056a550b8-0001-012 vdjserver.org \n", + "5 0001392912471365-5056a550b8-0001-012 vdjserver.org \n", + "6 0001392912860303-5056a550b8-0001-012 vdjserver.org \n", + "7 0001392914178983-5056a550b8-0001-012 vdjserver.org " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metadata_perms_df\n", + "#filter metadata keeping only items that has permission for both READ_WRITE and ALL\n", + "filtered_metadata_perms_df = metadata_perms_df[~(metadata_perms_df.permission == 'READ')]\n", + "# Filter out usernames containing 'test'\n", + "filtered_metadata_perms_df = filtered_metadata_perms_df[~filtered_metadata_perms_df['username'].str.contains('test', case=False)]\n", + "filtered_metadata_perms_df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "e27e1396-6dcb-4f63-94e8-c371da07417f", + "metadata": {}, + "source": [ + "## Look at all the Jobs " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "b961c52a-4d34-4e37-9e9a-97ae0899d47b", + "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", + " \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", + "
system_idownerapp_idstatuslast_updateduuidarchive_pathremote_outcomeupdate_tokenparameters.Creator
0ls6.tacc.utexas.eduvdjrepcalc-ls6-2.0u8FINISHED2025-01-25 15:43:51.678c7cd08ad-a560-4574-a363-b9cc4c5e051d-007/projects/5456400192359305711-242ac118-0001-01...FINISHEDeb27e311-4a37-4aeb-b649-056704dd2711schristley
1ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FINISHED2025-01-24 04:20:37.8919188bf80-e868-4e05-a6b4-308c044108d7-007/projects/5456400192359305711-242ac118-0001-01...FINISHED5e2528fd-25d6-4473-9287-6a67a8de8391schristley
2ls6.tacc.utexas.eduvdjigblast-ls6-1.20u6FAILED2025-01-22 15:04:46.891773a5cb7-b369-4517-a221-83d57e3899e5-007/projects/5199144433477554666-242ac116-0001-01...FAILED_SKIP_ARCHIVE78b89c14-3dec-4aa8-acf8-d2592064e3a4scott_public
3ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-14 22:31:02.980c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007/projects/5456400192359305711-242ac118-0001-01...FINISHED1e2f122d-5e5b-4f14-931f-ca55803115ffschristley
4ls6.tacc.utexas.eduvdjvdj_pipe-ls6-0.1.7u2FINISHED2025-01-09 04:21:12.476ad02cb34-250e-48cb-a06e-973e431b62ee-007/projects/6589143665654501871-242ac118-0001-01...FINISHED1069949d-1d9a-453f-80b8-7372019aba31schristley
\n", + "
" + ], + "text/plain": [ + " system_id owner app_id status \\\n", + "0 ls6.tacc.utexas.edu vdj repcalc-ls6-2.0u8 FINISHED \n", + "1 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FINISHED \n", + "2 ls6.tacc.utexas.edu vdj igblast-ls6-1.20u6 FAILED \n", + "3 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "4 ls6.tacc.utexas.edu vdj vdj_pipe-ls6-0.1.7u2 FINISHED \n", + "\n", + " last_updated uuid \\\n", + "0 2025-01-25 15:43:51.678 c7cd08ad-a560-4574-a363-b9cc4c5e051d-007 \n", + "1 2025-01-24 04:20:37.891 9188bf80-e868-4e05-a6b4-308c044108d7-007 \n", + "2 2025-01-22 15:04:46.891 773a5cb7-b369-4517-a221-83d57e3899e5-007 \n", + "3 2025-01-14 22:31:02.980 c0ab5f4a-97b0-4dc3-93e8-0908c95cb3a4-007 \n", + "4 2025-01-09 04:21:12.476 ad02cb34-250e-48cb-a06e-973e431b62ee-007 \n", + "\n", + " archive_path remote_outcome \\\n", + "0 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "1 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "2 /projects/5199144433477554666-242ac116-0001-01... FAILED_SKIP_ARCHIVE \n", + "3 /projects/5456400192359305711-242ac118-0001-01... FINISHED \n", + "4 /projects/6589143665654501871-242ac118-0001-01... FINISHED \n", + "\n", + " update_token parameters.Creator \n", + "0 eb27e311-4a37-4aeb-b649-056704dd2711 schristley \n", + "1 5e2528fd-25d6-4473-9287-6a67a8de8391 schristley \n", + "2 78b89c14-3dec-4aa8-acf8-d2592064e3a4 scott_public \n", + "3 1e2f122d-5e5b-4f14-931f-ca55803115ff schristley \n", + "4 1069949d-1d9a-453f-80b8-7372019aba31 schristley " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jobs_all_df.head()\n", + "## Filter AllJobs columns\n", + "#### Keeping only important ones\n", + "keep_columns = ['system_id', 'owner', 'app_id', 'status', 'last_updated', 'uuid', 'archive_path', 'remote_outcome', 'update_token', 'parameters.Creator']\n", + "jobs_all_df = jobs_all_df[keep_columns]\n", + "jobs_all_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "7abe1c74-90f1-4172-a964-5fd247f914d7", + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
uuidusernamefirstNamelastNameemaillastUpdated
00001389976523746-5056a550b8-0001-012wscarborWalterScarboroughwscarbor@tacc.utexas.edu2016-04-27T15:07:26.261-05:00
10001391029872321-5056a550b8-0001-012test19Test19test19@test.com2014-01-29T15:12:33.955-06:00
20001391717057917-5056a550b8-0001-012test31test31@test.com2014-02-06T14:04:17.917-06:00
30001391719926131-5056a550b8-0001-012test33NoneNonetest33@test.com2014-02-06T14:52:06.131-06:00
40001391720404124-5056a550b8-0001-012test34NedFlanderstest34@test.com2014-02-06T15:00:46.376-06:00
.....................
18176242932598575984145-242ac118-0001-012rgarciaRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nl2025-01-02T11:11:52.894-06:00
18182755888095932968465-242ac118-0001-012rgarciavRodrigoGarcía Valienter.garciavaliente@amsterdamumc.nl2025-01-02T11:41:52.070-06:00
18195481029658171207185-242ac118-0001-012erichardsonEveRichardsonerichardson@lji.org2025-01-07T18:01:25.657-06:00
18204458895817601248785-242ac118-0001-012samwolsamuel.wollenburg@utsouthwestern.edu2025-01-07T20:24:59.390-06:00
18219076859566261923345-242ac118-0001-012chrisjames1992Chinweike ChristopherUdoyechinweikechristopher.udoye@uksh.de2025-01-17T07:54:02.133-06:00
\n", + "

1822 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " uuid username \\\n", + "0 0001389976523746-5056a550b8-0001-012 wscarbor \n", + "1 0001391029872321-5056a550b8-0001-012 test19 \n", + "2 0001391717057917-5056a550b8-0001-012 test31 \n", + "3 0001391719926131-5056a550b8-0001-012 test33 \n", + "4 0001391720404124-5056a550b8-0001-012 test34 \n", + "... ... ... \n", + "1817 6242932598575984145-242ac118-0001-012 rgarcia \n", + "1818 2755888095932968465-242ac118-0001-012 rgarciav \n", + "1819 5481029658171207185-242ac118-0001-012 erichardson \n", + "1820 4458895817601248785-242ac118-0001-012 samwol \n", + "1821 9076859566261923345-242ac118-0001-012 chrisjames1992 \n", + "\n", + " firstName lastName \\\n", + "0 Walter Scarborough \n", + "1 Test 19 \n", + "2 \n", + "3 None None \n", + "4 Ned Flanders \n", + "... ... ... \n", + "1817 Rodrigo García Valiente \n", + "1818 Rodrigo García Valiente \n", + "1819 Eve Richardson \n", + "1820 \n", + "1821 Chinweike Christopher Udoye \n", + "\n", + " email lastUpdated \n", + "0 wscarbor@tacc.utexas.edu 2016-04-27T15:07:26.261-05:00 \n", + "1 test19@test.com 2014-01-29T15:12:33.955-06:00 \n", + "2 test31@test.com 2014-02-06T14:04:17.917-06:00 \n", + "3 test33@test.com 2014-02-06T14:52:06.131-06:00 \n", + "4 test34@test.com 2014-02-06T15:00:46.376-06:00 \n", + "... ... ... \n", + "1817 r.garciavaliente@amsterdamumc.nl 2025-01-02T11:11:52.894-06:00 \n", + "1818 r.garciavaliente@amsterdamumc.nl 2025-01-02T11:41:52.070-06:00 \n", + "1819 erichardson@lji.org 2025-01-07T18:01:25.657-06:00 \n", + "1820 samuel.wollenburg@utsouthwestern.edu 2025-01-07T20:24:59.390-06:00 \n", + "1821 chinweikechristopher.udoye@uksh.de 2025-01-17T07:54:02.133-06:00 \n", + "\n", + "[1822 rows x 6 columns]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_profile" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "035be43b-2e9c-4dde-b045-6d0e14c018ef", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Email ID: leyu.liu@staidsonbio.com\n", + "\n", + "\n", + "Dear lliu, \n", + "\n", + "You have total 2 projects in VDJ server. For My 1st NGS you have 0 project files and 5 job files, For Rabbit IG you have 0 project files and 0 job files, avalibale on our database. If you want them to be transferred over to our VDJ server V2 then please let us know.\n", + "\n", + "Thanks\n", + "VDJServer Teams.\n" + ] + }, + { + "data": { + "text/plain": [ + "{'6656727206927929831-242ac11c-0001-012': {'project_name': 'My 1st NGS',\n", + " 'projectFile': 0,\n", + " 'projectJob': 5,\n", + " 'processMetadata': 5,\n", + " 'projectJobFile': 44,\n", + " 'subject': 0,\n", + " 'sample': 0,\n", + " 'sampleGroup': 0},\n", + " '5877004408142163475-242ac11b-0001-012': {'project_name': 'Rabbit IG'}}" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "filtered_job_metadata_perms_df = filtered_metadata_perms_df[filtered_metadata_perms_df.uuid.isin(df_projects.projectUuid)]\n", + "user = 'lliu'\n", + "user_info = filtered_job_metadata_perms_df[filtered_job_metadata_perms_df.username == user]\n", + "total_projects = user_info.shape[0]\n", + "user_info = pd.merge(user_info, df_profile, on='username', how='inner')\n", + "email_id = user_info.email.iloc[0]\n", + "print(f\"Email ID: {email_id}\\n\\n\")\n", + "all_project_info = {}\n", + "for project_uuid in user_info.uuid:\n", + " project_name = df_projects[df_projects.projectUuid == project_uuid].project_name.iloc[0]\n", + " all_names = {}\n", + " all_names['project_name'] = project_name\n", + " for item in jsonarray:\n", + " if project_uuid in item.get('associationIds', None):\n", + " if item['name'] in all_names:\n", + " all_names[item['name']] += 1\n", + " else:\n", + " all_names[item['name']] = 0\n", + " all_project_info[project_uuid] = all_names\n", + " \n", + "text = f'Dear {user}, \\n\\nYou have total {total_projects} projects in VDJ server.'\n", + "\n", + "for k, v in all_project_info.items():\n", + " project_name = v.get('project_name', 'Not Available')\n", + " n_project_file = v.get('projectFile', 0)\n", + " n_job_file = v.get('projectJob', 0)\n", + " text += f' For {project_name} you have {n_project_file} project files and {n_job_file} job files,'\n", + "text += f' avalibale on our database. If you want them to be transferred over to our VDJ server V2 then please let us know.\\n\\nThanks\\nVDJServer Teams.'\n", + "\n", + "print(text)\n", + "all_project_info" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "general_env", + "language": "python", + "name": "general_env" + }, + "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 +}