{"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":"# Imports","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:23:27.554792Z","iopub.execute_input":"2023-09-20T07:23:27.555282Z","iopub.status.idle":"2023-09-20T07:23:38.739184Z","shell.execute_reply.started":"2023-09-20T07:23:27.555240Z","shell.execute_reply":"2023-09-20T07:23:38.737738Z"}}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\nfrom sklearn.model_selection import KFold\n\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import Dataset, DataLoader","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/stanford-ribonanza-rna-folding/train_data.csv')","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:23:38.741957Z","iopub.execute_input":"2023-09-20T07:23:38.742783Z","iopub.status.idle":"2023-09-20T07:25:51.377859Z","shell.execute_reply.started":"2023-09-20T07:23:38.742742Z","shell.execute_reply":"2023-09-20T07:25:51.376523Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seed = 14581","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:25:51.379390Z","iopub.execute_input":"2023-09-20T07:25:51.379836Z","iopub.status.idle":"2023-09-20T07:25:51.388182Z","shell.execute_reply.started":"2023-09-20T07:25:51.379803Z","shell.execute_reply":"2023-09-20T07:25:51.387005Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class RNA_Dataset:\n    def __init__(self, df, mode='train', maxlen=457, fold=0, nfolds=5):\n        self.mode = mode\n        self.maxlen = maxlen\n        \n        # One-hot Encoding to remove importances being provided to the model\n        self.seq_map = {'A': [1, 0, 0, 0], \n                        'C': [0, 1, 0, 0], \n                        'G': [0, 0, 1, 0], \n                        'U': [0, 0, 0, 1], \n                        '0': [0, 0, 0, 0]}\n        \n        # Split dataset according to experiment types\n        self.df_2a3 = df.loc[df['experiment_type'] == '2A3_MaP'].reset_index(drop=True)\n        self.df_dms = df.loc[df['experiment_type'] == 'DMS_MaP'].reset_index(drop=True)\n\n        # Filter df for SN_Filter = 1\n        mask = (self.df_2a3['SN_filter'].values > 0) & (self.df_dms['SN_filter'].values > 0)\n\n        self.df_2a3 = self.df_2a3.loc[mask].reset_index(drop=True)\n        self.df_dms = self.df_dms.loc[mask].reset_index(drop=True)\n        \n        # Split data into train and test\n        kfolds = KFold(n_splits = nfolds, shuffle=True, random_state=seed)\n        self.splits = list(kfolds.split(self.df_2a3))\n        \n        self.df_2a3 = self.df_2a3.loc[self.splits[fold][0 if self.mode=='train' else 1]]\n        self.df_dms = self.df_dms.loc[self.splits[fold][0 if self.mode=='train' else 1]]\n        \n        # Create dataset - i/p 1 -> [457, 4] sequence, i/p 2 -> [maxlen - 1, 2] reactivities, o/p -> [1, 2] reactivity\n        self.seq = self.df_2a3.sequence\n        self.lens = self.seq.apply(len).values\n        self.seq = self.seq.values\n        self.react_2a3 = np.nan_to_num(self.df_2a3[[c for c in self.df_2a3.columns if 'reactivity_0' in c]].values)\n        self.react_dms = np.nan_to_num(self.df_dms[[c for c in self.df_dms.columns if 'reactivity_0' in c]].values)\n            \n    # Function for debugging\n    def retval(self):\n        return (self.seq, self.react_2a3, self.react_dms)\n    \n    # Encode sequence strings\n    def convert_seq(self, seq):\n        seq = seq.ljust(self.maxlen, '0')\n        return np.array([self.seq_map[s] for s in seq])\n        \n    # Provide indexing functionality\n    def __getitem__(self, idx):        \n        return {'sequence': self.convert_seq(self.seq[idx]),\n                'reacts': np.stack([self.react_2a3[idx][:self.lens[idx]], \n                                    self.react_dms[idx][:self.lens[idx]]], axis=1)}","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:34:11.195098Z","iopub.execute_input":"2023-09-20T07:34:11.195610Z","iopub.status.idle":"2023-09-20T07:34:11.217086Z","shell.execute_reply.started":"2023-09-20T07:34:11.195553Z","shell.execute_reply":"2023-09-20T07:34:11.215491Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = RNA_Dataset(df, mode='train', maxlen=457, fold=0, nfolds=5)\ndf_test = RNA_Dataset(df, mode='test', maxlen=457, fold=0, nfolds=5)","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:34:11.482536Z","iopub.execute_input":"2023-09-20T07:34:11.483055Z","iopub.status.idle":"2023-09-20T07:34:33.638277Z","shell.execute_reply.started":"2023-09-20T07:34:11.483021Z","shell.execute_reply":"2023-09-20T07:34:33.637089Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index = 18000","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:35:36.749828Z","iopub.execute_input":"2023-09-20T07:35:36.750332Z","iopub.status.idle":"2023-09-20T07:35:36.757561Z","shell.execute_reply.started":"2023-09-20T07:35:36.750299Z","shell.execute_reply":"2023-09-20T07:35:36.756093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train[index]['sequence'].shape","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:35:37.678847Z","iopub.execute_input":"2023-09-20T07:35:37.679346Z","iopub.status.idle":"2023-09-20T07:35:37.688358Z","shell.execute_reply.started":"2023-09-20T07:35:37.679310Z","shell.execute_reply":"2023-09-20T07:35:37.687132Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train[index]['reacts'].shape","metadata":{"execution":{"iopub.status.busy":"2023-09-20T07:35:38.151400Z","iopub.execute_input":"2023-09-20T07:35:38.152018Z","iopub.status.idle":"2023-09-20T07:35:38.161638Z","shell.execute_reply.started":"2023-09-20T07:35:38.151973Z","shell.execute_reply":"2023-09-20T07:35:38.160252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}