{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<h1>RSNA-MICCAI Brain Tumor Radiogenomic Classification</h1>\n","metadata":{"execution":{"iopub.status.busy":"2021-07-15T08:14:12.403660Z","iopub.execute_input":"2021-07-15T08:14:12.404280Z","iopub.status.idle":"2021-07-15T08:14:12.482543Z","shell.execute_reply.started":"2021-07-15T08:14:12.404143Z","shell.execute_reply":"2021-07-15T08:14:12.481311Z"}}},{"cell_type":"markdown","source":"<h3>Predict the status of a genetic biomarker important for brain cancer treatment</h3>","metadata":{"execution":{"iopub.status.busy":"2021-07-15T08:15:17.862228Z","iopub.execute_input":"2021-07-15T08:15:17.863269Z","iopub.status.idle":"2021-07-15T08:15:17.869665Z","shell.execute_reply.started":"2021-07-15T08:15:17.863167Z","shell.execute_reply":"2021-07-15T08:15:17.868481Z"}}},{"cell_type":"code","source":"# import library\nimport os\nimport tqdm\nimport numpy as np\nimport pandas as pd\nimport pydicom # for DICOM images\nimport matplotlib.pyplot as plt\n%matplotlib inline","metadata":{"execution":{"iopub.status.busy":"2021-07-15T09:12:24.865685Z","iopub.execute_input":"2021-07-15T09:12:24.866079Z","iopub.status.idle":"2021-07-15T09:12:24.872254Z","shell.execute_reply.started":"2021-07-15T09:12:24.866048Z","shell.execute_reply":"2021-07-15T09:12:24.871399Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Read the Dataset\nIMAGE_PATH = '../input/rsna-miccai-brain-tumor-radiogenomic-classification/train/'\ntrain_df = pd.read_csv(\"../input/rsna-miccai-brain-tumor-radiogenomic-classification/train_labels.csv\")\n# First Five training data\ntrain_df.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-15T08:32:27.764924Z","iopub.execute_input":"2021-07-15T08:32:27.765330Z","iopub.status.idle":"2021-07-15T08:32:27.795403Z","shell.execute_reply.started":"2021-07-15T08:32:27.765293Z","shell.execute_reply":"2021-07-15T08:32:27.794324Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print (f\"Train has {train_df.shape[0]} rows and {train_df.shape[1]} columns\")\nimage_files = list(os.listdir(IMAGE_PATH))\nprint(\"Number of image files: {}\".format(len(image_files)))","metadata":{"execution":{"iopub.status.busy":"2021-07-15T08:32:27.797192Z","iopub.execute_input":"2021-07-15T08:32:27.797526Z","iopub.status.idle":"2021-07-15T08:32:27.805010Z","shell.execute_reply.started":"2021-07-15T08:32:27.797496Z","shell.execute_reply":"2021-07-15T08:32:27.803919Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Function for Calculating missing data ratio in feature columns\ndef missing_ratio(data_df):\n    data_mis = 100 * data_df.isnull().sum() / len(data_df)\n    data_mis = data_mis.drop(data_mis[data_mis == 0].index).sort_values(ascending=False).round(1)\n    data_mis = pd.DataFrame({'Percentage' :data_mis})\n    data_mis['Columns'] = data_mis.index\n    data_mis.reset_index(drop=True,level=0, inplace=True)\n    # Print some summary information\n    print (\"Your selected dataframe has \" + str(data_df.shape[1]) + \" columns.\\n\"      \n            \"There are \" + str(data_mis.shape[0]) +\n              \" columns that have missing values.\")\n        \n    return data_mis#.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-15T08:32:27.806473Z","iopub.execute_input":"2021-07-15T08:32:27.806946Z","iopub.status.idle":"2021-07-15T08:32:27.818987Z","shell.execute_reply.started":"2021-07-15T08:32:27.806903Z","shell.execute_reply":"2021-07-15T08:32:27.817820Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# calculate percentage of missing data in training dataset\ntrain_mis = missing_ratio(train_df)","metadata":{"execution":{"iopub.status.busy":"2021-07-15T08:32:27.820041Z","iopub.execute_input":"2021-07-15T08:32:27.820325Z","iopub.status.idle":"2021-07-15T08:32:27.843063Z","shell.execute_reply.started":"2021-07-15T08:32:27.820298Z","shell.execute_reply":"2021-07-15T08:32:27.841674Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# DICOM Data\n### Now let's explore the .dcm files we were provided and to extract insights about it.","metadata":{}},{"cell_type":"code","source":"# Count total number of files in each subdirectory in train and test\n\n# Images Path\ntrain_path = \"../input/rsna-miccai-brain-tumor-radiogenomic-classification/train/\"\ntest_path = \"../input/rsna-miccai-brain-tumor-radiogenomic-classification/test/\"\n\n# --- TRAIN\n\ntrain_dcm = 0\n\n# dirpath - the directory path in string\n# dirnames - all main directories\n# filenames - all subdirectories\n\nfor dirpath, dirnames, filenames in tqdm.tqdm(os.walk(train_path)):\n    train_dcm += len(filenames)\n        \n# --- TEST\n\ntest_dcm = 0\n\nfor dirpath, dirnames, filenames in tqdm.tqdm(os.walk(test_path)):\n    test_dcm += len(filenames)","metadata":{"execution":{"iopub.status.busy":"2021-07-15T09:07:29.468111Z","iopub.execute_input":"2021-07-15T09:07:29.468604Z","iopub.status.idle":"2021-07-15T09:07:33.011378Z","shell.execute_reply.started":"2021-07-15T09:07:29.468574Z","shell.execute_reply":"2021-07-15T09:07:33.010624Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Train: total .dcm files - {:,}\".format(train_dcm), \"\\n\" +\n      \"Test: total .dcm files - {:,}\".format(test_dcm))","metadata":{"execution":{"iopub.status.busy":"2021-07-15T09:08:07.215909Z","iopub.execute_input":"2021-07-15T09:08:07.216285Z","iopub.status.idle":"2021-07-15T09:08:07.223047Z","shell.execute_reply.started":"2021-07-15T09:08:07.216254Z","shell.execute_reply":"2021-07-15T09:08:07.221871Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Visualize a DICOM image","metadata":{}},{"cell_type":"code","source":"def load_dicom(path):\n    dicom = pydicom.read_file(path)\n    data = dicom.pixel_array\n    data = data - np.min(data)\n    if np.max(data) != 0:\n        data = data / np.max(data)\n    data = (data * 255).astype(np.uint8)\n    return data\n\npath = \"../input/rsna-miccai-brain-tumor-radiogenomic-classification/train/00000/FLAIR/Image-113.dcm\"\ndata = load_dicom(path)\nplt.figure(figsize = (5, 5))\nplt.imshow(data,cmap=\"gray\")\nplt.axis('off');\n","metadata":{"execution":{"iopub.status.busy":"2021-07-15T09:27:40.408241Z","iopub.execute_input":"2021-07-15T09:27:40.408947Z","iopub.status.idle":"2021-07-15T09:27:40.570935Z","shell.execute_reply.started":"2021-07-15T09:27:40.408901Z","shell.execute_reply":"2021-07-15T09:27:40.569851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":" # Visualize a set of images for a Study","metadata":{}},{"cell_type":"code","source":"# Study \"T1wCE\"\nstudy_dir = \"../input/rsna-miccai-brain-tumor-radiogenomic-classification/train/00003/T1wCE/\"\ndatasets = []\n\n# Read in the Dataset\nfor dcm in os.listdir(study_dir):\n    path = study_dir + \"/\" + dcm\n    datasets.append(pydicom.dcmread(path))","metadata":{"execution":{"iopub.status.busy":"2021-07-15T09:33:20.389528Z","iopub.execute_input":"2021-07-15T09:33:20.389894Z","iopub.status.idle":"2021-07-15T09:33:21.852891Z","shell.execute_reply.started":"2021-07-15T09:33:20.389864Z","shell.execute_reply":"2021-07-15T09:33:21.851789Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Plot the images\nfig=plt.figure(figsize=(16, 6))\ncolumns = 10\nrows = 3\n\nfor i in range(1, columns*rows +1):\n    img = datasets[i-1].pixel_array\n    fig.add_subplot(rows, columns, i)\n    plt.imshow(img, cmap=\"gray\")\n    plt.title(i, fontsize = 9)\n    plt.axis('off');","metadata":{"execution":{"iopub.status.busy":"2021-07-15T09:33:24.472265Z","iopub.execute_input":"2021-07-15T09:33:24.472602Z","iopub.status.idle":"2021-07-15T09:33:27.409757Z","shell.execute_reply.started":"2021-07-15T09:33:24.472574Z","shell.execute_reply":"2021-07-15T09:33:27.409046Z"},"trusted":true},"execution_count":null,"outputs":[]}]}