我有一个.bed文件,其中包含1000行,每行中的单词由制表符(\ t)分隔。如果我们将每个单词视为一列,则每行有12列。 我需要一种方法将此.bed文件转换为矩阵,以便我可以轻松访问其列。 例如,我需要访问第12列。有什么方法可以做到吗?
我已经尝试过这个:
import numpy as np
data = np.genfromtxt("myFile.bed")
但它无法正常工作。 有人可以帮我吗?
答案 0 :(得分:2)
BED文件是标准制表符分隔的文本文件。涂通常的方式将其内容存储在内存中:
content = []
with open("myFile.bed")as f:
for line in f:
content.append(line.strip().split())
您可以在此处使用numpy数组而不是列表,或者如果需要,可以使用np.asarray
转换结果。
实际上很少需要一个矩阵,因为它们代表(基因组?)区间并且通常非常大。大多数情况下,您在循环中的每一行修改/读取/执行某些功能:
with open("myFile.bed")as f:
for line in f:
L = line.strip().split()
# ... do something with L
否则,Pandas库实现"数据帧"就像在R(但我从未使用过它)。
答案 1 :(得分:1)
使用pyranges,这很简单
import pyranges as pr
path = pr.get_example_path("aorta.bed")
gr = pr.read_bed(path)
# +--------------+-----------+-----------+------------+-----------+--------------+
# | Chromosome | Start | End | Name | Score | Strand |
# | (category) | (int32) | (int32) | (object) | (int64) | (category) |
# |--------------+-----------+-----------+------------+-----------+--------------|
# | chr1 | 9939 | 10138 | H3K27me3 | 7 | + |
# | chr1 | 9953 | 10152 | H3K27me3 | 5 | + |
# | chr1 | 10024 | 10223 | H3K27me3 | 1 | + |
# | chr1 | 10246 | 10445 | H3K27me3 | 4 | + |
# | ... | ... | ... | ... | ... | ... |
# | chr1 | 9978 | 10177 | H3K27me3 | 7 | - |
# | chr1 | 10001 | 10200 | H3K27me3 | 5 | - |
# | chr1 | 10127 | 10326 | H3K27me3 | 1 | - |
# | chr1 | 10241 | 10440 | H3K27me3 | 6 | - |
# +--------------+-----------+-----------+------------+-----------+--------------+
# Stranded PyRanges object has 11 rows and 6 columns from 1 chromosomes.
# For printing, the PyRanges was sorted on Chromosome and Strand.
df = gr.df
# Chromosome Start End Name Score Strand
# 0 chr1 9939 10138 H3K27me3 7 +
# 1 chr1 9953 10152 H3K27me3 5 +
# 2 chr1 10024 10223 H3K27me3 1 +
# 3 chr1 10246 10445 H3K27me3 4 +
# 4 chr1 110246 110445 H3K27me3 1 +
# 5 chr1 9916 10115 H3K27me3 5 -
# 6 chr1 9951 10150 H3K27me3 8 -
# 7 chr1 9978 10177 H3K27me3 7 -
# 8 chr1 10001 10200 H3K27me3 5 -
# 9 chr1 10127 10326 H3K27me3 1 -
# 10 chr1 10241 10440 H3K27me3 6 -
答案 2 :(得分:1)
个人在安装 pyranges 时遇到问题。
我使用了 bed-reader,来自他们的示例:
from bed_reader import open_bed, sample_file
bed = open_bed("myFile.bed")
val = bed.read()