{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"\n'''\nIn this code we use the train_series_descriptions.csv and add other information from other csv files and save  as \na single csv file as a dataset_description.csv file and we only work with this csv file to the end of this repository.\n\n\nATTENTON: All the csv file should be put in folder of data in main directory.\n\n'''\n\n\n\n\n\n## Add series_description\n\nData_path='../Data'\nData_path='../input/rsna-2024-lumbar-spine-degenerative-classification'\n\nimport pandas as pd\n\n# Read the two CSV files\ntrain_label_coordinates = pd.read_csv(f'{Data_path}/train_label_coordinates.csv')\ntrain_series_descriptions = pd.read_csv(f'{Data_path}/train_series_descriptions.csv')\n# Merge the two dataframes on 'study_id' and 'series_id'\nmerged_csv = pd.merge(train_label_coordinates, train_series_descriptions[['study_id', 'series_id', 'series_description']], \n                      on=['study_id', 'series_id'], how='left')\n\n# Save the resulting dataframe to a new CSV file\n\n\n\n\n\n## Add score \n\n\nimport pandas as pd\n\n# Step 1: Read the updated CSV file (file1_with_series_description.csv) and the third CSV file (Train.csv)\nupdated_df = merged_csv\ntrain_df = pd.read_csv(f'{Data_path}/train.csv')\n\n# Step 2: Define a function to fetch the score based on 'study_id' and 'condition'\ndef get_score(row):\n    study_id = row['study_id']\n    condition = row['condition']\n    level = row['level']\n\n    level_1=level.split('/')[0]\n    level_2=level.split('/')[1]\n\n    condition_level= f'{condition}_{level_1}_{level_2}'\n\n    condition_level= condition_level.replace(' ','_')\n\n    condition_level=condition_level.lower()\n    \n    \n    # Check if the 'study_id' exists in the Train.csv and if the 'condition' is a valid column\n    if study_id in train_df['study_id'].values and condition_level in train_df.columns:\n        # Return the value in the 'condition' column for the given 'study_id'\n        return train_df.loc[train_df['study_id'] == study_id, condition_level].values[0]\n    else:\n        return None  # Return None if no match is found\n\n# Step 3: Apply the function to each row of the updated dataframe\nupdated_df['score'] = updated_df.apply(get_score, axis=1)\n\n# Step 4: Save the updated dataframe with the new 'score' column to a new CSV file\nupdated_df.to_csv('dataset_description.csv', index=False)\n\nprint(\"New CSV with the 'score' column has been created.\")\nimport os\noutput_dir = '/kaggle/working/data_condition_splitting'\n\n# Eğer klasör yoksa oluştur\nif not os.path.exists(output_dir):\n    os.makedirs(output_dir)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T18:20:56.452285Z","iopub.execute_input":"2024-12-17T18:20:56.453118Z","iopub.status.idle":"2024-12-17T18:21:12.068973Z","shell.execute_reply.started":"2024-12-17T18:20:56.453083Z","shell.execute_reply":"2024-12-17T18:21:12.067697Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n\n'''\nIn this code we want to splitting the csv file data to three sperated csv file based on the condition.\n\n'''\n\n\n\n\n\ncsv_file='/kaggle/working'\n\n\nimport pandas as pd\n\n# Load the original CSV file\ndf = pd.read_csv(f'{csv_file}/dataset_description.csv')\n\n# Define conditions for each group\ncondition_groups = {\n    'Spinal Canal Stenosis': ['Spinal Canal Stenosis'],\n    'Neural Foraminal Narrowing': ['Right Neural Foraminal Narrowing', 'Left Neural Foraminal Narrowing'],\n    'Subarticular Stenosis': ['Right Subarticular Stenosis', 'Left Subarticular Stenosis']\n}\n\n# Split and save to separate CSV files\nfor group_name, conditions in condition_groups.items():\n    # Filter rows based on condition\n    filtered_df = df[df['condition'].isin(conditions)]\n    # Save to new CSV file\n    group_name_save=group_name.replace(' ','_')\n    file_path = f\"{output_dir}/{group_name_save}.csv\"\nprint(\"CSV files have been split and saved.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T18:25:45.144080Z","iopub.execute_input":"2024-12-17T18:25:45.144763Z","iopub.status.idle":"2024-12-17T18:25:45.241630Z","shell.execute_reply.started":"2024-12-17T18:25:45.144727Z","shell.execute_reply":"2024-12-17T18:25:45.240602Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n\nimport pandas as pd\nfrom sklearn.model_selection import StratifiedKFold\n\n\n\n\ndef cross_validation(csv_file,results_name):\n\n\n# Load your CSV file into a pandas DataFrame\n    df = pd.read_csv(f'{csv_file}')\n\n    # Concatenate 'condition' and 'level' to create a unique class for each combination\n    df['condition_level'] = df['condition'] + '_' + df['level']\n\n    # Now, we can assign numeric class labels if needed\n    df['class_id'] = df['condition_level'].astype('category').cat.codes\n\n    # Prepare for 5-fold stratified split\n    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)\n\n    # Split the data\n    df['fold'] = -1  # Initialize the fold column\n\n    # Assign fold numbers\n    for fold, (train_idx, val_idx) in enumerate(skf.split(df, df['class_id'])):\n        df.loc[val_idx, 'fold'] = fold\n\n    # Now, 'df' contains a 'fold' column that indicates the fold assignment (0-4)\n    # Save the new CSV with fold numbers if necessary\n    df.to_csv(f'{results_name}.csv', index=False)\n\n    print(\"Data has been split into 5 folds and saved as 'your_file_with_folds.csv'\")\n\n\n\ncross_validation('/kaggle/working/data_condition_splitting/Spinal_Canal_Stenosis.csv','Spinal_Canal_Stenosis_folds')\n\ncross_validation('/kaggle/working/data_condition_splitting/Neural_Foraminal_Narrowing.csv','Neural_Foraminal_Narrowing_folds')\n\ncross_validation('/kaggle/working/data_condition_splitting/Subarticular_Stenosis.csv','Subarticular_Stenosis_folds')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-17T18:12:39.746377Z","iopub.execute_input":"2024-12-17T18:12:39.747120Z","iopub.status.idle":"2024-12-17T18:12:39.865117Z","shell.execute_reply.started":"2024-12-17T18:12:39.747083Z","shell.execute_reply":"2024-12-17T18:12:39.863627Z"}},"outputs":[],"execution_count":null}]}