より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

医療に関するデータ分析に挑戦してみる

うちの会社には機械学習もチャレンジしている意欲的な若手がいるのですが、彼らがやっていることは「株価」のようです。

会社としては医療ITなんだから、医療に関することをやってみようよということでチャレンジしてみることにしました。

やろうと思ったきっかけとしては下記の記事です。

www.asahi.com

私、早速、診断してみました。健康診断でもらう採血などの検査値の結果がここで役立ちます。

結果としては3%でした。糖尿病は怖い。

医学統計?

と言いたかったのですが、下記の記事を見ると臨床+統計=医学統計なので、少し違う気がします。

www.med.tohoku.ac.jp

医療の難しいところでは、やはり専門家のお医者さんでないと判断できないところがあるかなと。

医療ITとして仕事しても専門家でないと、わからないというケースがありますし。

データを集める作業

医療に関するデータなんて、そもそも簡単に手に入る訳ではありません。個人情報やらそもそも医療従事者じゃないですし。

が、国が政府統計と下記のように公開しているデータがあります。

政府統計の総合窓口

国の文句ばっかり言っていないで、あるものは活用させていただかねば。

図書館のように最大活用させていただくことにします。

人口や教育、景気予測などもありますが、「社会保障・衛生」の分野で患者調査と医療施設調査といったデータも存在します。

今回は、「手術」に関するデータについてみてみることにします。

下記のデータをダウンロードすることにします。

www.e-stat.go.jp

さあ、分析だ! ちょっと待った。前処理を

あ、こんな感じなんだ。

f:id:rimever:20181124093744p:plain

コメント扱い

データについての説明などが含まれています。

もちろん、これはcsvとしては扱えません。削除するのはいいのですが、コメント扱いにすることにしました。

私としては、職場の文化から#が行頭にあるのはコメントとするので、そのようにコメント扱いにしてしまいます。

#"統計名:","医療施設調査 平成26年医療施設(静態・動態)調査 上巻"
#"表番号:","J82"
#"表題:","病院数(重複計上);実施件数,手術等・一般病院(再掲)・病床の規模別"
#"実施年月:","-","-"
import pandas as pd
data = pd.read_csv( 'ope_by_hospital_size.csv' ,index_col=0,comment ='#')
data.head()

これでオーライ。

別に#でなくても、自分の中で決めて、指定すれば対応可能です。

Pandas で CSV ファイルやテキストファイルを読み込む – Python でデータサイエンス

文字コード

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-2-3b70b224bb82> in <module>()
      4 from matplotlib import pyplot as plt
      5 
----> 6 data = pd.read_csv( 'ope_by_group.csv' ,index_col=0)
      7 data.head()

やっぱりダメか。

例によってダウンロードされるデータは、SJISです。

文字コードを指定する方法もありますが、全文をコピーして、JupyterNotebook上でcsvファイルを作ってしまいました。

UTF-8に変換したファイルをアップロードする手は、うまくいきませんでした。  

データの整形

で、早速データを見たところ

f:id:rimever:20181124134855p:plain

まだ、このままではpandasでは扱いにくいデータです。

注釈のような不要なカラムがあり、必要なカラムを抽出していく必要がありそうです。

考えてみたのですが、ここで無理にpandasで技に溺れるよりはスプレッドシートに一度アップロードして処理する方が良さそうです。

f:id:rimever:20181124163022p:plain

分析

で、データの分析をしてみます。

病床の規模と、全身麻酔(静脈麻酔は除く)の件数の関係を見ようかと思います。

これだけでもこのあたりが気になるところです。

  • 病床の規模が大きくなるにつれて病院は少ない?
  • 施設あたりの件数

病床の規模と施設数

大きい病院ほど少ないかなと思ったのですが、50-99の規模の病院が一番多いですね。

f:id:rimever:20181124174246p:plain

病床の規模と施設あたりの件数

data['全身麻酔(静脈麻酔は除く)(実施件数/施設数)'] = data[ '全身麻酔(静脈麻酔は除く)(実施件数)'] / data['全身麻酔(静脈麻酔は除く)(施設数)']

f:id:rimever:20181124173944p:plain

病院の規模が多いと手術室も手術の件数も増えるのか件数が増えてます。

600床以上だと300件ほど。

病床の規模の中で、全身麻酔の実施を行なっている施設の比率

data['全身麻酔(静脈麻酔は除く)(総数/施設数)'] = 100 * data['全身麻酔(静脈麻酔は除く)(施設数)'] / data['総数']

f:id:rimever:20181124173743p:plain

300床に満たない施設については半分未満が全身麻酔を行なっていないようです。

matplotlibの文字化け解除(Mac

ありゃりゃ。

f:id:rimever:20181124172024p:plain

文字化けを解決する必要がありますね。

akiyoko.hatenablog.jp

この記事を参考にしてダウンロードはしました。

が、それでも読み込まれず。

Python - matplotlibで日本語を表示したい|teratail

lsで探ったところ、fontList.py3k.cacheはなかったのですが、fontList.jsonというファイルはあったので、これをターミナルで削除しました。

rm ~/.matplotlib/fontList.json

フォントが追加されているかを下記コマンドで確認するのがポイントかと。

import matplotlib.font_manager
print([f.name for f in matplotlib.font_manager.fontManager.ttflist])

今後

下記で紹介されている本もチェックしたいです。

医学生がオススメする医療統計本5選+買って後悔した本 | 医学生Mediのブログ