File size: 2,286 Bytes
34393ef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | import os
import numpy as np
import pandas as pd
import PATH
import utils
from Bio import SeqIO
from scipy import sparse
pj = lambda x: os.path.join(utils.data_dir,x)
# read in the sequence
fa = SeqIO.parse(pj('gencode_v17_5utr_15bpcds.fa'),'fasta')
tx_seq=dict()
for seq_record in fa:
tx=seq_record.id
seq=seq_record.seq
if len(seq)<30: #skip when it too short
continue
if "ATG" not in seq:
continue
if tx not in tx_seq or len(seq)>len(tx_seq[tx]):
tx_seq[tx]=seq
# txt records TE and rkpm
RP_data_path = {}
RP_data_path['muscle'] = pj('df_counts_and_len.TE_sorted.Muscle.with_annot.txt')
RP_data_path['PC3'] = pj('df_counts_and_len.TE_sorted.pc3.with_annot.txt')
RP_data_path['293T'] = pj('df_counts_and_len.TE_sorted.HEK_Andrev2015.with_annot.txt')
# read the hand crafted features
# (57415, 33)
feat_mat = pd.read_csv("util/Zhang_et_al_features.csv",index_col=0)
feat_mat.insert(0, 'seq', [tx_seq[x].upper().__str__() for x in feat_mat.index.values])
processed_dict = {}
for cell_line, csv_path in RP_data_path.items():
assert os.path.exists(csv_path), f"The raw data file for {cell_line} does not exist!"
print(f"processing {cell_line}...\n")
RP_raw_data = pd.read_table(csv_path, sep=' ')
RP_raw_data.loc[:,'T_id'] = RP_raw_data.index.values
# adding sequence in
RP_raw_data = RP_raw_data.query('rpkm_rnaseq >5 & rpkm_riboseq > 0.1')
RP_raw_data['log_te'] = np.log(RP_raw_data.te.values)
RP_feat_merge = RP_raw_data.merge(feat_mat,left_on=['T_id'],right_index=True,suffixes=["",""])
RP_feat_merge.sort_values('rpkm_rnaseq', ascending=False, inplace=True)
# drop duplicated UTRs
RP_raw_dedup = RP_feat_merge.drop_duplicates(RP_feat_merge.columns[17:], keep='first')
RP_raw_dedup['utr'] = RP_raw_dedup['seq'].apply(lambda x: x[-216:-16]) # max len 200
RP_raw_dedup['utr_len'] = RP_raw_dedup.utr.apply(len)
RP_raw_dedup.query('`utr_len`>30')
RP_raw_dedup = RP_raw_dedup.drop_duplicates(['utr'], keep='first')
# save them
processed_dict[cell_line] = RP_raw_dedup
processed_dict[cell_line].to_csv(pj(f"RP_{cell_line}_MTL_transfer.csv"))
print("The preprocssing for RP tasks is Finished !!")
print(f"The files are saved to {utils.data_dir}") |