{"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":70367,"databundleVersionId":9188054,"sourceType":"competition"},{"sourceId":9833462,"sourceType":"datasetVersion","datasetId":6031236}],"dockerImageVersionId":30786,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install taurex","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:30:45.203361Z","iopub.execute_input":"2024-11-07T12:30:45.204447Z","iopub.status.idle":"2024-11-07T12:31:31.489415Z","shell.execute_reply.started":"2024-11-07T12:30:45.204374Z","shell.execute_reply":"2024-11-07T12:31:31.488143Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --> We load the opacity informations (e.g cross section and cia).\n# Those are tables characterising the absorption of each species in the atmosphere\n# They depends on wavelengths, temperature and pressure.\n\nfrom taurex.cache import OpacityCache, CIACache\nOpacityCache().clear_cache()\nOpacityCache().set_opacity_path(\"/kaggle/input/neurips-ariel24-5th-place-solution-data/xsec\")\nCIACache().set_cia_path(\"/kaggle/input/neurips-ariel24-5th-place-solution-data/cia/\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:13.4504Z","iopub.execute_input":"2024-11-07T12:36:13.451437Z","iopub.status.idle":"2024-11-07T12:36:13.457685Z","shell.execute_reply.started":"2024-11-07T12:36:13.451371Z","shell.execute_reply":"2024-11-07T12:36:13.456461Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\nimport matplotlib.pyplot as plt","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:13.870589Z","iopub.execute_input":"2024-11-07T12:36:13.871359Z","iopub.status.idle":"2024-11-07T12:36:13.877348Z","shell.execute_reply.started":"2024-11-07T12:36:13.87129Z","shell.execute_reply":"2024-11-07T12:36:13.876195Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"xsec = OpacityCache()['CO']\nco = xsec.opacity(800, 1e12)\n\nxsec = OpacityCache()['CO2']\nco2 = xsec.opacity(800, 1e12)\n\nxsec = OpacityCache()['CH4']\nch4 = xsec.opacity(800, 1e12)\n\nxsec = OpacityCache()['H2O']\nh2o = xsec.opacity(800, 1e12)\n\nxsec = OpacityCache()['NH3']\nnh3 = xsec.opacity(800, 1e12)\n\nxsec = OpacityCache()['HCN']\nhcn = xsec.opacity(800, 1e12)\n\nxsec = OpacityCache()['C2H2']\nc2h2 = xsec.opacity(1000, 1e12)\n\nxsec = OpacityCache()['SO2']\nso2 = xsec.opacity(1000, 1e12)\n\nxsec = OpacityCache()['C2H4']\nc2h4 = xsec.opacity(1000, 1e12)\n\nxsec = OpacityCache()['H2S']\nh2s = xsec.opacity(1000, 1e12)\n\nxsec = OpacityCache()['PH3']\nph3 = xsec.opacity(1000, 1e12)\n\nxsec = OpacityCache()['TiO']\ntio = xsec.opacity(4000, 1e12)\n\n# Plotting this in wavelengths. Note that wavelength (um) = 10000/wavenumber (um^{-1})\nplt.figure(figsize=(14,8))\n# plt.plot(10000/xsec.wavenumberGrid, co, alpha=0.4, label='CO')\n# plt.plot(10000/xsec.wavenumberGrid, co2, alpha=0.4, label='CO2')\n# plt.plot(10000/xsec.wavenumberGrid, ch4, alpha=0.4, label='CH4')\n# plt.plot(10000/xsec.wavenumberGrid, h2o, alpha=0.4, label='H2O')\n# plt.plot(10000/xsec.wavenumberGrid, nh3, alpha=0.4, label='NH3')\n# plt.plot(10000/xsec.wavenumberGrid, hcn, alpha=0.4, label='HCN')\n# plt.plot(10000/xsec.wavenumberGrid, c2h2, alpha=0.4, label='C2H2')\n# plt.plot(10000/xsec.wavenumberGrid, so2, alpha=0.4, label='SO2')\n# plt.plot(10000/xsec.wavenumberGrid, c2h4, alpha=0.4, label='C2H4')\n# plt.plot(10000/xsec.wavenumberGrid, h2s, alpha=0.4, label='H2S')\nplt.plot(10000/xsec.wavenumberGrid, ph3, alpha=0.4, label='PH3')\nplt.plot(10000/xsec.wavenumberGrid, tio, alpha=0.4, label='TiO')\nplt.yscale('log')\nplt.xlim(2.0,4.0)\nplt.ylim(1e-30,1e-22)\nplt.xlabel('Wavelength ($\\mu$m)')\nplt.ylabel('Cross-section (m$^2$/molecule)')\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:14.346481Z","iopub.execute_input":"2024-11-07T12:36:14.346995Z","iopub.status.idle":"2024-11-07T12:36:45.029709Z","shell.execute_reply.started":"2024-11-07T12:36:14.34695Z","shell.execute_reply":"2024-11-07T12:36:45.0285Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"co = np.log(co)\nco2 = np.log(co2)\nch4 = np.log(ch4)\nh2o = np.log(h2o)\nnh3 = np.log(nh3)\nhcn = np.log(hcn)\nc2h2 = np.log(c2h2)\nso2 = np.log(so2)\nc2h4 = np.log(c2h4)\nh2s = np.log(h2s)\nph3 = np.log(ph3)\ntio = np.log(tio)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:45.031499Z","iopub.execute_input":"2024-11-07T12:36:45.031868Z","iopub.status.idle":"2024-11-07T12:36:45.041813Z","shell.execute_reply.started":"2024-11-07T12:36:45.031832Z","shell.execute_reply":"2024-11-07T12:36:45.040439Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Plotting this in wavelengths. Note that wavelength (um) = 10000/wavenumber (um^{-1})\nplt.figure(figsize=(14,8))\nplt.plot(10000/xsec.wavenumberGrid, co, alpha=0.4, label='CO')\nplt.plot(10000/xsec.wavenumberGrid, co2, alpha=0.4, label='CO2')\nplt.plot(10000/xsec.wavenumberGrid, ch4, alpha=0.4, label='CH4')\nplt.plot(10000/xsec.wavenumberGrid, h2o, alpha=0.4, label='H2O')\nplt.plot(10000/xsec.wavenumberGrid, nh3, alpha=0.4, label='NH3')\nplt.plot(10000/xsec.wavenumberGrid, hcn, alpha=0.4, label='HCN')\nplt.plot(10000/xsec.wavenumberGrid, c2h2, alpha=0.4, label='C2H2')\nplt.plot(10000/xsec.wavenumberGrid, so2, alpha=0.4, label='SO2')\nplt.plot(10000/xsec.wavenumberGrid, c2h4, alpha=0.4, label='C2H4')\nplt.plot(10000/xsec.wavenumberGrid, h2s, alpha=0.4, label='H2S')\nplt.plot(10000/xsec.wavenumberGrid, ph3, alpha=0.4, label='PH3')\nplt.plot(10000/xsec.wavenumberGrid, tio, alpha=0.4, label='TiO')\nplt.xlim(2.0,4.0)\nplt.ylim(-70, -50)\nplt.xlabel('Wavelength ($\\mu$m)')\nplt.ylabel('Cross-section (m$^2$/molecule)')\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:45.043336Z","iopub.execute_input":"2024-11-07T12:36:45.043808Z","iopub.status.idle":"2024-11-07T12:36:45.823665Z","shell.execute_reply.started":"2024-11-07T12:36:45.043745Z","shell.execute_reply":"2024-11-07T12:36:45.822501Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from scipy import interpolate\n\n\ndef interpolate_2d_data(x_original, y_original, x_new, kind='linear'):\n    \"\"\"\n    Interpolate 2D data to a new x-axis spacing.\n    \n    Parameters:\n    x_original (array-like): Original x values\n    y_original (array-like): Original y values\n    x_new (array-like): New x values to interpolate to\n    kind (str): Type of interpolation. Options: 'linear', 'cubic', 'quadratic', etc.\n    \n    Returns:\n    array-like: Interpolated y values corresponding to x_new\n    \"\"\"\n    # Create interpolation function\n    f = interpolate.interp1d(x_original, y_original, kind=kind, \n                            bounds_error=False, fill_value='extrapolate')\n    \n    # Calculate interpolated values\n    y_new = f(x_new)\n    \n    return y_new","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:45.826303Z","iopub.execute_input":"2024-11-07T12:36:45.826687Z","iopub.status.idle":"2024-11-07T12:36:45.834169Z","shell.execute_reply.started":"2024-11-07T12:36:45.826646Z","shell.execute_reply":"2024-11-07T12:36:45.832964Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"wavelenghts = pd.read_csv(\"/kaggle/input/ariel-data-challenge-2024/wavelengths.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:45.835631Z","iopub.execute_input":"2024-11-07T12:36:45.836001Z","iopub.status.idle":"2024-11-07T12:36:45.860247Z","shell.execute_reply.started":"2024-11-07T12:36:45.835962Z","shell.execute_reply":"2024-11-07T12:36:45.859085Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"co = interpolate_2d_data(10000/xsec.wavenumberGrid, co, wavelenghts.values[0], kind='linear')\nco2 = interpolate_2d_data(10000/xsec.wavenumberGrid, co2, wavelenghts.values[0], kind='linear')\nch4 = interpolate_2d_data(10000/xsec.wavenumberGrid, ch4, wavelenghts.values[0], kind='linear')\nh2o = interpolate_2d_data(10000/xsec.wavenumberGrid, h2o, wavelenghts.values[0], kind='linear')\nnh3 = interpolate_2d_data(10000/xsec.wavenumberGrid, nh3, wavelenghts.values[0], kind='linear')\nhcn = interpolate_2d_data(10000/xsec.wavenumberGrid, hcn, wavelenghts.values[0], kind='linear')\nc2h2 = interpolate_2d_data(10000/xsec.wavenumberGrid, c2h2, wavelenghts.values[0], kind='linear')\nso2 = interpolate_2d_data(10000/xsec.wavenumberGrid, so2, wavelenghts.values[0], kind='linear')\nc2h4 = interpolate_2d_data(10000/xsec.wavenumberGrid, c2h4, wavelenghts.values[0], kind='linear')\nh2s = interpolate_2d_data(10000/xsec.wavenumberGrid, h2s, wavelenghts.values[0], kind='linear')\nph3 = interpolate_2d_data(10000/xsec.wavenumberGrid, ph3, wavelenghts.values[0], kind='linear')\ntio = interpolate_2d_data(10000/xsec.wavenumberGrid, tio, wavelenghts.values[0], kind='linear')\n\n# Plotting this in wavelengths. Note that wavelength (um) = 10000/wavenumber (um^{-1})\nplt.figure(figsize=(14,8))\nplt.plot(co, alpha=0.4, label='CO')\nplt.plot(co2, alpha=0.4, label='CO2')\nplt.plot(ch4, alpha=0.4, label='CH4')\nplt.plot(h2o, alpha=0.4, label='H2O')\nplt.plot(nh3, alpha=0.4, label='NH3')\nplt.plot(hcn, alpha=0.4, label='HCN')\nplt.plot(c2h2, alpha=0.4, label='C2H2')\nplt.plot(so2, alpha=0.4, label='SO2')\nplt.plot(c2h4, alpha=0.4, label='C2H4')\nplt.plot(h2s, alpha=0.4, label='H2S')\nplt.plot(ph3, alpha=0.4, label='PH3')\nplt.plot(tio, alpha=0.4, label='TiO')\nplt.ylim(-70, -50)\nplt.xlabel('Wavelength ($\\mu$m)')\nplt.ylabel('Cross-section (m$^2$/molecule)')\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:45.861774Z","iopub.execute_input":"2024-11-07T12:36:45.862193Z","iopub.status.idle":"2024-11-07T12:36:46.418292Z","shell.execute_reply.started":"2024-11-07T12:36:45.862149Z","shell.execute_reply":"2024-11-07T12:36:46.416905Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"co = np.nan_to_num(\n    co,\n    nan=np.nanmin(co[np.isfinite(co)]),\n    posinf=np.nanmin(co[np.isfinite(co)]),\n    neginf=np.nanmin(co[np.isfinite(co)]),\n)\nco2 = np.nan_to_num(\n    co2,\n    nan=np.nanmin(co2[np.isfinite(co2)]),\n    posinf=np.nanmin(co2[np.isfinite(co2)]),\n    neginf=np.nanmin(co2[np.isfinite(co2)]),\n)\nch4 = np.nan_to_num(\n    ch4,\n    nan=np.nanmin(ch4[np.isfinite(ch4)]),\n    posinf=np.nanmin(ch4[np.isfinite(ch4)]),\n    neginf=np.nanmin(ch4[np.isfinite(ch4)]),\n)\nh2o = np.nan_to_num(\n    h2o,\n    nan=np.nanmin(h2o[np.isfinite(h2o)]),\n    posinf=np.nanmin(h2o[np.isfinite(h2o)]),\n    neginf=np.nanmin(h2o[np.isfinite(h2o)]),\n)\nnh3 = np.nan_to_num(\n    nh3,\n    nan=np.nanmin(nh3[np.isfinite(nh3)]),\n    posinf=np.nanmin(nh3[np.isfinite(nh3)]),\n    neginf=np.nanmin(nh3[np.isfinite(nh3)]),\n)\nhcn = np.nan_to_num(\n    hcn,\n    nan=np.nanmin(hcn[np.isfinite(hcn)]),\n    posinf=np.nanmin(hcn[np.isfinite(hcn)]),\n    neginf=np.nanmin(hcn[np.isfinite(hcn)]),\n)\nc2h2 = np.nan_to_num(\n    c2h2,\n    nan=np.nanmin(c2h2[np.isfinite(c2h2)]),\n    posinf=np.nanmin(c2h2[np.isfinite(c2h2)]),\n    neginf=np.nanmin(c2h2[np.isfinite(c2h2)]),\n)\nso2 = np.nan_to_num(\n    so2,\n    nan=np.nanmin(so2[np.isfinite(so2)]),\n    posinf=np.nanmin(so2[np.isfinite(so2)]),\n    neginf=np.nanmin(so2[np.isfinite(so2)]),\n)\nc2h4 = np.nan_to_num(\n    c2h4,\n    nan=np.nanmin(c2h4[np.isfinite(c2h4)]),\n    posinf=np.nanmin(c2h4[np.isfinite(c2h4)]),\n    neginf=np.nanmin(c2h4[np.isfinite(c2h4)]),\n)\nh2s = np.nan_to_num(\n    h2s,\n    nan=np.nanmin(h2s[np.isfinite(h2s)]),\n    posinf=np.nanmin(h2s[np.isfinite(h2s)]),\n    neginf=np.nanmin(h2s[np.isfinite(h2s)]),\n)\nph3 = np.nan_to_num(\n    ph3,\n    nan=np.nanmin(ph3[np.isfinite(ph3)]),\n    posinf=np.nanmin(ph3[np.isfinite(ph3)]),\n    neginf=np.nanmin(ph3[np.isfinite(ph3)]),\n)\ntio = np.nan_to_num(\n    tio,\n    nan=np.nanmin(tio[np.isfinite(tio)]),\n    posinf=np.nanmin(tio[np.isfinite(tio)]),\n    neginf=np.nanmin(tio[np.isfinite(tio)]),\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:52.062222Z","iopub.execute_input":"2024-11-07T12:36:52.062662Z","iopub.status.idle":"2024-11-07T12:36:52.086797Z","shell.execute_reply.started":"2024-11-07T12:36:52.062622Z","shell.execute_reply":"2024-11-07T12:36:52.085499Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"co = (co - co.min()) / (co.max() - co.min())\nh2o = (h2o - h2o.min()) / (h2o.max() - h2o.min())\nch4 = (ch4 - ch4.min()) / (ch4.max() - ch4.min())\nco2 = (co2 - co2.min()) / (co2.max() - co2.min())\nnh3 = (nh3 - nh3.min()) / (nh3.max() - nh3.min())\nhcn = (hcn - hcn.min()) / (hcn.max() - hcn.min())\nc2h2 = (c2h2 - c2h2.min()) / (c2h2.max() - c2h2.min())\nso2 = (so2 - so2.min()) / (so2.max() - so2.min())\nc2h4 = (c2h4 - c2h4.min()) / (c2h4.max() - c2h4.min())\nh2s = (h2s - h2s.min()) / (h2s.max() - h2s.min())\nph3 = (ph3 - ph3.min()) / (ph3.max() - ph3.min())\ntio = (tio - tio.min()) / (tio.max() - tio.min())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:52.849262Z","iopub.execute_input":"2024-11-07T12:36:52.849755Z","iopub.status.idle":"2024-11-07T12:36:52.862756Z","shell.execute_reply.started":"2024-11-07T12:36:52.849711Z","shell.execute_reply":"2024-11-07T12:36:52.861561Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"co = co**5\nh2o = h2o**2\nch4 = ch4**30\nco2 = co2**3\nnh3 = nh3**40\nhcn = hcn**3\nc2h2 = c2h2**5\nso2 = so2**5\nc2h4 = c2h4**30\nh2s = h2s**3\nph3 = ph3**10\ntio = tio**0.5","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:53.821349Z","iopub.execute_input":"2024-11-07T12:36:53.821816Z","iopub.status.idle":"2024-11-07T12:36:53.829252Z","shell.execute_reply.started":"2024-11-07T12:36:53.82177Z","shell.execute_reply":"2024-11-07T12:36:53.827916Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.plot(co, label='co')\nplt.plot(h2o, label='h2o')\nplt.plot(ch4, label='ch4')\nplt.plot(co2, label='co2')\nplt.plot(nh3, label='nh3')\nplt.plot(hcn, label='hcn')\nplt.plot(c2h2, label='c2h2')\nplt.plot(so2, label='so2')\nplt.plot(c2h4, label='c2h4')\nplt.plot(h2s, label='h2s')\nplt.plot(ph3, label='ph3')\nplt.plot(tio, label='tio')\nplt.legend()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:54.528172Z","iopub.execute_input":"2024-11-07T12:36:54.528637Z","iopub.status.idle":"2024-11-07T12:36:55.077296Z","shell.execute_reply.started":"2024-11-07T12:36:54.528597Z","shell.execute_reply":"2024-11-07T12:36:55.076209Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# save\nnp.save(\"co_v4.npy\", co)\nnp.save(\"h2o_v4.npy\", h2o)\nnp.save(\"ch4_v4.npy\", ch4)\nnp.save(\"co2_v4.npy\", co2)\nnp.save(\"nh3_v4.npy\", nh3)\nnp.save(\"hcn_v4.npy\", hcn)\nnp.save(\"c2h2_v4.npy\", c2h2)\nnp.save(\"so2_v4.npy\", so2)\nnp.save(\"c2h4_v4.npy\", c2h4)\nnp.save(\"h2s_v4.npy\", h2s)\nnp.save(\"ph3_v4.npy\", ph3)\nnp.save(\"tio_v4.npy\", tio)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:36:58.105367Z","iopub.execute_input":"2024-11-07T12:36:58.105808Z","iopub.status.idle":"2024-11-07T12:36:58.116501Z","shell.execute_reply.started":"2024-11-07T12:36:58.105765Z","shell.execute_reply":"2024-11-07T12:36:58.115295Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ROOT = \"/kaggle/input/ariel-data-challenge-2024/\"\n\n\ntrain_adc_info = pd.read_csv(ROOT + \"/train_adc_info.csv\", index_col=\"planet_id\")\ntrain_adc_info.reset_index(inplace=True)\n\nstar0_indx = train_adc_info.loc[train_adc_info[\"star\"] == 0].index\nstar1_indx = train_adc_info.loc[train_adc_info[\"star\"] == 1].index\n\ntrain_adc_info = pd.read_csv(ROOT + \"/train_adc_info.csv\", index_col=\"planet_id\")\ntrain_labels = pd.read_csv(ROOT + \"/train_labels.csv\", index_col=\"planet_id\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:00.110752Z","iopub.execute_input":"2024-11-07T12:37:00.111228Z","iopub.status.idle":"2024-11-07T12:37:00.255424Z","shell.execute_reply.started":"2024-11-07T12:37:00.111185Z","shell.execute_reply":"2024-11-07T12:37:00.254396Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"labels_normalized = train_labels.values.copy()\nlabels_normalized = (labels_normalized - labels_normalized.mean(1)[:, None]) / labels_normalized.std(1)[:, None]\nlabels_normalized","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:00.943156Z","iopub.execute_input":"2024-11-07T12:37:00.943618Z","iopub.status.idle":"2024-11-07T12:37:00.95602Z","shell.execute_reply.started":"2024-11-07T12:37:00.943562Z","shell.execute_reply":"2024-11-07T12:37:00.954861Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(10, 10))\nplt.plot(labels_normalized[0], label=\"Planet IDX 0\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:01.945938Z","iopub.execute_input":"2024-11-07T12:37:01.947143Z","iopub.status.idle":"2024-11-07T12:37:02.280762Z","shell.execute_reply.started":"2024-11-07T12:37:01.947088Z","shell.execute_reply":"2024-11-07T12:37:02.279517Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cluster_labels = np.load(\"/kaggle/input/neurips-ariel24-5th-place-solution-data/cluster_labels.npy\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:03.925255Z","iopub.execute_input":"2024-11-07T12:37:03.925725Z","iopub.status.idle":"2024-11-07T12:37:03.934256Z","shell.execute_reply.started":"2024-11-07T12:37:03.925682Z","shell.execute_reply":"2024-11-07T12:37:03.932994Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(10, 10))\nfor sample in labels_normalized[cluster_labels == 7]:\n    plt.plot(sample, label=f\"Cluster {3}\")\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:04.905518Z","iopub.execute_input":"2024-11-07T12:37:04.906525Z","iopub.status.idle":"2024-11-07T12:37:05.807741Z","shell.execute_reply.started":"2024-11-07T12:37:04.906474Z","shell.execute_reply":"2024-11-07T12:37:05.806576Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(10, 10))\nplt.plot(labels_normalized[cluster_labels == 7].mean(0))\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:07.017828Z","iopub.execute_input":"2024-11-07T12:37:07.018277Z","iopub.status.idle":"2024-11-07T12:37:07.239858Z","shell.execute_reply.started":"2024-11-07T12:37:07.018236Z","shell.execute_reply":"2024-11-07T12:37:07.238571Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# 0 - 1 normalized  \nco2 = labels_normalized[cluster_labels == 19].mean(0)  # 24\nh2o = labels_normalized[cluster_labels == 3].mean(0)\nch4 = labels_normalized[cluster_labels == 7].mean(0)\nh2o = (h2o - h2o.min()) / (h2o.max() - h2o.min())\nch4 = (ch4 - ch4.min()) / (ch4.max() - ch4.min())\nco2 = (co2 - co2.min()) / (co2.max() - co2.min())\nco2[165:] = 0\nco2[40:60] = 0\nnp.save(\"h2o.npy\", h2o)\nnp.save(\"ch4.npy\", ch4)\nnp.save(\"co2.npy\", co2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:11.737483Z","iopub.execute_input":"2024-11-07T12:37:11.737916Z","iopub.status.idle":"2024-11-07T12:37:11.749797Z","shell.execute_reply.started":"2024-11-07T12:37:11.737868Z","shell.execute_reply":"2024-11-07T12:37:11.748123Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.plot(h2o, label=\"H2O\")\nplt.plot(ch4, label=\"CH4\")\nplt.plot(co2, label=\"CO2\")\nplt.legend()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:13.553242Z","iopub.execute_input":"2024-11-07T12:37:13.554143Z","iopub.status.idle":"2024-11-07T12:37:13.812075Z","shell.execute_reply.started":"2024-11-07T12:37:13.554094Z","shell.execute_reply":"2024-11-07T12:37:13.81092Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"bp = np.load(\"/kaggle/input/neurips-ariel24-5th-place-solution-data/bp_2.npy\")\nbp2 = np.load(\"/kaggle/input/neurips-ariel24-5th-place-solution-data/bp2_2.npy\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:15.81748Z","iopub.execute_input":"2024-11-07T12:37:15.817895Z","iopub.status.idle":"2024-11-07T12:37:15.831146Z","shell.execute_reply.started":"2024-11-07T12:37:15.817856Z","shell.execute_reply":"2024-11-07T12:37:15.829952Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_adc_info = pd.read_csv(ROOT + \"/train_adc_info.csv\", index_col=\"planet_id\")\ntrain_adc_info.reset_index(inplace=True)\n\nstar0_indx = train_adc_info.loc[train_adc_info[\"star\"] == 0].index\nstar1_indx = train_adc_info.loc[train_adc_info[\"star\"] == 1].index\n\ntrain_adc_info = pd.read_csv(ROOT + \"/train_adc_info.csv\", index_col=\"planet_id\")\ntrain_labels = pd.read_csv(ROOT + \"/train_labels.csv\", index_col=\"planet_id\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:16.513364Z","iopub.execute_input":"2024-11-07T12:37:16.513778Z","iopub.status.idle":"2024-11-07T12:37:16.597909Z","shell.execute_reply.started":"2024-11-07T12:37:16.513738Z","shell.execute_reply":"2024-11-07T12:37:16.596885Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"all_molecules = [h2o, ch4, co2]  # v7\n# all_molecules = [co, nh3, hcn, c2h2, so2, c2h4, h2s, ph3, tio]  #  v19\n# all_molecules = [h2o, ch4, co2, co, nh3, hcn, c2h2, so2, c2h4, h2s, ph3, tio]  #  v20","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:17.13724Z","iopub.execute_input":"2024-11-07T12:37:17.138409Z","iopub.status.idle":"2024-11-07T12:37:17.143752Z","shell.execute_reply.started":"2024-11-07T12:37:17.138355Z","shell.execute_reply":"2024-11-07T12:37:17.142324Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tqdm import tqdm\n\nPICKS = 3\n# PICKS = 4  # v20\n\nnew_labels = []\ndrop_changes = []\n\nfor IDX in tqdm(range(len(train_labels))):\n    molecule_parts = []\n    picked_molecules = np.random.choice(list(range(len(all_molecules))), PICKS, replace=False)\n    for mol_idx in picked_molecules:\n        molecule = all_molecules[mol_idx]\n        multiplier = np.random.uniform(0.0, 1.5)\n        exponent = np.random.uniform(1.0, 2.5)\n        with_molecule = train_labels.values[IDX] + multiplier * train_labels.values[IDX].mean() / 10 * molecule**exponent\n        # multiplier = np.random.uniform(0.0, 1.1)  # v19 & v20\n        # exponent = np.random.uniform(0.75, 1.25)  # v19 & v20\n        # with_molecule = multiplier * train_labels.values[IDX].mean() / 10 * molecule**exponent  # v19 & v20\n        molecule_parts.append(with_molecule)\n\n    new_signal = train_labels.values[IDX] + np.sum(molecule_parts, axis=0)\n    new_signal = new_signal / new_signal.mean() * train_labels.values[IDX].mean()\n    new_signal = np.max([new_signal, train_labels.values[IDX]], axis=0)\n    new_signal = new_signal / new_signal.mean() * train_labels.values[IDX].mean()\n\n    # v19 & v20\n    # new_signal = train_labels.values[IDX].mean() + np.sum(molecule_parts, axis=0)\n    # new_signal = new_signal / new_signal.mean() * train_labels.values[IDX].mean()\n\n    new_labels.append(new_signal)\n\n    drop_changes_per_wl = new_signal - train_labels.values[IDX]\n    drop_changes.append(drop_changes_per_wl)\n    # plt.plot(train_labels.values[0], label=\"original\")\n    # plt.plot(new_signal, label=\"modified signal\")\n    # plt.legend()\n    # plt.show()\n    # break","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:18.125853Z","iopub.execute_input":"2024-11-07T12:37:18.12723Z","iopub.status.idle":"2024-11-07T12:37:18.375351Z","shell.execute_reply.started":"2024-11-07T12:37:18.127179Z","shell.execute_reply":"2024-11-07T12:37:18.374078Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"signal_train = np.load(\"/kaggle/input/neurips-ariel24-5th-place-solution-data/train_signal_v26.npy\")\nprint(signal_train.shape)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:37:19.698145Z","iopub.execute_input":"2024-11-07T12:37:19.699125Z","iopub.status.idle":"2024-11-07T12:38:15.176304Z","shell.execute_reply.started":"2024-11-07T12:37:19.699072Z","shell.execute_reply":"2024-11-07T12:38:15.17397Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for IDX in tqdm(range(len(train_labels))):\n    cut_inf, cut_sup = 39, -35\n    breakpoints = [bp[IDX], bp2[IDX]]\n    signal_train[IDX, bp[IDX]:bp2[IDX], 1+cut_inf:cut_sup] -= signal_train[IDX, bp[IDX]:bp2[IDX], 1+cut_inf:cut_sup] * drop_changes[IDX][1:][::-1][None, :]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:38:15.180038Z","iopub.execute_input":"2024-11-07T12:38:15.180501Z","iopub.status.idle":"2024-11-07T12:38:16.748442Z","shell.execute_reply.started":"2024-11-07T12:38:15.180458Z","shell.execute_reply":"2024-11-07T12:38:16.74715Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_labels = pd.DataFrame(new_labels, index=train_labels.index, columns=train_labels.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:38:16.750247Z","iopub.execute_input":"2024-11-07T12:38:16.75065Z","iopub.status.idle":"2024-11-07T12:38:16.862372Z","shell.execute_reply.started":"2024-11-07T12:38:16.750608Z","shell.execute_reply":"2024-11-07T12:38:16.860944Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"new_labels","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:38:16.864839Z","iopub.execute_input":"2024-11-07T12:38:16.865255Z","iopub.status.idle":"2024-11-07T12:38:16.911354Z","shell.execute_reply.started":"2024-11-07T12:38:16.865214Z","shell.execute_reply":"2024-11-07T12:38:16.91014Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# normalize the data\ndata = signal_train[2]\ndata = (data / data.mean(1)[:, None])\n\nplt.imshow(data, aspect=\"auto\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:38:23.349667Z","iopub.execute_input":"2024-11-07T12:38:23.350127Z","iopub.status.idle":"2024-11-07T12:38:24.058912Z","shell.execute_reply.started":"2024-11-07T12:38:23.35008Z","shell.execute_reply":"2024-11-07T12:38:24.057757Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"for IDX in range(2):\n    plt.plot(train_labels.values[IDX], label=\"original\")\n    plt.plot(new_labels.values[IDX], label=\"modified signal\")\n    # plt.plot(train_labels.values[IDX] + train_labels.values[IDX].mean() / 5 * nh3, label=\"with extra NH3\")\n    # plt.plot(train_labels.values[IDX] + train_labels.values[IDX].mean() / 10 * hcn**1.3, label=\"with extra CO\")\n    plt.legend()\n    plt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:38:36.132678Z","iopub.execute_input":"2024-11-07T12:38:36.133153Z","iopub.status.idle":"2024-11-07T12:38:36.72198Z","shell.execute_reply.started":"2024-11-07T12:38:36.133111Z","shell.execute_reply":"2024-11-07T12:38:36.720628Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"np.save(\"train_signal_v26_aug7.npy\", signal_train)\nnew_labels.to_csv(\"train_labels_aug7.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-07T12:38:41.35324Z","iopub.execute_input":"2024-11-07T12:38:41.353725Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}