{"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":"gpu","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30787,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\ncounter = 0  # Sayaç başlat\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n        counter += 1\n        if counter == 15:  # 15 dosya yazdırdıktan sonra dur\n            break\n    if counter == 15:  # İç döngü kırıldığında dış döngüyü de kır\n        break\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session\n# Gerekli kütüphanelerin yüklenmesi\nimport os\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport pydicom\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.metrics import classification_report\n\n# Datasets'inizi tanımlayın\ntrain_csv_path = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train.csv'\ntrain_label_coordinates_path = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_label_coordinates.csv'\ntrain_images_path = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/train_images/'\ntest_images_path = '/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/test_images/'  # Test görüntüleri için dizin\n\n# CSV dosyalarını yükleyin\ntrain_df = pd.read_csv(train_csv_path)\ntrain_coordinates_df = pd.read_csv(train_label_coordinates_path)\n\n# Tüm sınıfları belirleyin\nclasses = [\n    'spinal_canal_stenosis_l1_l2',\n    'spinal_canal_stenosis_l2_l3',\n    'spinal_canal_stenosis_l3_l4',\n    'spinal_canal_stenosis_l4_l5',\n    'spinal_canal_stenosis_l5_s1',\n    'left_neural_foraminal_narrowing_l1_l2',\n    'left_neural_foraminal_narrowing_l2_l3',\n    'left_neural_foraminal_narrowing_l3_l4',\n    'left_neural_foraminal_narrowing_l4_l5',\n    'left_neural_foraminal_narrowing_l5_s1',\n    'right_neural_foraminal_narrowing_l1_l2',\n    'right_neural_foraminal_narrowing_l2_l3',\n    'right_neural_foraminal_narrowing_l3_l4',\n    'right_neural_foraminal_narrowing_l4_l5',\n    'right_neural_foraminal_narrowing_l5_s1',\n    'left_subarticular_stenosis_l1_l2',\n    'left_subarticular_stenosis_l2_l3',\n    'left_subarticular_stenosis_l3_l4',\n    'left_subarticular_stenosis_l4_l5',\n    'left_subarticular_stenosis_l5_s1',\n    'right_subarticular_stenosis_l1_l2',\n    'right_subarticular_stenosis_l2_l3',\n    'right_subarticular_stenosis_l3_l4',\n    'right_subarticular_stenosis_l4_l5',\n    'right_subarticular_stenosis_l5_s1'\n]\ndef load_dicom_image(study_id, series_id, instance_number, img_size=(128, 128)):\n    # DICOM dosyasının yolunu oluştur\n    file_path = os.path.join(train_images_path, str(study_id), str(series_id), f\"{instance_number}.dcm\")\n    \n    # DICOM dosyasını yükle\n    dicom_image = pydicom.dcmread(file_path).pixel_array\n    \n    # Görüntüye kanal boyutunu ekleyin (tek kanallı gri görüntü)\n    dicom_image = np.expand_dims(dicom_image, axis=-1)  # (yükseklik, genişlik, kanal)\n    \n    # Görüntüyü yeniden boyutlandır ve normalize et\n    image = tf.image.resize(dicom_image, img_size) / 255.0  # Normalize to [0, 1]\n    \n    return image\n# Verileri hazırlama (görüntüleri ve etiketleri yükleme)\ndef prepare_data(train_df, target, img_size=(128, 128)):\n    images = []\n    labels = []\n    \n    for idx, row in train_df.iterrows():\n        study_id = row['study_id']\n        \n        # study_id'nin train_coordinates_df'de olup olmadığını kontrol et\n        matched_rows = train_coordinates_df[train_coordinates_df['study_id'] == study_id]\n        \n        if matched_rows.empty:\n            print(f\"Uyarı: study_id {study_id} için eşleşen koordinat bulunamadı.\")\n            continue  # Bu döngüde işlemi atla\n        \n        # Eşleşen ilk satırı al\n        series_id = matched_rows.iloc[0]['series_id']\n        instance_number = matched_rows[matched_rows['series_id'] == series_id].iloc[0]['instance_number']\n\n        # DICOM görüntüsünü yükleyin\n        image = load_dicom_image(study_id, series_id, instance_number, img_size)\n        images.append(image)\n        \n        # Hedef etiketi alın\n        label = row[target]\n        labels.append(label)\n    \n    return np.array(images), np.array(labels)\n\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n\ndef create_cnn_model(input_shape):\n    model = Sequential()\n    \n    # İlk convolutional layer\n    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n    \n    # İkinci convolutional layer\n    model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n    \n    # Üçüncü convolutional layer\n    model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))\n    model.add(MaxPooling2D(pool_size=(2, 2)))\n    \n    # Düzleştirme ve fully connected layer\n    model.add(Flatten())\n    model.add(Dense(128, activation='relu'))\n    model.add(Dropout(0.5))  # Overfitting'i engellemek için dropout kullan\n    \n    # Çıkış katmanı\n    model.add(Dense(3, activation='softmax'))  # 3 sınıf (Normal/Mild, Moderate, Severe)\n    \n    # Modeli derle\n    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n    \n    return model\n\t\n# Ana döngü \nfor target in classes:\n    print(f\"Şu an {target} etiketli veriyi işliyoruz...\")\n    \n    # Verileri hazırlayın\n    X, y = prepare_data(train_df, target)\n\n    # NaN etiketleri kaldırın\n    if pd.isnull(y).any():\n        print(f\"{target} için NaN değerler bulundu. Düşürülüyor...\")\n        non_nan_idx = ~pd.isnull(y)\n        X = X[non_nan_idx]\n        y = y[non_nan_idx]\n\n    # Etiketleri sayısal değerlere dönüştürün\n    label_mapping = {'Normal/Mild': 0, 'Moderate': 1, 'Severe': 2}\n\n    # Bilinmeyen etiketleri kontrol edelim\n    unknown_labels = [label for label in y if label not in label_mapping]\n    print(f\"Bilinmeyen etiketler: {unknown_labels}\")\n\n    # Bilinmeyen etiketler için -1 değeri verelim\n    y = np.vectorize(lambda label: label_mapping.get(label, -1))(y)\n\n    # Modelin eğitimini yapın\n    model = create_cnn_model(X.shape[1:])\n    \n    # Eğitim verisini %80, doğrulama verisini %20 olacak şekilde ayır\n    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n    \n    # Modeli eğitin\n    model.fit(X_train, y_train, validation_data=(X_val, y_val), epochs=10, batch_size=32)\n    \n    # Modeli kaydedin\n    model.save(f'model_{target}.h5')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-10-24T12:19:06.344403Z","iopub.execute_input":"2024-10-24T12:19:06.344785Z","iopub.status.idle":"2024-10-24T12:37:47.848399Z","shell.execute_reply.started":"2024-10-24T12:19:06.344751Z","shell.execute_reply":"2024-10-24T12:37:47.847493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pydicom\nimport tensorflow as tf\n\n# Test verilerini yüklemek için fonksiyon\ndef load_dicom_image(study_id, series_id, instance_number, img_size=(128, 128), is_test=True):\n    # Dosya yolunu oluştur\n    file_path = os.path.join(test_images_path, str(study_id), str(series_id), f\"{instance_number}.dcm\")\n    \n    # DICOM dosyasını yükle\n    dicom_image = pydicom.dcmread(file_path).pixel_array\n    \n    # Görüntüyü kanal boyutuyla yeniden düzenle\n    dicom_image = np.expand_dims(dicom_image, axis=-1)  # (yükseklik, genişlik, kanal)\n    \n    # Görüntüyü yeniden boyutlandır ve normalize et\n    dicom_image = tf.image.resize(dicom_image, img_size) / 255.0  # Normalize to [0, 1]\n    \n    return dicom_image\n\n# Test görüntülerini yüklemek için fonksiyon\ndef load_test_images(test_images_path, img_size=(128, 128)):\n    test_images = []\n    test_filenames = []\n    \n    # Test dizinini tarayalım\n    for study_dir in os.listdir(test_images_path):\n        study_path = os.path.join(test_images_path, study_dir)\n        \n        if os.path.isdir(study_path):\n            for series_dir in os.listdir(study_path):\n                series_path = os.path.join(study_path, series_dir)\n                \n                if os.path.isdir(series_path):\n                    for filename in os.listdir(series_path):\n                        if filename.endswith('.dcm'):  # Sadece DICOM dosyalarını al\n                            instance_number = filename.split('.')[0]  # Dosya adından instance number alın\n                            image = load_dicom_image(study_dir, series_dir, instance_number, img_size)\n                            test_images.append(image)\n                            test_filenames.append(os.path.join(study_dir, series_dir, filename))\n    \n    return np.array(test_images), test_filenames\n\n# Test verilerini yükleyin\nX_test, test_filenames = load_test_images(test_images_path)\n\n# Test veri setinin boyutunu kontrol edin\nprint(f\"Test veri setinin boyutu: {X_test.shape}\")\n\n# Eğer test verisi varsa, eğitilmiş modeli kullanarak tahmin yap\nif X_test.shape[0] > 0:\n    # Modeli yükleyin (örneğin spinal_canal_stenosis_l1_l2 sınıfı için)\n    model = tf.keras.models.load_model('model_spinal_canal_stenosis_l1_l2.h5')\n    \n    # Tahminleri yap\n    predictions = model.predict(X_test)\n    \n    # En yüksek olasılık sınıfını bulun\n    predicted_classes = np.argmax(predictions, axis=1)\n\n    # Sonuçları yazdır\n    for filename, predicted_class in zip(test_filenames, predicted_classes):\n        print(f\"{filename}: Tahmin edilen sınıf: {predicted_class}\")\nelse:\n    print(\"Tahmin yapılacak test görüntüsü yok.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:37:47.850311Z","iopub.execute_input":"2024-10-24T12:37:47.850631Z","iopub.status.idle":"2024-10-24T12:37:51.226849Z","shell.execute_reply.started":"2024-10-24T12:37:47.850598Z","shell.execute_reply":"2024-10-24T12:37:51.225870Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfrom sklearn.metrics import accuracy_score, classification_report\n\n# Test veri setinin boyutunu kontrol edin\nprint(f\"Test veri setinin boyutu: {X_test.shape}\")\n\n# Eğer test verisi yoksa tahmin yapmayın\nif X_test.shape[0] > 0:\n    # Tahminleri yap\n    predictions = model.predict(X_test)\n    predicted_classes = np.argmax(predictions, axis=1)\n\n    # Sonuçları yazdır\n    for filename, predicted_class in zip(test_filenames, predicted_classes):\n        print(f\"{filename}: {predicted_class}\")\n    \n    # Eğer etiketleriniz varsa, doğruluk hesaplama\n    # Gerçek etiketleri yükleyin (örneğin, y_test)\n    # y_test = ...  # Gerçek etiketleri buraya yükleyin\n\n    # Tahmin doğruluğunu hesapla\n    # accuracy = accuracy_score(y_test, predicted_classes)\n    # print(f\"Modelin doğruluğu: {accuracy * 100:.2f}%\")\n\n    # Sınıf dağılımını görselleştir\n    plt.figure(figsize=(10, 5))\n    plt.hist(predicted_classes, bins=np.arange(len(np.unique(predicted_classes)) + 1) - 0.5, rwidth=0.8)\n    plt.xticks(range(len(np.unique(predicted_classes))))  # Sınıf etiketlerini göster\n    plt.xlabel('Sınıf')\n    plt.ylabel('Tahmin Sayısı')\n    plt.title('Tahmin Edilen Sınıf Dağılımı')\n    plt.show()\n\n    # Sınıf raporu oluştur\n    # print(classification_report(y_test, predicted_classes))\nelse:\n    print(\"Tahmin yapılacak test görüntüsü yok.\")\n\n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:37:51.228071Z","iopub.execute_input":"2024-10-24T12:37:51.228404Z","iopub.status.idle":"2024-10-24T12:37:51.467573Z","shell.execute_reply.started":"2024-10-24T12:37:51.228369Z","shell.execute_reply":"2024-10-24T12:37:51.466261Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\n\n# Model sonuçlarını tutan bir sınıf\nclass ModelResults:\n    def __init__(self, label):\n        self.label = label\n        self.history = {\n            'accuracy': [],\n            'val_accuracy': [],\n            'loss': [],\n            'val_loss': []\n        }\n\n# Sonuçları kaydetme fonksiyonu\ndef save_results(model_results, epoch, train_accuracy, val_accuracy, train_loss, val_loss):\n    model_results.history['accuracy'].append(train_accuracy)\n    model_results.history['val_accuracy'].append(val_accuracy)\n    model_results.history['loss'].append(train_loss)\n    model_results.history['val_loss'].append(val_loss)\n\n# Görselleştirme fonksiyonu\ndef plot_results(model_results):\n    epochs = range(1, len(model_results.history['accuracy']) + 1)\n\n    plt.figure(figsize=(14, 6))\n\n    # Doğruluk grafiği\n    plt.subplot(1, 2, 1)\n    plt.plot(epochs, model_results.history['accuracy'], label='Doğruluk (Eğitim)')\n    plt.plot(epochs, model_results.history['val_accuracy'], label='Doğruluk (Doğrulama)')\n    plt.title(f\"{model_results.label} için Doğruluk\")\n    plt.xlabel('Epoch')\n    plt.ylabel('Doğruluk')\n    plt.legend()\n\n    # Kayıp grafiği\n    plt.subplot(1, 2, 2)\n    plt.plot(epochs, model_results.history['loss'], label='Kayıp (Eğitim)')\n    plt.plot(epochs, model_results.history['val_loss'], label='Kayıp (Doğrulama)')\n    plt.title(f\"{model_results.label} için Kayıp\")\n    plt.xlabel('Epoch')\n    plt.ylabel('Kayıp')\n    plt.legend()\n\n    plt.tight_layout()\n    plt.show()\n\n# Örnek kullanım\nlabels = ['spinal_canal_stenosis_l1_l2', 'spinal_canal_stenosis_l2_l3', 'spinal_canal_stenosis_l3_l4',\n          'spinal_canal_stenosis_l4_l5', 'spinal_canal_stenosis_l5_s1', 'left_neural_foraminal_narrowing_l1_l2',\n          'left_neural_foraminal_narrowing_l2_l3']\n\n# Her etiket için sonuçları saklayalım\nresults = {label: ModelResults(label) for label in labels}\n\n# Model çıktılarınızı burada kaydedin\n# save_results(results['spinal_canal_stenosis_l1_l2'], epoch, train_accuracy, val_accuracy, train_loss, val_loss)\n# save_results(results['spinal_canal_stenosis_l2_l3'], epoch, train_accuracy, val_accuracy, train_loss, val_loss)\n# ... diğer etiketler için de aynı şekilde\n\n# Görselleştirme\nfor result in results.values():\n    plot_results(result)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:37:51.470562Z","iopub.execute_input":"2024-10-24T12:37:51.470940Z","iopub.status.idle":"2024-10-24T12:37:55.866558Z","shell.execute_reply.started":"2024-10-24T12:37:51.470904Z","shell.execute_reply":"2024-10-24T12:37:55.865539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\n\n# Model sonuçlarını tutan bir sınıf\nclass ModelResults:\n    def __init__(self, label):\n        self.label = label\n        self.history = {\n            'accuracy': [],\n            'val_accuracy': [],\n            'loss': [],\n            'val_loss': []\n        }\n\n# Sonuçları kaydetme fonksiyonu\ndef save_results(model_results, epoch, train_accuracy, val_accuracy, train_loss, val_loss):\n    model_results.history['accuracy'].append(train_accuracy)\n    model_results.history['val_accuracy'].append(val_accuracy)\n    model_results.history['loss'].append(train_loss)\n    model_results.history['val_loss'].append(val_loss)\n\n# Sonuçları dosyaya yazma fonksiyonu\ndef save_to_csv(model_results, filename):\n    df = pd.DataFrame({\n        'Epoch': range(1, len(model_results.history['accuracy']) + 1),\n        'Train Accuracy': model_results.history['accuracy'],\n        'Validation Accuracy': model_results.history['val_accuracy'],\n        'Train Loss': model_results.history['loss'],\n        'Validation Loss': model_results.history['val_loss'],\n    })\n    df.to_csv(filename, index=False)\n\n# Görselleştirme fonksiyonu\ndef plot_results(model_results):\n    epochs = range(1, len(model_results.history['accuracy']) + 1)\n\n    plt.figure(figsize=(14, 6))\n\n    # Doğruluk grafiği\n    plt.subplot(1, 2, 1)\n    plt.plot(epochs, model_results.history['accuracy'], label='Doğruluk (Eğitim)')\n    plt.plot(epochs, model_results.history['val_accuracy'], label='Doğruluk (Doğrulama)')\n    plt.title(f\"{model_results.label} için Doğruluk\")\n    plt.xlabel('Epoch')\n    plt.ylabel('Doğruluk')\n    plt.legend()\n\n    # Kayıp grafiği\n    plt.subplot(1, 2, 2)\n    plt.plot(epochs, model_results.history['loss'], label='Kayıp (Eğitim)')\n    plt.plot(epochs, model_results.history['val_loss'], label='Kayıp (Doğrulama)')\n    plt.title(f\"{model_results.label} için Kayıp\")\n    plt.xlabel('Epoch')\n    plt.ylabel('Kayıp')\n    plt.legend()\n\n    plt.tight_layout()\n    plt.show()\n\n# Örnek kullanım\nlabels = ['spinal_canal_stenosis_l1_l2', 'spinal_canal_stenosis_l2_l3', 'spinal_canal_stenosis_l3_l4',\n          'spinal_canal_stenosis_l4_l5', 'spinal_canal_stenosis_l5_s1', 'left_neural_foraminal_narrowing_l1_l2',\n          'left_neural_foraminal_narrowing_l2_l3']\n\n# Her etiket için sonuçları saklayalım\nresults = {label: ModelResults(label) for label in labels}\n\n# Model çıktılarınızı burada kaydedin\n# save_results(results['spinal_canal_stenosis_l1_l2'], epoch, train_accuracy, val_accuracy, train_loss, val_loss)\n# save_results(results['spinal_canal_stenosis_l2_l3'], epoch, train_accuracy, val_accuracy, train_loss, val_loss)\n# ... diğer etiketler için de aynı şekilde\n\n# Sonuçları dosyaya kaydetme\nfor result in results.values():\n    save_to_csv(result, f\"{result.label}_results.csv\")\n\n# Görselleştirme\nfor result in results.values():\n    plot_results(result)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:37:55.867847Z","iopub.execute_input":"2024-10-24T12:37:55.868165Z","iopub.status.idle":"2024-10-24T12:37:59.489873Z","shell.execute_reply.started":"2024-10-24T12:37:55.868131Z","shell.execute_reply":"2024-10-24T12:37:59.488874Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\nfrom sklearn.metrics import accuracy_score, classification_report\n\n# Test veri setinin boyutunu kontrol edin\nprint(f\"Test veri setinin boyutu: {X_test.shape}\")\n\n# Eğer test verisi yoksa tahmin yapmayın\nif X_test.shape[0] > 0:\n    # Tahminleri yap\n    predictions = model.predict(X_test)\n    predicted_classes = np.argmax(predictions, axis=1)\n\n    # Sonuçları yazdır\n    for filename, predicted_class in zip(test_filenames, predicted_classes):\n        print(f\"{filename}: {predicted_class}\")\n    \n    # Eğer etiketleriniz varsa, doğruluk hesaplama\n    # Gerçek etiketleri yükleyin (örneğin, y_test)\n    # y_test = ...  # Gerçek etiketleri buraya yükleyin\n\n    # Tahmin doğruluğunu hesapla\n    # accuracy = accuracy_score(y_test, predicted_classes)\n    # print(f\"Modelin doğruluğu: {accuracy * 100:.2f}%\")\n\n    # Sınıf dağılımını görselleştir\n    plt.figure(figsize=(10, 5))\n    plt.hist(predicted_classes, bins=np.arange(len(np.unique(predicted_classes)) + 1) - 0.5, rwidth=0.8)\n    plt.xticks(range(len(np.unique(predicted_classes))))  # Sınıf etiketlerini göster\n    plt.xlabel('Sınıf')\n    plt.ylabel('Tahmin Sayısı')\n    plt.title('Tahmin Edilen Sınıf Dağılımı')\n\n    # Grafiği PNG dosyası olarak kaydet\n    plt.savefig('tahmin_sinif_dagilimi.png', format='png', bbox_inches='tight')\n    plt.show()\n\n    # Sınıf raporu oluştur\n    # print(classification_report(y_test, predicted_classes))\nelse:\n    print(\"Tahmin yapılacak test görüntüsü yok.\")\n\n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:37:59.490973Z","iopub.execute_input":"2024-10-24T12:37:59.491291Z","iopub.status.idle":"2024-10-24T12:37:59.863190Z","shell.execute_reply.started":"2024-10-24T12:37:59.491248Z","shell.execute_reply":"2024-10-24T12:37:59.862281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls /kaggle/working/\n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:41:37.934676Z","iopub.execute_input":"2024-10-24T12:41:37.935647Z","iopub.status.idle":"2024-10-24T12:41:39.013533Z","shell.execute_reply.started":"2024-10-24T12:41:37.935598Z","shell.execute_reply":"2024-10-24T12:41:39.012437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls \n","metadata":{"execution":{"iopub.status.busy":"2024-10-24T12:42:00.713635Z","iopub.execute_input":"2024-10-24T12:42:00.714051Z","iopub.status.idle":"2024-10-24T12:42:01.775755Z","shell.execute_reply.started":"2024-10-24T12:42:00.714014Z","shell.execute_reply":"2024-10-24T12:42:01.774519Z"},"trusted":true},"execution_count":null,"outputs":[]}]}