【花粉症】―――その薬、あなたに合っていますか？【化学】

# はじめに
私は薬剤師ではありません。有機化学的な観点から有効な薬を提案できるのではないかと思って投稿しました。したがって、本記事の情報を用いて行う一切の行為について、何らの責任を負うものではありません。下記に起因して利用者に生じた損害につき、責任を負いかねますので御了承ください。

# 目次
* 背景
* 目的
* 結論
* 内容
* 所感
* Appendix

# 背景
私は花粉症を患っており、病院に通っていました。当然薬を処方されたのですが、一向に改善しませんでした。このことを先生に尋ねると「薬は人それぞれ相性があるからね～。色々試すしかないよね～」という回答が返ってきました。そこで私が考えた仮説が、「薬の有効成分の化学構造が似ていれば、その有効性も同程度になり、試す必要はないだろう」でした。実際に創薬の現場でも、[定量的構造活性相関 (QSAR)](https://ja.wikipedia.org/wiki/%E5%AE%9A%E9%87%8F%E7%9A%84%E6%A7%8B%E9%80%A0%E6%B4%BB%E6%80%A7%E7%9B%B8%E9%96%A2)という考えに基づき、化学構造と生物活性の関係に注目して薬が研究開発されています。
つまり、**薬の構造類似度を一覧化し、服用している薬が効かない場合は、その薬の類似度とは大きく異なるものを選定すればよい**というわけです。そうすれば、有効な薬に迅速にたどり着くことができると考えました。

# 目的
抗アレルギー薬 (花粉症に効く薬)の構造類似度を算出した一覧を作成すること。

# 結論
この構造類似度一覧を用いて、より良い抗アレルギー薬を選びましょう！
詳細な活用方法は内容の末尾を参照していただきたいのですが、一例をあげますと、「現在服用している〇〇〇という薬は効き目があまりないので、類似度が全く異なる☓☓☓という薬を試してみよう」という意思決定ができます。

<table border="1" class="dataframe">  <thead>    <tr style="text-align: right;">      <th></th>      <th>ルパタジン</th>      <th>ベポタスチン</th>      <th>エピナスチン</th>      <th>エバスチン</th>      <th>セチリジン</th>      <th>フェキソフェナジン</th>      <th>オロパタジン</th>      <th>ロラタジン</th>      <th>レボセチリジン</th>      <th>デスロラタジン</th>      <th>ビラスチン</th>    </tr>    <tr>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>    </tr>  </thead>  <tbody>    <tr>      <th>ルパタジン</th>      <td>1.000</td>      <td>0.191</td>      <td>0.115</td>      <td>0.132</td>      <td>0.157</td>      <td>0.121</td>      <td>0.133</td>      <td>0.591</td>      <td>0.157</td>      <td>0.550</td>      <td>0.131</td>    </tr>    <tr>      <th>ベポタスチン</th>      <td>0.191</td>      <td>1.000</td>      <td>0.149</td>      <td>0.485</td>      <td>0.403</td>      <td>0.333</td>      <td>0.136</td>      <td>0.241</td>      <td>0.403</td>      <td>0.167</td>      <td>0.264</td>    </tr>    <tr>      <th>エピナスチン</th>      <td>0.115</td>      <td>0.149</td>      <td>1.000</td>      <td>0.123</td>      <td>0.103</td>      <td>0.110</td>      <td>0.125</td>      <td>0.120</td>      <td>0.103</td>      <td>0.125</td>      <td>0.110</td>    </tr>    <tr>      <th>エバスチン</th>      <td>0.132</td>      <td>0.485</td>      <td>0.123</td>      <td>1.000</td>      <td>0.300</td>      <td>0.406</td>      <td>0.141</td>      <td>0.176</td>      <td>0.300</td>      <td>0.086</td>      <td>0.321</td>    </tr>    <tr>      <th>セチリジン</th>      <td>0.157</td>      <td>0.403</td>      <td>0.103</td>      <td>0.300</td>      <td>1.000</td>      <td>0.286</td>      <td>0.154</td>      <td>0.208</td>      <td>1.000</td>      <td>0.125</td>      <td>0.250</td>    </tr>    <tr>      <th>フェキソフェナジン</th>      <td>0.121</td>      <td>0.333</td>      <td>0.110</td>      <td>0.406</td>      <td>0.286</td>      <td>1.000</td>      <td>0.157</td>      <td>0.151</td>      <td>0.286</td>      <td>0.074</td>      <td>0.395</td>    </tr>    <tr>      <th>オロパタジン</th>      <td>0.133</td>      <td>0.136</td>      <td>0.125</td>      <td>0.141</td>      <td>0.154</td>      <td>0.157</td>      <td>1.000</td>      <td>0.179</td>      <td>0.154</td>      <td>0.115</td>      <td>0.152</td>    </tr>    <tr>      <th>ロラタジン</th>      <td>0.591</td>      <td>0.241</td>      <td>0.120</td>      <td>0.176</td>      <td>0.208</td>      <td>0.151</td>      <td>0.179</td>      <td>1.000</td>      <td>0.208</td>      <td>0.579</td>      <td>0.185</td>    </tr>    <tr>      <th>レボセチリジン</th>      <td>0.157</td>      <td>0.403</td>      <td>0.103</td>      <td>0.300</td>      <td>1.000</td>      <td>0.286</td>      <td>0.154</td>      <td>0.208</td>      <td>1.000</td>      <td>0.125</td>      <td>0.250</td>    </tr>    <tr>      <th>デスロラタジン</th>      <td>0.550</td>      <td>0.167</td>      <td>0.125</td>      <td>0.086</td>      <td>0.125</td>      <td>0.074</td>      <td>0.115</td>      <td>0.579</td>      <td>0.125</td>      <td>1.000</td>      <td>0.078</td>    </tr>    <tr>      <th>ビラスチン</th>      <td>0.131</td>      <td>0.264</td>      <td>0.110</td>      <td>0.321</td>      <td>0.250</td>      <td>0.395</td>      <td>0.152</td>      <td>0.185</td>      <td>0.250</td>      <td>0.078</td>      <td>1.000</td>    </tr>  </tbody></table>


# 内容
ここでは一般的に処方される内服薬に絞って記述します。以下の順番に記述していきます。
1. どのようにアレルギー反応が起こるのか
1. 抗アレルギー薬がどのようなものか
1. 有効成分の化学構造が重要であることを説明
1. 構造類似度一覧を作成するコードを紹介

## アレルギー症状のメカニズム
[文献](https://www.jstage.jst.go.jp/article/jibiinkoka/123/1/123_24/_pdf/-char/ja)を参考に、アレルギー症状のメカニズムを以下の図に示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2672794/8f086c70-7410-5a6e-21e3-05f588475841.png)

アレルギー物質を吸引→体内でヒスタミンが排出→H1受容体に結合→アレルギー発症という流れです。抗ヒスタミン薬 (アレルギーの薬)は、この**ヒスタミンがH1受容体に結合する前に結合することで、アレルギー症状を緩和**しているわけです。

## 抗ヒスタミン薬
> 内服薬には大きく2つに分けて、抗ヒスタミン薬とそれ以外の薬があります。花粉症の薬は抗アレルギー薬ともいわれますが、一般的には抗ヒスタミン作用のある薬を抗アレルギー薬の中でも抗ヒスタミン薬といいます。ふつう、抗ヒスタミン薬のことをアレルギーの薬と呼んでいますので、ここでもその意味で抗ヒスタミン薬と表します。

[わしお耳鼻咽喉科](https://washio-jibika.com/blog/%E8%8A%B1%E7%B2%89%E7%97%87%E3%81%AE%E8%96%AC%E3%81%AE%E9%81%B8%E3%81%B3%E6%96%B9%E3%80%80%EF%BD%9Eotc%EF%BC%88%E5%B8%82%E8%B2%A9%E8%96%AC%EF%BC%89%E3%82%82%EF%BD%9E-2/)さんから引用し、本投稿でも抗ヒスタミン薬はアレルギーの薬のことを指すとします。


## ヒスタミンと抗ヒスタミン薬の構造
ヒスタミンと抗ヒスタミン薬の構造は以下のような図になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2672794/aba9bc02-7198-1dc4-9f70-eb66d22d7ccf.png)

詳細は[文献](https://www.jstage.jst.go.jp/article/jibiinkoka/123/1/123_24/_pdf/-char/ja)を参考にしていただきたいのですが、ポイントは以下の通りです。
* ヒスタミンに近い構造が抗ヒスタミン薬となる
* 第一世代抗ヒスタミン薬は薬効を発揮したが、その構造が単純すぎるために他の受容体にも作用し、眠気などの副作用が強かった
* 第一世代抗ヒスタミン薬の副作用の克服や薬効の強化のために、化学構造を工夫した第二世代抗ヒスタミン薬が誕生した
* 第二世代抗ヒスタミン薬は、様々な構造変化のアプローチにより、そのバリエーションが多様化した

要するに、**有効成分の化学構造が非常に重要**であることを示しています。したがって、抗アレルギー薬の構造類似度を算出することに意義があると分かっていただけるかと思います。

## 化学構造の類似度の算出するコード
実行環境は以下のとおりです。
```
python:	3.7.11
pandas:	1.3.4
numpy:	1.20.3
rdkit:	2020.09.1
pubchempy:	1.0.4
```

用意するファイルは有効成分のcas番号を記したcsvファイルです。cas番号とは簡単言うと、1つの化合物に対応する一意の数字コードのようなものです。「化合物名　cas」で検索するとcas番号を取得することができます。これをもとに化学構造を取得します。後から確認できるように横の列に名前を書いておきます。今回は第二世代抗ヒスタミン薬で代表的なものを列挙し、これを`drug_list.csv`というファイルに保存しておきます。

<table border="1" class="dataframe">  <thead>    <tr style="text-align: right;">      <th></th>      <th>name_jpn</th>      <th>cas</th>    </tr>  </thead>  <tbody>    <tr>      <th>0</th>      <td>ルパタジン</td>      <td>158876-82-5</td>    </tr>    <tr>      <th>1</th>      <td>ベポタスチン</td>      <td>125602-71-3</td>    </tr>    <tr>      <th>2</th>      <td>エピナスチン</td>      <td>80012-43-7</td>    </tr>    <tr>      <th>3</th>      <td>エバスチン</td>      <td>90729-43-4</td>    </tr>    <tr>      <th>4</th>      <td>セチリジン</td>      <td>83881-51-0</td>    </tr>    <tr>      <th>5</th>      <td>フェキソフェナジン</td>      <td>83799-24-0</td>    </tr>    <tr>      <th>6</th>      <td>オロパタジン</td>      <td>113806-05-6</td>    </tr>    <tr>      <th>7</th>      <td>ロラタジン</td>      <td>79794-75-5</td>    </tr>    <tr>      <th>8</th>      <td>レボセチリジン</td>      <td>130018-77-8</td>    </tr>    <tr>      <th>9</th>      <td>デスロラタジン</td>      <td>100643-71-8</td>    </tr>    <tr>      <th>10</th>      <td>ビラスチン</td>      <td>202189-78-4</td>    </tr>  </tbody></table>

化合物構造の類似度を算出する前段階のコードを以下に示します。先程のcsvファイルを`pandas`で読み込み、cas番号からSMILESという化合物を文字列で表したものを取得し、`rdkit`というライブラリでMolオブジェクトを作成します。データフレームを表示させると、molecule列には化合構造が表示されますが、中身はMolオブジェクトになっています。

```python
# import libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import rdkit
import sys

from rdkit import rdBase, Chem, DataStructs
from rdkit.Chem import AllChem, PandasTools
import pubchempy as pcp
from rdkit.Chem.Fraggle import FraggleSim

# define fuction
def add_smiles(cas: str) -> str:
    """cas番号を受け取ってSMILESを返す関数。
    pubchempyを利用して、cas番号からSMILESを取得する。
    pd.DataFrameのmapメソッドでの利用を想定している。
    
    Parameters
    ----------
    cas: str
        cas番号
    
    Return
    ------
    smiles: str
        SMILES
    """
    
    properties = ['canonicalsmiles']
    rlt = pcp.get_properties(properties, cas, 'name', as_dataframe=False)
    smiles = rlt[0]['CanonicalSMILES']
    return smiles

# データフレームを用意する。
df = pd.read_csv("drug_list.csv", encoding='shift jis')
df['smiles'] = df['cas'].map(add_smiles)
PandasTools.AddMoleculeColumnToFrame(df,'smiles','molecule',includeFingerprints=True) # dfのmoleculeという列にMolオブジェクトを追加する。

df.head(2)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2672794/0d631fe7-6504-5eab-7aff-260008740fea.png)

続いて、化合物の類似度を算出します。
まず、化合物を数値に変換する必要があります。このように化合物を数値で表現したものを分子記述子と言います ([分子記述子については私の記事も参考に](https://qiita.com/r-shiomoto/items/29ec4fea0039d6ae4a17))。今回はMorganFingerprintという分子記述子を用いて、化合物を0と1の配列に変換します。
次にTanimoto係数を用いて類似度を算出します。Tanimoto係数の詳細は[化学の新しいカタチ](https://future-chem.com/rdkit-fingerprint/)を参考にしていただきたいのですが、簡単言うと、0と1の配列に変換された化合物同士の、0と1の重なり具合を示したものです。この値が1に近いほど、その化合物同士は類似していることを示します。

```python
# Tanimoto coefficientを計算する。
mols = df.iloc[:,-1] # Molオブジェクトのpd.Series
tanimotos = []

morgan_fp = [AllChem.GetMorganFingerprintAsBitVect(mol, 2, 2048) for mol in mols]
for i in range(df.shape[0]):
    tanimoto = DataStructs.BulkTanimotoSimilarity(morgan_fp[i], morgan_fp)
    tanimotos.append(tanimoto)
    
df1 = pd.DataFrame(tanimotos, index=df['name_jpn'], columns=df['name_jpn'])
df1.columns = df1.columns.rename('') # 名前が邪魔なので削除する。
df1.index = df1.index.rename('') # 名前が邪魔なので削除する。
pd.options.display.float_format = '{:.3f}'.format # 小数点を3桁に設定する。

df1
```

<table border="1" class="dataframe">  <thead>    <tr style="text-align: right;">      <th></th>      <th>ルパタジン</th>      <th>ベポタスチン</th>      <th>エピナスチン</th>      <th>エバスチン</th>      <th>セチリジン</th>      <th>フェキソフェナジン</th>      <th>オロパタジン</th>      <th>ロラタジン</th>      <th>レボセチリジン</th>      <th>デスロラタジン</th>      <th>ビラスチン</th>    </tr>    <tr>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>      <th></th>    </tr>  </thead>  <tbody>    <tr>      <th>ルパタジン</th>      <td>1.000</td>      <td>0.191</td>      <td>0.115</td>      <td>0.132</td>      <td>0.157</td>      <td>0.121</td>      <td>0.133</td>      <td>0.591</td>      <td>0.157</td>      <td>0.550</td>      <td>0.131</td>    </tr>    <tr>      <th>ベポタスチン</th>      <td>0.191</td>      <td>1.000</td>      <td>0.149</td>      <td>0.485</td>      <td>0.403</td>      <td>0.333</td>      <td>0.136</td>      <td>0.241</td>      <td>0.403</td>      <td>0.167</td>      <td>0.264</td>    </tr>    <tr>      <th>エピナスチン</th>      <td>0.115</td>      <td>0.149</td>      <td>1.000</td>      <td>0.123</td>      <td>0.103</td>      <td>0.110</td>      <td>0.125</td>      <td>0.120</td>      <td>0.103</td>      <td>0.125</td>      <td>0.110</td>    </tr>    <tr>      <th>エバスチン</th>      <td>0.132</td>      <td>0.485</td>      <td>0.123</td>      <td>1.000</td>      <td>0.300</td>      <td>0.406</td>      <td>0.141</td>      <td>0.176</td>      <td>0.300</td>      <td>0.086</td>      <td>0.321</td>    </tr>    <tr>      <th>セチリジン</th>      <td>0.157</td>      <td>0.403</td>      <td>0.103</td>      <td>0.300</td>      <td>1.000</td>      <td>0.286</td>      <td>0.154</td>      <td>0.208</td>      <td>1.000</td>      <td>0.125</td>      <td>0.250</td>    </tr>    <tr>      <th>フェキソフェナジン</th>      <td>0.121</td>      <td>0.333</td>      <td>0.110</td>      <td>0.406</td>      <td>0.286</td>      <td>1.000</td>      <td>0.157</td>      <td>0.151</td>      <td>0.286</td>      <td>0.074</td>      <td>0.395</td>    </tr>    <tr>      <th>オロパタジン</th>      <td>0.133</td>      <td>0.136</td>      <td>0.125</td>      <td>0.141</td>      <td>0.154</td>      <td>0.157</td>      <td>1.000</td>      <td>0.179</td>      <td>0.154</td>      <td>0.115</td>      <td>0.152</td>    </tr>    <tr>      <th>ロラタジン</th>      <td>0.591</td>      <td>0.241</td>      <td>0.120</td>      <td>0.176</td>      <td>0.208</td>      <td>0.151</td>      <td>0.179</td>      <td>1.000</td>      <td>0.208</td>      <td>0.579</td>      <td>0.185</td>    </tr>    <tr>      <th>レボセチリジン</th>      <td>0.157</td>      <td>0.403</td>      <td>0.103</td>      <td>0.300</td>      <td>1.000</td>      <td>0.286</td>      <td>0.154</td>      <td>0.208</td>      <td>1.000</td>      <td>0.125</td>      <td>0.250</td>    </tr>    <tr>      <th>デスロラタジン</th>      <td>0.550</td>      <td>0.167</td>      <td>0.125</td>      <td>0.086</td>      <td>0.125</td>      <td>0.074</td>      <td>0.115</td>      <td>0.579</td>      <td>0.125</td>      <td>1.000</td>      <td>0.078</td>    </tr>    <tr>      <th>ビラスチン</th>      <td>0.131</td>      <td>0.264</td>      <td>0.110</td>      <td>0.321</td>      <td>0.250</td>      <td>0.395</td>      <td>0.152</td>      <td>0.185</td>      <td>0.250</td>      <td>0.078</td>      <td>1.000</td>    </tr>  </tbody></table>

この構造類似度一覧を使って様々な意思決定をすることができます。例えば、「ルパタジンを服用していたが、効果がなかったので、類似度が大きく異なるエピナスチンを試してみようかな」という意思決定ができると思います。
また、アレルギー反応が酷い場合は2種類の抗ヒスタミン薬を服用することもあるので、逆に「今服用しているベポタスチンがよく効いているので、類似度の高いエバスチンを同時に服用しよう」という意思決定にも利用できます。

# 所感
実際にこの一覧を用いて、私が服用する薬を色々試したところ、花粉症の症状を軽減する薬を見つけることができました。闇雲に試すよりも何かに基づいて計画的に行うことの大切さを知りました。ちなみに、薬を試す期間は1～2週間くらいが良いと思います。万が一、その薬が合わなかったら、薬を消費するまで長期間苦しむことになるからです。
あまりにもアレルギー反応が酷い場合は、[ゾレア皮下注](https://www.info.pmda.go.jp/go/pack/2290400D1033_1_14/)という注射による、より根本的な治療があります。症状や先生の判断によって頻度や価格は変化するとは思いますが、私が聞いたときは「月に1回の注射で約3万円」と高価でしたので、できれば内服薬で何とかしたいですよね。

最後に念押ししておきますが、私は薬剤師ではありませんので、あくまで**自己責任**で検討をお願いします。

この記事が誰かの役に立つことを願っております。
最後まで読んでいただき、ありがとうございました。:v:

# Appendix
## 有効成分
薬の錠剤はその全てが薬効を持っているわけではありません。正味で薬効を持っているのは有効成分と言われ、周りは添加剤で覆われています。添加剤のおかげで狙った場所で狙った速度で溶解して、薬効を効率的に発揮します。ですので、有効成分=薬ではなく、有効成分は薬の一部という関係になっています。
また、薬の名前と有効成分が一致しないことも往々にしてあります。例えば、アレジオンの有効成分はエピナスチン、アレグラの有効成分はフェキソフェナジンです。もしかしたら、構造類似度一覧の化合物名を見て、「そんな名前の薬聞いたことねぇよ！」と思ったかもしれません。上記のような事情でそうなっています。

## 分子記述子と類似度
今回は、MorganFingerprintという分子記述子で化合物を数値に変換し、Tanimoto係数を用いて類似度を算出しました。この分子記述子と類似度の算出方法はそれぞれバリエーションがあります。ですので、「この一覧使ったけど効果でないじゃん」という可能性もあります。興味がある方は、色々と手法を変えて一覧を作り替えてみてください。