{"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"},"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":"from sklearn.model_selection import StratifiedKFold\nimport polars as pl\nimport pandas as pd\nimport numpy as np\nimport os\n\ndef convert():\n    df = pd.read_csv(\"/kaggle/input/csiro-biomass/train.csv\")\n    # Group by image_path\n    grouped = df.groupby(\"image_path\")\n    new_df = pd.DataFrame()\n    for image_path, group in grouped:\n        new_row = {}\n        new_row[\"image_path\"] = image_path\n        new_row[\"sample_id\"] = group[\"sample_id\"].values[0].split(\"_\")[0]\n        new_row[\"Sampling_Date\"] = group[\"Sampling_Date\"].values[0]\n        new_row[\"State\"] = group[\"State\"].values[0]\n        new_row[\"Species\"] = group[\"Species\"].values[0]\n        new_row[\"Pre_GSHH_NDVI\"] = group[\"Pre_GSHH_NDVI\"].values[0]\n        new_row[\"Height_Ave_cm\"] = group[\"Height_Ave_cm\"].values[0]\n        for target_name in group[\"target_name\"].unique():\n            new_row[f\"{target_name}\"] = group[group[\"target_name\"] == target_name][\"target\"].values[0]\n        new_df = pd.concat([new_df, pd.DataFrame([new_row])])\n    new_df.to_csv(f\"train_converted.csv\", index=False)\n\n\ndef split_kfold(seed):\n    df = pl.read_csv(\"train_converted.csv\")\n\n    n_rows = df.height\n    folds = np.full(n_rows, -1, dtype=int)\n    fold = 0\n    gkf = StratifiedKFold(n_splits=5, shuffle=True, random_state=seed)\n    for train_index, test_index in gkf.split(df, y=df.get_column(\"State\")):\n        print(\"Fold: \", fold, \". Train size: \", len(train_index), \". Test size: \", len(test_index))\n        folds[test_index] = fold\n        fold += 1\n    df = df.with_columns(pl.Series(name=\"fold\", values=folds))\n    df.write_csv(f\"train_kfold_state_{seed}.csv\")\n\nconvert()\nsplit_kfold(42)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null}]}