gpt4 book ai didi

python - OneHotEncoding 蛋白质序列

转载 作者:行者123 更新时间:2023-12-04 01:14:45 27 4
gpt4 key购买 nike

我有一个下面列出的原始序列数据帧,我正在尝试使用单热编码,然后将它们存储在一个新的数据帧中,我正在尝试使用以下代码进行操作,但无法存储,因为我得到了之后输出如下:

代码:

onehot_encoder = OneHotEncoder()
sequence = np.array(list(x_train['sequence'])).reshape(-1, 1)
encoded_sequence = onehot_encoder.fit_transform(sequence).toarray()
encoded_sequence

enter image description here

但是报错

ValueError: Wrong number of items passed 12755, placement implies 1

最佳答案

你得到那个奇怪的数组是因为它将每个序列视为一个条目并尝试对其进行单热编码,我们可以举一个例子:

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
df = pd.DataFrame({'sequence':['AQAVPW','AMAVLT','LDTGIN']})

enc = OneHotEncoder()
seq = np.array(df['sequence']).reshape(-1,1)
encoded = enc.fit(seq)
encoded.transform(seq).toarray()

array([[0., 1., 0.],
[1., 0., 0.],
[0., 0., 1.]])

encoded.categories_

[array(['AMAVLT', 'AQAVPW', 'LDTGIN'], dtype=object)]

由于您的条目是唯一的,因此您会得到这个全零矩阵。如果你使用 pd.get_dummies,你可以更好地理解这一点

pd.get_dummies(df['sequence'])

AMAVLT AQAVPW LDTGIN
0 0 1 0
1 1 0 0
2 0 0 1

有两种方法可以做到这一点,一种方法是简单地计算氨基酸的出现并将其用作预测因子,我希望我得到的氨基酸是正确的(很久以前从学校学到的):

from Bio import SeqIO
from Bio.SeqUtils.ProtParam import ProteinAnalysis

pd.DataFrame([ProteinAnalysis(i).count_amino_acids() for i in df['sequence']])

A C D E F G H I K L M N P Q R S T V W Y
0 2 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0
1 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0
2 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 0 0

另一种是对序列进行拆分,按位置进行编码,这需要序列等长,并且你有足够的内存:

byposition = df['sequence'].apply(lambda x:pd.Series(list(x)))
byposition

0 1 2 3 4 5
0 A Q A V P W
1 A M A V L T
2 L D T G I N

pd.get_dummies(byposition)

0_A 0_L 1_D 1_M 1_Q 2_A 2_T 3_G 3_V 4_I 4_L 4_P 5_N 5_T 5_W
0 1 0 0 0 1 1 0 0 1 0 0 1 0 0 1
1 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0
2 0 1 1 0 0 0 1 1 0 1 0 0 1 0 0

关于python - OneHotEncoding 蛋白质序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63724745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com