Skip to content

Heatmap with Ruby and Numo-Gnuplot

23-7月-17

http://gnuplot.sourceforge.net/demo/heatmaps.html

Boxplot with Ruby and numo-gnuplot

17-7月-17

Rubyで統計っぽく遊ぶためのメモ(仮

13-7月-17


重要:このページの内容がまちがいだらけだと気づいてしまっても"絶対に指摘しないでください"。それから、ブログのエントリーにRubyとデータサイエンスに関する記事を作成したり、Github に issue を投稿したり Pull Requestでライブラリの使い勝手を向上するようなことも"決して"してはいけません。

このページで使うライブラリ

Numo::NArray
数値計算
Numo::Gnuplot
グラフ作成
Statsample
統計
Daru
データフレーム

ライブラリを読み込む

長いので短縮する

いわゆるやりたい放題。SFloatやDataFrameがトップスペースから呼べたらもっと楽しいが…

楽に配列を作成する

棒グラフを描く

折れ線グラフを描く

ベクトルを生成する

NArray配列を生成する

平均値(mean)

中央値(median)

分散(V:variance)

標準偏差(SD:standard deviation)

歪度・尖度

※Numo::GSLを使えば、NArrayでも求められる

範囲

ターミナル上で基礎統計量を表示する

ターミナル上にヒストグラムを表示する

ヒストグラムをSVG形式で保存する

1標本T検定

F検定

U検定

2標本T検定

箱ひげ図を描く

χ二乗検定

散布図

散布図その2

相関係数を求める

Spearmanの相関係数

単回帰分析

重回帰分析

主成分分析

データフレームを作成する

行や列の情報を取得する

データフレームに行を追加する

CSVファイルからデータフレームをつくる

Microsoft Excelファイルの読み込み

ActiveRecordから読み込み

データフレームの最初と最後を表示する

データフレームの”列”にアクセスする

データフレームの”行”にアクセスする

データフレームの列名を取得する

ソートする

条件によって行を抽出する

行を削除する

列を削除する

データフレームの行⇔列を入れ替える

欠損値のある行を取り除く

グルーピング/集約

時系列のベクトルを作る

時系列ベクトルからグラフを描く


※ GnuplotRBを使用する

【Ruby】 Numo::Gnuplot で箱ひげ図 (boxplot)

09-7月-17

忘れないうちにメモ

1.配列をさっと比較したいとき

2.ラベル付きのデータのとき

using の設定がややこしいけど、丸暗記するしかないっぽいね

なぜゲノムの分野に楽観的な気持ちになれないのか考えた

06-7月-17

漠然とした話。IT系の人はゲノム解析の分野に大きな期待を寄せているが、どうも個人的にはゲノムにそこまで強い希望を持てない。どうして自分がゲノム解析にそこまでポジティブな気持ちにならないのか、その理由が少しだけ自分でもわかってきたのでメモしておく。(あまりこういう分野について考えたこともないので用語は変だと思う)

まず、一般化した話から。
技術の進歩を2つに分けて考えてみる

1. 手間(工数)を増やすことによって品質を向上するもの
2. 品質は据え置き〜低下させて、手間(工数)を減少させるもの

 暗黙の了解として、昭和の日本では、実行可能な工数は増え続けるという前提があった。エネルギー革命により石油資源から電気を生み出し、電化製品が家庭でも使われるようになった。労働人口も増加し続けた。その結果1の、工数を増やして品質を向上させる技術がもてはやされるようになった。

 しかし、ついに生産年齢人口は減少し、旧来の方法を漫然と続けるだけでは品質を保つのも困難な時代になってきた。コンプライアンスの強化が叫ばれており、現場は過剰なコンプライアンスに疲弊しているといわれている。これは、本当はこのような活動をしなければ、すぐにでも品質が維持できない状況に陥りそうだということを意味する。

 したがって、今後の日本で評価されるべきなのは、2品質は据え置き〜低下させて、手間(工数)を減少させる技術であると予想される。つまり、技術の評価軸を変える必要がある。

 先進国では、これから日本のような少子高齢化が問題になると予想され、工数を減らす技術が品質を向上させる技術よりも高く評価されるのは、世界的なトレンドになっていくと考えられる。(※個人の意見です)

一般的な話おわり。ここでゲノムの話に戻る。

 ゲノム解析に展望は、個別化医療によって、分子標的薬の治療の品質を上げていくというものであった。個人や病気に最適化された分子治療薬を開発し、それを使う。それは確かに素晴らしいことだと思う。しかし、これは工数を増やしながら品質を向上させる技術である。

 しかし個別化医療をルールベースで行うと多くの思考をともない現場がもたない。これを圧縮するために、人工知能を使用する。なぜならば、人工知能の世界では、今後も計算力の増加が見込まれており、実行可能な工数=計算力は増加し続けると考えられているからである。

 ゲノムによる個別化治療とは、工数を増やすことによって品質を向上させるタイプの医療である。その追求は大変おもしろいだろうし、患者さんにも大きな効果を発揮するだろう。しかし、それはわずかな品質向上のために、莫大な計算力を費やすタイプの医療かもしれないのである。
 そしてそのような医療は、解決しなければならなない社会問題のトレンドや、社会的な要請からは本当は少しずれているかもしれないと考える。もちろん僕の考えが間違っている可能性もあるが、正直にそう書いておく。

これが僕がゲノム医療に感じる違和感の正体で、そこまでポジティブになれない理由なのだと思う。ものすごく大雑把に考えると。

医療とAIの未来について再び妄想する

04-6月-17

頭の整理をするために、また医療とAIの未来について考えている。

医療データサイエンス 1.0

これは、近い将来にきっと起きる変化だ。AIの医療応用を考える多くの人が思い描いている未来だ。
具体的には
・CTやMRI画像などが、Deep Learning技術で自動的に診断できるようになる
・医療用のデータセットを作成する患者団体や、病院、学会が現れる
・APIを用いて医療データを取得する手段が整備されはじめる
・データセンタを持つ企業が医療データを低価格で診断するサービスを始めてデータを収集・蓄積しはじめる 
・対抗して、よりオープンな医療データセットやオープンなモデルも公開される
・大病院が工学技師としてデータサイエンティストを雇いはじめる
・もしくは医者がデータサイエンスをかじりはじめる
・少しずつ人工知能が普及しはじめる
・画像診断の精度、血液検査の精度、内視鏡の精度、遺伝子の解析、心電図モニタリングetc
 すべてでコンピュータが人間を上回る
・個別化された医療が行われるようになる
・診断だけではなく、治療にロボットの活用がはじまる
・確実にどんどん成果を生まれ、治療成績も激的に向上していく
・にもかかわらず、不思議なほど医療そのものには何らの変化がない なんでだろう?
・保険点数が厳しく減額され、利益が減少したりする
・IT企業に対する患者の医療訴訟が多発するようになる。高額の賠償が請求される事例も発生する
・IT企業も、次第に状況を理解して(最初は不合理だと思っていた)製薬会社のやり方を真似するようになる
・もしくはもともと無料でサービスを提供できる体力のあるところだけが他の会社を焼き払う形で生き残る
・最初からこうなることを見越していた老舗企業もしぶとく生き残る
・患者とエンジニアの間にゆっくりと失望が広がっていく
・業界の熱気が冷めて、少しずつ落ち着いてくる
・なんかいい感じになる
といった感じだろうか。とってもワクワクしないよね。あまりにも想像するのが容易だ。
妄想にしても陳腐だ。
こういったことに無邪気に夢を感じるには、少し歳をとりすぎた気がする。

問題は、ここからだと思っている。上記の筋書きはちゃんと考えれば誰もが見通せる素直な未来だ。
未来は、だいたい思い描いた通り素直には歩いてくれない。

医療データサイエンス 2.0

上で描いた1.0は人工知能は、あまり医療の本質に触れていない。
つまり1.0は来るが、そのままの形ではこない。

僕が思いつくだけで大きな焦点は2つあると思う。
1つ目の焦点は、割と簡単だ。簡単だということは、乗り越えうるということである。
乗り越えた先は、たとえばアルファ碁のあとの囲碁界みたいな事になっていると思う。ある意味楽しい世界である。

2つ目の焦点も簡単だが、もう少し医療の本質に関わる問題である。
この問題が乗り越えられるかどうかはわからない。乗り越えるとしたら、人工知能は俺が考えているよりもやばい。
少なくとも、今の段階では人工知能がこういった問題を乗り越えることは想像できないな。多分、人工知能はこの問題を乗り越えられずに迂回すると思う。
少なくとも人間は、こういう問題を直接乗り越えるよりは迂回することを好む。

そしてその根本にある問題や、その他の問題もおぼろげに見える気がする。

いつものことだが妄想日記にしても考えがよくまとまらない。

考えれば考えるほど、やっぱり人工知能も今までの技術革新と同じで、結局は医療は変わらないという説の方を採用したくなるね。

Rubyを使ってDICOM画像で遊んでみる

25-5月-17

RubyでDICOM画像を扱う情報がほとんどないので少しずつメモしてみる。

ruby-dicomhttps://github.com/dicom/ruby-dicom

インストール

DICOM画像を読み込む

メタデータを取り出す

画像データを取り出す

IRuby Notebook上にDICOM画像を表示する

imageメソッドで、ImageMagickオブジェクトに変換できる。
内部ではrmagickもしくはmini_magickが動いている。
rmagickは更新が滞っているので、mini_magickがおすすめ。


※画像はDSB2017に使用されたsampleの1つです

ヒストグラムを表示する


Guido ZuidhofFull Preprocessing Tutorial
の序盤をRubyに書き換えてみた。とりあえず動いてくれればOKという発想なので、例によって間違いあるかも。

Kaggleの肺癌検出コンテストで医用画像のAI活用は大きく広がるのでは

23-5月-17

 気が付かないうちに、Kaggleが胸部CTの肺癌検出のコンテストを開催しとった。完全にフォロー不足で、今日発見して目が点になった。これ、ググっても日本じゃあんまり反響ないみたいだけど、ものすごいことだぞ……。どのぐらい凄いかっていうと、これからの医療にとってガラケーしかなかった世界にiPhoneが発表されるぐらいの衝撃になるんじゃないか。IT業界の反応が薄いのは仕方ないとして、ググっても日本の医療クラスタから反応が全然なくてびびる。まさか重要性に気がついていないのか。。そんなわけないよね。それでもgoogle検索でひっかかるのは中国語のサイトばかり。日本の医療は本当に大丈夫かいな。。これあとでしっかり調べないと。

追記①

 kaggleの何が凄いかというと、個人情報の塊である医用画像を大量に使用してコンペティションを開催したことだ。どうやってそんなことができるのかちょっと想像がつかない。けれども、Data Science Bowlのスポンサーをみると、このコンペティションは以前から周到に準備されたものだと思われる。まず、主催はKaggle(Googleによって買収)と、ブーズ・アレン・ハミルトンというコンサルティング会社である。ブーズ・アレン・ハミルトンは日本語Wikipediaによると米政府のコンサルティングに特化しているという。協賛企業をみると、Amazonの名前もあるし、NVIDIAの名前もある。アメリカ合衆国福祉省、アメリカ食品医薬品局の名前も入っている。かなり公共性の強い企画だということが感じられる。
 医療関係からは、アメリカ放射線医学会やアメリカ国立がんセンター、デンマークや、オランダの大学病院の名前がみつかる。Data Support Providers の一番上には、National Lung Screening Trial というものがある。これが今回提供されたデータの中心になっているのだろうか。2002年から2009年頃に行われた治験である。

 興味深いことに、呼吸器学会の名前は見当たらない。このことは何かを物語っている気がする。

 もしも、日本で同じことをやろうと思うなら、AmazonやNVIDIAの他に、ソフトバンク、PFN、さくらインターネット、東芝メディカルなど協賛を取り付け、放射線医学会、国立がんセンターの協力を得て、いくつかの大病院の協力ももらい、できれば台湾などの海外の病院にも協力してもらう。もちろん厚生労働省のお墨付きももらって、有力な財団の協賛ももらう。
 そして多くの患者に、治験で撮影した自分のデータをインターネット上に公開して利用することについてサインする必要がある。はっきり言ってこれはかなり難しいと思う。まず、大病院などの組織や、学会には柔軟な行動は全く期待できない。次に、個人情報を開示する時点で世間の大変な反発が予想される。まして企業が莫大な懸賞金を用意するという話になると、もう大反発が巻き起こるだろう。その気持ちは、私も日本人なのでわからなくもない。しかし、どうも個々人の利益や安心感を守りすぎるあまりに、長期的な公共の利益や、自分以外の人の利益、技術の発展に対して、冷やかというか、無関心すぎるのではないかという気がする。人の気持ちを考えろって、確かに目の前の人の気持ちは大事だけど、10年後、20年後の未来の日本やアジアで同じ病気になる人の命についてどう考えているのだろうか?目の前の人がよければ、未来の人たちのことはどうでもよいのだろうか?そんなことはないと思う。

 Kaggleがこんなおっかないコンテストを実施できるのも、ちゃんと真剣に医療やアメリカの未来のことを考えているからだと思う。

 もっと勇気をだして医療情報を公のために公表してほしいと思うけど、なかなかそうはならないだろう。あるいは、アメリカでは日本のように医療費が安くないから、治験で医療情報をくれれば、費用を負担しますというな実効力のある仕組みになってるのかもしれない。少なくとも私は、自分が病気になった時はデータを公開したい。死んだらデータはいらないのでインターネット上に無償で公開して、無数の研究者がそれで研究してくれて、世のために役立つ方がずっといいに決まってる。そう思う人だって決して少なくはないはずだ。

 Gmailのようなクラウド方式で、IT企業が患者のデータを没収し、そのかわりに診断やら治療を提供するビジネスモデルってどうも感じ悪いのよね。無料(Free)って、データ押収しているんだから本当は自由でもないし無料でもないよ。

 でもそんなこと普通の人は気がつかない。気がついていても、便利だったらOKだって考えている人も多い。

 そうやってデータを吸収して世界中から優秀な若者をおびき寄せるGoogleの作戦はいつも成功しているから、医療の世界でもそれがうまくいってしまう可能性はあると思う。

追記②
 社会的な凄さについて書いたが、技術的に凄いと思うのは、DICOMデータに対して機械学習を行うという事に関するコードがGithubに多数公開されたこと。
 これで医用画像の機械学習に必要なツールや方法論が大きく改善されたはずだ。多くのデータサイエンティストがDICOM画像を生まれて初めて扱ったことだろう。
 医療側からみると、その気があればデータサイエンティストが作って公開している成果を、その場で日常臨床に試すこともできる環境が整いつつあるということを意味する。
 医用画像のAI認識をめぐる環境はこの1年で激変するのではないかという気がする。できれば、独自路線で頑張るよりも、できるだけ世界の潮流に参加して合わせていった方が大きなメリットがあるような気がする。

追記③
 LUNA16というプロジェクトが前身になっており、Grand Challenges in Biomedical Image Analysisという団体が地道な活動をしている。Kaggleのコンテストは突然発生したのではなく、もっと小規模なコンペティションの積み重ねの中から生まれてきたことがわかる。

hatena匿名ダイアリー「医者として働き始めて不思議なこと」の感想など

23-5月-17

http://anond.hatelabo.jp/20170507185312
そろそろ旬を過ぎたので書いてみる。もしも筆者がこのブログを見つけてくれたら少し嬉しい。
 まず思ったのは、同じ学年でも見えてる世界って、世代ごとに違うんだな〜っていうこと。

自分が経験した科が内科だからかもしれないが毎日パソコンを弄っているだけで患者が治っていくのである

 私はヤブで頭も悪かったので少しもそんなことを思わなかった。そもそも電子カルテ端末なんてなかった。電子カルテ端末がないって相当な大昔だと思うかもしれないが、たかだか数年前のことである。オーダリング端末 + 紙カルテという組み合わせは当時は割とメジャーだった。だから、今の研修医にとって、電子カルテ端末が存在するのは当たり前の環境だ、っていうのが何となく新鮮だった。

 そして君の書いてある内容は、多分正しい。でも、今から言うことを少しだけ心にとめておいてほしい。これから君はどんどん業界に馴染んで、常識を失っていく。そして、勤務年数が上がると、色々な経験をして、それまで見えなかったことも見えるようになってくる。そして、かつての自分の想像力の範囲が狭かったように感じ始める。君はこの業界がどうなっているのか考え、悩み、行動し、いろいろな発見をして、少しずつ考えが固まっていく。そんな様子が、私にはなんとなく想像できる。それは本人にとって「進歩」のように感じられる。

 でも、本当にそれは進歩なのだろうか?

 私が初期研修した時も、医療には変だと思えるところはたくさんあった。そしてそれは今でもあまり変わっていない。でも、だんだんと周囲の景色が見えてくると、どうして医療がそういう奇妙な仕組みになっているのか、少しずつ納得できる理由を見つけられるようになって、不思議であると感じるべきところが、当然に見えはじめ、どんどん当たり前に感じられるようになる。慣れてしまうのである。本人は、昔よりも物事がよく見通せるようになったと自負しているけれども、必ずしもそうとは限らないと思う。

 部外者の方が、案外正しい目で物事を観察しているものだと思う。

 だから一読して「本当はね、もっと深いメカニズムがあって、実際にはこうなってるんだと私は思う」と言いたい気持ちになった。
 なったけれども、あえて言わないことにする。というのは、自分が研修の時におかしいと思ったことは、今でもおかしかったと思っているからだ。だから、何となく自分の方が正しいと思っていることも、優秀に違いない新人研修医の意見を前にすると、本当は若者の意見の方が実は正しいんじゃないかという気がして、今ひとつ自分の意見に自信が持てなくなる。見栄っ張りで、馬鹿を晒したくない気持ちが強いのである。

「どうして医療の世界がこんな不思議なことになっているのか、一つ一つ理由を見つけてみたいのです。」
「だが、それがわかるようになった頃には君は手遅れになっているかもしれないぞ。」
研修の時に飲み会で、ある先輩と交わした言葉だが、数年経った今ではその言葉の意味が少しだけわかる気がする。

だから今君が感じている違和感はものすごく貴重とだけは言っておく。

『人工知能はどのようにして 「名人」を超えたのか?』を読んだ

21-5月-17

読んだ。期待していたよりもずっと面白かった。

黒魔術から逃げた先には、もっと大きな黒魔術が広がっているかも

一番面白かったのはこの部分、ポナンザが黒魔術化しているというところ。

 現在のポナンザの改良方法は、何らかの新しい改良を考えたら、それを適用したポナンザと以前のバージョンのポナンザを3000試合ほど自動で対戦させるというものです。このとき、新しいポナンザの勝率が52%以上の場合は新しい改良が採用されるという方針をとっています。
 私が3000試合の将棋の内容を個別に見ることはなく統計処理をして計測しています。正確には、将棋の内容を吟味しようにも対極の勝因や敗因がわからないので、吟味できません。すでにポナンザの棋力は、私のレベルをはるかに上回っているからです。
 しかも、「改良した作業」とポナンザが「強くなったこと」が、将棋プレイヤーとしての感覚からは大きく乖離していて、理詰めではその差を縮めることができません。うまくいった改良がどこでどう有効に働いたのか、全然わからないのです。
 加えてこういった改良の成功率は、今までの経験則によると2%以下です。何らかの改良をしても、強くなることが確認できるのは100回に2回もないということですね。
 そんなわけで、現在のポナンザの改良作業は、真っ暗闇のなか、勘を頼りに作業しているのとほとんど変わりがありません。

 コンピューター将棋も黒魔術なのか、と。
 医療の世界はまさに黒魔術の世界だ。人体のメカニズムを解明して、新しい治療を開発するという還元主義的な発想は流行らない。なぜならば目標が高すぎて実現が難しいからだ。人体を構成するさまざまな要素の動きを正確に予想して、ベストな介入をする。そんな将棋では当たり前の手法が医療では使えない。医療というテクノロジーは、将棋よりも遥かに原始的な段階にとどまっているのである。

 「なぜ治療が効いたのか」という点について臨床試験や治験では全くわからない。黒魔術である。しかし、黒魔術というと格好が悪いので、一部の人はこれをエビデンスと上品に表現する。黒魔術では心がすっきりしない。そこで医療に人工知能を導入することで「黒魔術を減らしたい」と願ってる人は少なくないと思われる。なぜその治療が良いのか評価値ぐらいは示してほしい、そういう期待がどこかにある。

 しかし、人工知能ポナンザの開発も、やはり臨床医学の現場と同じように黒魔術的に行われているという。そうなると、人工知能の導入は医療の黒魔術を減らすどころか、ますます黒魔術化を促進することになる。

もう一度人工知能で医療がどう変わるか考えてみる…医療は機械に置き換わらないという直感は間違っているかも

 私の想像の及ぶ範囲で医療という業務を表現すると、治療の実施による生活上のメリットという観点に基づき、患者の感情と社会基盤を考慮て、検査の必要性などについて適切な重み付けを行い、検索における枝刈りをして選択肢を減らし、実効力のある介入を行うことだと思う。さらに言えば、数年の延命することにより本人が亡くなるという事実を本人と家族が受け入れる時間を作って、人々の行きどころのない怒りの感情を可能な範囲で受け止めコントロールし、苦痛を取り除くように試みることでもある。これが、古代から現代までの病院の仕事である。

 限られた手段と情報を見極めて現実的によいアウトカムに導くこと、それを可能にする無数の黒魔術的なバッドノウハウの集積が医療の仕事である。医療の本質とは科学技術とはすこし離れたところにあると私は思っている。純粋なテクノロジーの側面(知識や技術を高めることで問題解決)よりも政治的判断や感情処理、リソースの適切な振り分け、身体的知性などのウェイトが大きいので、どんなにコンピュータによる診療技術・治療技術が進歩しても、人間による医療がコンピュータに置き換わることにつながらない。そう内心私は思っていた。

 レントゲン写真の診断、CTの診断、組織診断、血液検査の判断力、治療の選択、手術の技術、神の手…そういう領域でコンピューターの能力が人間を超えるのは時間の問題だ。しかし、そういった技能は、エンジニアや他職種の方が思っているほど、医療の本質には近くない。。診断に関しては、人体から得られたさまざまな情報を2次元の画像や文字列に変換するテクノロジーが医療現場では日常的に多数使用されています。例えば血液などの人体の一部をサンプルし、計測し、連続的・あるいは非連続的な値を返す。そのような営みは「検査」と呼ばれ、多くの人々はそこに人工知能があるとは考えない。
 しかし、私は生データを人間が直接処理するのではなく、一度機械にかけて人間が解釈しやすいような2次元画像に変換してアウトプットするような機構は、広義の人工知能に該当すると思う。極論を言えば聴診器や血液検査のような検査も、人工知能に相当する。線形的に音波を増強して特定の波長を非線形にカットするという聴診器の特性や、多くの疾患の診断基準は、パーセプトロンの仕組みと同じである。

 そうだとすると、医療の世界には現時点でも「人工知能」に満ちあふれていることになる。そのような「人工知能」と、ディープラーニングを使用した人工知能による診断支援に本質的な差があるかというと、今のところ、個人的には「ない」と思う。

 つまり、人工知能が診断力や治療力で人間を上回るようになっても、それをいずれ医療という巨大なシステムは旧来の技術と同じように吸収してしまうだろうと。つまり人工知能で医療は変わらないという予想である。今現在でも人間の能力を大きく超えているようなシステムはたくさんあるのです。そこにまたひとつDeep Learningが加わっても大勢に影響はないだろうと。

 だからコンピュータが人間の医師の能力を凌駕する話を聞いても「そうでしょうね。私もそう思います。むしろそうなった方が医療の質は向上するでしょう。(もし現場が楽になるなら早くそうなってほしいなあ……)」というぐらいの気分でいた。つい先月までは。

 でも、最近は実はそれも甘いんじゃないかと思うようになった。まだ捉えきれていないところがあるんじゃないかと。感情的なインターフェースで政治的判断を行うような領域にも、何らかの方法で機械が進出してくる余地があるのではないかと。医療の業務の本質がエンジニアには見えていないからといって、それだけでは機械化が進まない理由にはならない。それどころか返って盲点になっているのかも知れない。もしもエンジニアが本当に医療のことをよく理解して、そこにフォーカスしたら何が起こるのか。。
 ひょっとすると当初思っていたよりも人工知能の応用領域は広くて、全然想像していないところで人工知能の普及の余地があるのではないかないかと。

 パソコンが普及し始めた時、それがブラウザとインターネットの箱になることを誰が想像しただろうか。。医療における人工知能のあり方についても、そういう主戦場が予想外の方向へ展開していく可能性があるんじゃないかという気持ちにさせられました。

人工知能はどのようにして 「名人」を超えたのか?―――最強の将棋AIポナンザの開発者が教える機械学習・深層学習・強化学習の本質