큰 파일에 빠르게 액세스하고 Bigwig 파일에 대한 액세스 및 생성을 위해 C로 작성된 Python 확장. 이 확장자는 로컬 및 원격 파일 액세스에 libbigwig를 사용합니다.
이 확장자가 GitHub에서 직접 설치할 수 있습니다.
pip install pyBigWig
또는 콘다와 함께
conda install pybigwig -c conda-forge -c bioconda
피스톤이 아닌 요구 사항을 설치해야합니다.
curl-config
Config)이에 대한 헤더 및 라이브러리가 필요합니다.
기본 사용량은 다음과 같습니다.
>>> import pyBigWig
작업 디렉토리가 Pybigwig 소스 코드 디렉토리 인 경우 작동합니다.
>>> bw = pyBigWig.open("test/test.bw")
파일이 존재하지 않으면 오류 메시지가 표시되며 리턴되지 None
. 기본적으로, 모든 파일은 읽고 쓰지 않기 위해 열립니다. w
포함 된 모드를 전달하여이를 변경할 수 있습니다.
>>> bw = pyBigWig.open("test/output.bw", "w")
쓰기를 위해 열린 파일은 그 간격이나 통계에 대해 쿼리 할 수 없으며, 만 쓸 수 있습니다. 쓰기를 위해 파일을 열면 다음에 헤더를 추가해야합니다 (아래 섹션 참조).
로컬 및 원격 Bigbed Read Access도 지원됩니다.
>>> bb = pyBigWig.open("https://www.encodeproject.org/files/ENCFF001JBR/@@download/ENCFF001JBR.bigBed")
Bigbed 파일의 모드를 지정할 수 있지만 무시됩니다. pyBigWig.open()
에 의해 반환 된 객체는 Bigwig 또는 Bigbed 파일을 열는지 여부에 관계없이 동일합니다.
Bigwig 및 Bigbed 파일을 모두 열 수 있으므로 주어진 bigWigFile
객체가 Bigwig 또는 Bigbed 파일을 가리키는 지 여부를 결정해야 할 수도 있습니다. 이를 위해 isBigWig()
및 isBigBed()
함수를 사용할 수 있습니다.
>>> bw = pyBigWig.open("test/test.bw")
>>> bw.isBigWig()
True
>>> bw.isBigBed()
False
bigWigFile
객체에는 염색체 길이를 보유한 사전이 포함되어 있으며 chroms()
액세서로 액세스 할 수 있습니다.
>>> bw.chroms()
dict_proxy({'1': 195471971L, '10': 130694993L})
특정 염색체를 직접 쿼리 할 수도 있습니다.
>>> bw.chroms("1")
195471971L
길이는 "긴"정수 유형에 저장되므로 L
접미사가있는 이유입니다. 존재하지 않는 염색체를 지정하면 출력은 없습니다.
>>> bw.chroms("c")
>>>
때로는 Bigwig의 헤더를 인쇄하는 것이 유용합니다. 여기에는 버전 (일반적으로 4
), 줌 레벨 수 ( nLevels
), 설명 된베이스 수 ( nBasesCovered
), 최소값 ( minVal
), 최대 값 ( maxVal
), 모든 값의 합 ( sumData
) 및 모든 제곱 값의 합 ( sumSquared
). 이 중 마지막 두 가지는 평균 및 표준 편차를 결정하기 위해 필요합니다.
>>> bw.header()
{'maxVal': 2L, 'sumData': 272L, 'minVal': 0L, 'version': 4L, 'sumSquared': 500L, 'nLevels': 1L, 'nBasesCovered': 154L}
이것은 Bigbed 파일에도 가능하며 동일한 사전 키가 존재합니다. maxVal
, sumData
, minVal
및 sumSquared
와 같은 항목은 크게 의미가 없습니다.
Bigwig 파일은 위치 및 범위와 관련된 값을 저장하는 데 사용됩니다. 일반적으로 범위에서 평균 값에 빠르게 액세스하려고합니다. 매우 간단합니다.
>>> bw.stats("1", 0, 3)
[0.2000000054637591]
평균값 대신 대신 최대 값을 원했다고 가정 해 봅시다.
>>> bw.stats("1", 0, 3, type="max")
[0.30000001192092896]
다른 옵션은 "Min"(최소값), "적용 범위"(기지의 비율) 및 "STD"(값의 표준 편차)입니다.
주어진 간격으로 균등 한 간격의 빈의 값을 계산하고 싶은 경우가 종종 있습니다.
>>> bw.stats("1",99, 200, type="max", nBins=2)
[1.399999976158142, 1.5]
nBins
type
기본값이 mean
것처럼 기본값을 1으로 표시합니다.
시작 및 끝 위치가 생략되면 전체 염색체가 사용됩니다.
>>> bw.stats("1")
[1.3351851569281683]
평신도 독자에 대한 메모 :이 섹션은 다소 기술적이며 완전성을 위해서만 포함됩니다. 요약은 귀하의 요구에 정확한 평균/최대/등이 필요한 경우입니다. 간격 또는 간격에 대한 요약 값과 속도의 작은 트레이드 오프가 허용되므로
stats()
함수에서exact=True
옵션을 사용해야합니다.
기본적으로 Bigwig 파일의 범위에 대한 통계를 계산하는 직관적 인 측면이 있습니다. Bigwig 형식은 원래 게놈 브라우저의 맥락에서 만들어졌습니다. 주어진 간격에 대한 정확한 요약 통계를 계산하는 것이 대략적인 통계를 빠르게 계산할 수있는 것보다 덜 중요합니다 (결국 브라우저는 다수의 연속적인 간격을 빠르게 표시하고 스크롤/확대를 지원할 수 있어야합니다). 이로 인해 Bigwig 파일에는 간격 값 연관성뿐만 아니라 다양한 크기의 동일 크기의 빈에 대해 sum of squared values
sum of values
/ minimum value
/ maximum value
number of bases covered
포함되어 있습니다. 이러한 다양한 크기를 "줌 레벨"이라고합니다. 가장 작은 줌 레벨에는 파일의 평균 간격 크기의 16 배인 빈이 있으며 각 후속 줌 레벨은 이전보다 4 배 더 큰 빈을 가지고 있습니다. 이 방법론은 Kent의 도구에 사용되므로 현재 존재하는 거의 모든 Bigwig 파일에 사용될 수 있습니다.
요약 통계에 대해 Bigwig 파일이 쿼리되면 간격의 크기는 줌 레벨을 사용할지 여부를 결정하는 데 사용됩니다. 최적의 줌 레벨은 원하는 간격의 폭의 절반을 넘지 않는 가장 큰 빈을 갖는 것입니다. 이러한 줌 레벨이 존재하지 않으면 원래 간격이 대신 계산에 사용됩니다.
Pybigwig는 다른 도구와 일관성을 높이기 위해이 동일한 방법론을 채택합니다. 그러나 이것은 (a) 직관적이지 않고 (b) 일부 응용 분야에서 바람직하지 않기 때문에 Pybigwig는 간격 크기에 관계없이 정확한 요약 통계를 계산할 수 있습니다 (즉, 줌 레벨을 무시할 수 있음). 이것은 원래 여기에서 제안되었으며 예는 다음과 같습니다.
>>> import pyBigWig
>>> from numpy import mean
>>> bw = pyBigWig.open("http://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/wgEncodeMapability/wgEncodeCrgMapabilityAlign75mer.bigWig")
>>> bw.stats('chr1', 89294, 91629)
[0.20120902053804418]
>>> mean(bw.values('chr1', 89294, 91629))
0.22213841940688142
>>> bw.stats('chr1', 89294, 91629, exact=True)
[0.22213841940688142]
stats()
메소드는 각 기반의 원래 값을 검색하는 데 사용될 수 있지만 (예를 들어, nBins
베이스 수로 설정함으로써) values()
액세서를 사용하는 것이 바람직합니다.
>>> bw.values("1", 0, 3)
[0.10000000149011612, 0.20000000298023224, 0.30000001192092896]
생성 된 목록에는 항상 지정된 범위의 모든 기반에 대해 하나의 값이 포함됩니다. 특정베이스가 Bigwig 파일에 관련 값이없는 경우 반환 된 값은 nan
됩니다.
>>> bw.values("1", 0, 4)
[0.10000000149011612, 0.20000000298023224, 0.30000001192092896, nan]
때로는 일부 범위가 겹치는 모든 항목을 검색하는 것이 편리합니다. 이것은 intervals()
함수로 수행 할 수 있습니다.
>>> bw.intervals("1", 0, 3)
((0, 1, 0.10000000149011612), (1, 2, 0.20000000298023224), (2, 3, 0.30000001192092896))
반환 된 것은 시작 위치, 엔드 엔드 위치 및 값을 포함하는 튜플 목록입니다. 따라서, 상기 예는 각각 0
, 1
및 2
에서 0.1
, 0.2
및 0.3
의 값을 갖는다.
시작 및 종료 위치가 생략되면 지정된 염색체의 모든 간격이 반환됩니다.
>>> bw.intervals("1")
((0, 1, 0.10000000149011612), (1, 2, 0.20000000298023224), (2, 3, 0.30000001192092896), (100, 150, 1.399999976158142), (150, 151, 1.5))
Bigwig 파일과 달리 Bigbed 파일은 관련 문자열과의 간격 인 항목을 보유합니다. entries()
함수를 사용 하여이 항목에 액세스 할 수 있습니다.
>>> bb = pyBigWig.open("https://www.encodeproject.org/files/ENCFF001JBR/@@download/ENCFF001JBR.bigBed")
>>> bb.entries('chr1', 10000000, 10020000)
[(10009333, 10009640, '61035t130t-t0.026t0.42t404'), (10014007, 10014289, '61047t136t-t0.029t0.42t404'), (10014373, 10024307, '61048t630t-t5.420t0.00t2672399')]
출력은 입구 튜플 목록입니다. 튜플 요소는 각 항목의 start
및 end
위치에 이어 관련 string
입니다. 문자열은 Bigbed 파일에 보관 된대로 정확하게 반환되므로 구문 분석은 귀하에게 맡겨집니다. 이 문자열의 다양한 필드가 무엇인지 확인하려면 SQL 문자열을 참조하십시오.
>>> bb.SQL()
table RnaElements
"BED6 + 3 scores for RNA Elements data"
(
string chrom; "Reference sequence chromosome or scaffold"
uint chromStart; "Start position in chromosome"
uint chromEnd; "End position in chromosome"
string name; "Name of item"
uint score; "Normalized score from 0-1000"
char[1] strand; "+ or - or . for unknown"
float level; "Expression level such as RPKM or FPKM. Set to -1 for no data."
float signif; "Statistical significance such as IDR. Set to -1 for no data."
uint score2; "Additional measurement/count e.g. number of reads. Set to 0 for no data."
)
SQL 문자열의 처음 세 항목은 문자열의 일부가 아닙니다.
관련 값이 아닌 항목이 어디에 있는지 만 알아야하는 경우 entries()
에서 withString=False
추가로 지정하여 메모리를 저장할 수 있습니다.
>>> bb.entries('chr1', 10000000, 10020000, withString=False)
[(10009333, 10009640), (10014007, 10014289), (10014373, 10024307)]
글을 쓰기 위해 파일을 열었다면 항목을 추가하기 전에 헤더를 제공해야합니다. 헤더에는 모든 염색체가 포함 되어 있으며 크기가 포함되어 있습니다. 게놈에 1 및 15 백만베이스의 2 개의 염색체 인 Chr1 및 Chr2가있는 경우 다음은 적절한 헤더를 추가 할 것입니다.
>>> bw.addHeader([("chr1", 1000000), ("chr2", 1500000)])
Bigwig 헤더는 대소 문자에 민감하므로 chr1
및 Chr1
은 다릅니다. 마찬가지로, 1
과 chr1
동일하지 않으므로 Ensembl 및 UCSC 염색체 이름을 혼합 할 수 없습니다. 헤더를 추가 한 후에는 항목을 추가 할 수 있습니다.
기본적으로 Bigwig 파일의 경우 최대 10 개의 "줌 레벨"이 구성됩니다. maxZooms
옵션 인수 로이 기본 번호를 변경할 수 있습니다. 이것의 일반적인 사용은 간단하게 간격을 보유하고 줌 레벨을 보유하지 않는 큰 가그 파일을 만드는 것입니다.
>>> bw.addHeader([("chr1", 1000000), ("chr2", 1500000)], maxZooms=0)
maxTooms=0
설정하면 IGV와 다른 많은 도구는 하나 이상의 줌 레벨이 존재한다고 가정하므로 작동하지 않습니다. 다른 패키지에서 Bigwig 파일을 사용하지 않는 한 기본값을 사용하는 것이 좋습니다.
글을 쓰기 위해 파일을 열고 헤더를 추가했다고 가정하면 항목을 추가 할 수 있습니다. Bigwig 파일에는 항상 주문 된 간격이 포함되어 있으므로 항목을 순서대로 추가 해야합니다 . Bigwig 파일이 내부적으로 사용하여 항목을 저장할 수있는 세 가지 형식이 있습니다. 가장 일반적으로 관찰되는 형식은 Bedgraph 파일과 동일합니다.
chr1 0 100 0.0
chr1 100 120 1.0
chr1 125 126 200.0
이 항목은 다음과 같이 추가됩니다.
>>> bw.addEntries(["chr1", "chr1", "chr1"], [0, 100, 125], ends=[5, 120, 126], values=[0.0, 1.0, 200.0])
각 항목은 압축 전에 12 바이트를 차지합니다.
두 번째 형식은 고정 스팬을 사용하지만 항목 사이의 변수 단계 크기를 사용합니다. 이들은 Wiggle 파일로 표시 될 수 있습니다.
variableStep chrom=chr1 span=20
500 -2.0
600 150.0
635 25.0
위의 항목은 (1 기반) 위치 501-520, 601-620 및 636-655를 설명합니다. 이것들은 다음과 같이 추가됩니다.
>>> bw.addEntries("chr1", [500, 600, 635], values=[-2.0, 150.0, 25.0], span=20)
이 유형의 각 항목은 압축 전에 8 바이트를 차지합니다.
최종 형식은 FixedStep Wiggle 형식에 해당하는 각 항목에 대해 고정 된 단계와 스팬을 사용합니다.
fixedStep chrom=chr1 step=30 span=20
-5.0
-20.0
25.0
위의 항목은 (1 기반)베이스 901-920, 931-950 및 961-980을 설명하며 다음과 같이 추가됩니다.
>>> bw.addEntries("chr1", 900, values=[-5.0, -20.0, 25.0], span=20, step=30)
이 유형의 각 항목은 4 바이트를 차지합니다.
Pybigwig는 잘못된 순서로 항목을 추가하지 못하도록 시도합니다. 그러나이를 위해서는 추가로 머리가 필요합니다. 허용되지 않으면 항목을 추가 할 때 간단히 validate=False
지정할 수 있습니다.
>>> bw.addEntries(["chr1", "chr1", "chr1"], [100, 0, 125], ends=[120, 5, 126], values=[0.0, 1.0, 200.0], validate=False)
당신은 분명히 순서대로 항목을 추가 하지 않도록 책임을 져야합니다. 결과 파일은 그렇지 않으면 활용할 수 없습니다.
다른 파일 유형에서 일반적으로 수행되는 것처럼 파일은 간단한 bw.close()
로 닫을 수 있습니다. 쓰기를 위해 열린 파일의 경우 파일을 닫으면 버퍼링 된 항목을 디스크에 작성하고 파일 인덱스를 작성하고 작성하며 줌 레벨을 작성합니다. 결과적으로, 이것은 약간의 시간이 걸릴 수 있습니다.
Pybigwig는 Pybigwig를 설치하기 전에 Numpy를 설치 한 경우 Numpy Integers 및 Vectors를 사용하는 좌표 입력을 지원합니다. numpy
Accessor를 확인하여 Pybigwig가 Numpy 지원으로 설치되었는지 확인하기 위해 :
>>> import pyBigWig
>>> pyBigWig.numpy
1
pyBigWig.numpy
가 1
이면 Pybigwig가 Numpy 지원으로 컴파일되었습니다. 이것은 addEntries()
Numpy 좌표를 받아 들일 수 있음을 의미합니다.
>>> import pyBigWig
>>> import numpy
>>> bw = pyBigWig.open("/tmp/delete.bw", "w")
>>> bw.addHeader([("1", 1000)], maxZooms=0)
>>> chroms = np.array(["1"] * 10)
>>> starts = np.array([0, 10, 20, 30, 40, 50, 60, 70, 80, 90], dtype=np.int64)
>>> ends = np.array([5, 15, 25, 35, 45, 55, 65, 75, 85, 95], dtype=np.int64)
>>> values0 = np.array(np.random.random_sample(10), dtype=np.float64)
>>> bw.addEntries(chroms, starts, ends=ends, values=values0)
>>> bw.close()
또한 values()
멍청한 벡터를 직접 출력 할 수 있습니다.
>>> bw = bw.open("/tmp/delete.bw")
>>> bw.values('1', 0, 10, numpy=True)
[ 0.74336642 0.74336642 0.74336642 0.74336642 0.74336642 nan
nan nan nan nan]
>>> type(bw.values('1', 0, 10, numpy=True))
<type 'numpy.ndarray'>
컬이 설치되지 않은 경우 원격 파일에 액세스 할 수있는 기능없이 Pybigwig가 설치됩니다. pyBigWig.remote
사용하여 원격 파일에 액세스 할 수 있는지 확인할 수 있습니다. 1이 반환되면 원격 파일에 액세스 할 수 있습니다. 그것이 0을 반환하면 당신은 할 수 없습니다.
버전 0.3.5에서 Pybigwig는 항목이없는 Bigwig 파일을 읽고 쓸 수 있습니다. 이러한 파일은 일반적으로 다른 프로그램과 호환되지 않습니다. 항목이없는 Bigwig 파일이 어떻게 보이는지에 대한 정의가 없기 때문입니다. 이러한 파일의 경우, intervals()
액세서리는 None
반환하지 않고 stats()
함수는 원하는 길이 중 None
values()
[]
(빈 목록)를 반환합니다. 이것은 일반적으로 Pybigwig를 사용하는 프로그램이 문제없이 계속 될 수 있어야합니다.
이와 관련하여 Pybigwig/Libbigwig의 기능을 모방하려는 사람들의 경우 파일 헤더에보고 된 바와 같이 "빈"파일을 확인하기 위해 덮은베이스 수를 살펴보십시오.
Wiggle, Bigwig 및 Bigbed 파일은 0 기반 하프 오픈 좌표를 사용 하며이 확장자에서도 사용됩니다. 따라서 chr1
의 첫 번째베이스의 값에 액세스하기 위해 시작 위치를 0
으로, 끝 위치는 1
으로 지정합니다. 마찬가지로, 기지 100에서 115는 99
의 시작과 115
의 끝을 가질 것입니다. 이것은 단순히 기본 Bigwig 파일과 일관성을 높이기위한 것이며 향후 변경 될 수 있습니다.
Pybigwig는 Galaxy의 패키지로도 제공됩니다. 툴 샷에서 찾을 수 있으며 IUC는 현재 github에서 XML 정의를 호스팅하고 있습니다.