{"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\nos.listdir(\"/kaggle/input/\")\nos.listdir(\"/kaggle/input/competitions/\")\nimport pandas as pd\n\ndf = pd.read_csv(\"/kaggle/input/competitions/rsna-knee-abnormality-detection/train.csv\")\nprint(df)\ndf['ACL'].notna().sum()\nlabel_cols = ['ACL', 'MCL', 'Medial Meniscus', 'Lateral Meniscus', 'Medial OA', \n              'Lateral OA', 'PF OA', 'Effusion', 'Synovitis', \"Baker's\", 'Contusion', 'Fracture']\n\n# For each row, count how many of the 12 label columns are filled in (not NaN)\ndf['num_labels_filled'] = df[label_cols].notna().sum(axis=1)\n\n# Show the distribution: how many rows have 0 filled, how many have 12 filled, etc.\ndf['num_labels_filled'].value_counts().sort_index()\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-08-10T18:12:55.216196Z","iopub.execute_input":"2026-08-10T18:12:55.216877Z","iopub.status.idle":"2026-08-10T18:12:55.377001Z","shell.execute_reply.started":"2026-08-10T18:12:55.216846Z","shell.execute_reply":"2026-08-10T18:12:55.375829Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"labeled = df[df['num_labels_filled'] == 12]\nstudy_id = labeled['StudyInstanceUID'].iloc[0]\nprint(study_id)\n\nstudy_path = f\"/kaggle/input/competitions/rsna-knee-abnormality-detection/train_series/{study_id}\"\nos.listdir(study_path)\nseries_id = os.listdir(study_path)[0]\nseries_path = f\"{study_path}/{series_id}\"\n\ndcm_files = os.listdir(series_path)\nprint(f\"Number of slices in this series: {len(dcm_files)}\")\nprint(dcm_files[:5])  # show the first 5 filenames\nimport pydicom\nimport matplotlib.pyplot as plt\n\ndcm_path = f\"{series_path}/{dcm_files[0]}\"\ndicom_data = pydicom.dcmread(dcm_path)\n\nplt.imshow(dicom_data.pixel_array, cmap='gray')\nplt.title(\"First slice\")\nplt.axis('off')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-10T18:16:52.670338Z","iopub.execute_input":"2026-08-10T18:16:52.670689Z","iopub.status.idle":"2026-08-10T18:16:52.968231Z","shell.execute_reply.started":"2026-08-10T18:16:52.670661Z","shell.execute_reply":"2026-08-10T18:16:52.967257Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"label_cols = ['ACL', 'MCL', 'Medial Meniscus', 'Lateral Meniscus', 'Medial OA', \n              'Lateral OA', 'PF OA', 'Effusion', 'Synovitis', \"Baker's\", 'Contusion', 'Fracture']\n\nlabeled = df[df['num_labels_filled'] == 12]\n\nfor col in label_cols:\n    print(col, labeled[col].sum(), \"out of\", len(labeled))\nseries_df = pd.read_csv(\"/kaggle/input/competitions/rsna-knee-abnormality-detection/train_series.csv\")\nseries_df.head()\n\nprint(series_df['Anatomical_Plane'].value_counts())\nprint(series_df['Fluid_Sensitive'].value_counts())\npd.set_option('display.max_colwidth', None)  # so report text isn't cut off\n\nfor i in range(3):\n    row = labeled.iloc[i]\n    print(\"STUDY:\", row['StudyInstanceUID'])\n    print(\"REPORT:\", row['Report'])\n    print(\"ACL:\", row['ACL'], \"| Medial Meniscus:\", row['Medial Meniscus'], \"| Effusion:\", row['Effusion'])\n    print(\"---\")\nlabeled_study_ids = labeled['StudyInstanceUID']\nlabeled_series = series_df[series_df['StudyInstanceUID'].isin(labeled_study_ids)]\n\nprint(labeled_series['Anatomical_Plane'].value_counts())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-08-10T18:25:04.089134Z","iopub.execute_input":"2026-08-10T18:25:04.089461Z","iopub.status.idle":"2026-08-10T18:25:04.173514Z","shell.execute_reply.started":"2026-08-10T18:25:04.089433Z","shell.execute_reply":"2026-08-10T18:25:04.172632Z"}},"outputs":[],"execution_count":null}]}