たけのこブログ

凡人が頑張って背伸びするブログ

面倒なのはSeabornに任せるのが一番

久しぶりの更新です。最後に更新して以降、研究やらお仕事が忙しくてそれどころじゃなかった(言い訳)

研究でジャーナルの執筆を始めるとなると、いろんな結果を出さないといけない訳なんですが、ちゃんとしたところに出そうとなるとめちゃくちゃ結果の見せ方を工夫しないといけないんですよね...「研究の内容よりも結果の見せ方でボスに叩かれる」なんて言っていた先輩の愚痴をようやく実感し始めています。

さて、僕は結果は主にMatlabPythonを組み合わせて出しているのですが、Pythonのデータフレームからは.plotで引数を指定してやれば、様々な結果を簡単に弾き出すことができます。ただ、これが条件ごとに(例えば、健常者と患者の群で)出したいとかってなると、条件ごとに抽出して分けたりしないといけなかったりで...。なんだかんだ複雑な結果を出そうとすると、pandasのplot機能は細かい設定がたくさん必要で面倒くさいんですよね汗

そんなわけで、簡単に条件ごとの結果を出したり見せ方を綺麗にできるのがSeabornでした。例えば、カラムに'Condtiion'とかあって、その中にPatientとかControlとかって条件がフラグとして紐づいていたら、hueで指定すれば、同じグラフの中にPatientやControlそれぞれのグラフをプロットしてくれます。colを指定すれば、異なるグラフで描画してくれます。

一番気に入ったのは、相関分析をした時にピアソンの相関係数とp値をグラフ上に載せてくれる機能ですね。統計解析をしなければならない身としては、非常にありがたい機能でした。データフレームさえあれば、例えば

ax = sns.jointplot('time', 'value',data=df,kind='reg').annotate(stats.pearsonr)

で簡単に表示してくれます。まぁ、これは有意差のない相関結果ですが笑

f:id:YuKR:20191114140756p:plain

一応、この結果は切り取っていますが、それぞれ上と右側にデータのヒストグラムも表示してくれているので、データの特性も可視化できていて一石二鳥です。 ただ、Seabornの欠点ももちろんあって、カラーの指定がpaletteなので、 barプロットならいけた気がしますが基本的には色の指定はできません。例えば、同一被験者内の解析をする際に、条件間で行ったタスクは同じ色にして、条件ごとに透明度を変えて分かりやすく表示させるとかが難しいです。これは、pandasのplot機能じゃないと実現できません。 また、Seabornは豊富なプロットの種類がありますが、それぞれオプションが違うので同じオプションだとエラーが起きるとかが結構あります。これも複雑なことができる故の欠点なのかもしれないです。

使っているユーザーとしては、欠点はこのくらいなんですが、それを考慮しても綺麗に作図できるので重宝します。もしも論文でボスに結果の見せ方を突っ込まれて面倒臭いとか、仕事で綺麗な結果を見せたい場合に関しては、ぜひこの機能を使って見てください。一応、自分が主に使用したSeabornのサイトを紹介しておくので、よかったら参考にしてください。

www.mishou.be

qiita.com