{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":91249,"databundleVersionId":11294684,"sourceType":"competition"}],"dockerImageVersionId":30918,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<div style=\"margin-bottom:10px;\">\n    <a style=\"display:inline-block; style=\"vertical-align:middle\" href=\"https://www.kaggle.com/stansy\"  target=\"_blank\">\n        <img style=\"border-radius:50%;height:20px;vertical-align:top;\" src=\"https://storage.googleapis.com/kaggle-avatars/thumbnails/103364-gr.jpg\" alt=\"stansy\" /> \n    </a>\n    <h1 style=\"display:inline-block; margin:0;\">Interactive Visualize Data Slices</h1>\n</div>\n<div style=\"color:Maroon;font-family:sans-serif;font-weight:600;\">    \n    <a style=\"margin-left:24px;color:Maroon;font-family:sans-serif;font-weight:600;text-decoration: underline;\" href =\"https://www.kaggle.com/competitions/byu-locating-bacterial-flagellar-motors-2025\">BYU - Locating Bacterial Flagellar Motors 2025</a>\n</div>","metadata":{}},{"cell_type":"code","source":"from os import path, listdir\nimport pandas as pd\nfrom ipywidgets import IntSlider, Layout, AppLayout, VBox\nfrom matplotlib import pyplot as plt\n%matplotlib widget\n\ndef ImageFiles(df, id, file_location='train'):\n    try:\n        assert any(df['tomo_id']==id), ['Invalid key name', id]\n        train_dir = path.join(DATA_DIR, file_location, id)\n        assert path.isdir(train_dir), ['The folder does not exist', train_dir]\n        image_files = [path.join(train_dir, f) for f in listdir(train_dir) if f.endswith('.jpg')]\n        assert image_files, ['The folder is empty', train_dir]\n        print('\\033[1;34mID:\\033[0;30m{} \\033[1;34mSize:\\033[0;30m{} \\033[1;34mPath:\\033[0;30m{}\\033[0;0m'.format(id, len(image_files), train_dir))\n        return sorted(image_files)\n    except AssertionError as e:\n        print(f'\\033[1;31m{e.args[0][0]}:\\033[0;0m', e.args[0][1])\n    except Exception as e:\n        print(f'\\033[1;31mError:\\033[0;0m', e)\n\ndef SliceView(image_files, tomo_id):\n    with plt.ioff():\n        fig = plt.figure(figsize=(8,8))\n        plt.axis('off')\n        fig.tight_layout(pad=0)\n        fig.canvas.header_visible = False\n        fig.canvas.footer_visible = False   \n        I = plt.imread(image_files[0]) \n        img = plt.imshow(I, cmap='gray')\n    def update(change):\n        I = plt.imread(image_files[change['new']-1]) \n        img.set_data(I)\n        fig.canvas.draw_idle()    \n    slider = IntSlider(value=1, min=1, max=len(image_files), description=tomo_id)\n    slider.layout = Layout(width='30%')\n    slider.style.handle_color='LimeGreen'\n    slider.observe(update, names='value')    \n    AppLayout(\n        center=fig.canvas,\n        footer=slider,\n        pane_heights=[0, 6, 1]\n    )\n    vbox = VBox([slider, fig.canvas])    \n    display(vbox)\n\ndef SampleStack(slices, rows=5, cols=5, start=1, step=1):\n    slices = slices[start:rows*cols*step+start:step]\n    stack = [[path.splitext(path.basename(f))[0], plt.imread(f)] for f in slices]\n    with plt.ioff():\n        sz = 8, 8*rows//cols+1\n        fig, axes = plt.subplots(rows, cols, figsize=sz, constrained_layout = True)        \n        fig.canvas.header_visible = False\n        fig.canvas.footer_visible = False\n        axes = axes.flatten()\n        for ax in axes:\n            ax.axis('off')    \n        for ax, (name, img) in zip(axes, stack):\n            ax.set_title(name) \n            ax.imshow(img,cmap='gray')\n    display(fig)\n\n\n\nDATA_DIR = '/kaggle/input/byu-locating-bacterial-flagellar-motors-2025'\nprint(listdir(DATA_DIR))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-09T18:08:28.285480Z","iopub.execute_input":"2025-03-09T18:08:28.285846Z","iopub.status.idle":"2025-03-09T18:08:29.766231Z","shell.execute_reply.started":"2025-03-09T18:08:28.285807Z","shell.execute_reply":"2025-03-09T18:08:29.764868Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"filename = path.join(DATA_DIR, 'train_labels.csv')\ntrain_labels = pd.read_csv(filename, index_col='row_id')\ndisplay(pd.concat([train_labels.head(3), train_labels.tail(3)]))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-09T18:08:29.767447Z","iopub.execute_input":"2025-03-09T18:08:29.767966Z","iopub.status.idle":"2025-03-09T18:08:29.832279Z","shell.execute_reply.started":"2025-03-09T18:08:29.767929Z","shell.execute_reply":"2025-03-09T18:08:29.831118Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tomo_id = 'tomo_00e047'\nimage_files = ImageFiles(train_labels, tomo_id)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-09T18:08:29.833313Z","iopub.execute_input":"2025-03-09T18:08:29.833669Z","iopub.status.idle":"2025-03-09T18:08:29.850265Z","shell.execute_reply.started":"2025-03-09T18:08:29.833627Z","shell.execute_reply":"2025-03-09T18:08:29.848525Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SampleStack(image_files, start=5, step=14)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-09T18:08:29.852284Z","iopub.execute_input":"2025-03-09T18:08:29.852816Z","iopub.status.idle":"2025-03-09T18:08:34.112430Z","shell.execute_reply.started":"2025-03-09T18:08:29.852770Z","shell.execute_reply":"2025-03-09T18:08:34.111124Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SliceView(image_files, tomo_id)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-09T18:08:34.113564Z","iopub.execute_input":"2025-03-09T18:08:34.113875Z","iopub.status.idle":"2025-03-09T18:08:34.191558Z","shell.execute_reply.started":"2025-03-09T18:08:34.113846Z","shell.execute_reply":"2025-03-09T18:08:34.190016Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}