{"metadata":{"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30732,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# *在这个notebook中我们将会逐渐了解每一个信息，在最后将这些信息综合起来成为一个全面的csv文件*","metadata":{}},{"cell_type":"markdown","source":"# 调查train.csv","metadata":{}},{"cell_type":"code","source":"import pandas as pd\n\n# 读取train.csv文件\ntrain_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train.csv')\n\n# 显示前几行数据\ntrain_df\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:16:57.865065Z","iopub.execute_input":"2024-06-14T08:16:57.865438Z","iopub.status.idle":"2024-06-14T08:16:59.228502Z","shell.execute_reply.started":"2024-06-14T08:16:57.865409Z","shell.execute_reply":"2024-06-14T08:16:59.227219Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 将标签列转换为整数类型的数值（0: Normal/Mild, 1: Moderate, 2: Severe）\nseverity_mapping = {\n    'Normal/Mild': 0,\n    'Moderate': 1,\n    'Severe': 2\n}\n\nfor col in train_df.columns[1:]:\n    train_df[col] = train_df[col].map(severity_mapping)\n\n# 显示转换后的数据\ntrain_df.head()\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:17:09.915068Z","iopub.execute_input":"2024-06-14T08:17:09.915465Z","iopub.status.idle":"2024-06-14T08:17:09.990695Z","shell.execute_reply.started":"2024-06-14T08:17:09.915434Z","shell.execute_reply":"2024-06-14T08:17:09.989569Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 检查数据集中的缺失值情况\nmissing_values = train_df.isnull().sum()\n\n# 显示缺失值信息\nmissing_values[missing_values > 0]\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:17:15.646457Z","iopub.execute_input":"2024-06-14T08:17:15.646869Z","iopub.status.idle":"2024-06-14T08:17:15.661326Z","shell.execute_reply.started":"2024-06-14T08:17:15.646833Z","shell.execute_reply":"2024-06-14T08:17:15.660262Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"保险起见不要动","metadata":{}},{"cell_type":"markdown","source":"标签名如 `left_subarticular_stenosis_l5_s1` 是由三个部分组成的，分别表示：\n1. **位置（Location）**：\n   - `left` 表示标签在脊柱的左侧（与 `right` 对应）。\n   \n2. **病情类型（Condition Type）**：\n   - `subarticular_stenosis` 表示椎间孔狭窄。这是一种脊柱疾病，指的是椎间孔（椎骨之间的开口）变窄，可能压迫通过该孔的神经根。\n   \n3. **椎间盘水平（Disc Level）**：\n   - `l5_s1` 表示标签对应的是第五腰椎和第一骶椎之间的椎间盘水平。常见的椎间盘水平包括 `l1_l2`, `l2_l3`, `l3_l4`, `l4_l5`, 和 `l5_s1`。\n\n因此，`left_subarticular_stenosis_l5_s1` 可以解释为：\n- 左侧椎间孔狭窄，发生在第五腰椎和第一骶椎之间。\n\n类似的，其他标签也遵循这种命名规则，例如：\n- `right_neural_foraminal_narrowing_l2_l3`：右侧神经孔狭窄，发生在第二腰椎和第三腰椎之间。\n- `spinal_canal_stenosis_l4_l5`：椎管狭窄，发生在第四腰椎和第五腰椎之间。\n\n这些标签描述了不同类型的脊柱退行性疾病及其在脊柱上的具体位置，有助于精确定位病变区域和严重程度。","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns\n\n# 绘制标签分布图\nfig, axes = plt.subplots(nrows=5, ncols=5, figsize=(20, 20))\nfig.suptitle('Severity Distribution of Each Condition', fontsize=16)\n\nconditions = train_df.columns[1:]\nfor i, condition in enumerate(conditions):\n    ax = axes[i // 5, i % 5]\n    sns.countplot(data=train_df, x=condition, ax=ax)\n    ax.set_title(condition)\n    ax.set_xlabel('')\n    ax.set_ylabel('Count')\n\nplt.tight_layout(rect=[0, 0, 1, 0.96])\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:17:22.791472Z","iopub.execute_input":"2024-06-14T08:17:22.791909Z","iopub.status.idle":"2024-06-14T08:17:29.429128Z","shell.execute_reply.started":"2024-06-14T08:17:22.791875Z","shell.execute_reply":"2024-06-14T08:17:29.427472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 调查train_label_coordinates","metadata":{}},{"cell_type":"code","source":"# 读取train_label_coordinates.csv文件进行调查\ntrain_label_coordinates_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv')\n\n# 显示\ntrain_label_coordinates_df\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:18:20.257600Z","iopub.execute_input":"2024-06-14T08:18:20.258056Z","iopub.status.idle":"2024-06-14T08:18:20.410304Z","shell.execute_reply.started":"2024-06-14T08:18:20.258016Z","shell.execute_reply":"2024-06-14T08:18:20.409049Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### `train_label_coordinates.csv` 文件概览\n该文件包含每个图像的标签坐标信息。每行记录一个标签的详细信息，包括研究ID、系列ID、图像在3D堆栈中的顺序号、病情类型、椎间盘水平以及标签区域的中心坐标。\n\n#### 列说明\n- **study_id**: 研究ID。\n- **series_id**: 图像系列ID。\n- **instance_number**: 图像dcm文件夹中的顺序号。\n- **condition**: 病情类型，如椎管狭窄（Spinal Canal Stenosis）。\n- **level**: 椎间盘水平，如L1/L2。\n- **x**: 标签区域中心的x坐标。\n- **y**: 标签区域中心的y坐标。","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport pydicom\nimport matplotlib.pyplot as plt\nimport random\n\n# 读取 train_label_coordinates.csv 文件\ntrain_label_coordinates_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv')\n\n# 随机选择一行\nrandom_row = train_label_coordinates_df.sample(n=1).iloc[0]\n\n# 获取随机行的信息\nstudy_id = random_row['study_id']\nseries_id = random_row['series_id']\ninstance_number = random_row['instance_number']\ncondition = random_row['condition']\nlevel = random_row['level']\nx, y = random_row['x'], random_row['y']\n\n# DICOM 文件路径\ndicom_file_path = f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{study_id}/{series_id}/{instance_number}.dcm'\n\n# 读取 DICOM 文件\ndicom_image = pydicom.dcmread(dicom_file_path)\nimage_data = dicom_image.pixel_array\nprint(f'image_data shape: {image_data.shape}')\n# 可视化图像和标签点\nplt.figure(figsize=(10, 10))\nplt.imshow(image_data, cmap='gray')\nplt.scatter([x], [y], color='red', s=100, label='Label Center')\nplt.title(f'{condition} at {level}')\nplt.xlabel('X Coordinate')\nplt.ylabel('Y Coordinate')\nplt.legend()\nplt.show()\n\n# 输出随机选择的行的信息\nrandom_row\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:18:45.654662Z","iopub.execute_input":"2024-06-14T08:18:45.655086Z","iopub.status.idle":"2024-06-14T08:18:46.806219Z","shell.execute_reply.started":"2024-06-14T08:18:45.655052Z","shell.execute_reply":"2024-06-14T08:18:46.804447Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport pydicom\nimport matplotlib.pyplot as plt\nimport random\n\n# 读取 train_label_coordinates.csv 文件\ntrain_label_coordinates_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv')\n\n# 随机选择一行\nrandom_row = train_label_coordinates_df.sample(n=1).iloc[0]\n\n# 获取随机行的信息\nstudy_id = random_row['study_id']\nseries_id = random_row['series_id']\ninstance_number = random_row['instance_number']\ncondition = random_row['condition']\nlevel = random_row['level']\nx, y = random_row['x'], random_row['y']\n\n# DICOM 文件夹路径\nseries_folder_path = f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{study_id}/{series_id}'\n\n# 检查文件夹是否存在\nif os.path.exists(series_folder_path):\n    # 获取文件夹中的所有 DICOM 文件\n    dicom_files = [f for f in os.listdir(series_folder_path) if f.endswith('.dcm')]\n    \n    # 按照文件名排序\n    dicom_files.sort(key=lambda f: int(f.split('.')[0]))\n\n    # 遍历并显示所有 DICOM 文件\n    for dicom_file in dicom_files:\n        dicom_file_path = os.path.join(series_folder_path, dicom_file)\n        \n        # 读取 DICOM 文件\n        dicom_image = pydicom.dcmread(dicom_file_path)\n        image_data = dicom_image.pixel_array\n        \n        # 获取当前切片编号\n        current_instance_number = int(dicom_file.split('.')[0])\n        \n        # 可视化图像和标签点（如果是随机选择的 instance_number）\n        plt.figure(figsize=(10, 10))\n        plt.imshow(image_data, cmap='gray')\n        \n        if current_instance_number == instance_number:\n            plt.scatter([x], [y], color='red', s=100, label='Label Center')\n            plt.title(f'{condition} at {level} (Slice {current_instance_number})')\n            plt.legend()\n        else:\n            plt.title(f'Slice {current_instance_number}')\n        \n        plt.xlabel('X Coordinate')\n        plt.ylabel('Y Coordinate')\n        plt.show()\nelse:\n    print(f'Folder not found: {series_folder_path}')\n\n# 输出随机选择的行的信息\nrandom_row\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:19:20.518898Z","iopub.execute_input":"2024-06-14T08:19:20.519331Z","iopub.status.idle":"2024-06-14T08:19:29.634258Z","shell.execute_reply.started":"2024-06-14T08:19:20.519299Z","shell.execute_reply":"2024-06-14T08:19:29.631706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 调查test_series_descriptions","metadata":{}},{"cell_type":"code","source":"# 读取\ntrain_series_descriptions_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_series_descriptions.csv')\n\n# 显示\ntrain_series_descriptions_df\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:20:34.771291Z","iopub.execute_input":"2024-06-14T08:20:34.771767Z","iopub.status.idle":"2024-06-14T08:20:34.802007Z","shell.execute_reply.started":"2024-06-14T08:20:34.771730Z","shell.execute_reply":"2024-06-14T08:20:34.800670Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"\n| study_id | series_id | series_description |\n|----------|-----------|--------------------|\n| 4003253  | 702807833 | Sagittal T2/STIR   |\n| 4003253  | 1054713880| Sagittal T1        |\n| 4003253  | 2448190387| Axial T2           |\n| 4646740  | 3201256954| Axial T2           |\n| 4646740  | 3486248476| Sagittal T1        |\n\n### 含义\n- **study_id**: 每个研究可能包含多个系列的影像。例如，`study_id` 为 `4003253` 的研究包含三个系列：`702807833`（Sagittal T2/STIR）、`1054713880`（Sagittal T1）和 `2448190387`（Axial T2）。\n- **series_id**: 每个系列的影像描述不同的扫描序列和方向。例如，`series_id` 为 `702807833` 的系列包含的是矢状面上的 T2 加权和 STIR 序列影像。\n- **series_description**: 提供了影像的扫描方向和类型的信息。\n\n### 关联\n这些信息与 `train_label_coordinates.csv` 中的标签信息关联起来，可以更好地理解每个标签在具体哪个系列的哪张影像上，以及这些影像的具体扫描方向和类型。","metadata":{}},{"cell_type":"code","source":"# 查看 series_description 列有几种不同的值\nunique_descriptions = train_series_descriptions_df['series_description'].unique()\ndescription_counts = train_series_descriptions_df['series_description'].value_counts()\n\n# 输出不同的 series_description 值及其数量\nunique_descriptions, description_counts\n\n# 作出直方分布图\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nplt.figure(figsize=(10, 6))\nsns.countplot(data=train_series_descriptions_df, y='series_description', order=description_counts.index)\nplt.title('Distribution of Series Descriptions')\nplt.xlabel('Count')\nplt.ylabel('Series Description')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:20:58.941737Z","iopub.execute_input":"2024-06-14T08:20:58.942190Z","iopub.status.idle":"2024-06-14T08:20:59.215592Z","shell.execute_reply.started":"2024-06-14T08:20:58.942143Z","shell.execute_reply":"2024-06-14T08:20:59.214463Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 合并series_description","metadata":{}},{"cell_type":"code","source":"import pandas as pd\n\n# 读取两个CSV文件\ntrain_series_descriptions_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_series_descriptions.csv')\ntrain_label_coordinates_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv')\n\n# 初始化一个新的列，用于存储series_description\ntrain_label_coordinates_df['series_description'] = ''\n\n# 创建一个字典用于查找series_description\ndescription_dict = {}\nfor idx, row in train_series_descriptions_df.iterrows():\n    key = (row['study_id'], row['series_id'])\n    description_dict[key] = row['series_description']\n\n# 遍历train_label_coordinates_df并添加series_description\nfor idx, row in train_label_coordinates_df.iterrows():\n    key = (row['study_id'], row['series_id'])\n    if key in description_dict:\n        train_label_coordinates_df.at[idx, 'series_description'] = description_dict[key]\n\n# 显示前几行数据以检查结果\ntrain_label_coordinates_df\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:21:31.463209Z","iopub.execute_input":"2024-06-14T08:21:31.463618Z","iopub.status.idle":"2024-06-14T08:21:36.868313Z","shell.execute_reply.started":"2024-06-14T08:21:31.463586Z","shell.execute_reply":"2024-06-14T08:21:36.866938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 调查合并信息","metadata":{}},{"cell_type":"code","source":"# 保存合并信息后的表格为csv\ntrain_label_coordinates_df.to_csv('train_converted.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:22:11.609037Z","iopub.execute_input":"2024-06-14T08:22:11.609488Z","iopub.status.idle":"2024-06-14T08:22:12.123780Z","shell.execute_reply.started":"2024-06-14T08:22:11.609453Z","shell.execute_reply":"2024-06-14T08:22:12.122265Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 读取保存的 train_converted.csv 文件\ntrain_converted_df = pd.read_csv('train_converted.csv')\n\n# 显示前几行数据\ntrain_converted_df.head()\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:22:23.335550Z","iopub.execute_input":"2024-06-14T08:22:23.335999Z","iopub.status.idle":"2024-06-14T08:22:23.436193Z","shell.execute_reply.started":"2024-06-14T08:22:23.335948Z","shell.execute_reply":"2024-06-14T08:22:23.434893Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport pydicom\nimport matplotlib.pyplot as plt\nimport os\n\n# 读取保存的 train_converted.csv 文件\ntrain_converted_df = pd.read_csv('train_converted.csv')\n\n# 随机选择一个 series_id\nrandom_series_id = train_converted_df['series_id'].sample(n=1).iloc[0]\n\n# 获取该 series_id 下的所有 instance_number\nseries_df = train_converted_df[train_converted_df['series_id'] == random_series_id]\n\n# 获取 study_id 和 series_description\nstudy_id = series_df['study_id'].iloc[0]\nseries_description = series_df['series_description'].iloc[0]\n\n# 可视化每个 instance_number\nfor idx, row in series_df.iterrows():\n    instance_number = row['instance_number']\n    condition = row['condition']\n    level = row['level']\n    x, y = row['x'], row['y']\n    \n    # DICOM 文件路径\n    dicom_file_path = f'/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/{study_id}/{random_series_id}/{instance_number}.dcm'\n    \n    # 读取 DICOM 文件\n    if os.path.exists(dicom_file_path):\n        dicom_image = pydicom.dcmread(dicom_file_path)\n        image_data = dicom_image.pixel_array\n        resolution = image_data.shape\n        \n        # 可视化图像和标签点\n        plt.figure(figsize=(10, 10))\n        plt.imshow(image_data, cmap='gray')\n        plt.scatter([x], [y], color='red', s=100, label='Label Center')\n        plt.title(f'{condition} at {level}\\nSeries: {series_description}\\nResolution: {resolution}')\n        plt.xlabel('X Coordinate')\n        plt.ylabel('Y Coordinate')\n        plt.legend()\n        plt.show()\n    else:\n        print(f'File not found: {dicom_file_path}')\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:22:46.945281Z","iopub.execute_input":"2024-06-14T08:22:46.945679Z","iopub.status.idle":"2024-06-14T08:22:53.743417Z","shell.execute_reply.started":"2024-06-14T08:22:46.945647Z","shell.execute_reply":"2024-06-14T08:22:53.742091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 调查condition的种类和椎间盘水平的种类","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# 读取保存的 train_converted.csv 文件\ntrain_converted_df = pd.read_csv('train_converted.csv')\n\n# 查看 condition 列和 level 列的种类数量\ncondition_counts = train_converted_df['condition'].value_counts()\nlevel_counts = train_converted_df['level'].value_counts()\n\n# 输出 condition 和 level 列的种类数量\nprint(f'Condition Counts:\\n{condition_counts}\\n')\nprint(f'Level Counts:\\n{level_counts}\\n')\n\n# 可视化 overall condition 分布\nplt.figure(figsize=(10, 6))\nsns.countplot(data=train_converted_df, y='condition', order=condition_counts.index)\nplt.title('Overall Distribution of Conditions')\nplt.xlabel('Count')\nplt.ylabel('Condition')\nplt.show()\n\n# 可视化 overall level 分布\nplt.figure(figsize=(10, 6))\nsns.countplot(data=train_converted_df, y='level', order=level_counts.index)\nplt.title('Overall Distribution of Levels')\nplt.xlabel('Count')\nplt.ylabel('Level')\nplt.show()\n\n# 可视化每个 condition 对应的 level 分布\nunique_conditions = train_converted_df['condition'].unique()\n\nfor condition in unique_conditions:\n    plt.figure(figsize=(10, 6))\n    subset_df = train_converted_df[train_converted_df['condition'] == condition]\n    level_counts_subset = subset_df['level'].value_counts()\n    sns.countplot(data=subset_df, y='level', order=level_counts_subset.index)\n    plt.title(f'Distribution of Levels for Condition: {condition}')\n    plt.xlabel('Count')\n    plt.ylabel('Level')\n    plt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:23:34.318904Z","iopub.execute_input":"2024-06-14T08:23:34.319333Z","iopub.status.idle":"2024-06-14T08:23:36.143889Z","shell.execute_reply.started":"2024-06-14T08:23:34.319299Z","shell.execute_reply":"2024-06-14T08:23:36.142790Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 合并train.csv和train_converted.csv","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nfrom tqdm import tqdm\n\n# 读取 train.csv 和 train_converted.csv 文件\ntrain_df = pd.read_csv('/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train.csv')\ntrain_converted_df = pd.read_csv('train_converted.csv')\n\n# 将 train.csv 中的列名映射到 train_converted.csv 中的 condition 和 level\ncondition_mapping = {\n    'spinal_canal_stenosis': 'Spinal Canal Stenosis',\n    'left_neural_foraminal_narrowing': 'Left Neural Foraminal Narrowing',\n    'right_neural_foraminal_narrowing': 'Right Neural Foraminal Narrowing',\n    'left_subarticular_stenosis': 'Left Subarticular Stenosis',\n    'right_subarticular_stenosis': 'Right Subarticular Stenosis'\n}\n\n# 遍历 train.csv 的每一行\nfor idx, row in tqdm(train_df.iterrows(), total=train_df.shape[0], desc='Processing train.csv'):\n    study_id = row['study_id']\n    \n    for condition_level in train_df.columns[1:]:\n        # 提取 condition 和 level 信息\n        condition_key, level = '_'.join(condition_level.split('_')[:-2]), '_'.join(condition_level.split('_')[-2:])\n        condition = condition_mapping.get(condition_key, condition_key.replace('_', ' ').title())\n        severity = row[condition_level]\n        \n        # 处理 level，将字母大写并将 _ 替换为 /\n        level_formatted = level.upper().replace('_', '/')\n        \n        # 打印解析后的信息\n        # print(f\"Study ID: {study_id}, Condition: {condition}, Level: {level_formatted}, Severity: {severity}\")\n        \n        # 查找并更新 train_converted_df 中对应的行\n        mask = (train_converted_df['study_id'] == study_id) & \\\n               (train_converted_df['condition'] == condition) & \\\n               (train_converted_df['level'] == level_formatted)\n        \n        # 更新严重程度数据\n        train_converted_df.loc[mask, 'severity'] = severity\n\n# 保存更新后的 train_converted_df 到一个新的文件中\ntrain_converted_df.to_csv('train_converted_updated.csv', index=False)\n\n# 显示更新后的部分数据以确认更新正确\nprint(train_converted_df.head())\n","metadata":{"execution":{"iopub.status.busy":"2024-06-14T08:23:59.709907Z","iopub.execute_input":"2024-06-14T08:23:59.710379Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_converted_df\n","metadata":{},"execution_count":null,"outputs":[]}]}