{"cells":[{"metadata":{},"cell_type":"markdown","source":" ## Upvote if you find it useful ","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nimport os\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nimport pydicom\nfrom pydicom.data import get_testdata_files\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"PATH = '/kaggle/input/siim-isic-melanoma-classification'","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"train_df = pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/train.csv')\nprint(train_df.shape)\ntrain_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"Number of Train Images: \", train_df.image_name.nunique())\nprint(\"Number of Train Patirnts: \", train_df.patient_id.nunique())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### Patient Image Count Distribution ","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"temp = train_df[['patient_id', 'image_name']].groupby('patient_id').count()\n\nplt.hist(temp.image_name, 30)\nplt.xlabel('Image Count per Patient')\nplt.ylabel('Number of Patients')\nplt.title(r'Per Patient Image Count Distribution')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fig = plt.figure(figsize=(16,6))\naxes = fig.subplots(1, 3)\n\nplt.xticks(\n    rotation=45, \n    horizontalalignment='right',\n)\n\nsns.countplot(x='sex', data=train_df[['patient_id', 'sex']].drop_duplicates(), ax=axes[0])\naxes[0].set_title(\"Sex Ratio of Patients\")\nsns.countplot(x='benign_malignant', data=train_df, ax=axes[1])\naxes[1].set_title(\"Malignamt Images\")\nsns.countplot(x='diagnosis', data=train_df, ax=axes[2])\naxes[2].set_title(\"Different Disgnosis in Images\");","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_df.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Number of Malignamt Images Per User","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"fig = plt.figure(figsize=(16,6))\n# axes = fig.subplots(1, 3)\ntemp = train_df[['patient_id', 'target']].groupby('patient_id').sum()\nsns.countplot(x='target', data=temp)\nplt.show()\nprint(\"Values\")\ntemp.reset_index().groupby('target').count()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"temp = train_df[['patient_id', 'target']].groupby('patient_id').sum()\ntemp.reset_index(inplace=True)\ntemp.target = temp.target.apply(lambda x: 1 if x != 0 else 0)\nprint(temp.shape)\ntemp = temp.merge(train_df[['patient_id', 'sex']].drop_duplicates(), on='patient_id', how='left')\n\nsns.countplot(x='target', hue='sex', data=temp)\nplt.title('Sex Based Malignamt Patients Distibution');","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import random\nfrom PIL import Image\nimg_name = random.choice(train_df.image_name.tolist())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Reading JPG Image","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"img = Image.open(os.path.join(PATH, \"jpeg/train\", img_name+'.jpg'))\nplt.imshow(np.array(img))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Working with Dicom Image\n#### DICOM (Digital Imaging and Communications in Medicine) is the international standard to transmit, store, retrieve, print, process, and display medical imaging information.\n\nModality: https://wiki.cancerimagingarchive.net/display/Public/DICOM+Modality+Abbreviations\n\nMore Info: https://dicom.innolitics.com/ciods/ct-image/image-pixel/00280004","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"image_data = pydicom.dcmread(os.path.join(PATH, \"train\", img_name+'.dcm'))\nimage_data","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"\n### Utility Functions","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"def read_dicom_image(img_name, train=True):\n    if train:\n        img_path = os.path.join(PATH, \"train\", img_name+'.dcm')\n    else:\n        img_path = os.path.join(PATH, \"test\", img_name+'.dcm')\n    image_data = pydicom.dcmread(img_path)\n\n    img_data = {\n            \"patient_name\": image_data.PatientName,\n            \"patient_id\": image_data.PatientID,\n            \"modality\": image_data.Modality,\n            \"sex\": image_data.PatientSex,\n            \"image_name\": image_data.StudyID,\n            \"rows\": int(image_data.Rows),\n            \"cols\": int(image_data.Columns),\n            \"body_part_examined\": image_data.BodyPartExamined,\n            \"age\": int(image_data.PatientAge.replace('Y', '')),\n            }\n\n    return image_data.pixel_array, img_data\n\ndef show_dicom_image(img):\n    plt.imshow(img, cmap=plt.cm.bone)\n    plt.show()\n    \ndef show_image(img_name, train=True):\n    if train:\n        img_path = os.path.join(PATH, \"jpeg/train\", img_name+'.jpg')\n    else:\n        img_path = os.path.join(PATH, \"jpeg/test\", img_name+'.jpg')\n\n    img = Image.open(img_path)\n    plt.imshow(np.array(img))\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"img, img_data =read_dicom_image('ISIC_0149568')\nshow_dicom_image(img)\nimg_data","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### One Paitient Sample Visualization","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"temp = train_df[['patient_id', 'image_name']].groupby('patient_id').count()\ntemp = temp.merge(train_df[['patient_id', 'target']].drop_duplicates(), on='patient_id', how='left')\ntemp[(temp.target == 1) & (temp.image_name == 6)].head(2)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### JPG Images","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"fig = plt.figure(figsize=(16,6))\naxes = fig.subplots(2, 3)\n\nfor i, row in train_df[train_df.patient_id == 'IP_0274810'].reset_index().iterrows():\n    img_path = os.path.join(PATH, \"jpeg/train\", row.image_name+'.jpg')\n    axes[i//3][i%3].imshow(np.array(Image.open(img_path)))\n    axes[i//3][i%3].set_title(row.benign_malignant)\nplt.show()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### Dicom Images","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"fig = plt.figure(figsize=(16,6))\naxes = fig.subplots(2, 3)\n\nfor i, row in train_df[train_df.patient_id == 'IP_0274810'].reset_index().iterrows():\n    img_path = os.path.join(PATH, \"jpeg/train\", row.image_name+'.jpg')\n    img, _ = read_dicom_image(row.image_name)\n    axes[i//3][i%3].imshow(img, cmap=plt.cm.bone)\n    axes[i//3][i%3].set_title(row.benign_malignant)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Test Data","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df = pd.read_csv('/kaggle/input/siim-isic-melanoma-classification/test.csv')\nprint(test_df.shape)\ntest_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(\"Number of Train Images: \", test_df.image_name.nunique())\nprint(\"Number of Train Patirnts: \", test_df.patient_id.nunique())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}