K-mer特征提取one-hot编码
定义K-mer函数,把序列转换成密码子形式
def Kmers_funct(seq):
X = [None]*len(seq) #若数据只有一个序列,可不用此定义
for i in range(len(seq)): #若数据只有一个序列,可不用此循环
a = seq[i]
t=0
l=[]
for index in range(len(a)):
t=a[index:index+3]
if (len(t))==3:
l.append(t)
X[i] = l
return np.array(X) #具体看返回需要,也可直接:return X
调用Kmers_funct函数
X = Kmers_funct(x)
数据去重复
lists_X = np.unique(X) #去除重复数据
print(lists_X) #去除重复数据后的数据
print(len(lists_X)) #去除重复数据后的数据长度
将Kmers_funct提取后的数据编码为one-hot
def encode_matrix(seq_matrix):
seq_X = [None]*len(seq_matrix) #若数据只有一个序列,可不用此定义
for j in range(len(seq_matrix)): #若数据只有一个序列,可不用此循环
data = seq_matrix[j]
ind_to_char = lists_X
# 定义字符到整数的映射
char_to_int = dict((c, i) for i, c in enumerate(ind_to_char)) #枚举
int_to_char = dict((i, c) for i, c in enumerate(ind_to_char))
#整数编码
integer_encoded = [char_to_int[char] for char in data]
#one-hot编码
onehot_encoded = list()
for value in integer_encoded:
letter = [0 for _ in range(len(ind_to_char))] #one-hot编码长度=去除重复后所剩余数据的个数
letter[value] = 1
onehot_encoded.append(letter)
seq_X[j] = onehot_encoded
return seq_X