{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":112509,"databundleVersionId":14254895,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.003048,"end_time":"2023-06-30T09:39:19.341832","exception":false,"start_time":"2023-06-30T09:39:19.338784","status":"completed"},"tags":[],"trusted":true,"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Pasture Species Album","metadata":{"papermill":{"duration":0.003895,"end_time":"2023-06-30T09:39:19.33539","exception":false,"start_time":"2023-06-30T09:39:19.331495","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import os\nimport random\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n%matplotlib inline\nfrom PIL import Image","metadata":{"papermill":{"duration":13.262195,"end_time":"2023-06-30T09:39:32.607264","exception":false,"start_time":"2023-06-30T09:39:19.345069","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2025-11-02T12:55:11.647276Z","iopub.execute_input":"2025-11-02T12:55:11.647527Z","iopub.status.idle":"2025-11-02T12:55:14.163214Z","shell.execute_reply.started":"2025-11-02T12:55:11.647503Z","shell.execute_reply":"2025-11-02T12:55:14.161987Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train=pd.read_csv('/kaggle/input/csiro-biomass/train.csv')\nnames=sorted(train['Species'].unique().tolist())\nname_mapping=dict(zip(names,list(range(len(names)))))\n\nfilenames=train['image_path'].apply(lambda x:x.split('/')[-1])\nspecies_values=train['Species']\nspecies_mapping=dict(zip(filenames,species_values))\n\ndir0='/kaggle/input/csiro-biomass/train'\npath_label=[]\nfor dirname, _, filenames in os.walk(dir0):\n    for filename in filenames:\n        path=(os.path.join(dirname, filename))\n        species=species_mapping.get(filename,None)\n        name=name_mapping.get(species,None)\n        path_label+=[(path,name)]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-02T12:55:14.164935Z","iopub.execute_input":"2025-11-02T12:55:14.166423Z","iopub.status.idle":"2025-11-02T12:55:14.213825Z","shell.execute_reply.started":"2025-11-02T12:55:14.166386Z","shell.execute_reply":"2025-11-02T12:55:14.212468Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def simple_species_album(path_label, n=3):\n    # Group by species\n    species_dict = {}\n    for path, label in path_label:\n        if label not in species_dict:\n            species_dict[label] = []\n        if len(species_dict[label]) < n:  # Only add up to n images\n            species_dict[label].append(path)\n\n    reverse_mapping = {v: k for k, v in name_mapping.items()}\n\n    valid_species = [(label, paths) for label, paths in species_dict.items()\n                     if len(paths) == n]\n\n    rows = len(valid_species)\n    fig, axes = plt.subplots(rows, n, figsize=(5*n, 3*rows))\n\n    if rows == 1:\n        axes = axes.reshape(1, -1)\n\n    for i, (label, paths) in enumerate(valid_species):\n        species_name = reverse_mapping.get(label, f'Label {label}')\n\n        for j, path in enumerate(paths):\n            try:\n                img = Image.open(path)\n                axes[i, j].imshow(img)\n                axes[i, j].axis('off')\n\n                if j == 0:\n                    axes[i, j].set_title(f'{species_name}', fontsize=12)\n            except Exception as e:\n                axes[i, j].axis('off') # Turn off axes even if image loading fails\n\n    plt.tight_layout()\n    plt.show()\n\n# Execution of the simple version\nsimple_species_album(path_label, n=3)","metadata":{"papermill":{"duration":0.009079,"end_time":"2023-06-30T09:55:39.150422","exception":false,"start_time":"2023-06-30T09:55:39.141343","status":"completed"},"tags":[],"trusted":true,"execution":{"iopub.status.busy":"2025-11-02T12:55:14.679815Z","iopub.execute_input":"2025-11-02T12:55:14.680172Z","iopub.status.idle":"2025-11-02T12:55:32.596634Z","shell.execute_reply.started":"2025-11-02T12:55:14.680125Z","shell.execute_reply":"2025-11-02T12:55:32.594972Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}