MIMIC-CXRから読影レポートとjpg画像だけを取得する
はじめに
胸部単純X線の画像と読影レポートの公開データセットMIMIC-CXRを利用するための準備をしてみます。
MIMIC-CXRは次の2つの形式で公開されています:
(1) MIMIC-CXR. DICOM形式の画像と, 読影レポートのtxtファイルが提供されている.
(2) MIMIC-CXR-JPG. JPG形式の画像と, 疾患ラベルが提供されている.
ここで問題となるのは, 「DICOMファイルは欲しくないが読影レポートの原文は欲しい」という場合です。
このためには, (1)からtxtファイルだけ, (2)からJPG画像だけを, それぞれ取得してこなければなりません。
しかし, 特に工夫せずにダウンロードしようとすると, 次のような理由で面倒なことになります:
- MIMIC-CXRとMIMIC-CXR-JPGの構成ファイルすべてをダウンロードしなければならず, 相当な時間がかかる (
wget
コマンドにはワイルドカードや正規表現でファイル名を選別する機能がない) - MIMIC-CXRとMIMIC-CXR-JPGが別のディレクトリツリーを構成するので, ファイル取得後にどちらかに統合する必要がある.
これを解決するためのシェルスクリプトを用意しました.
以下, MIMIC-IIIの利用許可, ID, パスワードはすでに取得済みであるものとします(下記事も参考にしてください).
手順
(1) 以下のシェルスクリプトを download_mimic_cxr_report.sh
というファイル名で保存します:
echo -n "physionet.org username? :" read username echo -n "physionet.org password? :" read -s password # MIMIC-CXRからDICOM以外のファイルを取得 wget -r -l 4 -nc -c -np -nv -nH --cut-dir=3 --user $username --password $password https://physionet.org/files/mimic-cxr/2.0.0/
(2) 以下のシェルスクリプトを download_mimic_cxr_jpg.sh
というファイル名で保存します:
echo -n "physionet.org username? :" read username echo -n "physionet.org password? :" read -s password gzip -d *.gz unzip *.zip # wgetコマンドの引数として許容される最大長から一度にダウンロードする数を算出 n_div=$((`getconf ARG_MAX`/150 | bc)) # イテレーションの準備 n_sample=`wc -l cxr-record-list.csv | cut -d" " -f1` n_iter=$(($(($((n_sample-1))/n_div | bc))+1)) for ((i=0; i<$n_iter; i++)) do # MIMIC-CXR-JPGからJPG画像のみを取得 line_start=$((i*n_div+1)) line_end=$((i*n_div+n_div)) urls=`cat cxr-record-list.csv | sed -n "${line_start},${line_end}p" | cut -d"," -f4 | cut -d"." -f1 | sed 1d | sed -E "s/(.+)/https:\/\/physionet.org\/files\/mimic-cxr-jpg\/2.0.0\/\1.jpg/g"` wget -r -nc -c -np -nv -nH --cut-dir=3 --user $username --password $password $urls done
(3) download_mimic_cxr_report.sh
を実行します.
(4) MIMIC-CXRから, 読影レポートがダウンロードされはじめます. DICOMファイルは無視されます.
(5) (4)全体の完了をまたずに, cxr-record-list.gz
, mimic-cxr-reports.zip
という2つのアーカイブのダウンロードが済み次第 download_mimic_cxr_jpg.sh
を実行します.
(6) MIMIC-CXRから, JPGファイルがダウンロードされはじめます. その他の重複している余分なファイルは無視されます.
おわりに
これでも丸2日は掛かります。MIMIC-CXRはデータがとにかくでかい!!