{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport glob\nimport pandas as pd\nimport numpy as np\nimport polars as pl\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport pydicom","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-06-14T11:57:42.783442Z","iopub.execute_input":"2024-06-14T11:57:42.784174Z","iopub.status.idle":"2024-06-14T11:57:45.776677Z","shell.execute_reply.started":"2024-06-14T11:57:42.78413Z","shell.execute_reply":"2024-06-14T11:57:45.775688Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# read data\nINPUT_DIR = '../input/rsna-2024-lumbar-spine-degenerative-classification'\n\ntrain = pl.read_csv(f'{INPUT_DIR}/train.csv')\ntrain_label = pl.read_csv(f'{INPUT_DIR}/train_label_coordinates.csv')\ntrain_desc = pl.read_csv(f'{INPUT_DIR}/train_series_descriptions.csv')","metadata":{"execution":{"iopub.status.busy":"2024-06-14T11:57:45.779015Z","iopub.execute_input":"2024-06-14T11:57:45.780052Z","iopub.status.idle":"2024-06-14T11:57:46.054315Z","shell.execute_reply.started":"2024-06-14T11:57:45.78001Z","shell.execute_reply":"2024-06-14T11:57:46.05304Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def graph_plot(study_id, series_id):\n    train_label_combinations = pl.DataFrame()\n    for row in train_label.iter_rows():\n        if row[0]==study_id:\n            #print(pl.DataFrame(row[:3]).transpose())\n            data = pl.DataFrame(row[:3]).transpose()\n            train_label_combinations=pl.concat([train_label_combinations, data])\n    #print(train_label_combinations)\n    \n    #rename columns\n    train_label_combinations = train_label_combinations.rename({\"column_0\":\"study_id\", \"column_1\":\"series_id\", \"column_2\":\"instance_number\"})\n    #extract unique combination\n    train_label_combinations = train_label_combinations.unique(subset=[\"study_id\", \"series_id\", \"instance_number\"]).sort([\"study_id\", \"series_id\", \"instance_number\"])\n    \n    instance_number_list = train_label_combinations.filter((pl.col(\"study_id\")==study_id) & (pl.col(\"series_id\")==series_id)).get_column(\"instance_number\")\n    #instance_number_list\n\n    for instance_number in instance_number_list:\n        #print(instance_number)\n        print(f\"=====study_id:{study_id}, series_id:{series_id}, instance_number:{instance_number}=====\")\n        #read image\n        ds = pydicom.read_file(f'{INPUT_DIR}/train_images/{study_id}/{series_id}/{instance_number}.dcm')\n        #draw original image\n        df_plt = train_label.filter(\n            (pl.col('study_id')==study_id)\n            &(pl.col('series_id')==series_id)\n            &(pl.col('instance_number')==instance_number)\n        )\n        plt.subplot(1,2,1)\n        plt.imshow(ds.pixel_array, cmap='bone')\n        #plt.title(f\"study_id:{study_id}, series_id:{series_id}, instance_number:{instance_number}\")\n\n        #draw original image + label\n        #draw image\n        df_plt = train_label.filter(\n            (pl.col('study_id')==study_id)\n            &(pl.col('series_id')==series_id)\n            &(pl.col('instance_number')==instance_number)\n        )\n        plt.subplot(1,2,2)\n        plt.imshow(ds.pixel_array, cmap='bone')\n        #plt.title(f\"study_id:{study_id}, series_id:{series_id}, instance_number:{instance_number}\")\n        #draw rabel\n        for row in df_plt.iter_rows():\n            plt.scatter(row[-2], row[-1], color='red')\n        plt.show()","metadata":{"execution":{"iopub.status.busy":"2024-06-14T14:17:17.353416Z","iopub.execute_input":"2024-06-14T14:17:17.35419Z","iopub.status.idle":"2024-06-14T14:17:17.365343Z","shell.execute_reply.started":"2024-06-14T14:17:17.354155Z","shell.execute_reply":"2024-06-14T14:17:17.36416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# study_idとseries_idを指定する\nstudy_id = 4003253\nseries_id = 1054713880\n\ngraph_plot(study_id, series_id)","metadata":{"execution":{"iopub.status.busy":"2024-06-14T14:17:18.524045Z","iopub.execute_input":"2024-06-14T14:17:18.524446Z","iopub.status.idle":"2024-06-14T14:17:20.525837Z","shell.execute_reply.started":"2024-06-14T14:17:18.524414Z","shell.execute_reply":"2024-06-14T14:17:20.524691Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}