SPARQLthon28/TogoGenome

提供:TogoWiki

移動: 案内, 検索

目次

ゲノム RDF 真核対応

SPARQLthon26 SPARQLthon27

課題

真核生物のgeneにlocus_tagがない場合がある

原生生物だけの場合geneにlocus_tagがあり、TogoGenomeではorganism + locus_tagでgeneを識別しgeneレポートページのURIとしていた。
Uniprotとrefseqを繋ぐtgupグラフもこのURIを使用している。

http://togogenome.org/gene/103690:all1455

真核生物の場合はlocus_tagがないgeneも多く、URIの見直しをする必要がある。

  • 提案

RefSeqID(バージョンなし) + geneのrdfs:labelの組み合わせをURIとする。

http://togogenome.org/gene/NC_000001:LOC102723747

URLを見て生物種が分かりやすいようにTaxonomyIDを入れてもよい

http://togogenome.org/gene/9606:NC_000001:LOC102723747
  • 理由:
    • geneのリソースにはinsdc:locus_tagまたはinsdc:geneが必ずついており、その値はgeneリソースのrdfs:labelとして記載されている。
    • 同一RefSeqIDの範囲内ではrdfs:labelの値は一意である(現状のデータはこうなっているが、この規則があるかは不明。データ生成時チェックをする)
    • URIの永続性を保つために、RefSeqIDのバージョンは省略する。NC_000001.11 => NC_000001


以下検証用SPARQL

  • geneの件数(12,605,375件)
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT (COUNT(DISTINCT ?gene) AS ?cnt)
FROM <http://togogenome.org/graph/refseq>
{
 ?gene rdfs:subClassOf obo:SO_0000704 .
}
  • locus_tagプレディケートを持たないgeneの件数(1,492,118)
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT (COUNT(DISTINCT ?gene) AS ?cnt)
FROM <http://togogenome.org/graph/refseq>
{
 ?gene rdfs:subClassOf obo:SO_0000704 .
 MINUS {?gene insdc:locus_tag ?locus_tag }
}
  • geneプレディケートを持たないgeneの件数(9,228,036)
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT (COUNT(DISTINCT ?gene) AS ?cnt)
FROM <http://togogenome.org/graph/refseq>
{
 ?gene rdfs:subClassOf obo:SO_0000704 .
 MINUS {?gene insdc:gene ?gene_label }
}
  • locus_tagとgeneのどちらのプレディケートも持たないgeneの件数(0) = どちらかは必ずある
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT (COUNT(DISTINCT ?gene) AS ?cnt)
FROM <http://togogenome.org/graph/refseq>
{
 ?gene rdfs:subClassOf obo:SO_0000704 .
 MINUS {?gene insdc:locus_tag ?locus_tag }
 MINUS {?gene insdc:gene ?gene_label }
}
  • insdc2ttlでは、geneのrdfs:labelにlocus_tagかgeneかfeatureを使用するので、rdf:labelは必ずある。
(insdc2ttl.rb)
puts triple(feature_id, "rdfs:label", quote(locus_tag || gene || feature))
  • taxid + geneのrdfs:labelではgeneは一意に特定できない

このクエリはエンドポイントではタイムアウトするためisqlから実行する

・クエリ
SPARQL 
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT ?tax ?label (COUNT(DISTINCT ?gene) AS ?cnt)
FROM <http://togogenome.org/graph/refseq>
{
 ?gene rdfs:subClassOf obo:SO_0000704 ;
   obo:RO_0002162 ?tax ;
   rdfs:label ?label .
} GROUP BY ?tax ?label HAVING COUNT(DISTINCT ?gene)  > 1 ORDER BY DESC(?cnt)
;

・実行方法
/data/store/[virtuoso_home]/bin/isql [port] [user] [pass] VERBOSE=OFF BANNER=OFF PROMPT=OFF ECHO=OFF BLOBS=ON ERRORS=stdout < uniq_gene_label.rq > uniq_gene_label.txt

・結果(106,880件、以下抜粋)
http://identifiers.org/taxonomy/9913   TRNAC-GCA    60                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAG-CCC    60                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAE-UUC    58                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAC-ACA    57                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAW-CCA    54                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAG-UCC    46                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAE-CUC    42                                                                                                               
http://identifiers.org/taxonomy/9913   TRNAK-UUU   42                                                                                                               
・クエリ
SPARQL
PREFIX insdc: <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo: <http://purl.obolibrary.org/obo/>

SELECT ?seq ?label (COUNT(DISTINCT ?gene) AS ?cnt)
FROM <http://togogenome.org/graph/refseq>
{
 ?gene rdfs:subClassOf obo:SO_0000704 ;
   obo:so_part_of ?seq ;
   rdfs:label ?label .
} GROUP BY ?seq ?label HAVING COUNT(DISTINCT ?gene)  > 1 ORDER BY DESC(?cnt) 
;

・実行方法
/data/store/[virtuoso_home]/bin/isql [port] [user] [pass] VERBOSE=OFF BANNER=OFF PROMPT=OFF ECHO=OFF BLOBS=ON ERRORS=stdout < uniq_gene_label.rq > uniq_gene_label.txt

・結果(0件)= 同じrefseq_idの中ではgeneのrdfs:labelは重複しない

RefSeq+geneラベルでgeneを一意に特定できない

insdc2ttlの改修に伴い、TogoGenomeで使用する予定であったgeneの識別子”RefSeqID+geneラベル”では一意に識別することができなくなった。
同じRefSeqID+geneラベルを持つgeneでも複数のlocationに分かれているケースがあり、refseqグラフでは別のURIとして登録されている。
この二つのURIは同じNCBIのgeneIDを持ち、NCBIのページgene:100126533ではlocationA,locationBと表記されている。
location表記: NC_000001.11 (121016845..121016915, complement) , (16678271..16678341, complement)

  • NC_000001.11.ttl のgeneラベル重複例 (抜粋)
<http://identifiers.org/refseq/NC_000001.11#feature:16678271-16678341:-1:gene.395>       rdfs:label      "TRNAG-CCC" .
<http://identifiers.org/refseq/NC_000001.11#feature:121016845-121016915:-1:gene.1962>   rdfs:label      "TRNAG-CCC" .

スタンザでの課題と対応策

スタンザでは引数で一つのgeneURIが指定される事を前提に実装されているため、複数個のgeneURIの情報表示には対応できないものもある。
引数が複数のgeneURIに紐づく場合には、以下のいずれかの対応が必要になる。

  • Stanza内で複数まとめて表示できるようにする
  • Stanza内で表示するlocationをユーザに選択させる(個々のスタンザで選択操作が必要)
  • TogeGenome側でユーザに選ばせる。
  • Turtle生成時に同じラベルのgeneに連番を振って識別する(永続性のないURIになってしまう)

重複件数の調査

geneの識別子を"RefSeqID+gene"にした場合と、"TaxID+gene"にした場合に重複するURIがどの程度あるか調べた。
refseqグラフにある全gene数は 12,856,828 個

  • 同じRefSeqID+geneラベルを持つgeneのリスト

geneID(RefSeqID+geneラベル)が重複するケースは7,722件、geneは32,431個 全件リスト
最大で一つのgeneIDに291個のURIが紐づくケースがある。NC_007115.6:trnag-gcc

TaxID RefSeqID:geneラベル 重複個数  //TaxID7955:ゼブラフィッシュ
7955 NC_007115.6:trnag-gcc 291
7955 NC_007115.6:trnak-uuu 274
7955 NC_007115.6:trnal-cag 272
7955 NC_007115.6:trnan-guu 262
7955 NC_007115.6:trnas-aga 256
(略)
  • 同じRefSeqID+geneラベルを持つgeneのリスト(tRNA除外)

重複するgeneは、"trna"から始まるものが多く、アノテーションに”tRNAscan-SE”の文字が入っている
"trna"で始まるものを除外すると重複するケースは2,005件、geneは4,163個 全件リスト

9544 NC_007870.1:IGKC 8
9601 NC_012603.1:VWF 6
9823 NC_010461.4:DMD 5
9544 NC_007878.1:HNRPA1 5
9544 NC_007876.1:ZNF208 5
9544 NC_007860.1:TRB@ 5
7955 NC_007135.6:ptprma 5

いくつかピックアップして調べたが、NCBIのgeneIDが同一の場合も、異なる場合もあった。複数locationが同一geneとして管理されている理由は不明。
10116 NC_005101:Lphn2 (2) 171447
9601 NC_012613:PLXNB2 (2) 100172633
9544 NC_007870:IGKC (8) 701615 703375 708048 708861 709066 709162 709793 709986
9601 NC_012603:VWF (6) 100434817
9823 NC_010461:DMD (5) 497636
9544 NC_007860:TRB@ (5) 696752 697234 697466 700224 701745
7955 NC_007135:ptprma (5) 386769


  • 同じTaxID+geneラベルを持つgeneのリスト

真核対応以前に使用していた"TaxID+geneラベル"をgeneの識別子として使用した場合、GenIDが重複するケースは111,092件、geneは253,943個 全件ファイル
最大で一つのgeneIDに526個のURIが紐づくケースがある。

TaxID geneラベル 重複個数 //TaxID7955:ゼブラフィッシュ、9913:牛、9940:羊
9913:TRNAC-GCA 526
9913:TRNAG-CCC 376
9940:TRNAC-GCA 317
7955:trnag-gcc 307
9925:TRNAC-GCA 301
(略)
  • 同じTaxID+geneラベルを持つgeneのリスト(tRNA除外)

"trna"で始まるものを除外すると重複するケースは108,818件、geneは219,101個 全件リスト

9544:HNRPA1 29
9544:KRT18 24
9544:GAPDH 12
9544:SET 9
9544:LDHB 9
  • [参考]重複個数カウント用SPARQL(数分掛かるためisqlで実行)

RefSeqID+Geneの一覧を求める

PREFIX insdc:  <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo:    <http://purl.obolibrary.org/obo/>

SELECT ?tax_no ?gene_id
FROM <http://togogenome.org/graph/refseq>
WHERE
{
 ?gene rdf:type insdc:Gene .
 ?gene obo:so_part_of ?seq .
 ?refseq insdc:sequence ?seq .
 ?refseq insdc:sequence_version ?refseq_id.
 ?gene obo:RO_0002162 ?tax_id .
 ?gene rdfs:label ?gene_label .
 BIND (REPLACE(STR(?tax_id), "http://identifiers.org/taxonomy/", "") AS ?tax_no)
 BIND (CONCAT(STR(?refseq_id), ":", ?gene_label) AS ?gene_id)
}

# $ 71.sh isql < multiple_gene_nuc.sql > multiple_gene_nuc.result
# delete header and footer
# $ cat multiple_gene_nuc.result | awk '{print $1,$2}' | sort | uniq -c | sort -nr | awk '{if($1 > 1) print $2,$3,$1 }' > dup_nuc_gene_stats.txt

TaxID+Geneの一覧を求める

SPARQL
PREFIX insdc:  <http://ddbj.nig.ac.jp/ontologies/nucleotide/>
PREFIX obo:    <http://purl.obolibrary.org/obo/>

SELECT ?gene_id
FROM <http://togogenome.org/graph/refseq>
WHERE
{
 ?gene rdf:type insdc:Gene .
 ?gene obo:RO_0002162 ?tax_id .
 ?gene rdfs:label ?gene_label .
 BIND (CONCAT(REPLACE(STR(?tax_id), "http://identifiers.org/taxonomy/", "") , ":", ?gene_label)AS ?gene_id)
}
;
#usage:
# $ 71.sh isql < multiple_gene_tax.sql > multiple_gene_tax.result
# delete header and footer
# $ cat multiple_gene_tax.result | sort | uniq -c | sort -nr | awk '{if($1 > 1) print $2,$1 }' > dup_tax_gene_stats.txt
個人用ツール