{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":59094,"databundleVersionId":7010844,"sourceType":"competition"},{"sourceId":7001522,"sourceType":"datasetVersion","datasetId":4024942}],"dockerImageVersionId":30579,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import warnings\nwarnings.simplefilter('ignore')\n\nimport pandas as pd\n\npd.set_option('display.max_columns', 30)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-19T13:19:29.449908Z","iopub.execute_input":"2023-11-19T13:19:29.450340Z","iopub.status.idle":"2023-11-19T13:19:29.887317Z","shell.execute_reply.started":"2023-11-19T13:19:29.450280Z","shell.execute_reply":"2023-11-19T13:19:29.886142Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\nSEED = 42\nnp.random.seed(SEED)","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:19:29.889525Z","iopub.execute_input":"2023-11-19T13:19:29.890061Z","iopub.status.idle":"2023-11-19T13:19:29.895336Z","shell.execute_reply.started":"2023-11-19T13:19:29.890030Z","shell.execute_reply":"2023-11-19T13:19:29.894180Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"de_train = pd.read_parquet('/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet')\nde_train","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:19:29.896977Z","iopub.execute_input":"2023-11-19T13:19:29.897542Z","iopub.status.idle":"2023-11-19T13:19:33.801772Z","shell.execute_reply.started":"2023-11-19T13:19:29.897501Z","shell.execute_reply":"2023-11-19T13:19:33.800592Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"id_map = pd.read_csv ('/kaggle/input/open-problems-single-cell-perturbations/id_map.csv')\nid_map","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:19:33.803445Z","iopub.execute_input":"2023-11-19T13:19:33.803878Z","iopub.status.idle":"2023-11-19T13:19:33.845878Z","shell.execute_reply.started":"2023-11-19T13:19:33.803839Z","shell.execute_reply":"2023-11-19T13:19:33.844913Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_0_566 = pd.read_csv('/kaggle/input/op-scp-submissions-3/submission_0_566.csv')\nsub_0_566 = pd.concat([id_map, sub_0_566], axis=1).drop(columns='id')\nsub_0_566","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:19:33.848635Z","iopub.execute_input":"2023-11-19T13:19:33.849151Z","iopub.status.idle":"2023-11-19T13:19:40.154815Z","shell.execute_reply.started":"2023-11-19T13:19:33.849121Z","shell.execute_reply":"2023-11-19T13:19:40.153585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"de_train = pd.concat([de_train, sub_0_566, sub_0_566, sub_0_566, sub_0_566], ignore_index=True)\nde_train","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:19:49.510953Z","iopub.execute_input":"2023-11-19T13:19:49.511387Z","iopub.status.idle":"2023-11-19T13:19:49.704438Z","shell.execute_reply.started":"2023-11-19T13:19:49.511351Z","shell.execute_reply":"2023-11-19T13:19:49.703297Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm import tqdm\nfrom sklearn.svm import LinearSVR\nfrom sklearn.neighbors import KNeighborsRegressor\nimport category_encoders as ce\nfrom sklearn.metrics import r2_score\n\nSTART_GENE_ID = 5\nSTART_GENE_ID_TEST = 2\nN_DESCRIBE = 1\n\nY = de_train.iloc[:, START_GENE_ID:].values\nY_test = sub_0_566.iloc[:, START_GENE_ID_TEST:].values\n\nY_submit = id_map.drop(columns=['cell_type', 'sm_name'])\nmetrics = pd.DataFrame(columns=['gene', 'mrrmse', 'r2'])\n\nfor i, gene in (enumerate(tqdm(de_train.columns[START_GENE_ID:]))):\n    \n    model_lsvr = LinearSVR(max_iter=2000, epsilon=0.1)\n    model_knr = KNeighborsRegressor(n_neighbors=13)\n    \n    cell_type_target_encoder = ce.TargetEncoder()\n    sm_name_target_encoder = ce.TargetEncoder()\n    \n    Y_gene = Y[:, i]\n    \n    X_train = pd.concat([cell_type_target_encoder.fit_transform(de_train[['cell_type']], Y_gene),\n                         sm_name_target_encoder.fit_transform(de_train[['sm_name']], Y_gene)], axis=1)\n    \n    model_lsvr.fit(X_train, Y_gene)\n    model_knr.fit(X_train, Y_gene)\n    \n    \n    X_valid = pd.concat([cell_type_target_encoder.transform(id_map[['cell_type']]),\n                         sm_name_target_encoder.transform(id_map[['sm_name']])], axis=1)\n    \n    Y_pred_lsvr = model_lsvr.predict(X_valid)\n    Y_pred_knr = model_knr.predict(X_valid)\n    Y_pred = Y_pred_lsvr * 0.7 + Y_pred_knr * 0.3\n    \n    Y_submit[gene] = Y_pred\n    \n    Y_gene_test = Y_test[:, i]\n    \n    X_test = pd.concat([cell_type_target_encoder.fit_transform(sub_0_566[['cell_type']], Y_gene_test),\n                        sm_name_target_encoder.fit_transform(sub_0_566[['sm_name']], Y_gene_test)], axis=1)\n    \n    model_lsvr.fit(X_test, Y_gene_test)\n    model_knr.fit(X_test, Y_gene_test)\n    \n    Y_pred_lsvr_test = model_lsvr.predict(X_valid)\n    Y_pred_knr_test = model_knr.predict(X_valid)\n    Y_pred_test = Y_pred_lsvr_test * 0.7 + Y_pred_knr_test * 0.3\n    \n    mrrmse = np.sqrt(np.square(Y_gene_test - Y_pred_test).mean()).mean()\n    r2 = r2_score(Y_gene_test, Y_pred_test)\n    \n    metrics.loc[i, 'gene'] = gene\n    metrics.loc[i, 'mrrmse'] = mrrmse\n    metrics.loc[i, 'r2'] = r2\n    \n    if i < N_DESCRIBE:\n        print(f'I: {i}, GENE: {gene}')\n        print(f'Y_GENE.SHAPE:{Y_gene.shape}')\n        print(f'Y_GENE:\\n{Y_gene}')\n        print(30 * '-')\n\n        print(f'X_TRAIN.SHAPE: {X_train.shape}')\n        print(f'X_TRAIN:\\n{X_train}')\n        print(30 * '-')\n\n        print(f'X_VALID.SHAPE: {X_valid.shape}')\n        print(f'X_VALID:\\n{X_valid}')\n        print(30 * '-')\n\n        print(f'Y_PRED.SHAPE: {Y_pred.shape}')\n        print(f'Y_PRED:\\n{Y_pred}')\n        print(30 * '-')\n        \n        print(f'Y_SUBMIT:\\n{Y_submit}')\n        print(30 * '-')\n        \n        print(f'Y_GENE_TEST.SHAPE:{Y_gene_test.shape}')\n        print(f'Y_GENE_TEST:\\n{Y_gene_test}')\n        print(30 * '-')\n\n        print(f'X_TEST.SHAPE: {X_test.shape}')\n        print(f'X_TEST:\\n{X_test}')\n        print(30 * '-')\n\n        print(f'Y_PRED_TEST.SHAPE: {Y_pred_test.shape}')\n        print(f'Y_PRED_TEST:\\n{Y_pred_test}')\n        print(30 * '-')\n        \n        print(f'Y_GENE_TEST.SHAPE:{Y_gene_test.shape}')\n        print(f'Y_GENE_TEST:\\n{Y_gene_test}')\n        print(30 * '-')\n\n        print(f'X_TEST.SHAPE: {X_test.shape}')\n        print(f'X_TEST:\\n{X_test}')\n        print(30 * '-')\n\n        print(f'Y_PRED_TEST.SHAPE: {Y_pred_test.shape}')\n        print(f'Y_PRED_TEST:\\n{Y_pred_test}')\n        print(30 * '-')\n        \n        print(f'Y_GENE_TEST - Y_PRED_TEST:\\n{Y_gene_test - Y_pred_test}')\n        print(30 * '-')\n        \n        print(f'(Y_GENE_TEST - Y_PRED_TEST).SHAPE:\\n{(Y_gene_test - Y_pred_test).shape}')\n        print(30 * '-')\n    \n        print(f'METRICS:\\n{metrics}')\n        print(30 * '=')","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:19:50.276041Z","iopub.execute_input":"2023-11-19T13:19:50.276494Z","iopub.status.idle":"2023-11-19T13:48:07.947422Z","shell.execute_reply.started":"2023-11-19T13:19:50.276459Z","shell.execute_reply":"2023-11-19T13:48:07.946195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metrics","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:48:07.949166Z","iopub.execute_input":"2023-11-19T13:48:07.949513Z","iopub.status.idle":"2023-11-19T13:48:07.963253Z","shell.execute_reply.started":"2023-11-19T13:48:07.949483Z","shell.execute_reply":"2023-11-19T13:48:07.962403Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metrics.to_csv('metrics_V_6.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:48:07.964356Z","iopub.execute_input":"2023-11-19T13:48:07.964934Z","iopub.status.idle":"2023-11-19T13:48:08.103498Z","shell.execute_reply.started":"2023-11-19T13:48:07.964900Z","shell.execute_reply":"2023-11-19T13:48:08.102510Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(Y_submit.shape)\nY_submit","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:48:08.106046Z","iopub.execute_input":"2023-11-19T13:48:08.106511Z","iopub.status.idle":"2023-11-19T13:48:08.239296Z","shell.execute_reply.started":"2023-11-19T13:48:08.106477Z","shell.execute_reply":"2023-11-19T13:48:08.238189Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit = pd.DataFrame(Y_submit, columns=de_train.columns[5:])\nsubmit.index.name = 'id'\nsubmit","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:48:08.240755Z","iopub.execute_input":"2023-11-19T13:48:08.241089Z","iopub.status.idle":"2023-11-19T13:48:09.407800Z","shell.execute_reply.started":"2023-11-19T13:48:08.241061Z","shell.execute_reply":"2023-11-19T13:48:09.406788Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit.to_csv('submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:48:09.408932Z","iopub.execute_input":"2023-11-19T13:48:09.409224Z","iopub.status.idle":"2023-11-19T13:48:58.250742Z","shell.execute_reply.started":"2023-11-19T13:48:09.409199Z","shell.execute_reply":"2023-11-19T13:48:58.249593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.read_csv('/kaggle/working/submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-19T13:48:58.253150Z","iopub.execute_input":"2023-11-19T13:48:58.253505Z","iopub.status.idle":"2023-11-19T13:49:03.833627Z","shell.execute_reply.started":"2023-11-19T13:48:58.253475Z","shell.execute_reply":"2023-11-19T13:49:03.832397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}