# Microbiome Datahub2
## 2023~2024年度ログ
- https://hackmd.io/hG_r4YW8TeGyGtWQ8ovHLA?view
## 2025-12-1 zoom会議
- Microbiome Datahubの論文を8/30に投稿済み
- Reviewer Commentが11月末に送られてきた
- 12/27までにRevise原稿を提出する必要がある
- 12/4に分子生物学会でDBを紹介
- 12/7にJSTで中間評価の続き。スライド締め切りが明日正午
- 一部のゲノムが「未審査」品質でリストされDFASTアノテーションが欠落している https://mdatahub.org/genomes?quality=0&dataSource=INSDC&sort=dateCreated-
- INSDC MAGでQualityがnot reviewedの188 MAGは削除すべき
- KEGG Moduleの組成データ(0,1)について、1、つまり所持しているModuleだけModule IDとModule nameだけをリストで表示したい
- TODO: GI関連だが、SAGはMDatahubにも使える。公開されているSAGデータをdgcのスパコンステージング環境にフォルダ作ってscpしておく。
- ゲノム台帳っぽいものも項目名はExcelファイルで作って、上記SAGのメタデータっぽいものを入力する
## 2025-11-13 zoom会議
- Microbiome Datahubの論文を8/30に投稿済み
- 複数のReviewerによる論文とDBのコンテンツの審査
- 12/4に分子生物学会でDBを紹介
- 12/7にJSTで中間評価の続き
- Swagger UIを設置しました。全てのAPIが見えてしまうのでdownload用のAPIなども表示されているのですが一番下の"/dev/genome/search"が Elasticsearch検索用のREST APIの仕様に対応しています。
- https://mdatahub.org/api/docs/static/index.html
- 完了 まずはGTDBの系統情報を表示できるようにする。
- 完了 BioProject、BioSample、GenomeのNCBIへのリンクも埋める
- 現状はElasticsearchのクエリで頑張っているが、検索APIに置き換えたい。
- KEGG Moduleの組成データ(0,1)について、1、つまり所持しているModuleだけModule IDとModule nameだけをリストで表示したい
## 2025-10-15 zoom会議
- Microbiome Datahubの論文を8/30に投稿済み
- 複数のReviewerによる論文とDBのコンテンツの審査
- 10/20午後にJST NBDCのトーゴーの日シンポジウムでポスター発表
- 9/30に「MEOラベルでキーワード補完検索」の実装が完了しました。また、Enviroment検索のクエリ修正も行いました。(杉本)
- 9/30に大石さんの方で本番環境にも反映済み
- まずはGTDBの系統情報を表示できるようにする。
- BioProject、BioSample、GenomeのNCBIへのリンクも埋める
- 現状はElasticsearchのクエリで頑張っているが、検索APIに置き換えたい。
## 2025-9-22 zoom会議
- Microbiome Datahubの論文を8/30に投稿済み
- 9/12以降複数のReviewerによる論文とDBのコンテンツの審査
- 9/24午後にJST NBDCのサイトビジット
- DB開発の進捗について報告
- 9/22夜にMEOのキーワード検索とfacet検索を反映(大石)
- Environment検索で"marine water"のような検索文字列にスペースが含まれるケースで検索結果が0件になります。
現状のEnvironmentの検索クエリが{"term": {"_meo.label": "marine water"}} ですがこれをローカルホストで確認すると
{"term": {"_meo.label.keyword": marine water"}} のように.keywordフィールドの検索にするか
{"match_phrase": {"_meo.label:"marine water"}}" match_phraseを使って"marine water"を検索すると
正しそうな検索結果が返る(14,635件)ので空白文字列が含まれるクエリに修正が必要かもしれません
- ground water, hydrothermal vent, hot spring, marine waterの4つは確かに検索結果が0件
- activatedとsludgeが別行になっていますが、activated sludgeで1文字列になります
## 2025-8-27 zoom会議
- MAG MEO (大石)
- MEO情報がある場合はルートの属性として下記のような形式でデータが格納されます。_meoの配列の長さは1もしくは2です(0の場合は_meoが存在しません。)
"_meo": [
{
"id": "MEO_0000116",
"label": "biofilm"
},
{
"id": "MEO_0000035",
"label": "waste water"
}
]
- MAG KEGG ModuleのlistとKEDD Module IDとlabelのリストを大石さんに渡した
## 2025-6-4_6 開発合宿 in ホテルアソシア静岡
- MAG検索改善のためのsetup_genome.py更新してロジック確定(藤澤)
- TODO: sqlite生成+create_dblink.rbを整理して、コミットする
- 論文ゴールに必要なことを実施
- 過去の実行コマンドなどの確認:
- `ruby bin/create_dblink.rb > all.dot`
- `dot -Tsvg all.dot > all.svg`
- https://mdatahub.org/data/dev/all.svg を最終的に生成
- スクリプトを拡張して可視化の出力JSONとその可視化を試行していた
- https://mdatahub.org/data/dev/layered_graph.html
- https://mdatahub.org/data/dev/layered_graph2.html
- genome/GCA/000/770/195/GCA_000770195.1/dblink.jsonを作って可視化を想定していた
- 方針
1. Umbrella BPをもつMAGをリストアップするために、関係BioProject/Umbrellaするcount まずはこれを出力する [Done]
- assembly-accession
- assembly-bioproejct
- assembly-biosample
2. TSV出力に以下を追加する [Done]
- bioproject-tree-path
- bioproject-related-biosample
3. 6/5時点でのrelation情報を取得し直す
- biosample.xmlから取得 [OK]: 22166958行 -sort -u 22153264行
- `python bioproject_biosample_from_xml.py -i biosample_set.xml.gz -o biosample_bioproject_from_xml.tsv`
- assembly_summaryから取得 [OK] :2828810行
- `awk -F'\t' '$2 ~ /PRJ/ && $3 ~ /SAM/ { print $3 "\t" $2 }' assembly_summary_genbank.txt |sort -u > biosample-bioproject-from-assembly-summary-genbank.txt`
- SRA_accesssions.tabから取得 [OK]: 30419137行
- BP-BSの関係はType=ExperimentとRunに共起している
- `awk -F'\t' '$18 ~ /SAM/ && $19 ~ /PRJ/ { print $18 "\t" $19 }' SRA_Accessions.tab | sort -u > biosample-bioproject-from-SRA_Accessions.tab`
- tradから取得 [-](MAGの場合は不要)
- GEAから取得 [-](MAGの場合は不要)
- Metabobankから取得 [-](MAGの場合は不要)
4. relation情報をまとめる
- wc -l bioproject_umbrella2bioproject.tsv -> 128220
- biosample_bioproject.tsv
- `cat biosample-bioproject-from-SRA_Accessions.tab biosample-bioproject-from-assembly-summary-genbank.txt |sort -u > biosample_bioproject.tsv`
- 22153264 + 2828810 = 30419137 - (sort -u) -> 33889246
- (参考)shared_dataのbiosample2bioproject.tsvは 22978473
- sra_biosample.tsv
- `awk -F'\t' '$18 ~ /SAM/ && $19 ~ /PRJ/ { print $2 "\t" $18 }' SRA_Accessions.tab |sort -u > sra_biosample.tsv`
- SRAのBioSampleが取得できてない可能性があるので、関係情報を追加
-
5. 確認対象の検討
- biosample-count >= 2の場合は205167/215234件
- umbrella bioproject = 0
- assembly-biosample で確定
- umbrella bioproject >=1 かつ
- biosample-count =0の場合: assembly-biosample で確定、relationが取れてない
- biosample-count =1の場合: assembly-biosample で確定
- biosample-count >= 2の場合:
- 試しに出力した結果 17844行: mag-dblinks-summary-filtered.tsv
- PRJNA217089を例にさらなる出力を検討
- https://www.ncbi.nlm.nih.gov/bioproject/PRJNA217089/
- 3528 BioSampleと紐づくUmbrella BioProject
- Projectが4つ紐付き、それぞれがMAGと紐づく
- Umbrella BioProjectのグループとしてBioSample Attributeが俯瞰して、BioSampleを選定する必要がある。
- グループ単位での出力: グループとは最上位が共通のUmbrella BioProject
- BP
- (Umbrella) Bioproject title
- Bioproject type (区分がわかるもの)
- [{acc, title, type}, {umbrella acc,title, type}]
- BS
- BioSample title
- BioSample package/checklist (区分がわかるもの)
- Sample attribute全部
```
PRJNA217089 -
- PRJNA167727
- 1 MAG
- PRJNA262935
- 9 MAG
- PRJNA273161
- 804 MAG
- PRJNA288027
- 2698 MAG
```
6. スプレッドシートに貼り付けて、MAG-(Microbiome) BioSampleをマニュアルで確認する
- https://docs.google.com/spreadsheets/d/1K7dL0NnWLfLe01Bd_ZufITHGfowAIRsY_q2RPCx9IAU/edit?gid=490767596#gid=490767596
- 確認しました(森)。 合計約2万のMAGがひも付いていると思われます。rootまたはその前まで辿ってD列のBioProjectに辿り着いたら、E列の環境を付ければ大丈夫です。
7. setup_genome.pyに反映する [TODO]
まとめ
- 今回作成したスクリプトについて、以下のREADME.mdに記載した
- https://github.com/microbiomedatahub/dataflow_prototype/blob/main/README.md#7-magからeumbrella-bioproject取得
- sqliteおよびcsvファイルの更新方法と出力先を整理(大石)
- relation.dbのbioproject_biosampleの更新(2025/2/12の作業ログ)
```
bioproject_umbrella2bioproject //sqlite 順番を保ったままカラム名 field1, field2
assembly_biosample // カラム名 field1,field2
Bioproject2biosample. // sqllite
## 4つのsqlite tableを作る
- biosample_assembly
- biosample_submission
- bioproject_bioproject (sqlite:bioproject_umbrella2bioproject).
- bioproject_biosample ( sqlite:bioproject2biosample + bioproject_biiosample_SRA_Accessions.tab由来)
* /work1/mdatahub/private/sra/reports/Metadata/bioproject_biosample-SRA_Accessions.tab
* CS9 の/work1/mdatahub/private/sra/reports/MetadataにSRA_Accession.tab由来の二校関係データを吐き出してもらった
読み込み
1. bioproject_bioproject. // ヘッダ行ありと考えて1行飛ばしてしまったので取得し直す
2. bioproject_biosample
- /work1/mdatahub/private/sra/reports/Metadata/bioproject_biosample-assembly_summary_genbank-20230420.txt
- /work1/mdatahub/private/sra/reports/Metadata/biosample_bioproject-SRA_Accessions.tab // biosample_bioprojectで入っているので注意
3. biosample_assembly
- /work1/mdatahub/private/sra/reports/Metadata/assembly_biosample
4. submission_biosample
- /work1/mdatahub/private/sra/reports/Metadata/submission_biosample-SRA_Accessions.tab
テーブル一覧:
bioproject_bioproject: 104585 件
bioproject_biosample: 30701067 件
biosample_assembly: 1602370 件
submission_biosample: 31674456 件
cs9の /work1/mdatahub/app/tmp にツールとDBを一旦おいた
├── create_table.py
├── db_insert.py
├── move_dfast.py
├── relation.db
└── show_tables.py
## sql
1. create table
CREATE TABLE bioproject_bioproject (
field1 TEXT, -- 1列目のデータ型を指定
field2 TEXT -- 2列目のデータ型を指定
);
```
- bioproject_umbrella2bioprojectの更新
- 実行することで、bioproject.xmlからsqliteおよびファイルを更新する `python dblink/create_bioproject_relation.py`
- 更新sqlite: `/home/w3ddbjld/tasks/relations/bioproject_relation.sqlite`
- 出力csvファイル: `/home/w3ddbjld/tasks/relations/bioproject_umbrella2bioproject.csv`
- child, parent のヘッダーでmember_id, project_idを出力
- 荒さんの更新ファイル:`/lustre9/open/shared_data/dblink/bioproject_umbrella-bioproject/bioproject_umbrella2bioproject.tsv`
- (参考)関係情報を取得する補足説明
```
取得条件:ProjectLinks.Link.Hierarchical@type == "TopAdmin" である場合
member_id = ProjectLinks.Link.Hierarchical.MemberID@accession
project_id = ProjectLinks.Link.ProjectIDRef@accession
データロードsql
INSERT INTO bioproject_umbrella2bioproject (child, parent) VALUES (project_id, mamber_id);
```
- biosample_set.xmlからbiosample-bioprojectの関係を取得するスクリプト
- dataflow_prototype: https://github.com/microbiomedatahub/dataflow_prototype/blob/main/bin/bioproject_biosample_from_xml.py
- biosample_set.xmlからLinks.Linkに含まれるbioprojectのaccessionを取得しbiosampleとセットでファイルに出力する
- 2025/6/5にDLしたbiosample_set.xmlで 22,166,958件取得できた
```
# 実行例
python bioproject_biosample_from_xml.py -i biosample_set.xml.gz -o biosample_bioproject_from_xml.tsv
```
- GI-MDatahubの環境構築し、ゲノムインデックス作成(大石)
- cs9:/work1/gi-mdatahub/publicにデータを配置
- 2000株弱の単離菌ゲノム (GCA/GCF)
- データパスなどの追加検討して、森さんがNITEにデータ共有がゴール
- GCF,GCAの混在とAssembly versionの差異を相談
- NITEからのリスト待ち
- GCAに全部したい。NITEに伝える。
- 星定義の再考(森)
- 星4と5が無い問題
- 処理の問題っぽい
- qualityを集計する際のsequence_count,rrna_countのデータ取得の処理に問題があったため修正する(大石)
- MDatahubのRefSeq単離菌へのBac2Feature実行(森)
- Bac2Featureで属名や種名からPhenotypeを推定する場合は、https://github.com/fuyo780/Bac2Feature/blob/main/bac2feature/bac2feature/data/ref_taxonomy/empirical_dist.json を属名や種名で検索して値を参照するだけでOK。Sphingomonadaceae等、Family以上の場合も値がJSONファイルにあるが、https://mdatahub.org/genomes/GCA_029760205.1
に書いてある予測結果と値が一致しないので、何か別の処理が入っている。
いずれにせよ、属名や種名がはっきりしている単離菌の場合は、上記JSONファイルを参照すればOK
- 大石さんにMDatahubのRefSeq単離菌organism nameリストの出力を依頼し、種名および属名で上記jsonファイルに検索してphenotype情報を取得するpythonプログラムを書いた。
- 種でphenotype情報がNA以外の値が見つかったらそれを採用
- 種名がリファレンスで見つからない or phenotypeがNAになっている場合、genus名で検索して、genusのphenotypeを使用。
- 特定のphenotypeがNAになっている属・種が結構あった。そもそも種・属名共にjsonファイルに見つからないものもNAにした。
- MAGへのBac2Feature再実行(森)
- 松井さん曰く、Family以上でSphingomonadaceaeエントリーが複数あり、それらを集めて平均値を取っているため。-0.314はSphingomonadaceaeが含まれるエントリーの平均値、-0.2946はいずれか1エントリーの値。欠損値になっている形質情報については、さらに上の分類群まで遡って欠損値を埋めています(なので、値の信頼性はより低くなります)。
- ということなので、単離菌のより厳格な基準(species、genus等系統名が一致する場合のみphenotype推定する)をMAGにも適用する。無理にNAをfamily以上の上位系統の予測結果で埋めない。Family, Orderがせいぜい。
- MAGにもBac2Feature再計算した。NAがかなり多いが仕方が無い。
- ゲノムID 系統名のtsvからpythonプログラムでBac2Featureは可能
- GI-MDatahubのサーバ用意(森)
- globalIPとDNS登録
- その後、大石さんがGI-MDatahub環境構築がゴール
- MDatahubでのBac2FeatureとMBGDデータのドキュメント書き(森)
- 各phenotypeの意味
- 推定手法(特にMBGD/KEGG Orthology ID)
- p__Firmicutes_A等のGTDBの系統名でも検索可能。表示もできないしダウンロードもできないが。
-
- 次のアクション
- ゲノムリストは、GIサーバ・環境構築とデータセット作成
- setup_genome.pyの更新とgenome.jsonの拡張
- isolateおよびMAGの最新のBac2Feature入力に差し替え
- umbrella bioproject-tree情報のpropertyを追加 `"project-path": []`
- 検索に利用する環境情報のpropertyを追加 `"envirnoment": [}`
- マニュアルで生成した umbrella BP に紐づく環境タームを追加する
- BioSample属性のhost, isolation_sourceなどから追加する
- それ以外の入力があれば、trad source featureからなど
- 星判定のロジック見直しと修正
- Aseembly Accession - Phenotype情報の準備(TogothonでNITEと相談)
- NBDC問い合わせ対応としてはファクトのPhenotypeとBac2Featureの情報は箱を分けている説明している
- MDatahubに格納するために、Aseembly Accession - Phenotype文字列の関係情報がほしい
- 過去のMCCVのRDFでもAseembly Accessionと紐づいてない
- PlanA: RDFポータル・BRSO経由
- RDFポータルにはNBRC菌株ID/taxon - Phenotype情報はあるので、足りないものは、NBRC/JCM菌株IDとAseembly Accessionの関係情報
- 更新を考慮するとRDFポータルにいれてもらってSPARQLで取得したい has-genome対応してほしい
- MCCV何番をMDatahubに利用するか別途検討が必要
- 理想を語ると、Bac2Featureの表現型予測結果を格納するBRSOのモデルが欲しい
- PlanB: JCM/NBRCから菌株ID -(Assembly Accession) - Phenotype文字列の関係情報を直接もらう
- DBRPからファクトのPhenotypeの文字列データをもらう仲里さんに相談
- PlanA,Bでも必要に応じて、公開されているNBRC/JCM IDとAssembly Accは DDBJで準備することは可能
- 国内版ハッカソンまでにデータ準備したいので次回Togothonで方針を決める
- 今年度開発
- bac2feature, dfast-qcの結果の選択ダウンロードにAPI+フロント対応
- API、検索と詳細ページ、フロント表示の拡張の内容を決める
- GTDB系統階層
- Umbrellaの階層
- 環境情報
- フェノタイプ情報
- DFAST-MAG/SAG対応とDFAST-QC/GTDBの処理系について谷澤さんと相談(6/13のDFAST開発ミーティングで)
- 先進ゲノム支援とDDBJアカウント認証
- 黒川研の藤さんがシークエンス拠点の豊田研分の登録担当
- シークエンス拠点の東大鈴木ゆたか研はシングルセル、空間トランスクリプトーム担当
- 支援依頼単位でDDBJアカウントが払い出されている(pags25_xxxx)が150件程度
- 先進ゲノム支援→登録対応として必要なものは
- 登録前の支援依頼単位でデータ共有(現状はpags24_xxxx@ftp-private.ddbj.nig.ac.jpで共有)30日で消える
- 支援チームによる代理登録(現状はpags24_xxxxで実施)
- 支援依頼者自身でHOLD_DATEを更新(現状はpags24_xxxxで実施)
- 課題:
- アカウント共用利用およびメールアドレスが、支援依頼単位のメールアドレス(PIなど)で二要素認証を導入すると、アカウント利用者がメール通知者ではないのでログインできなくなる。この運用を解消しないと二要素認証が導入できない。
- pags_ アカウントはNBDCヒトDB提供申請グループにいる可能性がある。
- 今後:
- 先進ゲノム支援はあと3年弱でコストをかけずに
- 支援チームの登録担当者のDDBJアカウントにより、支援依頼者自身のDDBJアカウントとして登録代行ができればよい。データ管理は支援依頼者(DDBJ Repositoryで実現できればよさそう)
- BP/BS/SRA/Trad/GEA/JGA
- つまり、D-way登録のバイパス+DDBJ Recordでの登録