# 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での登録