{"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":"# Ribonanza 🧬 - 📊 Visualizing RNA + Targets 🧬\n\nVisualizing the RNA primary structure and targets (reaction) at the same time.","metadata":{}},{"cell_type":"code","source":"import matplotlib.patches as mpatches\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport numpy as np \nimport pandas as pd \nimport os, gc, re\n\navaliable_bases = ['A', 'C', 'G', 'U']","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-09-23T14:18:37.604951Z","iopub.execute_input":"2023-09-23T14:18:37.606002Z","iopub.status.idle":"2023-09-23T14:18:37.613580Z","shell.execute_reply.started":"2023-09-23T14:18:37.605965Z","shell.execute_reply":"2023-09-23T14:18:37.611145Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_file = '/kaggle/input/stanford-ribonanza-rna-folding/train_data.csv'\ntrain = pd.read_csv(train_file,  nrows = 5 )\n\nreactivity_cols = [\n    col for col in train.columns \n    if bool(re.search('^reactivity_\\d{4}$', col))\n]\n\nqualify_cols = [\n    'sequence_id',\n    'sequence',\n    'experiment_type',\n    'SN_filter'\n]\n\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2023-09-23T14:16:53.638858Z","iopub.execute_input":"2023-09-23T14:16:53.640025Z","iopub.status.idle":"2023-09-23T14:16:53.693700Z","shell.execute_reply.started":"2023-09-23T14:16:53.639971Z","shell.execute_reply":"2023-09-23T14:16:53.692382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_qualifiers = pd.read_csv(train_file, usecols = qualify_cols)\n\ntrain = pd.read_csv(train_file, usecols = reactivity_cols)","metadata":{"execution":{"iopub.status.busy":"2023-09-23T14:16:53.695163Z","iopub.execute_input":"2023-09-23T14:16:53.695449Z","iopub.status.idle":"2023-09-23T14:18:01.058721Z","shell.execute_reply.started":"2023-09-23T14:16:53.695426Z","shell.execute_reply":"2023-09-23T14:18:01.057359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_base_position(rna_sequence, nitrogen_base='A'):\n    positions = [\n        current_base_index for current_base_index,current_base \n        in enumerate(rna_sequence) if current_base == nitrogen_base\n    ]\n    positions = np.array(positions)\n    return positions","metadata":{"execution":{"iopub.status.busy":"2023-09-23T14:18:01.060779Z","iopub.execute_input":"2023-09-23T14:18:01.061261Z","iopub.status.idle":"2023-09-23T14:18:01.066160Z","shell.execute_reply.started":"2023-09-23T14:18:01.061233Z","shell.execute_reply":"2023-09-23T14:18:01.065217Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_rna_targets(train_index, figsize=(20,2)):\n    plt.figure(figsize=figsize)\n    \n    plot_rna = train_qualifiers['sequence'].iloc[train_index]\n    seq_id = train_qualifiers['sequence_id'].iloc[train_index]\n    exp_type = train_qualifiers['experiment_type'].iloc[train_index]\n    sn_filter = bool(train_qualifiers['SN_filter'].iloc[train_index])\n    plt.title(f'{seq_id} reaction to {exp_type} (SN Filter={sn_filter})', y=1.2)\n    plt.suptitle(plot_rna, size=9, x=.51)\n    ax = plt.subplot(111)\n\n    height = train.iloc[train_index, :].max() - train.iloc[train_index, :].min()\n    rna_act = train.iloc[train_index, :]  - train.iloc[train_index, :].min()\n\n    for base in avaliable_bases:\n        x = get_base_position(rna_sequence = plot_rna, nitrogen_base = base)\n        y = np.repeat(1, len(x))\n        plt.bar(x=x, height=height, label=base, width=1)\n\n    sns.despine()\n\n    plt.plot(rna_act, color='white')\n\n    legend = plt.legend()\n    legend.get_frame().set_facecolor('none')\n\n    box = ax.get_position()\n    ax.set_position([box.x0, box.y0 + box.height * 0.1,\n                     box.width, box.height * 0.9])\n    ax.legend(loc='upper center',\n              bbox_to_anchor=(0.5, -0.07),\n              ncol=5,\n              frameon=False\n             )\n    \n    plt.xticks([])\n    plt.yticks([])\n    ax.spines[:].set_visible(False)\n    plt.xlim(0, len(plot_rna))\n    plt.xlabel('Primary Structure')\n    plt.ylabel('Relative Reaction')","metadata":{"execution":{"iopub.status.busy":"2023-09-23T14:41:12.424823Z","iopub.execute_input":"2023-09-23T14:41:12.425249Z","iopub.status.idle":"2023-09-23T14:41:12.436562Z","shell.execute_reply.started":"2023-09-23T14:41:12.425220Z","shell.execute_reply":"2023-09-23T14:41:12.434880Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_rna_targets(0)","metadata":{"execution":{"iopub.status.busy":"2023-09-23T14:41:12.653460Z","iopub.execute_input":"2023-09-23T14:41:12.653839Z","iopub.status.idle":"2023-09-23T14:41:13.110387Z","shell.execute_reply.started":"2023-09-23T14:41:12.653813Z","shell.execute_reply":"2023-09-23T14:41:13.109050Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plot_rna_targets(2)","metadata":{"execution":{"iopub.status.busy":"2023-09-23T14:41:13.112389Z","iopub.execute_input":"2023-09-23T14:41:13.112736Z","iopub.status.idle":"2023-09-23T14:41:13.558915Z","shell.execute_reply.started":"2023-09-23T14:41:13.112705Z","shell.execute_reply":"2023-09-23T14:41:13.557828Z"},"trusted":true},"execution_count":null,"outputs":[]}]}