Created
March 24, 2020 13:23
-
-
Save olgabot/8974930f42d953bca819cc8fa4934957 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Imports" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import itertools\n", | |
"import math\n", | |
"import random\n", | |
"import string\n", | |
"\n", | |
"# third-party libraries\n", | |
"import pandas as pd\n", | |
"from IPython.display import display, HTML" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Overall workflow" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Get accession IDs" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['A00000',\n", | |
" 'A00001',\n", | |
" 'A00002',\n", | |
" 'A00003',\n", | |
" 'A00004',\n", | |
" 'A00005',\n", | |
" 'A00006',\n", | |
" 'A00007',\n", | |
" 'A00008',\n", | |
" 'A00009',\n", | |
" 'A00010',\n", | |
" 'A00011',\n", | |
" 'A00012',\n", | |
" 'A00013',\n", | |
" 'A00014',\n", | |
" 'A00015',\n", | |
" 'A00016',\n", | |
" 'A00017',\n", | |
" 'A00018',\n", | |
" 'A00019',\n", | |
" 'A00020',\n", | |
" 'A00021',\n", | |
" 'A00022',\n", | |
" 'A00023',\n", | |
" 'A00024',\n", | |
" 'A00025',\n", | |
" 'A00026',\n", | |
" 'A00027',\n", | |
" 'A00028',\n", | |
" 'A00029',\n", | |
" 'A00030',\n", | |
" 'A00031',\n", | |
" 'A00032',\n", | |
" 'A00033',\n", | |
" 'A00034',\n", | |
" 'A00035',\n", | |
" 'A00036',\n", | |
" 'A00037',\n", | |
" 'A00038',\n", | |
" 'A00039',\n", | |
" 'A00040',\n", | |
" 'A00041',\n", | |
" 'A00042',\n", | |
" 'A00043',\n", | |
" 'A00044',\n", | |
" 'A00045',\n", | |
" 'A00046',\n", | |
" 'A00047',\n", | |
" 'A00048',\n", | |
" 'A00049',\n", | |
" 'A00050',\n", | |
" 'A00051',\n", | |
" 'A00052',\n", | |
" 'A00053',\n", | |
" 'A00054',\n", | |
" 'A00055',\n", | |
" 'A00056',\n", | |
" 'A00057',\n", | |
" 'A00058',\n", | |
" 'A00059',\n", | |
" 'A00060',\n", | |
" 'A00061',\n", | |
" 'A00062',\n", | |
" 'A00063',\n", | |
" 'A00064',\n", | |
" 'A00065',\n", | |
" 'A00066',\n", | |
" 'A00067',\n", | |
" 'A00068',\n", | |
" 'A00069',\n", | |
" 'A00070',\n", | |
" 'A00071',\n", | |
" 'A00072',\n", | |
" 'A00073',\n", | |
" 'A00074',\n", | |
" 'A00075',\n", | |
" 'A00076',\n", | |
" 'A00077',\n", | |
" 'A00078',\n", | |
" 'A00079',\n", | |
" 'A00080',\n", | |
" 'A00081',\n", | |
" 'A00082',\n", | |
" 'A00083',\n", | |
" 'A00084',\n", | |
" 'A00085',\n", | |
" 'A00086',\n", | |
" 'A00087',\n", | |
" 'A00088',\n", | |
" 'A00089',\n", | |
" 'A00090',\n", | |
" 'A00091',\n", | |
" 'A00092',\n", | |
" 'A00093',\n", | |
" 'A00094',\n", | |
" 'A00095',\n", | |
" 'A00096',\n", | |
" 'A00097',\n", | |
" 'A00098',\n", | |
" 'A00099']" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"accession_ids = [f\"A{str(i).zfill(5)}\" for i in range(100)]\n", | |
"accession_ids" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Get all well ids" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"columns = list(string.ascii_uppercase[:8])\n", | |
"rows = list(range(1, 13))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['A1',\n", | |
" 'A2',\n", | |
" 'A3',\n", | |
" 'A4',\n", | |
" 'A5',\n", | |
" 'A6',\n", | |
" 'A7',\n", | |
" 'A8',\n", | |
" 'A9',\n", | |
" 'A10',\n", | |
" 'A11',\n", | |
" 'A12',\n", | |
" 'B1',\n", | |
" 'B2',\n", | |
" 'B3',\n", | |
" 'B4',\n", | |
" 'B5',\n", | |
" 'B6',\n", | |
" 'B7',\n", | |
" 'B8',\n", | |
" 'B9',\n", | |
" 'B10',\n", | |
" 'B11',\n", | |
" 'B12',\n", | |
" 'C1',\n", | |
" 'C2',\n", | |
" 'C3',\n", | |
" 'C4',\n", | |
" 'C5',\n", | |
" 'C6',\n", | |
" 'C7',\n", | |
" 'C8',\n", | |
" 'C9',\n", | |
" 'C10',\n", | |
" 'C11',\n", | |
" 'C12',\n", | |
" 'D1',\n", | |
" 'D2',\n", | |
" 'D3',\n", | |
" 'D4',\n", | |
" 'D5',\n", | |
" 'D6',\n", | |
" 'D7',\n", | |
" 'D8',\n", | |
" 'D9',\n", | |
" 'D10',\n", | |
" 'D11',\n", | |
" 'D12',\n", | |
" 'E1',\n", | |
" 'E2',\n", | |
" 'E3',\n", | |
" 'E4',\n", | |
" 'E5',\n", | |
" 'E6',\n", | |
" 'E7',\n", | |
" 'E8',\n", | |
" 'E9',\n", | |
" 'E10',\n", | |
" 'E11',\n", | |
" 'E12',\n", | |
" 'F1',\n", | |
" 'F2',\n", | |
" 'F3',\n", | |
" 'F4',\n", | |
" 'F5',\n", | |
" 'F6',\n", | |
" 'F7',\n", | |
" 'F8',\n", | |
" 'F9',\n", | |
" 'F10',\n", | |
" 'F11',\n", | |
" 'F12',\n", | |
" 'G1',\n", | |
" 'G2',\n", | |
" 'G3',\n", | |
" 'G4',\n", | |
" 'G5',\n", | |
" 'G6',\n", | |
" 'G7',\n", | |
" 'G8',\n", | |
" 'G9',\n", | |
" 'G10',\n", | |
" 'G11',\n", | |
" 'G12',\n", | |
" 'H1',\n", | |
" 'H2',\n", | |
" 'H3',\n", | |
" 'H4',\n", | |
" 'H5',\n", | |
" 'H6',\n", | |
" 'H7',\n", | |
" 'H8',\n", | |
" 'H9',\n", | |
" 'H10',\n", | |
" 'H11',\n", | |
" 'H12']" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"all_well_ids = [''.join(map(str, x)) for x in itertools.product(columns, rows)]\n", | |
"all_well_ids" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Get only wells to fill (leaving a border of 1 well on all sides)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['B', 'C', 'D', 'E', 'F', 'G']" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"columns_to_fill = list(string.ascii_uppercase[1:7])\n", | |
"columns_to_fill" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"rows_to_fill = list(range(2, 12))\n", | |
"rows_to_fill" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Use itertools.product to get all row, column ids" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[('B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'B',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'C',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'D',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'E',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'F',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G',\n", | |
" 'G'),\n", | |
" (2,\n", | |
" 3,\n", | |
" 4,\n", | |
" 5,\n", | |
" 6,\n", | |
" 7,\n", | |
" 8,\n", | |
" 9,\n", | |
" 10,\n", | |
" 11,\n", | |
" 2,\n", | |
" 3,\n", | |
" 4,\n", | |
" 5,\n", | |
" 6,\n", | |
" 7,\n", | |
" 8,\n", | |
" 9,\n", | |
" 10,\n", | |
" 11,\n", | |
" 2,\n", | |
" 3,\n", | |
" 4,\n", | |
" 5,\n", | |
" 6,\n", | |
" 7,\n", | |
" 8,\n", | |
" 9,\n", | |
" 10,\n", | |
" 11,\n", | |
" 2,\n", | |
" 3,\n", | |
" 4,\n", | |
" 5,\n", | |
" 6,\n", | |
" 7,\n", | |
" 8,\n", | |
" 9,\n", | |
" 10,\n", | |
" 11,\n", | |
" 2,\n", | |
" 3,\n", | |
" 4,\n", | |
" 5,\n", | |
" 6,\n", | |
" 7,\n", | |
" 8,\n", | |
" 9,\n", | |
" 10,\n", | |
" 11,\n", | |
" 2,\n", | |
" 3,\n", | |
" 4,\n", | |
" 5,\n", | |
" 6,\n", | |
" 7,\n", | |
" 8,\n", | |
" 9,\n", | |
" 10,\n", | |
" 11)]" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"column_row_ids_to_fill = list(zip(*[(x, y) for x, y in itertools.product(columns_to_fill, rows_to_fill)]))\n", | |
"column_row_ids_to_fill" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"column_ids_to_fill = column_row_ids_to_fill[0]\n", | |
"row_ids_to_fill = column_row_ids_to_fill[1]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Make well IDs to fill" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['B2',\n", | |
" 'B3',\n", | |
" 'B4',\n", | |
" 'B5',\n", | |
" 'B6',\n", | |
" 'B7',\n", | |
" 'B8',\n", | |
" 'B9',\n", | |
" 'B10',\n", | |
" 'B11',\n", | |
" 'C2',\n", | |
" 'C3',\n", | |
" 'C4',\n", | |
" 'C5',\n", | |
" 'C6',\n", | |
" 'C7',\n", | |
" 'C8',\n", | |
" 'C9',\n", | |
" 'C10',\n", | |
" 'C11',\n", | |
" 'D2',\n", | |
" 'D3',\n", | |
" 'D4',\n", | |
" 'D5',\n", | |
" 'D6',\n", | |
" 'D7',\n", | |
" 'D8',\n", | |
" 'D9',\n", | |
" 'D10',\n", | |
" 'D11',\n", | |
" 'E2',\n", | |
" 'E3',\n", | |
" 'E4',\n", | |
" 'E5',\n", | |
" 'E6',\n", | |
" 'E7',\n", | |
" 'E8',\n", | |
" 'E9',\n", | |
" 'E10',\n", | |
" 'E11',\n", | |
" 'F2',\n", | |
" 'F3',\n", | |
" 'F4',\n", | |
" 'F5',\n", | |
" 'F6',\n", | |
" 'F7',\n", | |
" 'F8',\n", | |
" 'F9',\n", | |
" 'F10',\n", | |
" 'F11',\n", | |
" 'G2',\n", | |
" 'G3',\n", | |
" 'G4',\n", | |
" 'G5',\n", | |
" 'G6',\n", | |
" 'G7',\n", | |
" 'G8',\n", | |
" 'G9',\n", | |
" 'G10',\n", | |
" 'G11']" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"well_ids_to_fill = [''.join(map(str, well)) for well in itertools.product(columns_to_fill, rows_to_fill)]\n", | |
"well_ids_to_fill" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Get unfilled wells" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['A1',\n", | |
" 'A2',\n", | |
" 'A3',\n", | |
" 'A4',\n", | |
" 'A5',\n", | |
" 'A6',\n", | |
" 'A7',\n", | |
" 'A8',\n", | |
" 'A9',\n", | |
" 'A10',\n", | |
" 'A11',\n", | |
" 'A12',\n", | |
" 'B1',\n", | |
" 'B12',\n", | |
" 'C1',\n", | |
" 'C12',\n", | |
" 'D1',\n", | |
" 'D12',\n", | |
" 'E1',\n", | |
" 'E12',\n", | |
" 'F1',\n", | |
" 'F12',\n", | |
" 'G1',\n", | |
" 'G12',\n", | |
" 'H1',\n", | |
" 'H2',\n", | |
" 'H3',\n", | |
" 'H4',\n", | |
" 'H5',\n", | |
" 'H6',\n", | |
" 'H7',\n", | |
" 'H8',\n", | |
" 'H9',\n", | |
" 'H10',\n", | |
" 'H11',\n", | |
" 'H12']" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"wells_unfilled = [x for x in all_well_ids if x not in well_ids_to_fill]\n", | |
"wells_unfilled" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Make dataframe of unfilled wells for appending" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>well_id</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>A1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>A2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>A3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>A4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>A5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>A6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>A7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>A8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>A9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>A10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>A11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>A12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>B1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>B12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>C1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>C12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>D1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>D12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>E1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>E12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>F1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>F12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>G1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>G12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>H1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>H2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>H3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>H4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>H5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>H6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>H7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>H8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>H9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>H10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>H11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>H12</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" well_id\n", | |
"0 A1\n", | |
"1 A2\n", | |
"2 A3\n", | |
"3 A4\n", | |
"4 A5\n", | |
"5 A6\n", | |
"6 A7\n", | |
"7 A8\n", | |
"8 A9\n", | |
"9 A10\n", | |
"10 A11\n", | |
"11 A12\n", | |
"12 B1\n", | |
"13 B12\n", | |
"14 C1\n", | |
"15 C12\n", | |
"16 D1\n", | |
"17 D12\n", | |
"18 E1\n", | |
"19 E12\n", | |
"20 F1\n", | |
"21 F12\n", | |
"22 G1\n", | |
"23 G12\n", | |
"24 H1\n", | |
"25 H2\n", | |
"26 H3\n", | |
"27 H4\n", | |
"28 H5\n", | |
"29 H6\n", | |
"30 H7\n", | |
"31 H8\n", | |
"32 H9\n", | |
"33 H10\n", | |
"34 H11\n", | |
"35 H12" | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_unfilled_wells_only = pd.DataFrame({'well_id': wells_unfilled})\n", | |
"df_unfilled_wells_only" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Use regex to extract row number and column letter\n", | |
"\n", | |
"Regex: https://regex101.com/r/ZYJ0NY/1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>column_letter</th>\n", | |
" <th>row_number</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>A</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>A</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>A</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>A</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>A</td>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>A</td>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>A</td>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>A</td>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>A</td>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>A</td>\n", | |
" <td>10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>A</td>\n", | |
" <td>11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>A</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>B</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>B</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>C</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>C</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>D</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>D</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>E</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>E</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>F</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>F</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>G</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>G</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>H</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>H</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>H</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>H</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>H</td>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>H</td>\n", | |
" <td>6</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>H</td>\n", | |
" <td>7</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>H</td>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>H</td>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>H</td>\n", | |
" <td>10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>H</td>\n", | |
" <td>11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>H</td>\n", | |
" <td>12</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" column_letter row_number\n", | |
"0 A 1\n", | |
"1 A 2\n", | |
"2 A 3\n", | |
"3 A 4\n", | |
"4 A 5\n", | |
"5 A 6\n", | |
"6 A 7\n", | |
"7 A 8\n", | |
"8 A 9\n", | |
"9 A 10\n", | |
"10 A 11\n", | |
"11 A 12\n", | |
"12 B 1\n", | |
"13 B 12\n", | |
"14 C 1\n", | |
"15 C 12\n", | |
"16 D 1\n", | |
"17 D 12\n", | |
"18 E 1\n", | |
"19 E 12\n", | |
"20 F 1\n", | |
"21 F 12\n", | |
"22 G 1\n", | |
"23 G 12\n", | |
"24 H 1\n", | |
"25 H 2\n", | |
"26 H 3\n", | |
"27 H 4\n", | |
"28 H 5\n", | |
"29 H 6\n", | |
"30 H 7\n", | |
"31 H 8\n", | |
"32 H 9\n", | |
"33 H 10\n", | |
"34 H 11\n", | |
"35 H 12" | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_unfilled_column_letter_row_number = df_unfilled_wells_only['well_id'].str.extractall('(?P<column_letter>[A-H])(?P<row_number>\\d+)')\n", | |
"\n", | |
"# Remove \"match\" in MultiIndex\n", | |
"df_unfilled_column_letter_row_number.index = df_unfilled_column_letter_row_number.index.droplevel(level=-1)\n", | |
"df_unfilled_column_letter_row_number" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>well_id</th>\n", | |
" <th>column_letter</th>\n", | |
" <th>row_number</th>\n", | |
" <th>accession_id</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>A1</td>\n", | |
" <td>A</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>A2</td>\n", | |
" <td>A</td>\n", | |
" <td>2</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>A3</td>\n", | |
" <td>A</td>\n", | |
" <td>3</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>A4</td>\n", | |
" <td>A</td>\n", | |
" <td>4</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>A5</td>\n", | |
" <td>A</td>\n", | |
" <td>5</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>A6</td>\n", | |
" <td>A</td>\n", | |
" <td>6</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>A7</td>\n", | |
" <td>A</td>\n", | |
" <td>7</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>A8</td>\n", | |
" <td>A</td>\n", | |
" <td>8</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>A9</td>\n", | |
" <td>A</td>\n", | |
" <td>9</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>A10</td>\n", | |
" <td>A</td>\n", | |
" <td>10</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>A11</td>\n", | |
" <td>A</td>\n", | |
" <td>11</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>A12</td>\n", | |
" <td>A</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>B1</td>\n", | |
" <td>B</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>B12</td>\n", | |
" <td>B</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>C1</td>\n", | |
" <td>C</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>C12</td>\n", | |
" <td>C</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>D1</td>\n", | |
" <td>D</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>D12</td>\n", | |
" <td>D</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>E1</td>\n", | |
" <td>E</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>E12</td>\n", | |
" <td>E</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>F1</td>\n", | |
" <td>F</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>F12</td>\n", | |
" <td>F</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>G1</td>\n", | |
" <td>G</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>G12</td>\n", | |
" <td>G</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>H1</td>\n", | |
" <td>H</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>H2</td>\n", | |
" <td>H</td>\n", | |
" <td>2</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>H3</td>\n", | |
" <td>H</td>\n", | |
" <td>3</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>H4</td>\n", | |
" <td>H</td>\n", | |
" <td>4</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>H5</td>\n", | |
" <td>H</td>\n", | |
" <td>5</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>H6</td>\n", | |
" <td>H</td>\n", | |
" <td>6</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>H7</td>\n", | |
" <td>H</td>\n", | |
" <td>7</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>H8</td>\n", | |
" <td>H</td>\n", | |
" <td>8</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>H9</td>\n", | |
" <td>H</td>\n", | |
" <td>9</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>H10</td>\n", | |
" <td>H</td>\n", | |
" <td>10</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>H11</td>\n", | |
" <td>H</td>\n", | |
" <td>11</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>H12</td>\n", | |
" <td>H</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" well_id column_letter row_number accession_id\n", | |
"0 A1 A 1 empty\n", | |
"1 A2 A 2 empty\n", | |
"2 A3 A 3 empty\n", | |
"3 A4 A 4 empty\n", | |
"4 A5 A 5 empty\n", | |
"5 A6 A 6 empty\n", | |
"6 A7 A 7 empty\n", | |
"7 A8 A 8 empty\n", | |
"8 A9 A 9 empty\n", | |
"9 A10 A 10 empty\n", | |
"10 A11 A 11 empty\n", | |
"11 A12 A 12 empty\n", | |
"12 B1 B 1 empty\n", | |
"13 B12 B 12 empty\n", | |
"14 C1 C 1 empty\n", | |
"15 C12 C 12 empty\n", | |
"16 D1 D 1 empty\n", | |
"17 D12 D 12 empty\n", | |
"18 E1 E 1 empty\n", | |
"19 E12 E 12 empty\n", | |
"20 F1 F 1 empty\n", | |
"21 F12 F 12 empty\n", | |
"22 G1 G 1 empty\n", | |
"23 G12 G 12 empty\n", | |
"24 H1 H 1 empty\n", | |
"25 H2 H 2 empty\n", | |
"26 H3 H 3 empty\n", | |
"27 H4 H 4 empty\n", | |
"28 H5 H 5 empty\n", | |
"29 H6 H 6 empty\n", | |
"30 H7 H 7 empty\n", | |
"31 H8 H 8 empty\n", | |
"32 H9 H 9 empty\n", | |
"33 H10 H 10 empty\n", | |
"34 H11 H 11 empty\n", | |
"35 H12 H 12 empty" | |
] | |
}, | |
"execution_count": 27, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_unfilled = pd.concat([df_unfilled_wells_only, df_unfilled_column_letter_row_number], axis=1)\n", | |
"\n", | |
"# Cast as an int so it matches the data type when concatenated to the filled wells\n", | |
"df_unfilled['row_number'] = df_unfilled['row_number'].astype(int)\n", | |
"df_unfilled['accession_id'] = 'empty'\n", | |
"df_unfilled" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Numbers of samples" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Number of filled wells per plate" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"60" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"n_wells_per_plate = len(columns_to_fill) * len(rows_to_fill)\n", | |
"n_wells_per_plate" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Confusion.. should be 58 samples when the product of the lengths is 60. Are some wells controls?" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Confused.. when talking to Michelle she said there would be 58 samples/plate. Does that mean two wells are controls? Which wells?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"n_control_samples = 2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"58" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"n_samples_per_plate = n_wells_per_plate - n_control_samples\n", | |
"n_samples_per_plate" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Iterate over the accession IDs in chunks" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"n_chunks = int(math.ceil(len(accession_ids)/n_samples_per_plate))\n", | |
"\n", | |
"plates_tidy = []\n", | |
"plates_2d = []\n", | |
"\n", | |
"for i in range(n_chunks):\n", | |
" start = i * n_samples_per_plate\n", | |
" end = start + n_samples_per_plate\n", | |
" ids = accession_ids[start:end]\n", | |
" if len(ids) < n_wells_per_plate:\n", | |
" # Fill remaining accession slots with None/null/NA\n", | |
" ids += [None] * (n_wells_per_plate - len(ids))\n", | |
" \n", | |
" df = pd.DataFrame({'accession_id': ids, 'well_id': well_ids_to_fill, 'column_letter': column_ids_to_fill, 'row_number': row_ids_to_fill})\n", | |
" plates_tidy.append(df)\n", | |
" \n", | |
" df_all_wells = pd.concat([df, df_unfilled], ignore_index=True, sort=True)\n", | |
" df2d = df_all_wells.pivot(index='row_number', columns='column_letter', values='accession_id')\n", | |
" plates_2d.append(df2d)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2, 3, 4, 5, 6, 7, 8,\n", | |
" 9, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2, 3, 4, 5,\n", | |
" 6, 7, 8, 9, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 2,\n", | |
" 3, 4, 5, 6, 7, 8, 9, 10, 11, 1, 2, 3, 4, 5, 6, 7, 8,\n", | |
" 9, 10, 11, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1,\n", | |
" 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])" | |
] | |
}, | |
"execution_count": 29, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_all_wells.row_number.values" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>well_id</th>\n", | |
" <th>column_letter</th>\n", | |
" <th>row_number</th>\n", | |
" <th>accession_id</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>A1</td>\n", | |
" <td>A</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>A2</td>\n", | |
" <td>A</td>\n", | |
" <td>2</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>A3</td>\n", | |
" <td>A</td>\n", | |
" <td>3</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>A4</td>\n", | |
" <td>A</td>\n", | |
" <td>4</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>A5</td>\n", | |
" <td>A</td>\n", | |
" <td>5</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>A6</td>\n", | |
" <td>A</td>\n", | |
" <td>6</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>A7</td>\n", | |
" <td>A</td>\n", | |
" <td>7</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>A8</td>\n", | |
" <td>A</td>\n", | |
" <td>8</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>A9</td>\n", | |
" <td>A</td>\n", | |
" <td>9</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>A10</td>\n", | |
" <td>A</td>\n", | |
" <td>10</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>A11</td>\n", | |
" <td>A</td>\n", | |
" <td>11</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>A12</td>\n", | |
" <td>A</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>B1</td>\n", | |
" <td>B</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>B12</td>\n", | |
" <td>B</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>C1</td>\n", | |
" <td>C</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>C12</td>\n", | |
" <td>C</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>D1</td>\n", | |
" <td>D</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>D12</td>\n", | |
" <td>D</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>E1</td>\n", | |
" <td>E</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>E12</td>\n", | |
" <td>E</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>20</th>\n", | |
" <td>F1</td>\n", | |
" <td>F</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>21</th>\n", | |
" <td>F12</td>\n", | |
" <td>F</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>22</th>\n", | |
" <td>G1</td>\n", | |
" <td>G</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>23</th>\n", | |
" <td>G12</td>\n", | |
" <td>G</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>24</th>\n", | |
" <td>H1</td>\n", | |
" <td>H</td>\n", | |
" <td>1</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25</th>\n", | |
" <td>H2</td>\n", | |
" <td>H</td>\n", | |
" <td>2</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>26</th>\n", | |
" <td>H3</td>\n", | |
" <td>H</td>\n", | |
" <td>3</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>27</th>\n", | |
" <td>H4</td>\n", | |
" <td>H</td>\n", | |
" <td>4</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>28</th>\n", | |
" <td>H5</td>\n", | |
" <td>H</td>\n", | |
" <td>5</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>29</th>\n", | |
" <td>H6</td>\n", | |
" <td>H</td>\n", | |
" <td>6</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>30</th>\n", | |
" <td>H7</td>\n", | |
" <td>H</td>\n", | |
" <td>7</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>31</th>\n", | |
" <td>H8</td>\n", | |
" <td>H</td>\n", | |
" <td>8</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>32</th>\n", | |
" <td>H9</td>\n", | |
" <td>H</td>\n", | |
" <td>9</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>33</th>\n", | |
" <td>H10</td>\n", | |
" <td>H</td>\n", | |
" <td>10</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>34</th>\n", | |
" <td>H11</td>\n", | |
" <td>H</td>\n", | |
" <td>11</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>35</th>\n", | |
" <td>H12</td>\n", | |
" <td>H</td>\n", | |
" <td>12</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" well_id column_letter row_number accession_id\n", | |
"0 A1 A 1 empty\n", | |
"1 A2 A 2 empty\n", | |
"2 A3 A 3 empty\n", | |
"3 A4 A 4 empty\n", | |
"4 A5 A 5 empty\n", | |
"5 A6 A 6 empty\n", | |
"6 A7 A 7 empty\n", | |
"7 A8 A 8 empty\n", | |
"8 A9 A 9 empty\n", | |
"9 A10 A 10 empty\n", | |
"10 A11 A 11 empty\n", | |
"11 A12 A 12 empty\n", | |
"12 B1 B 1 empty\n", | |
"13 B12 B 12 empty\n", | |
"14 C1 C 1 empty\n", | |
"15 C12 C 12 empty\n", | |
"16 D1 D 1 empty\n", | |
"17 D12 D 12 empty\n", | |
"18 E1 E 1 empty\n", | |
"19 E12 E 12 empty\n", | |
"20 F1 F 1 empty\n", | |
"21 F12 F 12 empty\n", | |
"22 G1 G 1 empty\n", | |
"23 G12 G 12 empty\n", | |
"24 H1 H 1 empty\n", | |
"25 H2 H 2 empty\n", | |
"26 H3 H 3 empty\n", | |
"27 H4 H 4 empty\n", | |
"28 H5 H 5 empty\n", | |
"29 H6 H 6 empty\n", | |
"30 H7 H 7 empty\n", | |
"31 H8 H 8 empty\n", | |
"32 H9 H 9 empty\n", | |
"33 H10 H 10 empty\n", | |
"34 H11 H 11 empty\n", | |
"35 H12 H 12 empty" | |
] | |
}, | |
"execution_count": 30, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df_unfilled" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Show created plates" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th>column_letter</th>\n", | |
" <th>A</th>\n", | |
" <th>B</th>\n", | |
" <th>C</th>\n", | |
" <th>D</th>\n", | |
" <th>E</th>\n", | |
" <th>F</th>\n", | |
" <th>G</th>\n", | |
" <th>H</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>row_number</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00000</td>\n", | |
" <td>A00010</td>\n", | |
" <td>A00020</td>\n", | |
" <td>A00030</td>\n", | |
" <td>A00040</td>\n", | |
" <td>A00050</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00001</td>\n", | |
" <td>A00011</td>\n", | |
" <td>A00021</td>\n", | |
" <td>A00031</td>\n", | |
" <td>A00041</td>\n", | |
" <td>A00051</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00002</td>\n", | |
" <td>A00012</td>\n", | |
" <td>A00022</td>\n", | |
" <td>A00032</td>\n", | |
" <td>A00042</td>\n", | |
" <td>A00052</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00003</td>\n", | |
" <td>A00013</td>\n", | |
" <td>A00023</td>\n", | |
" <td>A00033</td>\n", | |
" <td>A00043</td>\n", | |
" <td>A00053</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00004</td>\n", | |
" <td>A00014</td>\n", | |
" <td>A00024</td>\n", | |
" <td>A00034</td>\n", | |
" <td>A00044</td>\n", | |
" <td>A00054</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00005</td>\n", | |
" <td>A00015</td>\n", | |
" <td>A00025</td>\n", | |
" <td>A00035</td>\n", | |
" <td>A00045</td>\n", | |
" <td>A00055</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00006</td>\n", | |
" <td>A00016</td>\n", | |
" <td>A00026</td>\n", | |
" <td>A00036</td>\n", | |
" <td>A00046</td>\n", | |
" <td>A00056</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00007</td>\n", | |
" <td>A00017</td>\n", | |
" <td>A00027</td>\n", | |
" <td>A00037</td>\n", | |
" <td>A00047</td>\n", | |
" <td>A00057</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00008</td>\n", | |
" <td>A00018</td>\n", | |
" <td>A00028</td>\n", | |
" <td>A00038</td>\n", | |
" <td>A00048</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00009</td>\n", | |
" <td>A00019</td>\n", | |
" <td>A00029</td>\n", | |
" <td>A00039</td>\n", | |
" <td>A00049</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th>column_letter</th>\n", | |
" <th>A</th>\n", | |
" <th>B</th>\n", | |
" <th>C</th>\n", | |
" <th>D</th>\n", | |
" <th>E</th>\n", | |
" <th>F</th>\n", | |
" <th>G</th>\n", | |
" <th>H</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>row_number</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00058</td>\n", | |
" <td>A00068</td>\n", | |
" <td>A00078</td>\n", | |
" <td>A00088</td>\n", | |
" <td>A00098</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00059</td>\n", | |
" <td>A00069</td>\n", | |
" <td>A00079</td>\n", | |
" <td>A00089</td>\n", | |
" <td>A00099</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00060</td>\n", | |
" <td>A00070</td>\n", | |
" <td>A00080</td>\n", | |
" <td>A00090</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00061</td>\n", | |
" <td>A00071</td>\n", | |
" <td>A00081</td>\n", | |
" <td>A00091</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00062</td>\n", | |
" <td>A00072</td>\n", | |
" <td>A00082</td>\n", | |
" <td>A00092</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00063</td>\n", | |
" <td>A00073</td>\n", | |
" <td>A00083</td>\n", | |
" <td>A00093</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00064</td>\n", | |
" <td>A00074</td>\n", | |
" <td>A00084</td>\n", | |
" <td>A00094</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00065</td>\n", | |
" <td>A00075</td>\n", | |
" <td>A00085</td>\n", | |
" <td>A00095</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00066</td>\n", | |
" <td>A00076</td>\n", | |
" <td>A00086</td>\n", | |
" <td>A00096</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>empty</td>\n", | |
" <td>A00067</td>\n", | |
" <td>A00077</td>\n", | |
" <td>A00087</td>\n", | |
" <td>A00097</td>\n", | |
" <td>None</td>\n", | |
" <td>None</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" <td>empty</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"for plate in plates_2d:\n", | |
" display(HTML(plate.to_html()))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"60" | |
] | |
}, | |
"execution_count": 32, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"len(well_ids_to_fill)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.10" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment