{"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":"<div class=\"alert alert-success\">  \n    <h1 align=\"center\" style=\"color:darkgreen;\">Multimodal Single-Cell Integration</h1>  \n</div>\n\n<div>\n    <h1 align=\"center\" style=\"color:darkgray;\">CITEseq - Separate Models</h1>\n</div>\n\n<img src=\"https://openproblems.bio/media/learning/central-dogma-large.png\">\n\n<div class=\"alert alert-success\">  \n</div>","metadata":{}},{"cell_type":"markdown","source":"> The first and second notebook results are stored at [this address](https://www.kaggle.com/datasets/mehrankazeminia/msci22-citeseqsplit).\n>\n> I have used KNeighborsRegressor in this notebook, but you can use better methods. Obviously, if your notebook memory is not enough, for example you can use one notebook for each cell_type. Because all models are trained separately.\n>\n> For each cell_type that does not have enough samples for training; Several types can be combined for training. It is even better to repeat the training once on all samples.","metadata":{}},{"cell_type":"markdown","source":"<div class=\"alert alert-success\">  \n</div>","metadata":{}},{"cell_type":"code","source":"import warnings # suppress warnings\nwarnings.filterwarnings('ignore')","metadata":{"execution":{"iopub.status.busy":"2022-10-19T12:25:23.579914Z","iopub.execute_input":"2022-10-19T12:25:23.580452Z","iopub.status.idle":"2022-10-19T12:25:23.587145Z","shell.execute_reply.started":"2022-10-19T12:25:23.580384Z","shell.execute_reply":"2022-10-19T12:25:23.585580Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os, gc\nimport numpy as np \nimport pandas as pd\nfrom tqdm import tqdm\n\n!ls ../input/*","metadata":{"execution":{"iopub.status.busy":"2022-10-19T12:25:25.526619Z","iopub.execute_input":"2022-10-19T12:25:25.527076Z","iopub.status.idle":"2022-10-19T12:25:26.644353Z","shell.execute_reply.started":"2022-10-19T12:25:25.527043Z","shell.execute_reply":"2022-10-19T12:25:26.642722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.neighbors import KNeighborsRegressor","metadata":{"execution":{"iopub.status.busy":"2022-10-19T12:25:31.008829Z","iopub.execute_input":"2022-10-19T12:25:31.009312Z","iopub.status.idle":"2022-10-19T12:25:31.015342Z","shell.execute_reply.started":"2022-10-19T12:25:31.009273Z","shell.execute_reply":"2022-10-19T12:25:31.014100Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div>\n    <h1 align=\"center\" style=\"color:darkgreen;\">CITEseq Technology</h1>\n</div>\n\n<div class=\"alert alert-success\">  \n</div>\n\n<div>\n    <h2 align=\"center\" style=\"color:darkblue;\">(Given gene expression, predict protein levels)</h2>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### \"cell_type\" is sorted according to the following order:\n\n1 - **MasP** = Mast Cell Progenitor (Number of **18090**)\n\n2 - **MkP** = Megakaryocyte Progenitor (Number of **10800**)\n\n3 - **NeuP** = Neutrophil Progenitor (Number of **21418**)\n\n4 - **MoP** = Monocyte Progenitor (Number of **1822**)\n\n5 - **EryP** = Erythrocyte Progenitor (Number of **24344**)\n\n6 - **HSC** = Hematoploetic Stem Cell (Number of **42874**)\n\n7 - **BP** = B-Cell Progenitor (Number of **303**)","metadata":{}},{"cell_type":"code","source":"cell_list = ['MasP', 'MkP', 'NeuP', 'MoP', 'EryP', 'HSC', 'BP']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_path = ['../input/msci22-citeseqsplit/cite_train_1.csv',\n              '../input/msci22-citeseqsplit/cite_train_2.csv',\n              '../input/msci22-citeseqsplit/cite_train_3.csv',\n              '../input/msci22-citeseqsplit/cite_train_4.csv',\n              '../input/msci22-citeseqsplit/cite_train_5.csv',\n              '../input/msci22-citeseqsplit/cite_train_6.csv',\n              '../input/msci22-citeseqsplit/cite_train_7.csv']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"target_path = ['../input/msci22-citeseqsplit/cite_target_1.csv',\n               '../input/msci22-citeseqsplit/cite_target_2.csv',\n               '../input/msci22-citeseqsplit/cite_target_3.csv',\n               '../input/msci22-citeseqsplit/cite_target_4.csv',\n               '../input/msci22-citeseqsplit/cite_target_5.csv',\n               '../input/msci22-citeseqsplit/cite_target_6.csv',\n               '../input/msci22-citeseqsplit/cite_target_7.csv']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_path = ['../input/msci22-citeseqsplit/cite_test_1.csv',\n             '../input/msci22-citeseqsplit/cite_test_2.csv',\n             '../input/msci22-citeseqsplit/cite_test_3.csv',\n             '../input/msci22-citeseqsplit/cite_test_4.csv',\n             '../input/msci22-citeseqsplit/cite_test_5.csv',\n             '../input/msci22-citeseqsplit/cite_test_6.csv',\n             '../input/msci22-citeseqsplit/cite_test_7.csv']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-success\">  \n</div>\n\n## <span style=\"color:darkred;\">Separate Models</span>","metadata":{}},{"cell_type":"code","source":"for n, cell in enumerate(cell_list):\n    \n    X = pd.read_csv(train_path[n], index_col='cell_id') \n    y = pd.read_csv(target_path[n], index_col='cell_id')\n    neigh = KNeighborsRegressor(n_neighbors=7)\n    neigh.fit(X, y) \n    gc.collect()\n    del X, y \n       \n    XX = pd.read_csv(test_path[n])\n    cellid = XX.pop('cell_id')\n    gc.collect()\n    \n    if (n == 0): \n        cellids = cellid\n        pred = neigh.predict(XX)        \n    if (n != 0): \n        cellids = np.concatenate((cellids, cellid), axis=0)\n        pred = np.concatenate((pred, neigh.predict(XX)), axis=0) \n                \n    print(f'Cell Type: {cell}') \n    del XX, cellid, neigh\n    gc.collect()\n\nnp.save('cellids.npy', cellids)\nnp.save('pred.npy', pred)\n       \nprint(f'\\nArrangement of Cells: {cellids.shape}')\nprint(f'Prediction Shape: {pred.shape}')\nprint('-------------------------------') ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-success\">  \n</div>\n\n## <span style=\"color:darkred;\">Sorting</span>","metadata":{}},{"cell_type":"code","source":"test_cell_id = np.load('../input/msci22-citeseqsplit/test_cite_cell_id.npy',\n                       allow_pickle=True)\n\nfor i in range(len(cellids)):\n    for j in range(len(test_cell_id)):\n        if (cellids[i] == test_cell_id[j]): \n            cellids[i] = j\n\ndel test_cell_id\ngc.collect()\ncellids","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred = pd.DataFrame(data=pred)\ndf_pred['sort_id'] = cellids\n\ndel pred, cellids\ngc.collect()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_pred.sort_values(by='sort_id', inplace=True)\ndf_pred.drop(columns=['sort_id'], axis=1, inplace=True)\ngc.collect()\ndf_pred","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-success\">  \n</div>\n\n## <span style=\"color:darkred;\">Submission</span>","metadata":{}},{"cell_type":"code","source":"submission = pd.read_csv('../input/all-in-one-citeseq-multiome-with-keras/submission_lolo_total_ensembling.csv',\n                         index_col='row_id', squeeze=True)\n\nsubmission.iloc[:len(df_pred.values.ravel())] = df_pred.values.ravel()\nsubmission.to_csv('submission.csv')\n!ls","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div class=\"alert alert-success\">  \n</div>\n\n<div class=\"alert alert-success\">  \n    <h3 align=\"center\" style=\"color:darkgreen;\">Good Luck</h3>  \n</div>","metadata":{}}]}