{"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":"import os\nimport pandas as pd\nimport pydicom as dicom\nfrom glob import glob","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Fast Look into a Data Sample","metadata":{}},{"cell_type":"code","source":"file_path = '/kaggle/input/siim-covid19-detection/train/00086460a852/9e8302230c91/65761e66de9f.dcm'\ndata = dicom.dcmread(file_path)\ndata","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"We can access metadata by looping through elements:","metadata":{}},{"cell_type":"code","source":"for i,elem in enumerate(data.elements()):\n     print(i, elem, '\\t', type(elem))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"More mteadata can be found in **'file_meta'** attribute:","metadata":{}},{"cell_type":"code","source":"list(data.file_meta.elements())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Extracting the Meta-Data","metadata":{}},{"cell_type":"code","source":"def extractMetaData(file_path):\n    data = dicom.dcmread(file_path)\n    data.decode()  # to access the elements data should be decoded from raw format\n    elements = {e.keyword:e.value for e in data.elements() if not e.name in ['Pixel Data', 'Private Creator', 'De-identification Method']}\n    for e in elements:\n        elements[e] = list(elements[e]) if isinstance(elements[e], dicom.multival.MultiValue) else str(elements[e])\n    data.file_meta.decode()\n    elements.update({e.keyword:str(e.value) for e in data.file_meta.elements()})\n    elements['PrivateCreator'] = [e.value for e in data.elements() if e.name=='Private Creator']\n    elements['DeidentificationMethodCodeSequence'] = [DMC.CodeValue for DMC in data.DeidentificationMethodCodeSequence]\n    elements['file_path'] = file_path\n    return elements\n\nmetainfo = extractMetaData(file_path)\nmetainfo","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## important note\nThe study-id, series, and image-id are stored in the following attributes:","metadata":{}},{"cell_type":"code","source":"file_path, [metainfo[k] for k in ['StudyInstanceUID', 'SeriesInstanceUID', 'SOPInstanceUID']]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Making the Dataset","metadata":{}},{"cell_type":"code","source":"Files = glob('/kaggle/input/siim-covid19-detection/train/*/*/*.dcm')\nlen(Files)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data = pd.DataFrame((extractMetaData(file_path) for file_path in Files))\nprint(Data.shape)\nData.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.to_csv('siim_2021_train_metadata.csv', index=False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Files = glob('/kaggle/input/siim-covid19-detection/test/*/*/*.dcm')\nData_ts = pd.DataFrame((extractMetaData(file_path) for file_path in Files))\nData_ts.to_csv('siim_2021_test_metadata.csv', index=False)\nData_ts.shape","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}