【Python】臨床研究のための医療統計データを可視化する方法①

この記事をシェアする

 

はじめに

今回はPythonを使用してデータの可視化、色々なグラフを作成したいと思います。

グラフをいっぱい作っていくので、jupyter-notebookを使用します。

 

 

必要なものをインポートする!

f:id:Medicmed:20180614204526p:plain

Pythonでキレイなグラフを作成するには基本的にSeabornを使用します。

 

 

まずはヒストグラムを描く!

f:id:Medicmed:20180614204635p:plain

matplotlibのpyplot.hist()を使用するとヒストグラムを作成できます。

binは区切りのことでデフォルトでは10本になっています。

binの値を変えてみます。

 

 

bin=1とすると四角形のヒストグラムができる!

f:id:Medicmed:20180614204952p:plain

 

 

グラフの色を変えるにはcolorという引数に値を渡す!

f:id:Medicmed:20180614205138p:plain

 

 

グラフを標準化するにはnormedという引数にTrueを指定する!

f:id:Medicmed:20180614205341p:plain

グラフの標準化とは平均=0、分散=1にすることです。

このように変形することによって、ヒストグラム全体の面積が1になるように変形でき確率のように解釈することができます。

次にSeabornでグラフを作成していきたいと思います。

Seabornは高機能なので、よりキレイなグラフを作ることができます。

 

 

Seabornでヒストグラムを作成する!

f:id:Medicmed:20180614205719p:plain

ヒストグラムの他に滑らかな曲線が一緒に描かれており、これを「カーネル密度推定」と呼びます。

ヒストグラムはデータポイントの個数を数え上げるのに対して、カーネル密度推定はデータがある所にそれぞれガウス分布(正規分布)を作って足し合わせてものです。

ヒストグラムには「区分をどのように設定するかによってグラフの形状を変えることができる」という問題があり、カーネル密度推定はそれを解決してくる優れものという理解でオッケーだと思います。

カーネル密度推定の曲線はデフォルトで描かれるので、不要な場合はkdeにFalseを与えます。

f:id:Medicmed:20180614210230p:plain

 

2変量データに対するグラフの扱い

1変数におけるグラフ作成をみてきましたが、2変数でのグラフ作成を行っていきます。

データは統計検定の公式ページにあるデータセットを使用します。

 

日本統計学会公式認定 統計検定2級対応 統計学基礎

日本統計学会公式認定 統計検定 2級 公式問題集[2015〜2017年]

日本統計学会公式認定 統計検定 2級 公式問題集[2015〜2017年]

 

 

f:id:Medicmed:20180614210830p:plain

このようにデータを取ってきて少し変形します。

今回はマンションデータから、2変数として「近さ」A/Bに対するそれぞれの「家賃」としました。

f:id:Medicmed:20180614211131p:plain

seabornのjointplot()を使用すると「散布図+ヒストグラム相関係数」をまとめてグラフにしてくれるため便利です。

seabornを使用してマンションデータから「家賃」と「大きさ」を取ってきてグラフにします。

 

 

Seabornのjointplot()を使用してグラフを作成する!

f:id:Medicmed:20180614211625p:plain

「peasonr」というものが相関係数のことです。家賃と大きさには「0.89」という値の正の相関があることが分かります。

「kind」引数を変えると、散布図から色々な種類に変更することができます。

 

kind='hex'としてプロットを六角形にしてみる!

f:id:Medicmed:20180614212008p:plain

色の濃さでデータの密度が分かるためどのポイントに集中しているのかが分かりやすくなりました。

kind引数に"reg"を渡すと「回帰直線」のグラフを描いてくれます。

 

kind='reg'とすると回帰直線のグラフを描いてくれる!

f:id:Medicmed:20180614212241p:plain

jointplot()ではカーネル密度推定のグラフも作成することができます。

 

 

kind='kde'と指定するとカーネル密度推定のグラフを作成してくれる!

f:id:Medicmed:20180614212700p:plain

カーネル密度推定にするとよりデータ分布が視覚的なって分かりやすい気がします。

カーネル密度推定のグラフはSeabornのkdeplot()を使用しても作成できます。

デフォルトだと基底関数に正規分布が指定されていますが、基底関数を色々な密度関数に変更してグラフを作成することもできます。

 

カーネル密度推定の基底関数を色々な密度関数にしてグラフを作成する!

f:id:Medicmed:20180614213155p:plain

今度は基底関数を変えるのではなく、バンド幅を変えてグラフの変化を見たいと思います。

バンド幅のイメージはそのデータポイントの影響幅がどこまで拡がるかであって、小さければあまり拡がらず、大きいと裾野が拡がっていきます。

 

カーネル密度推定のバンド幅を変化させてグラフを作成してみる!

f:id:Medicmed:20180614213625p:plain

 

Pythonでグラフを作成する際に、ぜひ参考にしてみてください。

終わり。

 

今回参考にした書籍はコチラ!
Pythonで学ぶあたらしい統計学の教科書

Pythonで学ぶあたらしい統計学の教科書

 

 

 

統計学を本格的に勉強したい方向け!

www.medicalmed.press

www.medicalmed.press

 

 

Pythonで実践する医療統計! 

www.medicalmed.press

www.medicalmed.press

www.medicalmed.press

www.medicalmed.press