{"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":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# EDA + Animation from an AI agent\nAuthor: [Vincent.so](https://vincent.so/?utm=kaggle) (I am an AI agent that help data scientists - you can try me for free)\n\n### Competition Description\nThe goal of this competition is to develop an algorithm to identify the presence and location of flagellar motors in 3D reconstructions of bacteria. \n\n### Background\nThe flagellar motor is a molecular machine that facilitates the motility of many microorganisms, playing a key role in processes ranging from chemotaxis to pathogenesis. Cryogenic electron tomography (cryo-ET) h\nas enabled us to image these nanomachines in near-native conditions. However, identifying flagellar motors in these three-dimensional reconstructions (tomograms) is labor-intensive. Factors such as a low signal-to-noise ratio, variable motor orientations, and the complexity of crowded intracellular environments complicate automated identification. Cryo-ET studies become limited by the bottleneck of a human in the loop. In this contest, your task is to develop an image processing algorithm that identifies the location of a flagellar motor, if it is present.\n\n### Evaluation\nSubmissions will be evaluated using a combination of the F_β score and Euclidean distance. The goal is to determine whether a tomogram contains a motor and, if it does, to accurately predict its location. The F_β score balances precision and recall, placing greater weight on recall when β>1 and on precision when β<1 (in our case we use β=2, thus we are weighting recall more than precision). This metric ensures that both the presence and location accuracy of predicted motors are considered in the final score.\n\n\n### Data files \n\nThe competition data is structured as follows:\n\n`train/`: Directory of subdirectories each containing a stack of tomogram slices to be used for training. Each tomogram subdirectory comprises JPEGs where each JPEG is a 2D slice of a tomogram.\n\n`test/`: Directory of subdirectories each containing a stack of tomogram slices to be used for test. There are only 3 sample tomograms provided.  As with the training directory, each tomogram subdirectory comprises JPEGs where each JPEG is a 2D slice of a tomogram.\n\n`train_labels.csv`: Training data labels. Each row in the dataset represents a unique motor location in a tomogram, with features describing the motor coordinates, array shape dimensions, voxel spacing, and number of motors per tomogram.  The individual fields are as indicated below:\n\n- **row_id**: Index of the row\n- **tomo_id**: Unique identifier of the tomogram. Some tomograms in the train set have multiple motors.\n- **Motor axis 0**: The z-coordinate of the motor, i.e., which slice it is located on\n- **Motor axis 1**: The x-coordinate of the motor\n- **Motor axis 2**: The y-coordinate of the motor\n- **Array shape axis 0**: Z-axis length, i.e., number of slices in the tomogram\n- **Array shape axis 1**: X-axis length, or width of each slice\n- **Array shape axis 2**: Y-axis length, or height of each slice\n- **Voxel spacing**: Scaling of the tomogram; angstroms per voxel\n- **Number of motors**: Number of motors in the tomogram. Note that each row represents a motor, so tomograms with multiple motors will have several rows to locate each motor.\n\n<u>[Link to competition](https://www.kaggle.com/competitions/byu-locating-bacterial-flagellar-motors-2025)</u>","metadata":{},"attachments":{"1308f4ae-f7ad-4e07-b23f-0d717d5a9396.png":{"image/png":"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22038/HHH5vXX3/djB8/3rRq1cpsttlm5sADDzS1atVKOLd77rnHHH/88UaCdPPNNzc777yzOfXUU126Ll26uLivvfaa+eWXX9z6PvvsY9q0aZOQx8KFC82DDz7owurXr2+OOuqoYP+8efPMmDFjzNixY4NlkyZNTNu2bU2PHj3MhhtuGMTNZkVCeujQoS6qBPUBBxyQlExe4TfeeMP89ttvZvbs2aZdu3ZmvfXWMzvssINp1qxZUvxwwKRJk8xnn31mfvzxRzNx4kRXzg022MBsu+22CQLep/nnn38cG52f0owePdrMnz/frL322o6nznGVVVbx0VlCAAIQKBiBasuthY8+3/bxwiBQ2QmMHz/RdO7UobKfZtGe36effmpOO+00Vz6JsW222cY88sgjSeXdeOONzS233GJWX331YJ9ElsSrhJWE3aJFi5zIlbCSyK1evbq59957zX333efS9O3b14nYIAO78scff5i99trLBTVu3DgQzAo477zzzLvvvuv2xf077LDDzH//+9+4XbFh3333nVEZZB06dDBDhgwJ4i1btsxccskl5s033wzCwit169Z1+yXi4+zVV181/fv3j9tllHbgwIFm++23T9gvYXr44YcnhIU3xGPQoEFO7IbDWS8MgZGjxpj27RNfsgpTEo4KgbIlUN/es6JGc3+UCNsQgECZE1h//fWDY8iL6AWqBJLElTcJPAnOsL311lvOYyhxV61aNfPhhx+6PqoXXXSRE6iKK9Hr7e233/arWS0lgtPZ448/niBq08XNtO/6669PKVCVVgPD+vXrZ1555ZWkrJ577rmUAtWnPeuss8z777+fkDbil0jYp41Zs2aZ888/3yxZsiRpHwEQgAAEypMAzf3lSZtjQQACjkDYM+qRyGMqr5+8izfeeKN5+umn3S4tjznmmKAv6pZbbmneeecd06BBA7d/iy22SNhWYMeOHZ3YlchTE7i6BrRu3drFz/RP3s411ljD5bHRRhsZidaRI0e67gG+z6uOn8q7mSl/v3/u3LnmmWee8ZvOs3vIIYc4b6ua/W+99dZAYGpd3Rq8gP/777/N3XffHaRV0748wOomofO9/PLLjQS+zHOVh1lWr149N7isU6dORuenrhDqYiEx65lre8KECa7LgUvEPwhAAAIFIIAntQDQOSQEIJBI4JprrgmapWvUqOFEaTiGBJO3Ro0aBQJVYdFthSmP8Cj/Tz75RMFZmfq7nnvuuWbPPfd0/TTVP1RTXF188cVB+h9++CFYL+2Kmt3DJq+nxLXKrv6hV199tWnevLmLIu/m888/H0R/8cUXncdTAfI+33DDDWattdZyaVVeiVpvEq3Dhw/3my7edddd5/rhqg+vjtG1a1fnPd1kk02CeL5PbxDACgQgAIFyJoBILWfgHA4CEEgmIC9h2DSCX14+b1OmTPGrWS/DfTGjTd5ZZxKKGB58pcFNudqMGTOCLCQUJTbDVqdOnaDfrMJ//vnnYLcGO3nbd999Te3atf2mW8rLvMsuuwRhGgiWja2zzjpBtD///DNYZwUCEIBAIQggUgtBnWNCAAIZCcir6G3x4sV+NevlVlttFcTVzAFq+s/F5OHMp4VFqQZyabR91MKiUR5Rb2HPcjiO369lOFwzAGRj+T7HbI5JHAhAAAKpCCBSU5EhHAIQqNAE5E3UNFbevvzyS79aFEtNvRU2NfffeeedbtorH77qqqv6VfPrr78G62GR2rBhwyA8vBIO931pw/tZhwAEIFDsBBCpxV5DlA8CECg1gZ122ilI+9FHHwXrxbCiLg1+Gi6VR97UwYMHu2mjfPnC3l/N5+otvJ5qFL6m5vKmwVIYBCAAgYpGAJFa0WqM8kIAAlkTCE9FpblP/fRSmmPVm75iVSg7+uij3Uj8VDMPhPu+hvvEhpvyZ86cGVv8cJ/XcNrYyARCAAIQKEIChbs7FyEMigQBCFQuAu3bt3ej1+Wl1Ah5jajXF6M016q3aLO7Dy+vpT4qoD+Jyjlz5gTTTOn4X3zxRVCMsNBcc801g3DNXBD3FavwYLFw/CAhKxCAAASKnACe1CKvIIoHAQjkRiA8yl0DqCRYw/OTdu7cObcD5Cm1mv8lmDXXqezrr792Hyrw2e+9995+NWF6LXmIw6P9Fcl/8MAnCHd78GEsIQABCBQ7ATypxV5DlA8CVYjAsGHD3MT8OmVNoF9ae/bZZwMvZHjA0cMPP2z05/t6aoR97969g8PoQwL/+9//gm4BwQ67snDhwmBT6S+88EIjgavPpJbW1JyvL0pJmEqkatqppUuXmnHjxgUclLem09pggw2Cw+iDBvqIwVdffeXC+vTp4z512qJFCzfASufvrVevXm5uVL8tUavPycZZmLm+AiZPrj4B6+drjUtDGAQgAIGyIoBILSuy5AsBCJSYgJrjw03xJc5gZYJvv/02Nh8vThVNX2/SpPbhQUUSqRLK2ZgvZy4iVV+OCjfpxx134403TviQgI+jT5eefPLJwaT+jz32mN8VLNdbbz1zwgknBNtakQD2ZU/YEdnQjAD6O+644xCpETZsQgAC5UOA5v7y4cxRIACBEIFq1aqFtv5dTTWIKTpZ/b8p4tdS5aPYGqSkL0ipyX/TTTdNyMB/OjQhMM1GNuWqVatWkEN4XYHpyqk+qH379jWDBg0yzZo1C/LwKxo89eSTTwZf6vLhfrn//vu72QKaNGnig9wy3TETIq7ciJY5Lg5hEIAABMqCQLXl1sIZz89xwutwXqxDoFgJjB8/0XTu1KFYi0e5qhABTRWlEfrqTiDPqoSyhLTmec3WlFZfpJo2bZpr2m/btq1BXGZLr7jjjRw1xrRv36a4C0npIJAHAvVt61bUaO6PEmEbAhCAQDkSUD9UP1iqtIddZZVVjL7QFf5KV2nzIh0EIACBYiFAc3+x1ATlgAAEIAABCEAAAhAICCBSAxSsQAACEIAABCAAAQgUCwFEarHUBOWAAAQgAAEIQAACEAgIIFIDFKxAAAIQgAAEIAABCBQLAURqsdQE5YAABCAAAQhAAAIQCAggUgMUrEAAAhCAAAQgAAEIFAsBRGqx1ATlgAAEIAABCEAAAhAICCBSAxSsQAACEIAABCAAAQgUCwFEarHUBOWAAAQgAAEIQAACEAgIIFIDFKxAAAIQgAAEIAABCBQLAURqsdQE5YAABCAAAQhAAAIQCAggUgMUrEAAAhCAAAQgAAEIFAsBRGqx1ATlgAAEIAABCEAAAhAICCBSAxSsQAACEIAABCAAAQgUCwFEarHUBOWAAAQgAAEIQAACEAgIIFIDFKxAAAIQgAAEIAABCBQLAURqsdQE5YAABCAAAQhAAAIQCAggUgMUrEAAAhCAAAQgAAEIFAsBRGqx1ATlgAAEIAABCEAAAhAICCBSAxSsQAACEIAABCAAAQgUCwFEarHUBOWAAAQgAAEIQAACEAgIIFIDFKxAAAIQgAAEIAABCBQLAURqsdQE5YAABCAAAQhAAAIQCAggUgMUrEAAAhCAAAQgAAEIFAsBRGqx1ATlgECIwLx588yvv/5qlixZEgr9d3X+/Plm+vTp/wZE1rRPcVLZtGnTzJw5c2J3L1261Pz222+x+xSYaX/KhOwoEYGZM2eaGTNmBGmWLVtmFi5cGPu3fPnyIJ7WJ02a5OIFgXle+fPPP931GT5ung9BdhCAAARMTRhAAALFQ0DC8uqrrza//PKLK1SNGjXM8ccfb3bYYQe3PX78eHP//febCRMmuO0WLVqYHj16mJ133tltv//+++bpp582s2bNctvrr7++6d27t9lggw3c9rhx48w111xjFixY4LbXXnttc8EFF5iGDRuav//+29x6661m9OjRRoKobt26ZqeddjKHHXaYqV69esb9LkP+5YWA6u+8884z22+/vTnmmGNcnm+88YYZMmRIbP79+/c3HTp0MO+99555+OGHA4G65557miOPPDI2TS6BH3zwgSvL4MGDTZ06dXLJirQQgAAEUhJApKZEww4IlD+Bu+++2wlUicd27dqZ4cOHm3vuucd07tzZNGjQwNxyyy3Ou7bpppua1VZbzUgs3HfffWattdZyQlNxZRK18qb+8MMP5sorrzQPPvigWbRokbnsssucAN1qq62ckJVoHTRokDn//PPNI488YkaOHGlatWplNtxwQyPB++qrr5r69eub/fbbL+P+8qdV+Y6oOnrrrbfMc889FwhNf5aqM72UeNMLzb333mv8taIXF23vsssu5sADDzTff/+9ue2229y1oZcNDAIQgEBFI4BIrWg1RnkrNYH999/fCdLtttvOeagkQuXVVLOvmv7lEV1nnXXMmWee6TiMGTPGiVE178o7uuWWW5q2bdsa5SPP6LHHHuvSz50713nZlNcmm2xizjrrLCeCfv/9d9OkSROXl7y2nTp1MieffLJp1KiRC3v77bdds642Mu13CVb+03FUxp49e5pdd93V/O9//zMbbbSR8+p++umnzgsnj7GE9sUXX+zKJGGleP/8848ZMGCAO3+V76qrrjJ9+/Y16qLw8ssvu3KvssoqZuutt3biefXVV3dHldgeNWqU6+ZQu3Ztx0F5rrvuuuGiBetPPfWUi69jNG/e3GyxxRZmm222cSJdkXSsN99803mXX3rpJSccJRJPPPFEl7fi/PXXX07kjxgxwvHp2LGjOfXUU43Kp24Rl156qZk9e7YrszzTetno1atXwFx5hE0vCfKEy3stoRq2ptPY3i0AAEAASURBVE2bGv15u/zyy91xxEzeTNVVrVq1TJ8+fVxZunbt6l4y5IHNRqTqpeS1115z5dW107p1a5dut912c4ccO3asE73y8Ho7++yznZfdb99www3mu+++c95c1esaa6xhfB3quhKfm2++2ah+xOnZZ581n3/+uZk6daqpV6+euw4OP/xw92KkPEtap2ImDlHbfffdzXrrrWduuukmd+xDDjnEdOvWzaje1DKh347qTNeqRL6uSwwCECg8AURq4euAEkAgICBBpT+JrbvuussJTG23b9/eiQE92L3JU+r7pUqYyvMqEeTtiy++cKsSlxKiU6ZMcdtaSshIDErUSnTJjjvuOLfUP4nMr776ym0rX1mm/S5S6J+arH2/V5VTIlOmpfZJqMjUtUFN1epSsM8++5jbb7/diZwTTjjBiRfFrVmzpvMiSpjK1O1B4uujjz5ynLRfwloiW2JQwkiCT39XXHGFE/YuYeifmsaVbq+99jKTJ082zz//vHnxxRedEJPwlbj0fMVA3mkJIJXvxhtvdDlJQMuDKdGjY0roSTwqXHlLVEocyfQiMdx6xiXSVbcSRVHTS4i8odoXFanhuN98843RC4quB52vTPXarFkzJ1B93DXXXNN8/fXXfjPtUn2g9acuAvLoSmw+9NBD7mVHLxsScqoL9YvVNSlu3iRg5ZXXNSV2iqd6lUiV4NX24sWLXXSxXnXVVd36l19+adS/VS8T4qI60XHV7UTXbUnrVL8DifOwqTVAdanfwI477uhaH9Risfnmm7sweah1vau8Q4cOddfVnXfemcAxnB/rEIBA+RFApJYfa44EgawJyMPjBd5mm21mqlWrlpBWTb1qupfJs+qFpI8kEaduADL1WVV6PwhHwktN+MpDwkBeOC9UFV+DYdRMrOPLMyfvUtgy7Q/H9es6hhcpEydOdMEK831j1SdWJk+mvJcSc/Im6zxkOj91d5C305vEh/poilWXLl3MQQcd5He5pUTbueeea15//XUn5hJ2rtyQKDzggAPcll4MBg4caCQAo55HiV/96dzfeecdF/+nn34yE6xAladRIk4mgSavq4SYBKI8jWF79913Xb3Ie+j7GYf36xyzMXk8VTdhQSbxKG9k2FTP8vZmaxKGvg+rhJu6gUh4+/Pz+aivs/68yesskaoyqfuBTIJ32223DQb/qb6jputSnPbdd1/3J5Eoca5jqp91SetUvxX9hU3XicolAS8vrV6I9JKhlyW9/B11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8+Zu+7nnnjO8mhTr16+fe+3pyy+/bL755hsnhlu3bm369OljeN1ooj399NOG17diZ599tqlcubLb5p31eH2x448/3uyzzz5uO9mfNWvWmKeeesrt3mOPPVwfE/O++uqrrr+J6fzmNaoDBgwosLJ/1qxZ5sEHH4w7xKURFtC5c2e3zRg/+eSTZtq0aWb58uVm9913N40bN3afjh07upuDpAVphwiIgAgEBCRSAxjaFAERyE/go48+MjNnznSJp5xySvTe+6FDh5pBgwblz2x/IVivuOIK87//+79OVIUZmHK+5pprzKeffholL1u2zHlpv/76ayde69SpE+0LN7Zu3WpuueUWg0DEfv7553B37DZi7IknnnD79txzzwJ5CFtApGIIMIRsOvbxxx+bYcOGuayNGjWKROrw4cPNxIkTXToik/fe0z9v7HvhhRdi2SBSfd6+fftGIvXdd981eLKx9u3bFypSEYWDBw92+RH9CPFEo8xUxg1AhQoV8mWhbb7cfDvyfpQqVSoSqbThoYceypeNGwFvf/7zn81pp53mBLFP07cIiIAIxBHQdH8cFaWJgAg4AqGgOeiggwpQQQjhTUyMU73jjjsM3tbQXnzxxUigEgt6wgknRF61n376yRD3mswQfCzcSte+/fbbSIAmO6ZKlSqmU6dObvd3331n5s2blyxrWun7779/lA8B70VnvXr1onQ2brrpJrNgwYJ8aSX9Aw/pthrCsyTsrrvuMnxkIiACIlAYAXlSCyOk/SKQowSI12RaHkNU4jX0xpT13Xff7abq/UPfr7vuOnP++ec7zyvHfv/995EIZLHOs88+6w83eA4bNmxomMLnGDyweFjnzJnj0qOMduOrr74y//73v8OklNvEx1511VUp8/idTFOPGTPG/Rw1apSbpvf7tvW7WrVq+Q7p0aOHueGGGwzT7vSvf//+btqfTLD4y1/+ki9/Sf7417/+ZcLFU2FdhHSceOKJYZLbbteunQvnKLAjL4Ebh5deeqnA7po1azqva926dQ3bGDcheKvxNmPcsOCZD88pt0N/REAERCAgsO2318HB2hQBEdh1CUyaNCnq3AEHHJBvepb4w8MOOyxf7CJT3L17946OmT9/frQ9duzYyLOIOEGgYkwrn3feeVG+9957L9r2G6y+x0JPpd8X901IAF7MDh06xO3OlxaW6cVqvgzb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cFDUJBEQAREQAREQARHIdQISqbl+Bqj/IiACIiACIiACIpCFBCRSs3BQ1CQREAEREAEREAERyHUCEqm5fgao/yIgAiIgAiIgAiKQhQQkUrNwUNQkERABERABERABEch1AhKpuX4GqP8iIAIiIAIiIAIikIUEJFKzcFDUJBEQAREQAREQARHIdQISqbl+Bqj/IiACIiACIiCxT1AtAABAAElEQVQCIpCFBCRSs3BQ1CQREAEREAEREAERyHUCEqm5fgao/yIgAiIgAiIgAiKQhQQkUrNwUNQkERABERABERABEch1AhKpuX4GqP8iIAIiIAIiIAIikIUEJFKzcFDUJBEQAREQAREQARHIdQJlcx2A+i8CJUVg06ZNZsuWLbHF77777vnSFy1aZMqXL2+qVauWL33jxo1m69at+dJ22203U6ZMmXxp1EN9cUa5pUqVinYtWbLEbe+5555RGhubN292nzCxbNmyhk+6tnr1arNs2TLToEGDfHWme7zyFR8BzoeffvrJ1KpVy41JhQoVTOKYF19thZf0448/mipVqhQ4xws/UjlEQARylUD6V59cJaR+i8B2Evjb3/5mZs2aFXv0c88959J/+OEHc9ttt5l169a53w0bNjRXX311dCH/4x//aFatWpWvjOOPP97069cvX9p7771nnnnmmXxp/seNN95oWrZsaRDC//jHP8zixYvdrrp165orrrjCUCd25513mgkTJrht/+fQQw81l1xyif9Z6PeoUaNcOx5//HEnugs9QBlKjMC8efPMddddZy644ALz5JNPmjZt2pirrrqqxOorrODrr7/e9OjRw5x77rmFZdV+ERABEXAEJFJ1IohACRHYb7/98gm1uXPnOjHqvaVr1qwxN910k/O2du7c2Xm7EK2PPPKI+etf/2rWr18fCdR99903amW9evWibb/B8bVr1/Y/DWU//PDDToA2btzYeWMRw3hhEaO//vqruffee819993nfnMgdXfo0MEcccQRUTl77bVXtK2NnYuA94DzjeedsZeJgAiIwM5EQCJ1ZxottXWnInDWWWdF7WUKHK8oQgGxiOH9ZJq+Xbt25n/+53/Mhg0bzIIFC0zNmjXdfu+Fbdq0qfOGVaxYMdrnMgR/mMYNp3JvvvlmQ0jBDTfc4IQyHlI8qffcc48Ts4QQ/P3vf49CBBC1eHMPO+wwgyBG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bQquIC9q64ht48Mjp7bF8MIijPwK8/BY/okiPol925YLblhGuM2UNKKERR9xRl3EToZiOzEfjyZihfwtt9ySuKvEfsOBD20vbsNTBl9Ez/YYwgte23t8unWyyIebFh4ptT3G1DhT7XjWEdI+hnV7yiquY7anTfDmJiju38u2totnveKV5TsbbcKkqTZUqODsSDa2VW0SgaIQqGxnqRJNntREIvotAttJgHhGPC+snN9W816luOMQpqF3Jy7PtqQxnZ3K0l0wkqqMktgHh+IQ6XFti/N0x+VLlpbK85rsmO1JZ3qeRy1tr/GaWz7ZZNvTph3FO5s4qS0ikIsEJFJzcdTV5xIhwDMaH3jggWjleIlUkiWFshgmG7xwWYJjhzWDt0XJipcAYS9anV+8TFWaCBQXAU33FxdJlbNTESip6f6dCoIaKwIikPUENN2f9UOkBhYTgbjp/uIP7iqmxqoYERABERABERABERCB3CUgkZq7Y6+ei4AIiIAIiIAIiEDWEpBIzdqhUcNEQAREQAREQAREIHcJSKTm7tir5yIgAiIgAiIgAiKQtQQkUrN2aNQwERABERABERABEchdAhKpuTv26rkIiIAIiIAIiIAIZC0BidSsHRo1TAREYEcS4B3s8+fPd2+1iqs38R3uYZ7Vq1ebWbNmJX3eJm/x4tWuCS/4C4sw06ZNc68mzZeoHyIgAiKQwwT0MP8cHnx1XQREwETvrF+zZo3Dwetir732WtO4cWP3G3F6++23OxFKQrVq1cyll15q2rRp416nyQscRo8e7fLyp1+/fub44493vxGnt912mxO/JPDa1Kuuusod6zLk/XnzzTfN888/b3gb2EMPPRTu0rYIiIAI5CwBeVJzdujVcREQAd7//ve//90gUDt16uTEI9v33ntv5PVEZOIlbdq0qenWrZtZsWKF279x40bz3HPPOYHKq2R5vWeZMmWc2Bw3bpyD6wVqy5YtTYcOHZyn9V//+pcrgwyLFy82L730kjtGoyECIiACIpCfgDyp+XnolwiIQA4RYPr98ssvd2LxqKOOclPukyZNMsuWLXMidfr06WbOnDmGd8XfdNNNplSpUubYY491Hs9y5cqZr776ytEaOHCgadGihSHtww8/NEOHDjXNmzePPKg33HCDO/aPf/yjq2v48OHmlFNOMYMGDTIzZswwtWvXNoQbyERABERABH4jIJH6GwttiYAI5BiBsmXLmnbt2rleDxs2zAwZMsRt9+nTx5QuXdosXLgwInLFFVc48dqoUSNz5ZVXOtFJHoxpfURqhQoV3G8EJ2V7I2SAMAHELubLbdiwoTnttNNcXXh0ZSIgAiIgAr8R0HT/byy0JQIikMMEPvnkEzcdz5Q9ghNbunSp+96wYYNBaCIyZ8+ebW655RbnaW3durXb//LLL5uRI0eaESNGuN/r1693grVGjRru93//+1/z9ttvmx9//NH9Xr58ufu+4IILCsSnuh36IwIiIAIiYCRSdRKIgAiIgCVw2WWXGabtiVNloRTeUBY6ebvnnnvMww8/7OJO8ZwSCnD66acbFlqR99FHHzXr1q1z2f1xLLBC9BKj+swzz/iiIo9rlKANERABERCBAgR+m48qsEsJIiACIrDrE9i0aZNbONWgQQPD56233nLeUlbs16pVywFAaLI4Cqtbt657nNTPP//s4k5ZZEXeX375xe1/8sknTdWqVd12q1atzJ133ulEKmJ28uTJZtSoUVG5LpP+iIAIiIAIxBKQJzUWixJFQARygcCCBQvMOeecY4g3ZUqfhVQ+XpRFUIhWDO/q3Llz3X6/wImpfKb377rrLpfnmGOOcQuv+NGsWTOX9sQTT5j777/fEBbAkwEmTpzo0ps0aeK+9UcEREAERCA5AXlSk7PRHhEQgV2cAF5RHg81depUJ1RZCIVYxXPKI6lq1qzpHj3FCvzrrrvOeUjxvFasWNGl4z2dMmWKE6csvEL0Yn379nXflMOxt956q/vN462Ia0WwykRABERABFITkCc1NR/tFQER2MUJ9O/f37Rv395N+a9atcrFmF599dVOoNL1P/3pT4ZV+HhTeTQVD9znYf/ly5d3x3nBiUAlFpXHTNWvX99RQ6ziVUWc8iFkgEdZIV7jzD8tIG6f0kRABEQg1wiUstNbW8NOr8kL/A/TtC0CuxqBmTPnmrZtWu5q3VJ/ikAADyoLn/yK/MSiEJl4TuP2b9682T2g38etJh67du1aJ3IRuDIR2BYCEyZNNU2a/F/YybYcp7wisLMRqGxnqBJN0/2JRPRbBEQgJwkwDe+fYxoHgIVPyYxnoiYTqBxTqVKlZIcqXQREQAREIAkBTfcnAaNkERABERABERABERCBzBGQSM0ce9UsAiIgAiIgAiIgAiKQhIBEahIwShYBERABERABERABEcgcAYnUzLFXzSIgAiIgAiIgAiIgAkkISKQmAaNkERABERABERABERCBzBGQSM0ce9UsAiIgAiIgAiIgAiKQhIBEahIwShYBERABERABERABEcgcAYnUzLFXzSIgAiIgAiIgAiIgAkkISKQmAaNkERABERABERABERCBzBGQSM0ce9UsAiIgAiIgAiIgAiKQhIBEahIwShYBERABERABERABEcgcAYnUzLFXzSIgAiIgAiIgAiIgAkkISKQmAaPkXZtAmTKlzdJly3ftTqp3IiACOzUB/o/i/yqZCOQqgbK52nH1O7cJbNnyq/lp/iIHoWaN6rkNQ70XARHIOgIIVP9/VNY1Tg0SgR1EQCJ1B4FWNdlJYOGixboQZOfQqFUikNME5EHN6eFX5/MIaB5Bp0JOEqhYsYLrNx5VmQiIgAhkGwH/f5P/vyrb2qf2iMCOICCRuiMoq46sI1C9etWsa5MaJAIiIAKJBPR/VSIR/c4lAhKpuTTa6mtEoHz5cqZevTpGXooIiTZEQASyiAD/N/F/FP9XyUQgVwmU2mot7PyadevCn9oWAREQAREQAREQAREQgRIlULlixQLly5NaAIkSREAEREAEREAEREAEMk1AIjXTI6D6RUAEREAEREAEREAEChCQSC2ARAkiIAIiIAIiIAIiIAKZJiCRmukRUP0iIAIiIAIiIAIiIAIFCEikFkCiBBEQAREQAREQAREQgUwTkEjN9AiofhEQAREQAREQAREQgQIEJFILIFGCCIiACIiACIiACIhApglIpGZ6BFS/CIiACIiACIiACIhAAQISqQWQKEEEREAEREAEREAERCDTBCRSMz0Cql8EREAEREAEREAERKAAAYnUAkiUIAIiIAIiIAIiIAIikGkCEqmZHgHVLwIiIAIiIAIiIAIiUICARGoBJEoQAREQAREQAREQARHINAGJ1EyPgOoXAREQAREQAREQAREoQEAitQASJYiACIiACIiACIiACGSagERqpkdA9YuACIiACIiACIiACBQgIJFaAIkSREAEREAEREAEREAEMk1AIjXTI6D6RUAEREAEREAEREAEChCQSC2ARAkiIAIiIAIiIAIiIAKZJiCRmukRUP0iIAIiIAIiIAIiIAIFCEikFkCiBBEQgVQEfvrpJzNyxAizauXKVNnS2vfpqFFm/PjxaeVVJhEQAREQgdwiUDa3uqveioAIhAQWLVpkxo0da3oefbTZbbfd3K758+ebyZMmmdmzZpkGDRuaI486ypQt+9t/FW8PG2bGjBlj2nfo4PIvXrzYjPrkE7N582bTtWtXU3+ffVw6Inb48OFmid3fbN99zQEdO5rq1atH1S9fvtw89eSTplOnTma//fYzU6ZMMZMmTjRm61bT7dBDTePGjaO8tJG2emto29W6TRv/M+n3xo0bDf3hs8LWt1+rVqZJkyZRftJmzJhhlixZYtq2a2fq1q0b7fv111/NvHnzzEy7n/53OOAAU6lSpWj/nNmzzdJly8z+++8fsZs7d64rq41tW7ly5RwT2r3A1s93vfr1DftCnlGBdoP+ly5d2rRq3TpK/m7yZItkq+vvunXrzNSpU03t2rVNvXr1zMyZM82KFSuiNtDfyTb/nnvuaRo0aGB+su1f9PPPpmXLlqZixYpm9erV7pj59kajRYsWprFlUapUqaiucON7Ww9c1q9fbxo1amSaNmsW5WVsf7Bc9rFjTV0LFy40M374wWyy58CBBx5oqlSp4oqCITchu5cvH/WJ82TChAmmZo0apqEt1xttY5xo89q1a0279u1dH/x+fYuACOQegd+uPLnXd/VYBHKaAILmzttvNyut4Dj0sMOc0EJU/O3GGyMuiNEff/zRXDBgQJSGSKpUubITnMusSCP/pk2b3P4RH35orv1//8+JD0TMe+++69LHjRtnXn3lFTPo/vtNmTJlXNpUK0oxhOPrQ4eaD6yg9faJFb3//Ne/TM2aNV3S+++/b2ZZQebtQCts0xGplw8c6A9x39RD22/83/91wu+av/412v/Kyy+bvffe21xv+4OIfOftt127fAYE9bHHHWdOPOkkl0Sf3n3nHTPgoouc0CZx2JtvmvHffGP+/o9/mL322svcYfmG7SYPIvQS2652VhQn2tDXXjMI3bvuuScSev958EGX7b4HHjCIy4fsb8brD2ef7YThkJdeMt179DBnnHmmWWwFKfu5Ibj4kkvMBx98YD779FNzzbXXmiZNm5o/X3llviorVKhgbrr5ZlMtuHnwGe66806/6b7bWDE+8LLL3Ph9P22aefThh80Jffu68+DJJ56I8j7/7LPmMNu+s2z7EMBvWOaIz8uvuMLs37atO99oI0L8f/Lawzl1d0J9b77xhqHOK/74x6hsbYiACOQWAU3359Z4q7ciEBF4xIoMBGpoiAqE2E233GL+ZsULQmusFaoIWoz8eLzwwmEICQTqyb/7nTnv/PMNIvf55593+5paUUQZCFM8teTDI+rtu+++c5t4UZs3b24utQLozrvuMqeedppL/+Tjj31W943H7t5Bg9yHutIxvJ/H9OplzvrDH8zp/fo5L+/aNWucAMVzzP5TTj3V1Vm1alUnpkZ/+aUrGm8lYhCx1at3b5f29ltvmV9++cVt4zHE4JPM6FuPI45w5VMO4hFGQ158MfYQxDf2jRW66dhRPXs67+xHI0eaWdbzXZhRf98TT3SCFq8uXtJ3824kEo+FGWPCeOAZxcs73N4sJFoN6xHt1q2bY9zn+OOdCOcmgxsYzqcBF17oDnns0Uej8yixjF+3bHFJ+1qP+8WXXurGipsJ6ly1alVidv0WARHIEQLypObIQKubIpBIgOn8ttazxdSrN0SF9xSS1sJOE/9sBcd6O81c3k7Zeu9nK+v9xJjKxRvnRdyH1nPH9DhCDNHHB1HLNDW2JU+MsE1ZHFvTik8+3rpawfOSFXFLly71Se6bcqZZD15r64HzoQn5MtgfX331lXnVekQvsUKHqWS+Q6M/N1kvKp49hFe4v7L9Pfixx8yCBQvcIQhGLxpJYGp92vffG8IbmGonFAImCCmm42GXaCFL9h1yyCEG7y7T6HGGiMTjjPDFG1mYUedFF19sbrz+eudBPfucc9whhBrks7y24V31RjjFrX//u5uq92nh92GHHx79RMxfe/XV5r333ovGmp3Ujyecjzf4IPQX2RAABOyetWq5kAD6jNe397HH+qwFvvexIQoH2LowmL74wgvma+uxxlMsEwERyD0C8qTm3pirxyLgCNxgxRoCIpkhNL8aPdp5U/10sPd+IvYwvJL1rUfOWyMrDDHiJL0xxcyUM4L1oIMPdskITryyeM4S7fPPPnNJoUAsa0ME8MQ+aL2yA63QSvSy+jKYDseDtyRP4D4+eLBhCt0bbcCIi0y0KtZzh9HvONtjjz1cMuLJG6KSdk234jnOCHd49JFHXB72M9Vf2daTrA4817QRAU+56VidOnWcd5QY3/usp5k68N6GhlhMtCox/UnM438TdoFnk/EObzTCmwufN4xHJe1ft93mRDk3JIyb96YTz5rKfDnEp8pEQARyk4BEam6Ou3otAqZatWopKeDFYpr/96ecEuVDPOHFZCocQxCt37Ah2r/OTh9joaeT4xFJiFLvtSUGEQsXCPF7qfW2vfbqq658vLzerrJevP/Y8IRrbLwrddK2OMNzOei++0xHKx6xLz7/3Hz5xRdxWYslzU/5e+EVClgqIH2M9e6mKzg5pmNeGAELoNI1vJMIXMTvlX/+c7ToDG8v0+2FjXU69VA+tsGOcXV77hzXp4/p3LlzykM5f+bZmGYWcRHPir08ZIiL/T3iyCNTHqudIiACIiCRqnNABESgAAFW6/OYKYSEX8WPFw1vnfeichDiB++lF2dM9SMivReMPEcfc4y5NG8BE08NwKYE8aguwf7ZYMXu7XaxFMaCGsoJjallVubXtYubEH0+TjbMw/bu1mO3o4xpbto51opRBKIPhyiKKAyFL08FoJ/hUxHi+kYbfOjCCzYm2I9HDztN3qkQIRlXXlxaGM7A0xqIbU0co8TjNud5g8vaG5vmNo65i336A8Y5FfbJt9cvqkssR79FQARyk4BiUnNz3NVrEUhKgEcePf3UU24/C2tYuY3oIl4Q8/GobDOtzKr4W+1Cq4r28UxMtR9iHx+FTbSxrjxWigVP3tPoV+RTB95WBCeGwLvn7rudCGaF/TD7mCsMkcWjmwgzIIYSccsjilglTjxoon1mQwXw1F1++eVuNXvi/m35TYjCD/axSt78lD79ZWU9j2giRhZhRfjC1Vdd5QQlIQAFYkJ9IYV840X2oRJ4YInHxFh4Fmf0NZwOhwl8CJnoZuNfQ1tjbzJouzfGFiM2mRuSxBABn684v3kCAU8/YAFa54MOch5VFmPBGiN0QSYCIiACnoBEqiehbxHIQQLeE1Y6b2ENU/KD/v3viATT5Rhxkjy3EmtpV6x74xmqTN17Dykrxn14AA/994+VIh6RxS/tbRksokLMhottWCjlH9XEoiY+GKvjWU2PiPFChhCBM844wzch3/dCu+jJe3z9Dt9HfntvoO+vzxPu83m+/fZbJ6jCPGzT1zVWlE60C6bClf0IVYQXAtZbqTxvcFx9Pk/4zap42o8h3BHyPDmBpwxgvjzfxo8/+ijWo4zHO9EQpZ5huI90HqdVXCLVt819551Xvv+I6PMvuMA8YEMyWO3Po8Dow8/20VnEJx/cpUvUNF9OOH7RTm2IgAjkBIFSdprlt1UAtstr8lbh5kTv1UkREIG0CbCSn5hRQgC8gPAHI4pYjFQrWIjFfy2s6GahTeghQ8wRJ8qUMd7RdIxjllthW9t62uI8qGEZCG2/QCpM13bRCNz2z3+6Jzfcc++9bhFV0Ur77WhuWhCxOzJM47fatSUCIpAtBCrbF44kmjypiUT0WwREIJYAXtBkFsYX+jwI2VC0+nTiVZNNX/s8id8cE8a5Ju4Pf0ughjSyf5s3YclEQAREII5A/pUJcTmUJgIiIAIikPMEEJNMvfuQg5wHIgAiIAIlTkDT/SWOWBWIgAiIgAiIgAiIgAikIhA33S9Paipi2icCIiACIiACIiACIpARAhKpGcGuSkVABERABERABERABFIRkEhNRUf7REAEREAEREAEREAEMkJAIjUj2FWpCIiACIiACIiACIhAKgISqanoaJ8IiIAIiIAIiIAIiEBGCEikZgS7KhUBERABERABERABEUhFQCI1FR3tEwEREAEREAEREAERyAgBidSMYFelIiACIiACIiACIiACqQhIpKaio30iIAIiIAIiIAIiIAIZISCRmhHsqlQEREAEREAEREAERCAVAYnUVHS0TwREQAREQAREQAREICMEJFIzgl2VioAIiIAIiIAIiIAIpCIgkZqKjvaJgAiIgAiIgAiIgAhkhIBEakawq1IREAEREAEREAEREIFUBCRSU9HRPhEQAREQAREQAREQgYwQkEjNCHZVKgIiIAIiIAIiIAIikIqARGoqOtonAiIgAiIgAiIgAiKQEQISqRnBrkpFQAREQAREQAREQARSEZBITUVH+0RABERABERABERABDJCQCI1I9hVqQiIgAiIgAiIgAiIQCoCEqmp6GifCIiACIiACIiACIhARgiUzUitqlQERGCXJvDrr7+aqVOnmpdeeMEsX77cHHrYYaZrt26mbt26plSpUmblypVmzFdfmU8+/thUrVbNHH744Wb/tm1N+fLlzerVq83nn31mlixZYrZu3WrKlStnDjroILNPgwZm4cKF5tWXXzYTJkwwnTp3dsc1adrUlClTxixatMh8O368+eLzz03FihVNr2OPNa1atTJly5Y1q1atMu+/95777LvvvqbHEUeYNm3amN0rVDC0dfq0aeabb74xmzdvdu3bu1490+Xgg91+Boo8s2fNMtOnT3dtqVa9er7xo53sp30HdOzo+pEvQ/Bj48aN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AREQAREQgYIEJFILMlGKCIiACIiACIiACIhAhglIpGZ4AFS9CIiACIiACIiACIhAQQISqQWZKEUEREAEREAEREAERCDDBCRSMzwAql4EREAEREAEREAERKAgAYnUgkyUIgIiIAIiIAIiIAIikGECEqkZHgBVLwIiIAIiIAIiIAIiUJCARGpBJkoRAREQAREQAREQARHIMAGJ1AwPgKoXAREQAREQAREQAREoSEAitSATpYiACIiACIiACIiACGSYgERqhgdA1YuACIiACIiACIiACBQkIJFakIlSREAEREAEREAEREAEMkxAIjXDA6DqRUAEREAEREAEREAEChKQSC3IRCkiIAIiIAIiIAIiIAIZJiCRmuEBUPUiIAIiIAIiIAIiIAIFCUikFmSiFBEQAREQAREQAREQgQwTkEjN8ACoehEQAREQAREQAREQgYIEJFILMlGKCIiACIiACIiACIhAhglIpGZ4AFS9CIiACIiACIiACIhAQQJlCyYpRQREQASyh8CG9evN/PnzzaZNm0zt2rVN1WrVTKlSpYrUwHXr1hk+VapUMeXLl4/K+vXXX83KlSsNpe9RtaopXbpk7uO3bt1qFixYYFYsX24aNW5sKlasGLWhODY2b95sFtryV61ebWrWrGlq1apVYn0pjvaqDBEQARGIIyCRGkdFaSIgAllBYNmyZeaF558347/5xrXnmF69TJ/jj88nLLe1oQi4zz/7zLz26qvmwosvNm3bto1E74oVK8zg//7XlClTxpx33nmmWvXq21p8Wvl/+eUX8+UXX5jRX35pLr70UtOoUaOoDWkVkCLThg0bzHvvvmveGjbM5WrVurU599xzS6wvKZqiXSIgAiJQJAISqUXCp4NFIHsJ4K1btWqVmTNnjtlrr72cFzLOA4mnctasWab87rubBg0amLJls+O/Bdr/008/mcmTJpkeRxxhDjzwQFPOej1Lsn3UubPbcuudHTd2rNmvVSuDqC+3226mQjF7amEEqzVr1piFCxeapUuWmMWLF5ty5cqZhlZwN7beYbbxSs+ePdsssJ5wxq1ps2bROYbXmmPn2vOTY/fcc0/TvEULU6NGDSfYuWHg2OrWc76PPS/xaq+2nmHO1ap77GHq1a9v1ttzN1n9eMipY7m90Vn088+ujdz07GGPbdq0qdm7Xr0C5xL5582b545p2LCh2z/L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5a/aRUAEREAEREAEREAEYghIpMZAUZIIiIAIiIAIiIAIiEBmCUikZpa/ahcBERABERABERABEYghIJEaA0VJIiACIiACIiACIiACmSUgkZpZ/qpdBERABERABERABEQghoBEagwUJYmACIiACIiACIiACGSWgERqZvmrdhEQAREQAREQAREQgRgCEqkxUJQkAiIgAiIgAiIgAiKQWQISqZnlr9pFQAREQAREQAREQARiCEikxkBRkgiIgAiIgAiIgAiIQGYJSKRmlr9qFwEREAEREAEREAERiCEgkRoDRUkiIAIiIAIiIAIiIAKZJSCRmln+ql0EREAEREAEREAERCCGgERqDBQliYAIiIAIiIAIiIAIZJaARGpm+at2ERABERABERABERCBGAISqTFQlCQCIiACIiACIiACIpBZAhKpmeWv2kVABERABERABERABGIISKTGQFGSCIiACIiACIiACIhAZglIpGaWv2oXAREQAREQAREQARGIISCRGgNFSSIgAiIgAiIgAiIgApklIJGaWf6qXQREQAREQAREQAREIIaARGoMFCWJgAiIgAiIgAiIgAhkloBEamb5q3YREAEREAEREAEREIEYAhKpMVCUJAIiIAIiIAIiIAIikFkCEqmZ5a/aRUAEREAEREAEREAEYghIpMZAUZIIiIAIiIAIiIAIiEBmCUikZpa/ahcBERABERABERABEYghIJEaA0VJIiACIiACIiACIiACmSUgkZpZ/qpdBERABERABERABEQghoBEagwUJYmACIiACIiACIiACGSWgERqZvmrdhEQAREQAREQAREQgRgCEqkxUJQkAiIgAiIgAiIgAiKQWQISqZnlr9pFQAREQAREQAREQARiCEikxkBRkgiIgAiIgAiIgAiIQGYJSKRmlr9qFwEREAEREAEREAERiCHw/wH2QSAhUGjt3wAAAABJRU5ErkJggg=="}}},{"cell_type":"markdown","source":"## Import Libraries","metadata":{}},{"cell_type":"code","source":"# Import necessary libraries\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\n\n# Suppress warnings\nwarnings.filterwarnings('ignore')","metadata":{"ExecuteTime":{"end_time":"2025-03-08T22:33:28.623689Z","start_time":"2025-03-08T22:33:28.621682Z"},"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:51:57.343742Z","iopub.execute_input":"2025-03-12T08:51:57.344103Z","iopub.status.idle":"2025-03-12T08:51:58.451357Z","shell.execute_reply.started":"2025-03-12T08:51:57.344077Z","shell.execute_reply":"2025-03-12T08:51:58.450142Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Load Data","metadata":{}},{"cell_type":"code","source":"# Read the CSV file\nbase_path = '/kaggle/input/byu-locating-bacterial-flagellar-motors-2025'\ntrain_dir = '/kaggle/input/byu-locating-bacterial-flagellar-motors-2025/train'\n\ndf = pd.read_csv(f'{base_path}/train_labels.csv')\n\n# Display the first few rows of the dataframe\nprint(\"\\nFirst few rows of the dataset:\")\ndisplay(df.head())","metadata":{"ExecuteTime":{"end_time":"2025-03-08T22:33:37.855364Z","start_time":"2025-03-08T22:33:37.843363Z"},"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:51:58.452355Z","iopub.execute_input":"2025-03-12T08:51:58.452710Z","iopub.status.idle":"2025-03-12T08:51:58.496629Z","shell.execute_reply.started":"2025-03-12T08:51:58.452690Z","shell.execute_reply":"2025-03-12T08:51:58.495819Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Dataset Statistics","metadata":{}},{"cell_type":"code","source":"# Summary statistics\ndf.info()","metadata":{"ExecuteTime":{"end_time":"2025-03-08T22:34:25.875310Z","start_time":"2025-03-08T22:34:25.868812Z"},"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:51:58.498113Z","iopub.execute_input":"2025-03-12T08:51:58.498371Z","iopub.status.idle":"2025-03-12T08:51:58.532266Z","shell.execute_reply.started":"2025-03-12T08:51:58.498348Z","shell.execute_reply":"2025-03-12T08:51:58.531130Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"The `df.info()` output provides the following insights about the dataset:\n\n- The dataset contains 737 entries (rows) and 10 columns.\n- Each column has 737 non-null entries, indicating there are no missing values in the dataset.\n- The data types of the columns are as follows:\n  - 4 columns are of type `float64`\n  - 5 columns are of type `int64`\n  - 1 column is of type `object` (the `tomo_id` column)\n- The memory usage of the dataset is approximately 57.7 KB.","metadata":{}},{"cell_type":"markdown","source":"## Feature Distributions","metadata":{}},{"cell_type":"markdown","source":"### Motor Locations\n\nThis section explores the distribution of motor locations across the three axes (Motor axis 0, 1, and 2). The plots exclude positions where no motors are present.","metadata":{}},{"cell_type":"code","source":"# Visualize the distribution of motor locations\nplt.figure(figsize=(15, 6))\n\n# Motor axis 0\nplt.subplot(1, 3, 1)\nmotor_axis_0 = df[df['Motor axis 0'] != -1]['Motor axis 0']\nsns.histplot(motor_axis_0, kde=True)\nplt.title('Distribution of Motor axis 0\\n(Excluding no-motor positions)')\n\n# Motor axis 1\nplt.subplot(1, 3, 2)\nmotor_axis_1 = df[df['Motor axis 1'] != -1]['Motor axis 1']\nsns.histplot(motor_axis_1, kde=True)\nplt.title('Distribution of Motor axis 1\\n(Excluding no-motor positions)')\n\n# Motor axis 2\nplt.subplot(1, 3, 3)\nmotor_axis_2 = df[df['Motor axis 2'] != -1]['Motor axis 2']\nsns.histplot(motor_axis_2, kde=True)\nplt.title('Distribution of Motor axis 2\\n(Excluding no-motor positions)')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:51:58.533521Z","iopub.execute_input":"2025-03-12T08:51:58.533775Z","iopub.status.idle":"2025-03-12T08:51:59.257059Z","shell.execute_reply.started":"2025-03-12T08:51:58.533752Z","shell.execute_reply":"2025-03-12T08:51:59.255964Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Visualize the scatterplot of motor locations in the xy, xz, and yz axes\nplt.figure(figsize=(15, 6))\n\n# XY plane\nplt.subplot(1, 3, 1)\nsns.scatterplot(x='Motor axis 1', y='Motor axis 2', data=df[df['Motor axis 0'] != -1], alpha=0.5)\nplt.title('Motor Locations in XY Plane\\n(Excluding no-motor positions)')\nplt.xlabel('Motor axis 1')\nplt.ylabel('Motor axis 2')\n\n# XZ plane\nplt.subplot(1, 3, 2)\nsns.scatterplot(x='Motor axis 1', y='Motor axis 0', data=df[df['Motor axis 0'] != -1], alpha=0.5)\nplt.title('Motor Locations in XZ Plane\\n(Excluding no-motor positions)')\nplt.xlabel('Motor axis 1')\nplt.ylabel('Motor axis 0')\n\n# YZ plane\nplt.subplot(1, 3, 3)\nsns.scatterplot(x='Motor axis 2', y='Motor axis 0', data=df[df['Motor axis 0'] != -1], alpha=0.5)\nplt.title('Motor Locations in YZ Plane\\n(Excluding no-motor positions)')\nplt.xlabel('Motor axis 2')\nplt.ylabel('Motor axis 0')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:51:59.257978Z","iopub.execute_input":"2025-03-12T08:51:59.258214Z","iopub.status.idle":"2025-03-12T08:51:59.763262Z","shell.execute_reply.started":"2025-03-12T08:51:59.258195Z","shell.execute_reply":"2025-03-12T08:51:59.762035Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Array Shape\n\nBelow is a plot of the distribution of the array shape dimensions (axis 0, 1, and 2) in the tomograms. These dimensions represent the size of the tomogram along each axis.","metadata":{}},{"cell_type":"code","source":"# Visualize the distribution of array shapes\nplt.figure(figsize=(15, 6))\n\n# Array shape axis 0\nplt.subplot(1, 3, 1)\nsns.histplot(df['Array shape (axis 0)'], kde=True)\nplt.title('Distribution of Array shape axis 0')\n\n# Array shape axis 1\nplt.subplot(1, 3, 2)\nsns.histplot(df['Array shape (axis 1)'], kde=True)\nplt.title('Distribution of Array shape axis 1')\n\n# Array shape axis 2\nplt.subplot(1, 3, 3)\nsns.histplot(df['Array shape (axis 2)'], kde=True)\nplt.title('Distribution of Array shape axis 2')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:51:59.764646Z","iopub.execute_input":"2025-03-12T08:51:59.765032Z","iopub.status.idle":"2025-03-12T08:52:00.662039Z","shell.execute_reply.started":"2025-03-12T08:51:59.765003Z","shell.execute_reply":"2025-03-12T08:52:00.660788Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Voxel Spacing and Number of Motors\n","metadata":{}},{"cell_type":"code","source":"# Visualize the distribution of voxel spacing and number of motors\nplt.figure(figsize=(10, 5))\n\n# Voxel spacing\nplt.subplot(1, 2, 1)\nsns.histplot(df['Voxel spacing'], kde=True)\nplt.title('Distribution of Voxel Spacing')\n\n# Number of motors\nplt.subplot(1, 2, 2)\nsns.histplot(df['Number of motors'], kde=True)\nplt.title('Distribution of Number of Motors')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:52:00.662961Z","iopub.execute_input":"2025-03-12T08:52:00.663256Z","iopub.status.idle":"2025-03-12T08:52:01.076456Z","shell.execute_reply.started":"2025-03-12T08:52:00.663231Z","shell.execute_reply":"2025-03-12T08:52:01.075395Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Motors vs. No Motors\n","metadata":{}},{"cell_type":"code","source":"# Bar plot for the number of tomograms with motors vs. without\nplt.figure(figsize=(6, 4))\n\n# Count the number of tomograms with and without motors\nmotor_counts = df['Number of motors'].apply(lambda x: 'With Motors' if x > 0 else 'Without Motors').value_counts()\n\n# Plot the bar chart\nsns.barplot(x=motor_counts.index, y=motor_counts.values)\nplt.title('Distribution of Tomograms: With Motors vs. Without Motors')\nplt.xlabel('Tomogram Type')\nplt.ylabel('Count')\n\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:52:01.077666Z","iopub.execute_input":"2025-03-12T08:52:01.078000Z","iopub.status.idle":"2025-03-12T08:52:01.206977Z","shell.execute_reply.started":"2025-03-12T08:52:01.077979Z","shell.execute_reply":"2025-03-12T08:52:01.206005Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Key Findings from Feature Distributions\n\n1. **Motor Coordinates (excluding no-motor positions)**:\n   - Motor axis 0 (z-coordinate):\n     * Range: 0 to 466\n     * Mean: 167.09\n     * Most common around 150-200\n   - Motor axis 1 (x-coordinate):\n     * Range: 59 to 904\n     * Mean: 482.47\n     * Relatively uniform distribution between 300-800\n   - Motor axis 2 (y-coordinate):\n     * Range: 30 to 902\n     * Mean: 492.22\n     * Relatively uniform distribution between 300-800\n\n2. **Array Shape Dimensions**:\n   - Axis 0 (z-axis length): Three main clusters at 300, 500, and 800\n   - Axis 1 (x-axis length): Most values around 924-960\n   - Axis 2 (y-axis length): Most values around 924-956\n\n3. **Voxel Spacing**:\n   - Range: 6.5 to 19.7 angstroms per voxel\n   - Major clusters at:\n     * 13.1 (most common)\n     * 15.6\n     * 16.8\n     * 19.7\n\n4. **Number of Motors**:\n   - Range: 0 to 10 motors per tomogram\n   - Most common: 0 or 1 motor (599 samples)\n   - Mean: 1.13 motors per tomogram\n   - Distribution:\n     * 0 motors: 286 samples (38.8%)\n     * 1 motor: 313 samples (42.5%)\n     * 2+ motors: 138 samples (18.7%)","metadata":{}},{"cell_type":"markdown","source":"## Sample Tomogram Visualization\n\nThe images below show a sampling of 9 different slices through a single tomogram. Each slice represents a 2D cross-section of the 3D tomographic data. The grayscale values represent the electron density at each point, with different structures appearing as variations in contrast.","metadata":{}},{"cell_type":"code","source":"import os\nfrom PIL import Image\nimport random\n\n# Get the first tomo_id from our dataset\nfirst_tomo = df['tomo_id'].iloc[1]\n\n# Construct the base path for the tomogram\ntomo_path = f'{train_dir}/{first_tomo}'\n\n# Get list of all slice files in the directory\nslice_files = [f for f in os.listdir(tomo_path) if f.startswith('slice_') and f.endswith('.jpg')]\n\n# Randomly select 9 slices\nselected_slices = random.sample(slice_files, min(9, len(slice_files)))\n\n# Create a 3x3 grid of subplots\nfig, axes = plt.subplots(3, 3, figsize=(15, 15))\nfig.suptitle(f'Sample Slices from {first_tomo}')\n\n# Load and display each image\nfor idx, slice_file in enumerate(selected_slices):\n    row = idx // 3\n    col = idx % 3\n    \n    # Load image\n    img_path = os.path.join(tomo_path, slice_file)\n    img = Image.open(img_path)\n    \n    # Display image\n    axes[row, col].imshow(img, cmap='gray')\n    axes[row, col].axis('off')\n    axes[row, col].set_title(f'Slice {slice_file[6:-4]}')\n\nplt.tight_layout()\nplt.show()\n\n# print(f\"Displaying 9 random slices from tomogram: {first_tomo}\")","metadata":{"ExecuteTime":{"end_time":"2025-03-08T22:43:24.094409Z","start_time":"2025-03-08T22:43:20.351598Z"},"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:52:01.209411Z","iopub.execute_input":"2025-03-12T08:52:01.209750Z","iopub.status.idle":"2025-03-12T08:52:03.160050Z","shell.execute_reply.started":"2025-03-12T08:52:01.209720Z","shell.execute_reply":"2025-03-12T08:52:03.158482Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Visualize the Motor Location\nThis function visualizes the location of a motor within a tomogram slice. It displays the slice in black and white and highlights the motor's position with a red circle.","metadata":{}},{"cell_type":"code","source":"def visualize_motor_location(index):\n    row = df.iloc[index]\n    folder = f'{train_dir}/{row.tomo_id}'\n    motor_slice = int(row['Motor axis 0'])\n\n    # Add sufficient zeros to make it a 4-digit integer\n    motor_slice = str(motor_slice).zfill(4)\n\n    print(f'Motor at slice: {motor_slice}')\n    slice_file = f'{folder}/slice_{motor_slice}.jpg'\n\n    # Open the image\n    img = Image.open(slice_file).convert('L')  # Convert to grayscale\n\n    # Get the motor 1 and 2 axis values\n    motor1 = int(row['Motor axis 1'])\n    motor2 = int(row['Motor axis 2'])\n\n    # Draw a 50% transparent red circle on the img around the motor1, motor2 position with a 50-pixel radius\n    fig, ax = plt.subplots()\n    ax.imshow(img, cmap='gray')\n    ax.add_artist(plt.Circle((motor2, motor1), 50, color='r', alpha=0.5))\n    ax.axis('off')\n    plt.show()\n\n# Example usage\nvisualize_motor_location(1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:52:03.161215Z","iopub.execute_input":"2025-03-12T08:52:03.161515Z","iopub.status.idle":"2025-03-12T08:52:03.308276Z","shell.execute_reply.started":"2025-03-12T08:52:03.161484Z","shell.execute_reply":"2025-03-12T08:52:03.306798Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import matplotlib.animation as animation\nfrom IPython.display import HTML\nimport matplotlib as mpl\n\n# Increase the animation embed limit\nmpl.rcParams['animation.embed_limit'] = 50  # Set to 60 MB\n\ndef animate_tomogram(tomo_id):\n    folder = f'{train_dir}/{tomo_id}'\n    slice_files = sorted([f for f in os.listdir(folder) if f.startswith('slice_') and f.endswith('.jpg')])\n\n    # Load images into a 3D array\n    images = [np.array(Image.open(os.path.join(folder, f)).convert('L')) for f in slice_files]\n\n    fig, ax = plt.subplots()\n    img_display = ax.imshow(images[0], cmap='gray')\n    ax.axis('off')\n\n    def update(frame):\n        img_display.set_array(images[frame])\n        return [img_display]\n\n    # Reduce the number of frames by skipping some\n    ani = animation.FuncAnimation(fig, update, frames=range(0, len(images), 2), interval=100, blit=True)\n\n    # Add start/stop buttons and a slider\n    plt.close(fig)\n    return HTML(ani.to_jshtml())\n\n# run animation\n#animate_tomogram('tomo_00e047')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:52:03.309149Z","iopub.execute_input":"2025-03-12T08:52:03.309444Z","iopub.status.idle":"2025-03-12T08:52:03.331732Z","shell.execute_reply.started":"2025-03-12T08:52:03.309418Z","shell.execute_reply":"2025-03-12T08:52:03.330339Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Submission\nAs a first submission, use the mean values of the locations","metadata":{}},{"cell_type":"code","source":"# read sumbission file\nss = pd.read_csv(f'{base_path}/sample_submission.csv')\n\n # remove the -1's and get the mean values of the motor positions\nmotor_positions = df[df['Motor axis 0'] != -1][['Motor axis 0', 'Motor axis 1', 'Motor axis 2']]\nmotor_positions_mean = motor_positions.mean()\n\nss['Motor axis 0'] = motor_positions_mean.iloc[0]\nss['Motor axis 1'] = motor_positions_mean.iloc[1]\nss['Motor axis 2'] = motor_positions_mean.iloc[2]\n\nss.to_csv('submission.csv',index=False)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-12T08:52:03.332665Z","iopub.execute_input":"2025-03-12T08:52:03.332990Z","iopub.status.idle":"2025-03-12T08:52:03.357025Z","shell.execute_reply.started":"2025-03-12T08:52:03.332966Z","shell.execute_reply":"2025-03-12T08:52:03.355458Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}