{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":7064238,"sourceType":"datasetVersion","datasetId":4067315},{"sourceId":7112131,"sourceType":"datasetVersion","datasetId":4101027}],"dockerImageVersionId":30043,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport re\nimport argparse\nimport pandas as pd\nfrom catboost import CatBoostRegressor\nimport torch\nfrom transformers import AutoTokenizer\nfrom os.path import dirname\n\ndef featurize(smiles, tokenizer, padding=True):\n    encoded_input = tokenizer(smiles, return_tensors=\"pt\", padding='max_length', max_length=165)\n    return encoded_input.input_ids.numpy()\n    \n# Функция для извлечения химических элементов\ndef extract_elements(text):\n    parts = re.split(r'[^A-Za-z]', text.split()[0])\n    elements = ' '.join(filter(None, parts))\n    return elements","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-12-03T11:25:04.600446Z","iopub.execute_input":"2023-12-03T11:25:04.601192Z","iopub.status.idle":"2023-12-03T11:25:16.487428Z","shell.execute_reply.started":"2023-12-03T11:25:04.601129Z","shell.execute_reply":"2023-12-03T11:25:16.486196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def main():\n    #parser = argparse.ArgumentParser()\n    #parser.add_argument('--input_path', default='./input_test.csv', type=str, help='input path')\n    #parser.add_argument('--output_path', default='./output/', type=str, help='output path')\n    #args = parser.parse_args()\n    \n    tokenizer = AutoTokenizer.from_pretrained('/kaggle/input/submsission-data/ChemBERT/')\n\n    # Load the test data\n    df_test = pd.read_csv('/kaggle/input/nto-olymp/train.csv', header=None)\n    df_test.rename(columns={0: 'Chem'}, inplace=True)\n    df_test['Chem_copy'] = df_test['Chem'].copy()\n\n    # Feature engineering for test data\n    smiles_test = featurize(df_test['Chem'].tolist(), tokenizer)\n    feats_df_test = pd.DataFrame(smiles_test, columns=[f'feats_{i+1}' for i in range(165)])\n    df_test = pd.concat([df_test, feats_df_test], axis=1)\n    \n    # Extract chemical elements for test data\n    df_test['Chemicals'] = df_test['Chem'].apply(extract_elements)\n    df_test['Chem'] = df_test['Chem'].apply(lambda x: ' '.join(list(x)))\n\n    # Load the trained model\n    model = CatBoostRegressor()\n    model.load_model('/kaggle/input/submission-data/lips.model', format='cbm')\n\n    # Predict on the test data\n    df_test_pred = model.predict(df_test.drop('Chem_copy', axis = 1))\n    \n    submission = pd.DataFrame({'id': df_test['Chem_copy'], 'Lips': df_test_pred})\n\n    # Save predictions to CSV\n    submission.to_csv('submission.csv', index=None, header=None)\n\nif __name__ == \"__main__\":\n    main()\n","metadata":{"execution":{"iopub.status.busy":"2023-12-03T11:48:48.348668Z","iopub.execute_input":"2023-12-03T11:48:48.349386Z","iopub.status.idle":"2023-12-03T11:49:08.453737Z","shell.execute_reply.started":"2023-12-03T11:48:48.349318Z","shell.execute_reply":"2023-12-03T11:49:08.451489Z"},"trusted":true},"execution_count":null,"outputs":[]}]}