バイオ系博士の備忘録

プログラミング関係の備忘録

第4回富士フイルムコンペ参加記録(Q3: 6位)

第4回目となる富士フイルム主催データ分析コンペ(Brain(s))に参加したので、忘れないうちに細々したことを記録しておこうと思います。
本やらウェブテキストやらでデータ分析の勉強しただけで実践はまだだったのですが、Kaggleは画像コンペばっかでとっつき辛いし、ツヨツヨデータサイエンティストとまともに戦える気もしませんでした。
そんなとき学生限定*1富士フイルムテーブルコンペを知って参加しました。

コンペはathleticsというプログラミングスキルチャレンジプラットフォームで行われました。
エンジニア用の就活用コーディングテストみたいな側面もあるらしく、競プロに近いチャレンジから分析系チャレンジまで幅広く扱っているみたいです。
今回参加したのは富士フイルムが主催するテーブルデータコンペで、低分子化合物の化学式(SMILES)から各種物性(記述子)を計算し、溶解度や変異原性を予測するというケモインフォマティクス分析のお題でした。
記述子や分子情報の計算には有名なRDKitというライブラリを主に使いました。

提出モデル(Q3)

記述子テーブル → ランダムフォレストNN ...①
Morgan FingerPrint テーブル → ランダムフォレストNN ...②
記述子テーブル、①、 ②、①+② → ランダムフォレストStacking

f:id:arukuhito_000:20200916225058p:plain
Q3 Solution

accuracy
Final score: 0.848
Final PublicLB: 0.87096
Final PrivateLB: 0.6574

モデル作成までの道のり(Q3)

  1. データ取得*2*3*4
    複数のデータセットをまとめた後で一度は精度が落ちたが、Molオブジェクトへの変換時にMolStandardizeモジュールによって標準化・脱塩・中和処理を行うことで逆に精度は向上した(+0.03くらい)
  2. 特徴量作成
    RDKitから200カラムの記述子と2048カラムのMorgan FingerPrintを、Mordredから1800カラムくらいの記述子を計算*5
    Q2で作成した溶解度予測モデルの値を追加
    他の特徴量エンジニアリングはLeaderBoardが非公開になった後の数日で急いで行った(後述)
  3. 特徴量選択
    Borutaで記述子テーブルを706カラムまで削減
    FingerPrintは特にいじらなかった
  4. Train
    記述子テーブルとFingerPrintテーブルから、ランダムフォレストとNNで予測(計4列)
    モデルはBayesianOptimizationでハイパラチューニングした
    単独モデルの精度はそれぞれ0.8超えたあたりくらい
  5. Stacking
    記述子テーブルに、4列の予測結果(0 or 1)とその合計値(最大4)を追加し、ランダムフォレストで予測*6
    記述子テーブルを付け足す必要があったかどうかは謎
    情報多い方がモデル君も嬉しいだろうと思ってつけた
    過誤を起こしやすい構造を学んでほしかった

スコア推移

RDKit記述子のみ、ランダムフォレスト単独モデル
CV score, 0.816; PublicLB, 0.58くらい; 1回目PrivateLB, 0.51852

アンサンブルモデル追加・データ追加・ハイパラ調整(パラメータ設定のエラーやSMILESの重複が残っていたので、それも除去)
score, 0.810; PublicLB, 0.8387

データ追加
score, 0.841; PublicLB, 0.77419

標準化・脱塩・中和
score, 0.840; PublicLB, 0.87097; 2回目PrivateLB, 0.62037

特徴量作成
score, 0.848; PublicLB, 0.87097; 最終PrivateLB, 0.6574

LeaderBoard非公開後に以下の特徴量を追加したことで+0.034
1. Q2溶解度とMordredのLogS予測値との差分
2. 5次元にPCA圧縮した結果
3. kmeansでクラスタリングした結果(n=5)*7
4. base estimatorsのクラスラベル合計値(大きい値ほど陽性っぽいと予測)

所感

  • Q1–Q3まで3問あり、ケモインフォマティクスに慣れない人もステップアップして取り組める内容で優しさを感じた。
  • Q2はPublicLBが最終スコアとなるため高度な過学習抑制は要求されておらず、俺の考えた最強モデルバトル!みたいな様相。
  • Q3はビジネスタスク寄りで、手法やデータセットの制限も特になかったのでしっかり取り組めば実力が確実に付けられる内容だった。
  • モデルとソースコードをアップロードして採点する方式で(10MB制限)、普段メモリや環境に気を使っていないツケが回ってきたため、これは今後の課題。

全体を通してコードがぐちゃぐちゃになったり勘違い実装があったりしたので、Kaggleで勝つ本の購入検討中です。
が、Stackingのリークなどは自分で実装しないと実感しなかったと思うので、勉強と実装のバランスはこれからも大事にしていきたいと思いました。

あらためてスコア推移を整理してみると手持ちデータの検証精度・PublicLB・PrivateLBの乖離が非常に大きく、如何にモデルを汎化させられるかが鍵だったと思います。
また、Brain(s) slackで日々情報交換が行われており、PublicLBに使用されるデータ数が少ないことが予想されていました。
コンペ最終日付近はスコアが伸びなくても手元のスコア伸びるのを信じてチマチマ頑張ったのが効いてくれて報われました。

入賞するとは思わずにzoom開催の表彰式をぼけーっと聞いてたら自分の名前が挙がっており、めちゃくちゃに慌ててしまいました。
頭が真っ白になってしまって、自分の最後のPrivateスコアと順位と賞品を覚えていないです。すみません。確か6位でした。いいカメラが貰えるらしいです。
初参加コンペで初入賞で嬉しいです。
これをきっかけに、これから色々なコンペに出てみようと思いました。

参考

コンペ後に公開された他の参加者の取り組み例

何かと便利なサイト

*1:年齢制限ギリギリでした。なんか申し訳ない。

*2:http://doc.ml.tu-berlin.de/toxbenchmark/ 参加者全員に渡されたデータ

*3:https://pubs.acs.org/doi/abs/10.1021/ci300400a

*4:https://www.sciencedirect.com/science/article/pii/S1383571820300693

*5:開発者が日本人なので日本語解説が豊富

*6:このとき学習データ全体を使ってしまったので、リークしてしまった。あとからOut-of-FoldやHoldoutTSの手法を知ったので、以後気を付けたい。

*7:testはtrainで作成したモデルからの予測値を用いた

pyenvからminiconda環境を構築

普段はpipを使うのですが、condaを使う機会があったので備忘録として残します。
バイオインフォマティクス系の分析はcondaにしかパッケージがないことがあるので、pipできないとconda競合に気をつけないといけません。
pyenvからconda環境を入れることで、なにか困っても再構築が楽になります。
ついでにcookiecutterも使って分析しやすいディレクトリを構成します。

# $ pip install cookiecutter
$ pyenv install miniconda3-latest
$ pyenv shell miniconda3-latest
$ condo create -n [env_name] python=[python_version]
$ condo activate [env_name]
$ conda install jupyter
$ ipython kernel install --user --name=[env_name] --display-name=[env_name]
# if you don’t need this env, type command ‘$ jupyter kernelspec uninstall [env_name]’ 
$ cookiecutter https:github.com/drivendata/cookiecutter-data-science
You've downloaded /Users/YOUR_NAME/.cookiecutters/cookiecutter-data-science before. Is it okay to delete and re-download it? [yes]: yes
project_name [project_name]: [env_name]
repo_name [ml_project]: 
author_name [Your name (or your organization/company/team)]: [your_name]
description [A short description of the project.]:
Select open_source_license:
1 - MIT
2 - BSD-3-Clause
3 - No license file
Choose from 1, 2, 3 (1, 2, 3) [1]: 1
s3_bucket [[OPTIONAL] your-bucket-for-syncing-data (do not include 's3://')]: 
aws_profile [default]: 
Select python_interpreter:
1 - python3
2 - python
Choose from 1, 2 (1, 2) [1]: 1
$ cd [env_name]
# if you need requirements file for pip, type command ‘$ conda list --export > requirements.txt’
# if you want to create env from file, type command ‘$ conda env create -f=[env_name.yml]’
$ conda env export -n [env_name] > [env_name.yml]
# edit gitignore file ‘$ vim .gitignore’
git init

ただし、この方法だとcondaに存在しないパッケージはsystemを検索して利用する罠があります。
とくに、conda install jupyterせずにjupyterカーネルを追加すると、import *** はsystemを検索してしまいます。
途中でjupyterをinstallしているのはそのため。

新薬の情報を元に、製薬業界を分析する

製薬企業の特徴を新薬から探る

就活を始める方で、どのように業界研究すればよいかわからない人って結構いると思います。
私もその1人で、まずは製薬に絞って就活しようと思い立ったのですが、それでも膨大な数の企業があって時間と労力をかけなければ俯瞰的な視点を持つことは難しそうでした。
製薬企業のセグメントは、資本(内資・外資)と事業領域(新薬・ジェネリック)の軸の上に、疾患領域をどのようにターゲティングするかでさらに細分化されるようです*1
大まかな分類は調べれば出てきますが、最新のデータを元にした細かな業界研究は見当たらなかったので、自分で分析することにしました。
その際、R&Dの職に就きたいという希望があったので、新薬の情報を元に、製薬企業の分類をすることにしました。

データ集計、処理

概要

KEGG DRUGに2000年以降に上市された新薬が記載されています。
承認日, 薬効, 分類ID, 有効成分, 商品名, 会社名などの列に対して、630個の新薬が列挙されています*2 *3
有効成分やら商品名だけでは何の薬かぱっと見わからないものも多いので、薬効分類を併記したいです。
そのために、分類IDの対応表を作成しました。
分類IDは4桁数字からなるレコードで、大・中・小・細小と薬品を分類しています*4
このデータはjsonファイルでダウンロードすることができたので、Pythonで分類IDごとに分類名称を対応させることにしました。
元の表と薬品分類対応表をスプレッドシート上で合体させ、Tableauで可視化することにしました*5

jsonファイルのパース

jupyter notebookを用いて、次のようなコードでpandas DataFrameに変換しました。

import json
file = open('jp08301.json')
data = json.load(file)

from pandas.io.json import json_normalize
df = json_normalize(data=data,record_path=['children','children','children','children'],meta=[['children','children','children','name'],['children','children','name'],['children','name']])
df = df[['children.name','children.children.name','children.children.children.name','name']]

df.rename(columns = {'children.name':'first','children.children.name':'second','children.children.children.name':'third','name':'fourth'}, inplace=True)

df['first'] = df['first'].str.replace('^[1-9]+', '').str.strip()
df['second'] = df['second'].str.replace('^[1-9]+', '').str.strip()
df['third'] = df['third'].str.replace('^[1-9]+', '').str.strip()
df[['code','fourth']] = df['fourth'].str.split('  ', expand=True)

json_normalizeでパースしました。
ネストされまくっているので、record_pathとmetaで欲しいデータを指定しています。
また、rename後、余計な文字を削除しました。
結果は次のような表になります。

f:id:arukuhito_000:20190911152947p:plain
薬品分類

可視化

Google Driveとtableauと繋げれば、わざわざcsvファイルをアップロードしなくてもデータを整形できちゃいます。
企業名に表記揺らぎや今はもう統合された企業があったので、前処理としてグループ化だけしました。
細かい操作もできて、色々痒いところに手が届く仕様にしているようで、こういう趣味のデータを可視化する分には十分な機能を持っている印象です。
最近流行りのtableauの分厚い教本がありますが、買わなくても直感的に操作できるのがいいところだと思います。



可視化するまでもなかったのですが、近年の上市新薬腫瘍用薬, 中秋神経系用薬が多かったです。
薬品分類ごとの企業割合から、一部省略していますが、がん領域だとMSD, 中外, ファイザー, ノバルティス, アストラゼネカが強いことがわかりました。
また、代謝性医薬品(皮下注射用の医療用医薬品など)は、サノフィ, 協和キリン, ジョンソンエンドジョンソンなども強そうです。

company
企業割合



また、企業ごとの新薬承認数も可視化しました。
MSD, ファイザー, グラクソ, ノバルティスなど、外資が強いようです*6

new drug
新薬承認数



有効成分がモノクローナル抗体の薬品は、分子標的薬です。
名前が〜〜マブとなっている薬を列挙しました。
腫瘍用薬で分子標的薬は圧倒的にMSD, 中外が強いみたいです。聞いたことある名前がちらほら入ってますね。

Molecular targeting drugs
分子標的薬



一例として、中外製薬が出している新薬を列挙しました。
少し前は領域横断的に新薬を出していましたが、近年でがん領域に特化し始めたことがわかります。
一番新しい新薬のロズリートレクはつい最近販売が開始されたので、ニュースになりましたね。
www.chugai-pharm.co.jp

chugai
中外製薬


最後に

ざっと可視化しただけでだいぶ特徴が掴めたと思います。
やってよかった。

今回は時間をかけずに調べたかったのでやりませんでしたが、もっと力を入れて分析できるなと思った点もありました。
例えば、企業ごとの特色は四季報に書いてあるので、そこのデータを結合すればもっと細かい分析ができると思います。
また、ATC分類で対応表を作れば、もっとわかりやすい分類になったかもしれません。
scikit-learnを用いてクラスタリングすれば、もっとわかりやすい分類もできると思います。

分析に用いたスプレッドシートは需要があれば公開します*7

ここまで読んでくださり、ありがとうございました。

*1:国内製薬業界のいま〜医療業界コンサルタントが解説!|SCIENCE SHIFT

*2:2019/9/3現在

*3:別の表に再生医療新薬も記載されていましたが、今回は除きました。

*4:KEGG BRITE: 医療用医薬品の薬効分類

*5:Pythonで可視化してもよかったのですが、時間短縮とBIツールの練習のためにこの方法を選択。学生は無料!

*6:武田は内資ですが、経営陣トップは外国人ばかりっぽいので、どちらかといえば外資志向なイメージはあります。

*7:KEGG DRUGも公開データベースなので、特に問題ないと思います。

pipenvのパッケージがバージョン指定で入らず苦労してる話。

macでpipenvを使いたい

仮想環境とかよくわかんないけど、pipenvは楽そう。
今までの仮想環境は削除する(Qiitaの記事を参考にした)。
いい感じに仮想環境構築して、「Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 」を読み進めたい。

[問題点] pipenvでバージョン指定できない

パッケージの依存関係の問題なのか、最新版のパッケージを入れることはできても、ダウングレードして入れることができていない。
早急に解決したいが、取り急ぎの備忘録として公開する。

[追記]下記オプションで(一部)解決した。

$ pipenv install --sequential
インストール

基本的に、公式ドキュメントのこことかこことかを参考にする。

$ cd myproject
$ brew install pipenv
python3を使う
$ pipenv --python 3
Warning: Python 3 was not found on your system…
You can specify specific versions of Python with:
  $ pipenv --python path/to/python
$ brew ls python3
...
/usr/local/Cellar/python/3.7.3/bin/python3.7
...
$ pipenv --python /usr/local/Cellar/python/3.7.3/bin/python3.7
Removing existing virtualenv…
Creating a virtualenv for this project…
...
✔ Successfully created virtual environment! 
Virtualenv location: /Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8
仮想環境構築とパッケージのインストール

パッケージのバージョンを指定するとPipfile.lockでエラーがでたので、取り急ぎ最新バージョンで(190402)。

$ pipenv install NumPy SciPy scikit-learn matplotlib pandas
Creating a virtualenv for this project…
Pipfile: /Users/myname/python-machine-learning-book-2nd-edition/Pipfile
Using /usr/local/Cellar/pipenv/2018.11.26_2/libexec/bin/python3.7 (3.7.3) to create virtualenv…
⠸ Creating virtual environment...Already using interpreter /usr/local/Cellar/pipenv/2018.11.26_2/libexec/bin/python3.7
Using real prefix '/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8/bin/python3.7
Not overwriting existing python script /Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8/bin/python (you must use /Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8/bin/python3.7)
Installing setuptools, pip, wheel...
done.

✔ Successfully created virtual environment! 
Virtualenv location: /Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8
Creating a Pipfile for this project…
Installing NumPy…
Adding NumPy to Pipfile's [packages]…
✔ Installation Succeeded 
Installing SciPy…
Adding SciPy to Pipfile's [packages]…
✔ Installation Succeeded 
Installing scikit-learn…
Adding scikit-learn to Pipfile's [packages]…
✔ Installation Succeeded 
Installing matplotlib…
Adding matplotlib to Pipfile's [packages]…
✔ Installation Succeeded 
Installing pandas…
Adding pandas to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Updated Pipfile.lock (46c561)!
Installing dependencies from Pipfile.lock (46c561)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 11/11 — 00:00:02
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
仮想環境に入る
$ pipenv shell
Launching subshell in virtual environment…
bash-3.2$  . /Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8/bin/activate
(python-machine-learning-book-2nd-edition) bash-3.2$
(python-machine-learning-book-2nd-edition) bash-3.2$ python --version
Python 3.7.3
Pythonのシェルに入る
>>> import numpy as np
>>> print(np.arange(10))
[0 1 2 3 4 5 6 7 8 9]
パッケージのバージョンを指定する
$ pipenv run pip freeze
cycler==0.10.0
kiwisolver==1.0.1
matplotlib==3.0.3
numpy==1.16.2
pandas==0.24.2
pyparsing==2.3.1
python-dateutil==2.8.0
pytz==2018.9
scikit-learn==0.20.3
scipy==1.2.1
six==1.12.0

実際に欲しいのは下記だが、エラーがでる(解決済み)。
NumPy==1.12.1
SciPy==0.19.0
scikit-learn==0.18.1
matplotlib==2.0.2
pandas==0.20.1

ためしにpandasだけ入れようとしても、

$ pipenv install pandas==0.20.1
Installing pandas==0.20.1…
Adding pandas to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock (a71011) out of date, updating to (46c561)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Updated Pipfile.lock (a71011)!
Installing dependencies from Pipfile.lock (a71011)…
An error occurred while installing
...
Installing initially failed dependencies…
...
ERROR: ERROR: Package installation failed...
  ☤  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 — 00:00:05

入らない。

pipenv.exceptions.InstallError

これをどうにかしないといけないようなので、引き続き調べる。


[190403追記] pipenv install --sequentialする

依存関係のエラーらしい。
一部は--sequential optionで一つずつ入れられた。

$ pipenv --rm
Removing virtualenv (/Users/myname/.local/share/virtualenvs/python-machine-learning-book-2nd-edition-eAx8UWz8)…
python-machine-learning-book-2nd-edition $ rm Pipfile Pipfile.lock 
$ pipenv install --sequential SciPy==0.19.0
Installing SciPy==0.19.0…
Adding SciPy to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock (0c5e59) out of date, updating to (91cb02)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Updated Pipfile.lock (0c5e59)!
Installing dependencies from Pipfile.lock (0c5e59)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 3/3 — 00:00:11
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

ただし、入れられないものもあり、それらはエラーがでる。

$ pipenv install --sequential matplotlib==2.0.2
Installing matplotlib==2.0.2…
Adding matplotlib to Pipfile's [packages]…
✔ Installation Succeeded 
Pipfile.lock (a671fc) out of date, updating to (ed87c2)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✘ Locking Failed! 
...

ただし、pipenv run pip freezeでは入っておらず、実際にimportもできない。

[190508追記] numpy errorだった

numpy1.12はpython3.7に未対応らしく、pyenvでpythonのバージョンも管理すれば解決できそう。
この記事を参考にpyenvでpython3.5.7を入れておく。

$ pipenv --python 3.5.7

続いてjupyterにkernelを追加する。
仮想環境に入り

(test) $ pipenv shell
(test) bash-3.2$ ipython3 kernel install --user --name=test --display-name=test
(test) bash-3.2$  jupyter kernelspec list
  test       /Users/myname/Library/Jupyter/kernels/test
  python3    /usr/local/share/jupyter/kernels/python3


以後はこの仮想環境がjupyter kernelに追加されるので、外からjupyter notebookを開いてもOK。

都内に個人でウェット実験ができるシェア研究室がオープン(Beyond BioLAB TOKYO)

2/5付のニュース記事で紹介されたBeyond BioLAB TOKYO

biolab.beyondnextventures.com

 
シェアウェットラボが2月都内にオープンするらしい。
入居予定者数は15ほどで、基本的にはスタートアップやベンチャー向けのようだが、1日限定の個人利用可能も可能とのこと。

ベンチ単位で借りれるらしいが、共通機器やP2設備もあって良さげだね。
PCRはできそうw(ThermoのProFlexかな?)

こういうラボで自分の実験ができるのも良いけど、コミュニティを広げることができるのも魅力的ですね。
特許関係で出入りが難しいベンチャーとかもあるかもだけど。

今までは都内でバイオ実験ができる施設は渋谷のFabLabくらいしかなかったけど、こういう選択肢が今後増えていくに期待。

2/8追記

バイオハッカージャパンで記事になってます。
実際に行ってきた感想記事なので、パワーがあるw
biohacker.jp

Jupyter notebookでMySQL(とMongoDB)の演習をする

東大松尾研のデータサイエンティスト育成講座を以前に紹介しました。
少しずつ進めていると、8章からデータベースのお話に。
ただし、現行のjupyter notebookではプログラムが動かないらしく、初心者が実行環境を設定するのは大変そう。
こちらの記事でも触れられていましたが、解決方法までは載っていなかったので、備忘録として記事にしておきます。

環境

$ sw_vers
>ProductName:	Mac OS X
>ProductVersion:	10.14.1
>BuildVersion:	18B75
$ python3 --version
>Python 3.7.0

$ jupyter notebook --version
>5.6.0


特にAnacondaとかは入れてないです。
jupyter notebookもpipして入れています。

1. MySQL, PyMySQLのインストール

ターミナルで、次のように打ち込む。

$ brew install mysql
$ pip3 install PyMySQL


以前にMySQLを中途半端に実行していていて色々なエラーが出たので(恨むぞプロ門...)、クリーンインストールしてしまうのが結局早かった。。。

2. MySQLサーバーの立ち上げ

ターミナルで、次のように打ち込む。

$ sudo mysql.server start


MySQLインストール後の初期設定はこちらの記事を参考にしました。
データベースの安全管理上、権限がないです、とエラーが出る場合が多いので、基本sudo付きで実行します。
色々聞かれるy/n質問は、全てyesで良いと思います。

ここまでやったら、jupyter notebookに戻って進めます。

3. jupyter notebookとMySQLを接続する

ターミナルで実行します。

$ jupyter notebook


自動でjupyter notebookが立ち上がるので、松尾研資料(data science)8章と、こちらの記事を参考にしながら接続。


これで、jupyter notebookを用いてMySQLコードを実行することができます。


以上です。
お読みいただきありがとうございました。

続きを読む

自宅でストレプトマイシン(抗生物質)を作る方法

DIYバイオで何かできないか考えて色々検索していた時に、こんな記事を見ました。

自宅でペニシリン(抗生物質)を作る方法 /バイオハッカー・ジャパン


ペニシリンが作れるなら、他の抗生物質も自作できるんじゃないか?」
そんな安直な考えで、ペニシリンに並んで有名なストレプトマイシンが自作できるかどうか、検討してみました。

 
ストレプトマイシンS.griseusが生産するアミノグリコシド抗生物質で、Waksmanら(1944)によって初めて報告されました*1
S.griseusの属するストレプトマイセス属は、放線菌分離株の90%を占めるグラム陽性細菌で、様々な形状で落ち葉や土壌中に生息しているらしい。
多種多様な放線菌の中でもストレプトマイセス属は頑強で生育しやすく、抗生物質の大部分を生産するとのこと*2
今では培地組成や培養条件を調整することで比較的安定してストレプトマイシンを生産することができるらしく、少し調べてみるとそこまで難しい培養プロセスは必要なさそう*3
だたし、人工的環境に植え継いだ菌種は(抗生物質などの)二次代謝産物の生産能が著しく低下することがあり、これが生産効率のボトルネックっぽい……。


色々調べて、S.griseusの取得、培養、検出、ストレプトマイシン生産までのプロトコルを自力でできるように改変させたものが以下になります。
※ただし、実際には試していないので、条件検討の必要あり。

ストレプトマイシン生産に関する備忘録
  1. 土壌を集める(要場所記載)。3–45cmの深さに掘り、2mmフィルター後、湿度を保ったまま家に持ち帰る。
  2. 100mg/10mLで滅菌生食水に懸濁し、そのうち1mLを滅菌処理し冷却されたSCA培地入りペトリ皿に播種する。
  3. 37˚Cで24–48時間培養し、灰色がかった白っぽいコロニーが出現することを確認する。
  4. グラム染色し、陽性の放線菌(菌糸径0.5–1.0 μm)がいることを確認する(菌糸径2–10 μmは糸状菌であるので、フィルタにかけると良い)*4
  5. 250mL half-strength YEME培地などの液体培地3日から4日培養する。(ここでストレプトマイシンが生産される)。
  6. 1mLとり、6000rpmで10分遠心し(あるいはフィルトレーションにより)、菌体を除去する。
  7. 寒天培地に大腸菌などを播いた後で取得した上清を播き、48–72時間培養後、阻止円を確認する。
  8. 上清を塩基性条件下で活性炭に通し、ストレプトマイシンを吸着させる*5
  9. 酸性条件アルコールでストレプトマイシンを溶出(0.2N 50%メタノールなど)
SCA培地組成 カゼイン, 1g(アミノ酸、ペプチド、ビタミン、微量元素) デンプン, 10g(炭素) 海水, 37g(錯体イオン) 寒天, 15g(固化させるために用いる) 水, 1L (pH = 7.2 +/- 2) YMEM培地組成 酵母抽出物, 3g 麦芽抽出物, 3g 獣肉ペプトン(Bacto peptone), 10g グルコース, 10g スクロース, 170g 水, 1L half-strength YEME培地組成 酵母抽出物, 0.2g 麦芽抽出物, 0.5g グルコース, 0.2g 水, 1L ・培地類やディッシュなどは、いずれもオートクレーブで滅菌状態を保っておく。 ・ストレプトマイシンは10%グリセロールストック中で-20˚C保存可能。


SCA培地は海水を混ぜると代用できるらしい*6(ホンマかいな)
YEME培地が自力だと調達が難しそうですが、Waksmanも初めは肉汁とコーンスティープリカーで培養しているので、工夫は出来そう。
あとは収率との戦い……。

だれか作って(他力本願)


以上、お読みいただきありがとうございました。

*1:Albert Schatz, Elizabeth Bugle, and Selman A. Waksman, Streptomycin, a Substance Exhibiting Antibiotic Activity Against Gram-Positive and Gram-Negative Bacteria, Experimental Biology and Medicine, 55, p.66-69, 1944

*2:木下浩, 「放線菌・糸状菌に生理活性物質を作らせるには」, 生物工学基礎講座-バイオよもやま話- 89巻 p.408–410, 2011
宮道慎二, 「不思議な微生物, 放線菌」, 生物工学基礎講座-バイオよもやま話- 90巻 p.32–36, 2012

*3:US PATENT OFFICE 2515461, 1946
Lekh Ram, Optimization of Medium for the Production of Streptomycin By Streptomyces Griseus, International Journal of Pharmaceutical Science Invention, 3, p.1–8, 2014
武市千代子, 「放線菌の分離と同定」, 跡見学園短期大学紀要, 12, A1 - F16, 1976

*4:その他、メチルレッド陽性、アミラーゼ生産、アルコール発酵陽性などでも確かめられる。

*5:有機物が活性炭に吸着する性質を利用している。脱臭効果もコレ。

*6:Starch Casein Agar (SCA)- Composition, Principle, Preparation and Results (https://microbenotes.com/starch-casein-agar-sca-composition-principle-preparation-and-results/)