{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[],"dockerImageVersionId":28755,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nprint(os.listdir(\"/kaggle/input/competitions\"))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:32.052758Z","iopub.execute_input":"2026-08-20T06:11:32.053167Z","iopub.status.idle":"2026-08-20T06:11:32.060993Z","shell.execute_reply.started":"2026-08-20T06:11:32.053128Z","shell.execute_reply":"2026-08-20T06:11:32.059458Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"DATA = \"/kaggle/input/competitions/rsna-knee-abnormality-detection\"\nprint(os.listdir(DATA))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:32.33405Z","iopub.execute_input":"2026-08-20T06:11:32.334657Z","iopub.status.idle":"2026-08-20T06:11:32.341101Z","shell.execute_reply.started":"2026-08-20T06:11:32.334625Z","shell.execute_reply":"2026-08-20T06:11:32.339978Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport os\n\ntrain = pd.read_csv(DATA + \"/train.csv\")\ntrain_series = pd.read_csv(DATA + \"/train_series.csv\")\n\nprint(\"=== train.csv ===\")\ndisplay(train.head())\n\nprint(\"=== train_series.csv ===\")\ndisplay(train_series.head())\n\nprint(\"=== train_series 폴더 ===\")\nprint(os.listdir(DATA + \"/train_series\")[:10])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:32.569143Z","iopub.execute_input":"2026-08-20T06:11:32.569498Z","iopub.status.idle":"2026-08-20T06:11:32.793661Z","shell.execute_reply.started":"2026-08-20T06:11:32.569471Z","shell.execute_reply":"2026-08-20T06:11:32.792626Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(train.shape)\nprint(train.columns.tolist())\ndisplay(train.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:32.795775Z","iopub.execute_input":"2026-08-20T06:11:32.796124Z","iopub.status.idle":"2026-08-20T06:11:32.816961Z","shell.execute_reply.started":"2026-08-20T06:11:32.796081Z","shell.execute_reply":"2026-08-20T06:11:32.815683Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\n\nstudy = os.listdir(DATA + \"/train_series\")[0]\nprint(\"Study:\", study)\n\nprint(os.listdir(DATA + \"/train_series/\" + study))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:33.052366Z","iopub.execute_input":"2026-08-20T06:11:33.053054Z","iopub.status.idle":"2026-08-20T06:11:33.063355Z","shell.execute_reply.started":"2026-08-20T06:11:33.053017Z","shell.execute_reply":"2026-08-20T06:11:33.062169Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"series = os.listdir(DATA + \"/train_series/\" + study)[0]\n\nprint(\"Series:\", series)\nprint(os.listdir(DATA + \"/train_series/\" + study + \"/\" + series)[:20])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:33.261477Z","iopub.execute_input":"2026-08-20T06:11:33.261938Z","iopub.status.idle":"2026-08-20T06:11:33.273943Z","shell.execute_reply.started":"2026-08-20T06:11:33.261904Z","shell.execute_reply":"2026-08-20T06:11:33.271943Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"files = os.listdir(DATA + \"/train_series/\" + study + \"/\" + series)\nprint(len(files))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:33.445182Z","iopub.execute_input":"2026-08-20T06:11:33.445795Z","iopub.status.idle":"2026-08-20T06:11:33.452905Z","shell.execute_reply.started":"2026-08-20T06:11:33.445745Z","shell.execute_reply":"2026-08-20T06:11:33.451332Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pydicom\nimport matplotlib.pyplot as plt\n\npath = DATA + \"/train_series/\" + study + \"/\" + series + \"/\" + files[0]\n\ndcm = pydicom.dcmread(path)\n\nplt.imshow(dcm.pixel_array, cmap=\"gray\")\nplt.axis(\"off\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:34.704684Z","iopub.execute_input":"2026-08-20T06:11:34.705597Z","iopub.status.idle":"2026-08-20T06:11:35.277949Z","shell.execute_reply.started":"2026-08-20T06:11:34.705553Z","shell.execute_reply":"2026-08-20T06:11:35.276936Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"InstanceNumber:\", dcm.get(\"InstanceNumber\"))\nprint(\"SeriesDescription:\", dcm.get(\"SeriesDescription\"))\nprint(\"ImagePositionPatient:\", dcm.get(\"ImagePositionPatient\"))\nprint(\"SliceThickness:\", dcm.get(\"SliceThickness\"))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:35.279582Z","iopub.execute_input":"2026-08-20T06:11:35.27991Z","iopub.status.idle":"2026-08-20T06:11:35.288012Z","shell.execute_reply.started":"2026-08-20T06:11:35.279884Z","shell.execute_reply":"2026-08-20T06:11:35.287004Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(dcm)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:36.547161Z","iopub.execute_input":"2026-08-20T06:11:36.547581Z","iopub.status.idle":"2026-08-20T06:11:36.557315Z","shell.execute_reply.started":"2026-08-20T06:11:36.547552Z","shell.execute_reply":"2026-08-20T06:11:36.555656Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport pandas as pd\n\nROOT = DATA + \"/train_series\"\n\nrows = []\n\nfor study_uid in os.listdir(ROOT)[:100]:\n    study_path = os.path.join(ROOT, study_uid)\n\n    series_list = os.listdir(study_path)\n\n    slice_counts = []\n\n    for series_uid in series_list:\n        \n        series_path = os.path.join(study_path, series_uid)\n\n        n_slices = len(os.listdir(series_path))\n        slice_counts.append(n_slices)\n\n    rows.append({\n        \"StudyInstanceUID\": study_uid,\n        \"n_series\": len(series_list),\n        \"total_slices\": sum(slice_counts),\n        \"slices_per_series\": slice_counts\n    })\n\nsummary = pd.DataFrame(rows)\n\ndisplay(summary)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:11:41.116613Z","iopub.execute_input":"2026-08-20T06:11:41.117172Z","iopub.status.idle":"2026-08-20T06:11:41.589878Z","shell.execute_reply.started":"2026-08-20T06:11:41.117138Z","shell.execute_reply":"2026-08-20T06:11:41.588813Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(\"촬영 방향:\")\nprint(train_series[\"Anatomical_Plane\"].value_counts())\n\nprint(\"\\nSeries 설정 조합:\")\ndisplay(\n    train_series[\n        [\"Anatomical_Plane\", \"Fluid_Sensitive\", \"Fat_Suppression\"]\n    ].value_counts().reset_index(name=\"count\")\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:17:51.058043Z","iopub.execute_input":"2026-08-20T06:17:51.058588Z","iopub.status.idle":"2026-08-20T06:17:51.092551Z","shell.execute_reply.started":"2026-08-20T06:17:51.058555Z","shell.execute_reply":"2026-08-20T06:17:51.0911Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport os\n\ntrain = pd.read_csv(DATA + \"/train.csv\")\ntrain_series = pd.read_csv(DATA + \"/train_series.csv\")\n\nlabel_cols = train.columns[2:]   # ACL부터 Fracture까지\n\ntrain_non_nan = train[train[label_cols].notna().any(axis=1)]\n\nprint(\"=== train.csv (라벨이 하나라도 있는 행) ===\")\ndisplay(train_non_nan.head(20))\n\nprint(\"=== train_series.csv ===\")\ndisplay(train_series.head())\n\nprint(\"=== train_series 폴더 ===\")\nprint(os.listdir(DATA + \"/train_series\")[:10])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:48:51.932597Z","iopub.execute_input":"2026-08-20T06:48:51.933925Z","iopub.status.idle":"2026-08-20T06:48:52.159628Z","shell.execute_reply.started":"2026-08-20T06:48:51.933822Z","shell.execute_reply":"2026-08-20T06:48:52.15837Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport os\n\ntrain = pd.read_csv(DATA + \"/train.csv\")\ntrain_series = pd.read_csv(DATA + \"/train_series.csv\")\n\nlabel_cols = train.columns[2:]\n\ntrain_non_nan = train[train[label_cols].notna().any(axis=1)]\n\nprint(\"라벨이 하나라도 있는 행 개수:\", len(train_non_nan))\n\nprint(\"=== train.csv (라벨이 하나라도 있는 행) ===\")\ndisplay(train_non_nan.head(20))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-20T06:49:17.620777Z","iopub.execute_input":"2026-08-20T06:49:17.62169Z","iopub.status.idle":"2026-08-20T06:49:17.834541Z","shell.execute_reply.started":"2026-08-20T06:49:17.621649Z","shell.execute_reply":"2026-08-20T06:49:17.832842Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}