{"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"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Single-Cell Perturbations with Mean prediction\n\nIn this notebook, I will make prediction using combination of mean targets group by `sm_name` and `cell_type`. This notebook can achieve 0.617 public LB score, so we know the how well our model can perform. At the same time, mean targets and other statistical values could be provided as features for creating model.","metadata":{"papermill":{"duration":0.005258,"end_time":"2023-10-18T14:37:26.170155","exception":false,"start_time":"2023-10-18T14:37:26.164897","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"## Import Packages","metadata":{"papermill":{"duration":0.003599,"end_time":"2023-10-18T14:37:26.177812","exception":false,"start_time":"2023-10-18T14:37:26.174213","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import pandas as pd","metadata":{"papermill":{"duration":7.755142,"end_time":"2023-10-18T14:37:33.936692","exception":false,"start_time":"2023-10-18T14:37:26.18155","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-10-21T07:45:01.537171Z","iopub.execute_input":"2023-10-21T07:45:01.537911Z","iopub.status.idle":"2023-10-21T07:45:01.543632Z","shell.execute_reply.started":"2023-10-21T07:45:01.537874Z","shell.execute_reply":"2023-10-21T07:45:01.542467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Configuration","metadata":{"papermill":{"duration":0.003545,"end_time":"2023-10-18T14:37:33.944512","exception":false,"start_time":"2023-10-18T14:37:33.940967","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class Config:\n    \n    dataset_path = \"/kaggle/input/open-problems-single-cell-perturbations\"\n    \n    _target_columns = None\n    \n    def target_columns(self):\n        if self._target_columns == None:\n            submission = pd.read_csv(f\"{config.dataset_path}/sample_submission.csv\")\n            self._target_columns = list(submission.columns)\n            self._target_columns.remove(\"id\")\n        return self._target_columns\nconfig = Config() ","metadata":{"papermill":{"duration":0.015348,"end_time":"2023-10-18T14:37:33.963566","exception":false,"start_time":"2023-10-18T14:37:33.948218","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-10-21T07:45:24.792559Z","iopub.execute_input":"2023-10-21T07:45:24.792930Z","iopub.status.idle":"2023-10-21T07:45:24.799875Z","shell.execute_reply.started":"2023-10-21T07:45:24.792901Z","shell.execute_reply":"2023-10-21T07:45:24.798787Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Loading data","metadata":{"papermill":{"duration":0.003621,"end_time":"2023-10-18T14:37:33.971294","exception":false,"start_time":"2023-10-18T14:37:33.967673","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train = pd.read_parquet(f\"{config.dataset_path}/de_train.parquet\")\ntrain.head()","metadata":{"papermill":{"duration":2.582924,"end_time":"2023-10-18T14:37:36.558057","exception":false,"start_time":"2023-10-18T14:37:33.975133","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-10-21T07:45:26.919681Z","iopub.execute_input":"2023-10-21T07:45:26.920367Z","iopub.status.idle":"2023-10-21T07:45:29.421471Z","shell.execute_reply.started":"2023-10-21T07:45:26.920322Z","shell.execute_reply":"2023-10-21T07:45:29.420181Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test = pd.read_csv(f\"{config.dataset_path}/id_map.csv\")\ntest.head()","metadata":{"papermill":{"duration":0.025208,"end_time":"2023-10-18T14:37:36.588398","exception":false,"start_time":"2023-10-18T14:37:36.56319","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-10-21T07:45:32.179076Z","iopub.execute_input":"2023-10-21T07:45:32.179438Z","iopub.status.idle":"2023-10-21T07:45:32.194822Z","shell.execute_reply.started":"2023-10-21T07:45:32.179409Z","shell.execute_reply":"2023-10-21T07:45:32.193985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def calculate_mean(df):\n    return df[config.target_columns()].mean()\nsm_name_mean_target = train.groupby(\"sm_name\").apply(calculate_mean)\ncell_type_mean_target = train.groupby(\"cell_type\").apply(calculate_mean)","metadata":{"execution":{"iopub.status.busy":"2023-10-21T07:45:35.372822Z","iopub.execute_input":"2023-10-21T07:45:35.373694Z","iopub.status.idle":"2023-10-21T07:45:40.780312Z","shell.execute_reply.started":"2023-10-21T07:45:35.373658Z","shell.execute_reply":"2023-10-21T07:45:40.779473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Submission","metadata":{"papermill":{"duration":0.016343,"end_time":"2023-10-18T14:38:18.029401","exception":false,"start_time":"2023-10-18T14:38:18.013058","status":"completed"},"tags":[]}},{"cell_type":"code","source":"preds1 = test[\"sm_name\"].apply(lambda sm_name: sm_name_mean_target.loc[sm_name])\npreds2 = test[\"cell_type\"].apply(lambda cell_type: cell_type_mean_target.loc[cell_type])\npreds = 0.8 * preds1 + 0.2 * preds2\nsubmission_df = pd.DataFrame(preds, columns=config.target_columns())\nsubmission_df[\"id\"] = test[\"id\"]\nsubmission_df.to_csv(\"submission.csv\", index=False)\nsubmission_df.head()","metadata":{"papermill":{"duration":7.9164,"end_time":"2023-10-18T14:38:25.962792","exception":false,"start_time":"2023-10-18T14:38:18.046392","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-10-21T07:46:38.245583Z","iopub.execute_input":"2023-10-21T07:46:38.246264Z","iopub.status.idle":"2023-10-21T07:46:48.495537Z","shell.execute_reply.started":"2023-10-21T07:46:38.246224Z","shell.execute_reply":"2023-10-21T07:46:48.494372Z"},"trusted":true},"execution_count":null,"outputs":[]}]}