とある事情から日本語の疾患名を抜き出してクエリーに投げる必要が出てきた。先日は医薬品名を取り出したので,今日は疾患名を取り出そう。
##日本語の疾患名をICD10順に取り出そう。
ICD10とは?
要は疾患につけられたIDである。このIDが同一のものは,基本的には同一の疾患と考えられる。(厳密に考えるとそうとも言えない時もあるのだが,便宜上はそう捉えていただいて差し支えない。)もっと正確には,
「疾病及び関連保健問題の国際統計分類:International Statistical Classification of Diseases and Related Health Problems(以下「ICD」と略)」とは、異なる国や地域から、異なる時点で集計された死亡や疾病のデータの体系的な記録、分析、解釈及び比較を行うため、世界保健機関憲章に基づき、世界保健機関(WHO)が作成した分類である。
最新の分類は、ICDの第10回目の修正版として、1990年の第43回世界保健総会において採択されたものであり、ICD-10(1990)と呼ばれている。
とのことである。参照 「疾病、傷害及び死因の統計分類ー厚生労働省」
###どこかに良さそうなデータが無いかしら。
これに関しては良いデータがある。→ ICD10対応標準病名マスター である。
Thanks to @keyboardrobot!
前時代的なUIとは裏腹に(失礼)結構な頻度(おおよそ3ヶ月に一度)で更新されている。今年度は(6/1,10/1,1/1,3/1)で更新する予定らしい。
さて,ここからファイルをダウンロードして,必要な情報を取り出していこう。
###ダウンロード&解凍
クリックしてダウンロードしても良いし,
wgetかcurlで
$ wget http://www2.medis.or.jp/stdcd/byomei/download/file/byomei309.zip .
$ unzip byomei309.zip
のようにダウンロードしても良い。ただ,このbyomei309の309は,バージョンを示しているので,結局ブラウザ上でバージョンを確かめなければならないのが微妙に面倒だが,まあ良いのである。
###エンコードをShift JISからUTF-8に変更
そのままプログラムを走らせると,盛大に文字化けするので,エンコードをみると(nkfはmacに標準装備されていませんが,簡単にエンコードのチェックと変換が出来るので,導入をおすすめします。nkfインストール nkf使い方まとめ ( 再掲m(__)m )
nkf -w -w80 --overwrite byomei309/main/nmain309.txt
###必要な列を選択して,ソート。Markdown仕様に整形,Sagace用にクエリーを投げる。
ruby側もエンコード指定をしておく。
参考:コマンドラインオプションで文字コードの指定
#! ruby -Ku
#↑なにを隠そう上記の薄い文字がポイントだ。
#!/usr/local/bin/ruby
ICD10Ary = Array.new
ICD10qAry = Array.new
File.open("byomei309/main/nmain309.txt"){|file| #ICD10とその時の疾患名を取得
while line = file.gets
lineAry = line.split(",")
ICD10Ary << [lineAry[6].gsub("\"",""),lineAry[2].gsub("\"","")]#欲しいデータだけを配列入れこむ。lineAry[6]はICD10のIDで,lineAry[2]は疾患名である。
end
}
ICD10Ary.sort.each{|elem|
if elem[0] != "" then #ICD10が無いものは抜かす。ソートしてクエリ用の配列に入れる。
ICD10qAry << elem
end
}
i = 0
print "| ICD-10 | Disease Name | Sagace URL |\n|:----------:|:------------:|:------------:|\n"
while i < ICD10Ary.length do
print "|" + ICD10qAry[i][0] + "|" + ICD10qAry[i][1] + "|http://sagace.nibio.go.jp/cgi-bin/sagace/search.cgi?action=search&keyword="+ ICD10qAry[i][1] + "|\n"
i += 1
end #while
最後の方がずさんな説明になっていて申し訳ないのですが,これで比較的簡単に必要なデータを取り出すことができます。
うむ,ほとんど自分用メモになってしまった(^_^;)。疾患をIDで示すと何が嬉しいの?って話はまた後ですることにして,とりあえず,これで目的は達成出来ます。
実行結果は長くなりすぎて載せられなかったので,別ページ(GithubのWiki)に載せました。