我正在从一个URL读取数据,并试图将其转换为数字,以便对jupyter进行进一步分析。这是一个基因序列,每个基因编码4个二进制数字。A-->0001、C-->0010、G-->0100和T-->1000。例如,我想从CGGT转到0010010001001000。到目前为止,我已经能够移除空白空间并将其转换为字符串。但是,我不能从字符串到字符,字符到数字。我正在使用numpy数组,并尝试了这些尝试,但没有成功。在
charGenes = [var for var in genes if var]
以及
^{pr2}$以下是其余代码:
import pandas as pd
import numpy as np
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/molecular- biology/splice-junction-gene-sequences/splice.data"
file = pd.read_csv(url, delimiter=',', header=None,dtype='str')
X = file[2]
y = file[0]
myGenes = np.array(X)
stringGenes = myGenes.astype(str)
spaceGenes = stringGenes.reshape( stringGenes.size, 1)
genes = np.char.strip(spaceGenes)
genes
这是输出:
array([['CCAGCTGCATCACAGGAGGCCAGCGAGCAGGTCTGTTCCAAGGGCCTTCGAGCCAGTCTG'],
['AGACCCGCCGGGAGGCGGAGGACCTGCAGGGTGAGCCCCACCGCCCCTCCGTGCCCCCGC'],
['GAGGTGAAGGACGTCCTTCCCCAGGAGCCGGTGAGAAGCGCAGTCGGGGGCACGGGGATG'],
...,
['TCTCGGGGGCGGCCGGCGCGGCGGGGAGCGGTCCCCGGCCGCGGCCCCGACGTGTGTGTC'],
['ATTCTACTTAGTAAACATAATTTCTTGTGCTAGATAACCAAATTAAGAAAACCAAAACAA'],
['AGGCTGCCTATCAGAAGGTGGTGGCTGGTGTGGCTGCTGCTCTGGCTCACAAGTACCATT']],
dtype='<U79')
如有任何建议,我们将不胜感激!在
下面是一个使用查找表的方法:
要使用查找表,我们需要将字母重新解释为索引,这是通过视图转换完成的:
^{pr2}$我们现在可以构建它需要的}。至于输出格式,我们可以自由选择最符合我们要求的格式:
85
槽,实际上我们只使用4个插槽,即65
,67
,71
和{示例一-输出为bytestring:
示例二-输出为
uint8
:示例三-输出为每个字母四
uint8
:现在让我们将其应用于
100
字母序列:因为它只依赖于
numpy内置的高级索引它使我们可以非常快速地查找(例如,比Python字典快得多)
视图转换这基本上是免费的,因为它所做的只是重新解释数据缓冲区(没有任何复制或转换)
示例一-bytestrings:
作为偏好,这些也可以被视为一个长序列:
例二-
uint8
:示例3-每个字母有四个
uint8
;但是让我们使用一个不同的seq
来处理多行:Numpy有一个
char.replace
方法(参见docs)。你需要做的就是:要将其转换为
^{pr2}$int
数组然后可以在数组上使用bitwise operations。在
正如评论中所指出的,结果序列的长度是有限的。解决这个问题的方法:
在数字之间插入逗号
基于逗号拆分并转换回纯
np.char.array
转换为
int
数组:删除大小为
1
的中间维度:相关问题 更多 >
编程相关推荐