python と JupyterLab でボルケーノ

# はじめに
ボルケーノプロットを作成することになり、[Pythonで作るVolcano plot](https://qiita.com/insilicomab/items/c382f10208e8bd2482b5) を参考にさせてもらい、無事描画できたのだが、途中ライブラリのバージョンアップ等のため苦戦したのでメモっておく。

# 試した環境
インストールすることができたバージョンの組み合わせは、こんな感じ。
- Ubuntu 20.X
- miniconda 
- python 3.11
- jupyterlab 4.0.3
- bioifonkit 1.0.8
- matpltolib 3.7
- pandas 2.0.3
- seaborn 0.12.2
- matplotlib-venn 0.11
- adjustText 0.7.3
- tabulate 0.9.0
- scikit-learn 1.3.0
- textwrap3 0.9.2

# 構築手順
こんな感じ。
``` sh
conda create -n jupyter
conda activate jupyter
conda install -c conda-forge jupyterlab
conda install -c bioconda bioinfokit
conda install -c conda-forge pandas
conda install -c conda-forge seaborn
conda install -c conda-forge matplotlib-venn
conda install -c conda-forge adjustText
conda install -c conda-forge tabulate 
conda install -c conda-forge scikit-learn
conda install -c conda-forge textwrap3
```

Jupyter lab は様々なライブラリに依存しており、インストール可能なバージョンが見つからないことも多々あるので一番最初入れているのがポイント。

バージョンを指定していないので、実施時期によっては本記事のバージョンと異なるものがインストールされる可能性がある。うまくいかない場合はバージョンを指定するなど試行錯誤してほしい。

# ボルケーノプロットの描画
早速、ボルケーノプロットを描画していこう。

まずコマンドラインからjupyterLabを起動しておこう
``` python
jupyter lab --ip 0.0.0.0
```

続いてJupyterLabでNoteBookを作成し、コマンドを打ち込んでいく。

まず必要なライブラリを読み込もう。

``` python
import pandas as pd
from bioinfokit import analys, visuz
import bioinfokit
import logging
import matplotlib.pyplot as plt
%matplotlib inline
logging.getLogger("matplotlib.font_manager").setLevel(logging.ERROR)
```

続いてテストデータを読み込もう。テストデータは、[ここ](https://raw.githubusercontent.com/KerryAM-R/ggVolcanoR/main/test-data/Proteomics%20data.csv) からダウンロードして、JupyterLabにアップロードしている。

``` python
df = pd.read_csv('./test_data.csv')
```

中身はこんな感じだ(最初の5行のみ表示)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/d7c74519-94b7-75d3-ce19-afe676c56356.png)

早速グラフを描画しよう。lfcに遺伝子発現データの列名、pvにP値の列名をそれぞれ指定しよう。
``` python
bioinfokit.visuz.gene_exp.volcano(df=df, lfc='logFC', pv='Pvalue', sign_line=True, show=True)
```

こんな風にサクッと描画される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/e4349ee0-d8cd-8971-710e-3d31fc1fb96c.png)


続いて色を代えてみよう。```color```に色の組み合わせを指定すればよい。
``` python
bioinfokit.visuz.gene_exp.volcano(df=df, lfc='logFC', pv='Pvalue', color=('red', 'grey', 'blue'))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/10a90262-3d31-4f54-2f7f-17cbc1e87554.png)


味気ないので閾値ラインを入れてみよう。```sign_line=True```を指定するとよい。
``` python
bioinfokit.visuz.gene_exp.volcano(df=df, lfc='logFC', pv='Pvalue', color=('red', 'grey', 'blue'), sign_line=True, show=True)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/a1709e3c-afa4-1d72-8ef9-19bf55cc8cdb.png)


閾値を変更してみよう。lfc_thr, pv_thrにそれぞれ下限、上限のタップルを指定すればよい。
``` python
bioinfokit.visuz.gene_exp.volcano(df=df, lfc='logFC', pv='Pvalue', color=('red', 'grey', 'blue'), sign_line=True, lfc_thr=(2, 2), pv_thr=(0.005, 0.005), show=True)
```

図は省略する。

続いて凡例を入れてみよう。```plotlegend=True```を指定すればよい。凡例の文字列も変更可能だ。
詳しくは[ドキュメント](https://reneshbedre.github.io/blog/howtoinstall.html)を見てほしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/a75e800a-f1c3-f2a3-8ac4-7ff031fd7ef6.png)

続いて閾値を超えた遺伝子にラベルを付けてみよう。```geneid```に遺伝子の名前のある列名を指定し、```genenames="deg"```を指定すればよい。

``` python
bioinfokit.visuz.gene_exp.volcano(df=df, lfc='logFC', pv='Pvalue', color=('red', 'grey', 'blue'), sign_line=True, lfc_thr=(2, 2), pv_thr=(0.005, 0.005), plotlegend=True, geneid="ID", genenames="deg", show=True)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/8f78a314-3f7f-8626-3d4e-3a66303cbc38.png)

ちょっと数が多いので、特定の遺伝子に絞ってラベルをつけてみよう。```genenames```列にラベルを付けたい遺伝子名をタップルで指定すればよい。

```python
bioinfokit.visuz.gene_exp.volcano(df=df, lfc='logFC', pv='Pvalue', color=('red', 'grey', 'blue'), sign_line=True, lfc_thr=(2, 2), pv_thr=(0.005, 0.005), plotlegend=True, geneid="ID", genenames=("WARS", "GBP1"), show=True)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329816/1cb332f5-83e8-bac3-fc32-c162b79479b0.png)

# おわりに
bioinfokitでは、他にもフォントや軸など色々カスタマイズできるようなので、ドキュメントを見て試行錯誤し、こだわりのボルケーノを描き上げてほしい! 

# 参考文献
- [Pythonで作るVolcano plot](https://qiita.com/insilicomab/items/c382f10208e8bd2482b5)
- https://kazumaxneo.hatenablog.com/entry/2022/01/21/013227
- [サンプルデータ](https://raw.githubusercontent.com/KerryAM-R/ggVolcanoR/main/test-data/Proteomics%20data.csv) 
- [bioinfokit documentation](https://reneshbedre.github.io/blog/howtoinstall.html)