{"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":"code","source":"#Menghapus Folder\nimport shutil\n\nif os.path.exists('/kaggle/working/ReadyData'):\n    shutil.rmtree('/kaggle/working/ReadyData')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install -U python-gdcm\n!pip install pylibjpeg\n!pip install pylibjpeg-libjpeg\n\n\nimport tensorflow as tf\nimport numpy as np\nimport pandas as pd\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\nfrom skimage.feature import graycomatrix, graycoprops\n\nimport gdcm\n\nimport pandas as pd\nimport numpy as np\n\nimport pydicom\nfrom PIL import Image\n\nimport os\n\nimport shutil\nfrom shutil import make_archive\nfrom zipfile import ZipFile\n\n# path_sample = '/kaggle/input/rsna-breast-cancer-detection/sample_submission.csv'\n# path_test = '/kaggle/input/rsna-breast-cancer-detection/test.csv'\n# path_train = '/kaggle/input/rsna-breast-cancer-detection/train.csv'\n\n# df_sample_submission = pd.read_csv(path_sample)\n# df_test = pd.read_csv(path_test)\n# df_train = pd.read_csv(path_train)\n\n# df_train = df_train.set_index('image_id')\n\n# os.mkdir('/kaggle/working/ReadyData')\n# os.mkdir('/kaggle/working/ReadyData/1')\n# os.mkdir('/kaggle/working/ReadyData/0')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Mengolah Data Gambar","metadata":{}},{"cell_type":"code","source":"# def get_data_ready(start_index , end_index) :\n#     i = 0\n#     for patient in list(df_train['patient_id']) :\n#         list_of_files = os.listdir('/kaggle/input/rsna-breast-cancer-detection/train_images/'+str(patient))\n#         for file in list_of_files :\n#             if i >= start_index and i<= end_index :\n#                 file = file.replace('.dcm',\"\")\n#                 label = df_train.loc[int(file) , 'cancer']\n                \n#                 if label == 0 :\n#                     #try :\n#                     im = pydicom.dcmread('/kaggle/input/rsna-breast-cancer-detection/train_images/'+str(patient)+'/'+str(file)+'.dcm').pixel_array\n#                     rescaled_image = (np.maximum(im, 0) / im.max())*255 # Rescaling the image, put their values between 0 and 255\n#                     final_image = np.uint8(rescaled_image) # Convert int\n#                     final_image = Image.fromarray(final_image) # Creater image from an array\n#                     final_image = final_image.resize((500,500))\n#                     final_image.save('/kaggle/working/ReadyData/0/'+str(i)+'.png')\n#                     print('image number {}'.format(str(i)))\n#                     #except :\n#                     #num_fails = num_fails + 1\n#                     #print('a class 0 fail occured , total num_fails is now : {}'.format(num_fails))\n            \n#                 if label == 1 :\n#                     #try :\n#                     im = pydicom.dcmread('/kaggle/input/rsna-breast-cancer-detection/train_images/'+str(patient)+'/'+str(file)+'.dcm').pixel_array\n#                     rescaled_image = (np.maximum(im, 0) / im.max())*255 # Rescaling the image, put their values between 0 and 255\n#                     final_image = np.uint8(rescaled_image) # Convert int\n#                     final_image = Image.fromarray(final_image) # Creater image from an array\n#                     final_image = final_image.resize((500,500))\n#                     final_image.save('/kaggle/working/ReadyData/1/'+str(i)+'.png')\n#                     print('image number {}'.format(str(i)))\n#                     #except :\n#                     #    num_fails = num_fails + 1\n#                     #print('a class 1 fail occured, total num fails is now : {}'.format(num_fails))\n                \n#                 i = i + 1\n                    \n#             else :\n#                 i = i + 1\n                \n# get_data_ready(10000,20000)\n\n# file = \"EXT2\"  # zip file name\n# directory = \"/kaggle/working/ReadyData\"\n# # make_archive(file, \"zip\", directory)  # zipping the directory\n\n# # shutil.rmtree('/kaggle/working/ReadyData')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# file = \"EXT2\"  # zip file name\n# directory = \"/kaggle/working/ReadyData\"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# file_path = os.path.join('/kaggle/input/rsna-breast-cancer/0', file)\n# print(\"Mencoba membuka file:\", file_path)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Ekstraksi Fitur GLCM","metadata":{}},{"cell_type":"code","source":"def extract_train_features(parameters_list) :\n    i = 0\n    extracted_data = pd.DataFrame()\n    \n    for file in os.listdir('/kaggle/input/rsna-breast-cancer/0') :\n        i = i + 1\n        image = Image.open('/kaggle/input/rsna-breast-cancer/0/'+file)\n        image = image.convert('L')\n        for element in parameters_list :\n            glcm = graycomatrix(image , distances=[element[0]], angles=[element[1]], levels=256, symmetric=True, normed=True)\n            extracted_data.append(pd.Series(name=i))\n            column_name = str(element[2])\n            extracted_data.at[i,column_name] = graycoprops(glcm, element[3])[0, 0]\n            extracted_data.at[i,'label'] = 0\n        \n\n    for file in os.listdir('/kaggle/input/rsna-breast-cancer/1') :\n        i = i + 1\n        image = Image.open('/kaggle/input/rsna-breast-cancer/1/'+file)\n        image = image.convert('L')\n        for element in parameters_list :\n            glcm = graycomatrix(image , distances=[element[0]], angles=[element[1]], levels=256, symmetric=True, normed=True)\n            extracted_data.append(pd.Series(name=i))\n            column_name = str(element[2])\n            extracted_data.at[i,column_name] = graycoprops(glcm, element[3])[0, 0]\n            extracted_data.at[i,'label'] = 1\n        \n#    extracted_data = extracted_data.drop(0)\n\n\n    column_names = extracted_data.columns.values.tolist()\n    for column in column_names :\n#         extracted_data[column] = extracted_data[column].astype(float)\n\n\n\n    \n    #extracted_data = extracted_data[extracted_data['dissimilarity_1_0'] != 0]\n    return extracted_data\n\nparameters_list = [(50 , 0 , 'dissimilarity_50_0' , 'dissimilarity' ),\\\n                   (60 , 0 , 'dissimilarity_60_0' , 'dissimilarity'),\\\n                   (70 , 0 , 'dissimilarity_3_0' , 'dissimilarity'),\\\n                   (80 , 0 , 'dissimilarity_4_0' , 'dissimilarity'),\n                   (1,np.pi/4,'dissimilarity_1_quarter_pi' , 'dissimilarity'),\\\n                   (1,np.pi/2,'dissimilarity_1_half_pi' , 'dissimilarity'),\\\n                   (1 , 3*np.pi/4 , 'dissimilarity_1_threequarters_pi' , 'dissimilarity'),\\\n                   (1 , np.pi , 'dissimilarity_1_pi' , 'dissimilarity'), \\\n                   (1 , 0 , 'correlation_1_0' , 'correlation'), \\\n                   (2 , 0 , 'correlation_2_0' , 'correlation'), \\\n                   (3 , 0 , 'correlation_3_0' , 'correlation'), \\\n                   (4 , 0 , 'correlation_4_0' , 'correlation'), \\\n                   (1 , np.pi/4,'correlation_1_quarter_pi' , 'correlation'),\\\n                   (1 , np.pi/2,'correlation_1_half_pi' , 'correlation'),\\\n                   (1 , 3*np.pi/4,'correlation_1_threequarters_pi' , 'correlation'),\\\n                   (1 , np.pi ,'correlation_1_pi' , 'correlation'),]\n\n    extracted_data['label'] = extracted_data['label'].astype(int)\n\nextract_train_features(parameters_list).to_csv('/kaggle/working/breast_cancer_dataset.csv')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Alternatif Ekstraksi GLCM","metadata":{}},{"cell_type":"code","source":"# import os\n# import pandas as pd\n# import numpy as np\n# from PIL import Image\n# from skimage.feature import graycomatrix, graycoprops\n\n# def extract_train_features(parameters_list):\n#     i = 0\n#     extracted_data = pd.DataFrame()\n\n#     for label in [0, 1]:\n#         path = '/kaggle/input/rsna-breast-cancer/' + str(label)\n#         for file in os.listdir(path):\n#             i += 1\n#             image = Image.open(os.path.join(path, file))\n#             image = image.convert('L')\n            \n#             for element in parameters_list:\n#                 glcm = graycomatrix(image, distances=[element[0]], angles=[element[1]], levels=256, symmetric=True, normed=True)\n#                 extracted_data = extracted_data.append(pd.Series(name=i))\n#                 column_name = str(element[2])\n#                 extracted_data.at[i, column_name] = graycoprops(glcm, 'dissimilarity')[0, 0]\n\n#                 # Menghitung entropy\n#                 glcm_entropy = -np.sum(glcm * np.log2(glcm + np.finfo(float).eps))\n\n#                 # Menghitung homogeneity\n#                 glcm_homogeneity = np.sum(glcm / (1.0 + np.abs(np.subtract.outer(range(256), range(256)))))\n\n#                 # Menghitung contrast\n#                 i, j = np.ogrid[0:256, 0:256]\n#                 glcm_contrast = np.sum(glcm * np.abs(i - j) ** 2)\n\n#                 # Simpan hasilnya dalam DataFrame\n#                 extracted_data.at[i, 'entropy'] = glcm_entropy\n#                 extracted_data.at[i, 'homogeneity'] = glcm_homogeneity\n#                 extracted_data.at[i, 'contrast'] = glcm_contrast\n\n#             extracted_data.at[i, 'label'] = label\n\n#     # Convert columns to the appropriate data types\n#     column_names = extracted_data.columns.values.tolist()\n#     for column in column_names:\n#         if column != 'label':\n#             extracted_data[column] = extracted_data[column].astype(float)\n\n#     extracted_data['label'] = extracted_data['label'].astype(int)\n\n#     return extracted_data\n\n# parameters_list = [\n#     (50, 0, 'dissimilarity_50_0', 'dissimilarity'),\n#     (60, 0, 'dissimilarity_60_0', 'dissimilarity'),\n#     # ... (other parameters)\n#     (1, np.pi / 4, 'correlation_1_quarter_pi', 'correlation'),\n#     # ... (other parameters)\n# ]\n\n# extracted_data = extract_train_features(parameters_list)\n# extracted_data.to_csv('/kaggle/working/2NEW.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}