Pythonで作る遺伝子発現ヒートマップ

#遺伝子発現ヒートマップとは
ヒートマップは、マイクロアレイやRNA-Seqの解析結果を視覚化する目的で使われます。全遺伝子のサンプル（実験区）ごとの発現の変化を視覚化するのに優れています。

遺伝子発現レベルに応じて色付けをしてサンプルごとの遺伝子発現レベルの変化を見ることができます。

このヒートマップにクラスタリング解析を組み合わせることで、よりグラフを見やすくすることができます。クラスタリング解析によって、遺伝子発現パターンが類似しているサンプル、遺伝子を見分けることができます。

![Heatmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/ddd24104-109b-b4c2-96e2-47a1ec83d9e6.png)
(wikipediaより)

論文でもよく見かける何やら作るのが難しそうな図は、Pythonの**bioinfokit**ライブラリを使えば簡単に作ることができちゃいます。

今回はこの遺伝子発現ヒートマップの作り方を備忘録的に書いていきます。

[bioinfokit【github】](https://github.com/reneshbedre/bioinfokit)

#ライブラリのインストール
**pip**でも**conda**でもインストールできますが、今回は**conda**インストールをやっていきます。

下のコマンドを実行します。

```console
conda install bioinfokit
```

これで**bioinfokit**ライブラリはインストールできましたが、**bioinfokit**ライブラリは他に色々なライブラリに依存しているので、入ってなければ必要なほかのライブラリ（**adjusttext**とか**textwrap3**など）も入れていきます。

このあと``from bioinfokit import analys, visuz``を実行したときに、足りないものがあるとerrorになるので、errorとして出てきたものをインストールしていけば大丈夫です。

下のリンクの「Depends」を見れば必要なライブラリ一覧がわかります。

[bioinfokit](https://bioconda.github.io/recipes/bioinfokit/README.html)

#データの準備

使うデータは、インデックス（行）が遺伝子名で、カラム（列）が各条件の遺伝子発現量のテーブルデータです。

[データセット](https://www.reneshbedre.com/assets/posts/heatmap/hm_cot.csv)

#遺伝子発現ヒートマップを描いてみる

```python:ライブラリのインポート
from bioinfokit import analys, visuz
import pandas as pd
```

ここで、さっき言ったライブラリ（**adjusttext**とか**textwrap3**など）が入っていないというエラーがあれば、condaインストールで入れていきます。

つぎにデータを読み込んで、中身を確認します。

```python:データの読み込みと確認
df = pd.read_csv('hm_cot.csv')
print(df.head())
```

```console:出力
    Gene         A         B         C        D        E         F
0  B-CHI  4.505700  3.260360 -1.249400  8.89807  8.05955 -0.842803
1   CTL2  3.508560  1.660790 -1.856680 -2.57336 -1.37370  1.196000
2  B-CHI  2.160030  3.146520  0.982809  9.02430  6.05832 -2.967420
3   CTL2  1.884750  2.295690  0.408891 -3.91404 -2.28049  1.628820
4   CHIV  0.255193 -0.761204 -1.022350  3.65059  2.46525 -1.188140
```

遺伝子名をインデックスにします。

```python:遺伝子名をindexとして設定
df = df.set_index(df.columns[0])
print(df.head())
```

```console:出力
              A         B         C        D        E         F
Gene                                                           
B-CHI  4.505700  3.260360 -1.249400  8.89807  8.05955 -0.842803
CTL2   3.508560  1.660790 -1.856680 -2.57336 -1.37370  1.196000
B-CHI  2.160030  3.146520  0.982809  9.02430  6.05832 -2.967420
CTL2   1.884750  2.295690  0.408891 -3.91404 -2.28049  1.628820
CHIV   0.255193 -0.761204 -1.022350  3.65059  2.46525 -1.188140
```

早速、さっそく描いていきます。

引数はデータフレームを与えるだけです。これで最低限のものは描けちゃいます。

```python
visuz.gene_exp.hmap(df=df)
```

ワーキングディレクトリにpngファイルとして保存されています。

![heatmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/d07985ff-1943-3b96-7c8b-ddd08b0045f6.png)

遺伝子名が重なってしまっているので、調整していきます。

```python
visuz.gene_exp.hmap(df=df, dim=(3, 6), tickfont=(6, 4), figname='heatmap1')
```
引数``dim``は図のサイズで（幅、高さ）を指定して、``tickfont``はX軸、Y軸のフォントサイズです。``figname``は作成する図の名前を指定することができます。

![heatmap1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/1bb83817-03ff-b2cc-55c7-5f8fbfd59f73.png)

階層クラスタリングを消すこともできます。行の階層クラスタリングを消す場合は引数``rowclus=False``を、列の階層クラスタリングを消す場合は引数``colclus=False``とします。

```python
visuz.gene_exp.hmap(df=df, dim=(3, 6), tickfont=(6, 4), rowclus=False, colclus=False, figname='heatmap2')
```

![heatmap2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/30ceae18-9ca6-3979-5728-af5291d20aa1.png)

色を変えることもできます。引数``cmap``を変えていきます。デフォルトでは'seismic'となっていますが、'RdYlGn'とします。

```python
visuz.gene_exp.hmap(df=df, dim=(3, 6), tickfont=(6, 4), figname='heatmap1')
```

![heatmap3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/801a652c-fcd1-255e-4dad-69e554ed01d0.png)

さらに標準化した値でヒートマップを作成することもできます。

列を標準化したい場合は``zscore=1``、行を標準化したい場合は``zscore=0``とします。

```python:列を標準化
visuz.gene_exp.hmap(df=df, dim=(3, 6), tickfont=(6, 4), zscore=0)
```

![heatmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/3ff48665-5621-3ac1-02ca-71990a00486a.png)

```python:行を標準化
visuz.gene_exp.hmap(df=df, dim=(3, 6), tickfont=(6, 4), zscore=1)
```

![heatmap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471633/0037e6da-1592-41db-028f-d4cd4d6f2a00.png)

こんな簡単にきれいな図が描けてしまいます。

他にも色々と引数を指定することで図を整えることができるのでやってみてください。

[bioinfokit:heatmapの色々な引数](https://github.com/reneshbedre/bioinfokit#heatmap)