京橋のバイオインフォマティシャンの日常

まずは、データ分析、コマンドラインのメモとして

公共(バイオ)画像データのリポジトリをまとめてみた

ライフサイエンス・基礎生物、医療・医用などの画像データを中心に、 機械学習・深層学習に使えそうな、データセット関連のページリンクをまとめてみた。

【24 June 2021, updated】随時更新予定

Dataset Search - Google

Dataset Search

「segmentation」で検索した結果

Dataset Search

「3d sem」で検索した結果

Dataset Search

BioImageDbs - Bioconductor

Bioconductor - BioImageDbs

BioImage Archive (EMPIAR, Cell-IDR and Tissue-IDR)

Home < BioImage Archive < EMBL-EBI

BIAFlows

Biaflows

Broad Bioimage Benchmark Collection

Image Sets | Broad Bioimage Benchmark Collection

CELL TRACKING CHALLENGE

2D+Time Datasets – Cell Tracking Challenge

3D+Time Datasets – Cell Tracking Challenge

Segmentation Dataset for Transmission Electron Microscopic Cell Recordings, University of Freiburg

Computer Vision Group, Freiburg

zenodo

Zenodo - Research. Shared.

「segmentation」で検索した結果

Zenodo

Academics Torrents

Academic Torrents

「segmentation」で検索した結果

https://academictorrents.com/browse.php?c6=1&search=segmentation&sort_field=size&sort_dir=ASC

Tissue Image Analytics (TIA) Centre

TIA Centre: Datasets for Sharing

Allen Institute for Cell Science

ALLEN CELL EXPLORER - Home

Object Research Systems

Dragonfly Sample Datasets | ORS

Genomic Data Commons Data Portal

GDC

National Cancer Institute, NIH

National Cancer Institute

Cancer Imaging Archive

Welcome to The Cancer Imaging Archive - The Cancer Imaging Archive (TCIA)

Osirix | DICOM Image Library (CT dataset)

https://www.osirix-viewer.com/resources/dicom-image-library/ [:title]

American Association for Anatomy's Virtual Microscope Database (バーチャルスライドデータ)

VMD Website

Beelden Pathologie (病理画像)

Beelden Pathologie - Radboudumc

NEURODATA (コネクトームデータ)

Hildebrand et al. (2017)

Nanotomy: Large-scale electron microscopy (EM) datasets

www.nanotomy.org

Michigan Histology and Virtual Microscopy Learning Resources

All Resources | histology

Cell Image library, Center for Research in Biological Systems, University of California, San Diego

The Cell Image Library

miniJSRT_database | 日本放射線技術学会 画像部会

miniJSRT_database | 日本放射線技術学会 画像部会

コンペ系

Grand Challenge

Challenges - Grand Challenge

ISBI 2019

Challenges | ISBI 2019

kaggle.com(Image Data)

image data Datasets and Machine Learning Projects | Kaggle

VisualData (一般画像認識課題)

https://www.visualdata.io/discovery

まとめサイト

機械学習に使える医療系データセット【随時更新】

機械学習に使える医療系データセット【随時更新】

機械学習用データセット一覧(フリー素材)

機械学習用データセット一覧(フリー素材) | Md.lab

【10個掲載】機械学習による画像分類で使えるデータセット

【10個掲載】機械学習による画像分類で使えるデータセット | Lionbridge AI

画像解析のためのバイオイメージデータベース@tokkuman

画像解析のためのバイオイメージデータベース - Qiita

参考資料

https://www.researchgate.net/post/Can_anyone_suggest_me_any_website_for_downloading_DICOM_files

R言語 CRAN Task View:医用画像解析 | トライフィールズ

List of Training Materials | BIII

11 Image data | Modern Statistics for Modern Biology

Quantitative Pathology & BioImage Analysis: QuPath - [NEUBIASAcademy@Home] Webinar - YouTube

QuPath | Quantitative Pathology & Bioimage Analysis

The ANTsX ecosystem for quantitative biological and medical imaging | Scientific Reports

SAPHIR: a Shiny application to analyze tissue... | F1000Research

ZeroCostDL4Mic SplineDist notebook now available - Announcements - Image.sc Forum

CSBDeep

GitHub - ML-Bioinfo-CEITEC/ECCB2020: ECCB2020 tutorial: Using Deep Learning For Image and Sequence Analysis

R言語で、pdf2textを実行する

科学論文などは、通常、PDF形式のファイルで保管される。

このフォーマットは主に印刷用に設計されているため、検索や索引付けにはあまり適さない。

rOpenSci/pdftoolsパッケージを使えば、 PDFファイルから、テキストやメタデータを抽出できる。

今回、RでPDFファイルを読み込み、テキスト生成とかをやってみる。

#関連ページ
browseURL("https://github.com/ropensci/pdftools")
browseURL("https://cran.r-project.org/web/packages/pdftools/index.html")

#pdftoolsのインストール
install.packages("pdftools")

#事前にセットアップ For MacOSX
system("brew install poppler")
system("brew install wget")

#パッケージ・ロード
library(pdftools)

Getting started (1) 英語論文での事例

最も重要な関数は pdf_text という関数で、 pdfのページ数と同じ長さの文字ベクトルを返す。

ベクトル内の各文字列は、 そのページ内のプレーンテキストである。

#ダウンロード
download.file("http://arxiv.org/pdf/1403.2805.pdf", "1403.2805.pdf", mode = "wget")

#Check
#dir(pattern = ".pdf")

#変換
txt <- pdftools::pdf_text("1403.2805.pdf")

#1ページ目のテキスト
cat(txt[1])

#2ページ目のテキスト
cat(txt[2])

#簡単な前処理: 空白と改行記号を消す
#1ページ目を抜き出す
a <- txt[1]
for(n in 1:10){
a <- gsub("  ", " ", a)
a <- gsub("\n", " ", a)
}

#出力
a
#[1] " The jsonlite Package: A Practical and Consistent Mapping Between 
#JSON Data and R Objects Jeroen Ooms arXiv:1403.2805v1 [stat.CO] 12 Mar 
#2014 UCLA Department of Statistics Abstract A naive realization of JSON data 
#in R maps JSON arrays to an unnamed list, and JSON objects to a named list. 
#However, in practice a list is an awkward, inefficient type to store and manipulate
#data. Most statistical applications work with (homogeneous) vectors, matrices 
#or data frames. Therefore JSON packages in R typically define certain special 
#cases of JSON structures which map to simpler R types. Currently there
#.........

#書き出し・表示
readr::write_excel_csv(as.data.frame(a), "a.csv", col_names = F)
browseURL("./a.csv")

Getting started (2) 日本語資料での事例

#ダウンロード
download.file("http://www.tkd-pbl.com/files/mcmurry_seikagakuhannoukikou_2nd.pdf", "seikagaku_2nd.pdf", mode = "wget")

#変換
txtJpn <- pdftools::pdf_text("seikagaku_2nd.pdf")
txtJpn

#簡単な前処理: 空白と改行記号を消す
b <- txtJpn[1]
for(n in 1:10){
b <- gsub(" ", "", b)
b <- gsub("\n", " ", b)
b <- gsub(".", ".", b)
b <- gsub(",", ",", b)
}

b
#[1] "生化学と有機化学を相互につなぐ教科書マクマリー生化学反応機構―
#ケミカルバイオロジーによる理解―第2版J.McMurry,T.Begley著長野哲雄監
#訳A5判・井上英史,浦野泰照,小島宏建,496ページ鈴木紀行,平野智也訳
#定価:本体5400円+税東京化学同人「生命活動は化学反応によって成り学
#の世界として,頭に詰め込まれてい学問体系の相互的な理解が進むように工立
#っている.だから有機化学を学ぶことく.一方で生化学の教科書では,生体内夫
#されており,深い学びへと誘うアクは,生命を理解することにつながるのでひ
#き起こされる物質変換の様子が連続ティブラーニングが自然と達成できる教だ」私が
#....

#書き出し・表示
readr::write_excel_csv(as.data.frame(b), "b.csv", col_names = F)
browseURL("./b.csv")

PDF error: Invalid Font Weightというエラーが出てるが、特に問題なさそうである。

他のユーティリティについて

加えて、このパッケージには、PDFファイルから他のデータを抽出するためのユーティリティがいくつかある。

pdf_toc関数は、目次(ToC)を取得・表示する。 つまり、PDFリーダーが通常、左側のメニューパネルに表示するセクションヘッダーを意味する。

JSON形式だと、うまく表示されるらしい。

# 目次の取得
toc <- pdftools::pdf_toc("1403.2805.pdf")

toc
#$title
#[1] ""
#
#$children
#$children[[1]]
#$children[[1]]$title
#[1] "1 Introduction"
#
#$children[[1]]$children
#$children[[1]]$children[[1]]
#$children[[1]]$children[[1]]$title
#[1] "1.1 Parsing and type safety"
#...

#JSON形式での表示
jsonlite::toJSON(toc, auto_unbox = TRUE, pretty = TRUE)
#{
#  "title": "",
#  "children": [
#    {
#      "title": "1 Introduction",
#      "children": [
#        {
#          "title": "1.1 Parsing and type safety",
#          "children": []
#        },
#        {
#          "title": "1.2 Reference implementation: the jsonlite package",
#          "children": []
#        },
#        {
#          "title": "1.3 Class-based versus type-based encoding",
#          "children": []
#        },
#....

また、その他の機能では、 フォントや添付ファイル、作者や作成日、タグなどのメタデータに関する情報を取得できる。

# Author, version, etc
info <- pdftools::pdf_info("1403.2805.pdf")
info
#$version
#[1] "1.4"
#$pages
#[1] 29
#$encrypted
#[1] FALSE
#$linearized
#[1] FALSE
#$keys
#$keys$Producer
#[1] "dvips + GPL Ghostscript GIT PRERELEASE 9.08"
#......

# Table with fonts
fonts <- pdftools::pdf_fonts("1403.2805.pdf")
fonts
#              name   type embedded                            file
#1      Times-Roman  type1    FALSE /System/Library/Fonts/Times.ttc
#2    UWJIZQ+CMTT10 type1c     TRUE                                
#3     OYDUEZ+CMR10 type1c     TRUE                                
#4    EBLJKS+CMTI10 type1c     TRUE                                
#5    APBPVY+CMBX12 type1c     TRUE                                
#6     FBFBNT+CMTI9 type1c     TRUE                                
#......

#Table with attachments
files <- pdftools::pdf_attachments("1403.2805.pdf")
files
#list()

#Table with data
Dat <- pdftools::pdf_data("1403.2805.pdf")
head(Dat[[1]])
#  width height   x   y space      text
#1    27     15  92 115  TRUE       The
#2    71     14 124 117  TRUE  jsonlite
#3    59     15 200 115  TRUE  Package:
#4    11     15 266 115  TRUE         A
#5    61     15 284 115  TRUE Practical
#6    25     15 350 115  TRUE       and

また、PDFファイルをビットマップ配列にレンダリングする機能もある*1

R上では、pdf_render_page関数を使って、PDFの1ページをビットマップにレンダリングできる。

# pdf から bitmap へのレンダー
bitmap <- pdftools::pdf_render_page("1403.2805.pdf", page = 1)

# bitmap 画像の保存
png::writePNG(bitmap, "page.png", dpi = 100)
jpeg::writeJPEG(bitmap, "page.jpg", quality = 0.7, bg = "white")
#install.packages("webp"); library(webp)
#webp::write_webp(bitmap, "page.webp")

#ファイルを開く
browseURL("./page.png")
browseURL("./page.jpg")

まとめ

一通り、pdftoolsを使ってみた。

結構、便利そうに思うけど。

*1:popplerライブラリの事前インストールが必要

R言語で、現在最強の機械翻訳ツール「DeepL API」を使ってみた件

f:id:skume:20210613233909p:plain:w500

今回、画期的な機械翻訳ツールを紹介する。その名も、DeepL である。

DeepLのWebインターフェイスも中々使い勝手は良い

#RからWebページを開く
browseURL("https://www.deepl.com/translator")

f:id:skume:20210613233913p:plain:w500

DeepLの良さは、何と言っても、その翻訳精度である。 Google翻訳よりも自然なフレーズ選択をしてくれる。

悲しいことに、 自身の英語力をすでに超えている英訳・和訳なので、 使わないわけにはいかない。。

DeepL登録HP

DeepL APIを使うには、無料のdeveloper登録が必要である。

まず、DeepL APIの登録ページに移動する。

#RからWebページを開く
browseURL("https://www.deepl.com/pro?cta=header-prices/#developer")

f:id:skume:20210613233918p:plain:w500

DeepL API Freeの「無料で登録する」を選択して、次のページに進む。

そこで、アカウントの登録を行う。

f:id:skume:20210613233923p:plain:w500

登録時に、クレジットカード番号を聞かれるのがやや面倒

Pro版にしないと請求は来ないとのこと

これも無料で使えるので仕方ない。。。

登録が終われば、承認キーが発行される。

f:id:skume:20210613233927p:plain:w500

curlで問い合わせるときに、このキーが必要となるので、 コピーして保存しておく。

DeepL APIを使って、和訳・英訳をやってみる。

DeepLの練習(1)いつもの例題: 英語 to 日本語

source_langを"EN"、target_langを"JA"と設定する。

[Your Authentication Key]に承認キーを入力すること、また、[ ]は不要。

#入力文字列
Sentence <- "Hello, world"

#curlを用いて、DeepL API実行
a <- system(paste0('curl -s https://api-free.deepl.com/v2/translate -d "auth_key=[Your Authentication Key]" -d "text=', Sentence, '" -d source_lang="EN" -d "target_lang=JA"'), intern = T)

#前処理
result <- strsplit(strsplit(as.character(a), "\"text\":\"")[[1]][2], "\"}]}")[[1]][1]

#出力結果
result
#[1] "ハロー、ワールド"

DeepLの練習(2)専門的な文書の翻訳: 日本語 to 英語

source_langを"JA"、target_langを"EN"と設定する。

[Your Authentication Key]に承認キーを入力すること、また、[ ]は不要。

#入力文字列
Sentence <- "薬品とは、精製あるいは配合されて、何らかの用途に利用可能な状態とした化学物質のうち、少量で使用するものをいう。"

#curlを用いて、DeepL API実行
a <- system(paste0('curl -s https://api-free.deepl.com/v2/translate -d "auth_key=[Your Authentication Key]" -d "text=', Sentence, '" -d source_lang="JA" -d "target_lang=EN"'), intern = T)

#前処理
result <- strsplit(strsplit(as.character(a), "\"text\":\"")[[1]][2], "\"}]}")[[1]][1]

#結果
result
#[1] "A chemical is a chemical substance that has been refined or blended to make it usable for some purpose, and that is used in small quantities."

無料版APIオプションの説明

翻訳機能は、テキストの翻訳を可能にするもので、所定のAPI URL (https://api-free.deepl.com/v2/translate) で利用できる。この同期呼び出しは、以下の基本パラメータをサポートしている。

パラメータ オプション 説明
text Required 翻訳されるテキスト。UTF8エンコードのプレーンテキストのみ対応している。パラメータは複数回指定することができ、翻訳は要求された順に返す。それぞれのパラメータ値には、複数の文章を含めることができる。1回のリクエストで、最大50個のテキストを翻訳に送ることができる。
source_lang Optional 翻訳されるテキストの言語。現在利用可能なオプション
"DE" - ドイツ語
"EN」-英語
"ES" - スペイン語
"FR" - フランス語
"IT" - イタリア語
"JA」-日本語
"ZH" - 中国語
このパラメータが省略された場合、APIはテキストの言語を検出して翻訳を試す。
target_lang Required テキストを翻訳する言語。略語は同上。
split_sentences Optional 翻訳エンジンが入力を最初に文に分割するかどうかの設定。デフォルトでは、有効。設定可能な値は以下の通り。
"0" - 分割を行わず、入力全体を1つの文として扱う。
"1" (デフォルト) - 接続点と改行点で分割する。
"nonewlines" - 改行を無視して接続点のみで分割する。
テキストパラメータごとに1つの文を送信するアプリケーションでは、エンジンが意図せずに文を分割してしまうのを防ぐために、split_sentences=0を設定することを推奨。
preserve_formatting Optional 翻訳エンジンがオリジナルのフォーマットを尊重するかどうかの設定(通常は一部を修正する場合もある)。設定可能な値は次の通り。
"0" (デフォルト)
"1"
この設定で影響を受けるフォーマットの側面は次の通り。
文章の最初と最後の句読点
文章の先頭の大文字/小文字
formality Optional 翻訳された文章をフォーマルな表現にするか、インフォーマルな表現にするかの設定。この機能の現在の対象言語は、"DE"(ドイツ語)、"FR"(フランス語)、"IT"(イタリア語)、"ES"(スペイン語)、"NL"(オランダ語)、"PL"(ポーランド語)、"PT-PT"、"PT-BR"(ポルトガル語)、"RU"(ロシア語)の場合のみ動作する。
可能なオプションは
"default" (デフォルト)
"more" - よりフォーマルな言語にする
"less" (より少ない) - よりカジュアルな言語にする場合

また、以下のような拡張パラメータも用意されています。これらのパラメーターの使用方法については、後述の「XMLの取り扱い」をご参照ください。

パラメータ オプション 説明
tag_handling Optional どのような種類のタグを処理するかの設定。現在利用可能なオプション: "xml"
non_splitting_tags Optional 文章を分割しないXMLタグのコンマ区切りのリスト
outline_detection Optional 詳細については、"XMLの処理"セクションを参照
splitting_tags Optional 常に分割を引き起こす XMLタグのコンマ区切りリスト
ignore_tags Optional 翻訳されないテキストを示すXMLタグのコンマ区切りのリスト

原文は、以下のWebページで確認できる。

browseURL("https://www.deepl.com/docs-api/translating-text/")

DeePL関数(自作関数)

gist.github.com

まとめ

動作は少し遅いけど、、

この翻訳は素晴らしい。