[PYTHON] Verwenden Sie den Metabolic Disassembler in Google Colaboratory

Der Metabolic Disassembler ist ein Programm, das das Ausgangsmaterial des Stoffwechsels durch Zersetzung der Struktur von Naturstoffen (Sekundärmetaboliten), deren Biosyntheseweg unbekannt ist, in "Biosyntheseeinheiten" abschätzt. Veröffentlicht im BMC Bioinformatics Magazin am 23. Dezember 2019.

Metabolic disassembler for understanding and predicting the biosynthetic units of natural products https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-3183-9

Es gibt auch ein Kommentarvideo auf Japanisch

Der Code ist in Python geschrieben und befindet sich auf der GitHub-Seite unten. https://github.com/the-metabolic-disassembler/metadisassembler

In diesem Qiita-Artikel möchte ich der in Google Colaboratory auf GitHub veröffentlichten Methode eine kleine Erklärung auf Japanisch hinzufügen.

RDKit-Installation

Es dauert ungefähr 5 Minuten.

import sys
import os
import requests
import subprocess
import shutil
from logging import getLogger, StreamHandler, INFO


logger = getLogger(__name__)
logger.addHandler(StreamHandler())
logger.setLevel(INFO)


def install(
        chunk_size=4096,
        file_name="Miniconda3-4.7.12-Linux-x86_64.sh",
        url_base="https://repo.continuum.io/miniconda/",
        conda_path=os.path.expanduser(os.path.join("~", "miniconda")),
        rdkit_version=None,
        add_python_path=True,
        force=False):
    """install rdkit from miniconda
    ```
    import rdkit_installer
    rdkit_installer.install()
    ```
    """

    python_path = os.path.join(
        conda_path,
        "lib",
        "python{0}.{1}".format(*sys.version_info),
        "site-packages",
    )

    if add_python_path and python_path not in sys.path:
        logger.info("add {} to PYTHONPATH".format(python_path))
        sys.path.append(python_path)

    if os.path.isdir(os.path.join(python_path, "rdkit")):
        logger.info("rdkit is already installed")
        if not force:
            return

        logger.info("force re-install")

    url = url_base + file_name
    python_version = "{0}.{1}.{2}".format(*sys.version_info)

    logger.info("python version: {}".format(python_version))

    if os.path.isdir(conda_path):
        logger.warning("remove current miniconda")
        shutil.rmtree(conda_path)
    elif os.path.isfile(conda_path):
        logger.warning("remove {}".format(conda_path))
        os.remove(conda_path)

    logger.info('fetching installer from {}'.format(url))
    res = requests.get(url, stream=True)
    res.raise_for_status()
    with open(file_name, 'wb') as f:
        for chunk in res.iter_content(chunk_size):
            f.write(chunk)
    logger.info('done')

    logger.info('installing miniconda to {}'.format(conda_path))
    subprocess.check_call(["bash", file_name, "-b", "-p", conda_path])
    logger.info('done')

    logger.info("installing rdkit")
    subprocess.check_call([
        os.path.join(conda_path, "bin", "conda"),
        "install",
        "--yes",
        "-c", "rdkit",
        "python=={}".format(python_version),
        "rdkit" if rdkit_version is None else "rdkit=={}".format(rdkit_version)])
    logger.info("done")

    import rdkit
    logger.info("rdkit-{} installation finished!".format(rdkit.__version__))
install(rdkit_version='2019.09.2.0', force=True)

Installation des Metabolic Disassembler

!pip install metadisassembler

Import verschiedener Bibliotheken

import glob

from IPython.display import Image, display_png
from rdkit.Chem.Draw import IPythonConsole

import metadisassembler as medi

Anwendungsbeispiel 1: Eingabe mit KEGG ID

Nehmen Sie als Beispiel C05557 Isopenicillin N.

# Create an instance and input a query molecule

test1 = medi.MetaDisassembler()
test1.input_query('C05557')
test1.cpds[0].mol

output_7_0.png

Lassen Sie uns diese Eingabeverbindung zerlegen.

Disassemble

# Disassemble the query molecule
# It takes about 30 sec.

test1.disassemble()

Ergebnisausgabe

Wenn mehrere Disassemble-Ergebnisse vorliegen, werden mehrere ausgegeben.

# List output files

sorted(glob.glob('./output/' + test1.name + '/*'))
['./output/C05557/0.png',
 './output/C05557/1.png',
 './output/C05557/10.png',
 './output/C05557/11.png',
 './output/C05557/12.png',
 './output/C05557/2.png',
 './output/C05557/3.png',
 './output/C05557/4.png',
 './output/C05557/5.png',
 './output/C05557/6.png',
 './output/C05557/7.png',
 './output/C05557/8.png',
 './output/C05557/9.png',
 './output/C05557/C05557.mol',
 './output/C05557/result.txt']

Die vielversprechendsten Kandidaten können wie folgt dargestellt werden. Unterschiedliche Farben zeigen unterschiedliche Fragmente an (aus unterschiedlichen Biosyntheseeinheiten).

# Display the first image

display_png(Image('./output/' + test1.name + '/0.png'))

output_10_0.png

Um herauszufinden, von welcher Verbindung das Fragment stammt:

bu_info = test1.output_matched_bu(result_id=0)

Zum Beispiel, um die Ursprungsverbindung des vielversprechendsten Kandidatenfragments zu kennen

n = 0

print('Biosynthetic Unit IDs:')
print(bu_info[n]['bu_id'])

bu_info[n]['mol']
Biosynthetic Unit IDs:
['C00956_01', 'C01251_04']

output_12_1.png

Die obigen C00956 und C01251 sind die KEGG-IDs der abgeleiteten Verbindungen.

C00956_01 → C00956
https://www.genome.jp/dbget-bin/www_bget?cpd:C00956 ★

C01251_04 → C01251
https://www.genome.jp/dbget-bin/www_bget?cpd:C01251

Anwendungsbeispiel 2: Eingabe mit SMILES

Wenn Sie die KEGG-ID der Eingabeverbindung nicht kennen oder wenn die Verbindung nicht in der KEGG-Datenbank vorhanden ist, können Sie sie im SMILES-Format eingeben. Verwenden wir als Beispiel Dihydroclavaminsäure.

# Create an instance and input a query molecule

test2 = medi.MetaDisassembler()
test2.input_query('[H][C@]12CC(=O)N1[C@@H]([C@@H](CCN)O2)C(O)=O')
test2.cpds[0].mol

output_20_0.png

Lassen Sie uns diese Eingabeverbindung zerlegen.

# Disassemble the query molecule
# It takes about 2 min.

test2.disassemble()
# List output files

sorted(glob.glob('./output/' + test2.name + '/*'))
['./output/C8H12N2O4/0.png',
 './output/C8H12N2O4/1.png',
 './output/C8H12N2O4/10.png',
 './output/C8H12N2O4/2.png',
 './output/C8H12N2O4/3.png',
 './output/C8H12N2O4/4.png',
 './output/C8H12N2O4/5.png',
 './output/C8H12N2O4/6.png',
 './output/C8H12N2O4/7.png',
 './output/C8H12N2O4/8.png',
 './output/C8H12N2O4/9.png',
 './output/C8H12N2O4/C8H12N2O4.mol',
 './output/C8H12N2O4/result.txt']

Klicken Sie hier für die vielversprechendsten Kandidaten.

# Display the first image

display_png(Image('./output/' + test2.name + '/0.png'))

output_23_0.png

Die abgeleitete Verbindung ist

bu_info = test2.output_matched_bu(result_id=0)
n = 0

print('Biosynthetic Unit IDs:')
print(bu_info[n]['bu_id'])

bu_info[n]['mol']
Biosynthetic Unit IDs:
['C00062_01', 'C00077']

output_25_1.png

https://www.genome.jp/dbget-bin/www_bget?cpd:C00062 ★
https://www.genome.jp/dbget-bin/www_bget?cpd:C00077

Anwendungsbeispiel 3: Eingabe mit InChI

Wenn Sie die KEGG-ID der Eingabeverbindung nicht kennen oder wenn die Verbindung nicht in der KEGG-Datenbank vorhanden ist, können Sie sie auch im InChI-Format eingeben. Verwenden wir als Beispiel Curcumin diglucoside.

# Create an instance and input a query molecule

test3 = medi.MetaDisassembler()
test3.input_query('InChI=1S/C33H40O16/c1-44-22-11-16(5-9-20(22)46-32-30(42)28(40)26(38)24(14-34)48-32)3-7-18(36)13-19(37)8-4-17-6-10-21(23(12-17)45-2)47-33-31(43)29(41)27(39)25(15-35)49-33/h3-13,24-36,38-43H,14-15H2,1-2H3/b7-3+,8-4+,18-13-/t24-,25-,26-,27-,28+,29+,30-,31-,32-,33-/m1/s1')
test3.cpds[0].mol

output_32_0.png

Lassen Sie uns diese Eingabeverbindung zerlegen.

# Disassemble the query molecule

test3.disassemble()
# List output files

sorted(glob.glob('./output/' + test3.name + '/*'))
['./output/C33H40O16/0.png',
 './output/C33H40O16/1.png',
 './output/C33H40O16/10.png',
 './output/C33H40O16/11.png',
 './output/C33H40O16/12.png',
 './output/C33H40O16/13.png',
 './output/C33H40O16/2.png',
 './output/C33H40O16/3.png',
 './output/C33H40O16/4.png',
 './output/C33H40O16/5.png',
 './output/C33H40O16/6.png',
 './output/C33H40O16/7.png',
 './output/C33H40O16/8.png',
 './output/C33H40O16/9.png',
 './output/C33H40O16/C33H40O16.mol',
 './output/C33H40O16/result.txt']

Klicken Sie hier für die vielversprechendsten Kandidaten.

# Display the first image

display_png(Image('./output/' + test3.name + '/0.png'))

output_35_0.png

Die abgeleitete Verbindung ist

bu_info = test3.output_matched_bu(result_id=0)
n = 0

print('Biosynthetic Unit IDs:')
print(bu_info[n]['bu_id'])

bu_info[n]['mol']
Biosynthetic Unit IDs:
['C00029_04', 'C00031_05']

output_37_1.png

https://www.genome.jp/dbget-bin/www_bget?cpd:C00029
https://www.genome.jp/dbget-bin/www_bget?cpd:C00031 ★

Beispiel 4: Eingabe mit KNApSAcK ID

Sie können auch die ID der KNApSAcK-Datenbank, einer bekannten Sekundärmetabolitendatenbank, zur Eingabe verwenden. Verwenden wir als Beispiel C00011250 Fumigaclavine C.

# Create an instance and input a query molecule

test4 = medi.MetaDisassembler()
test4.input_query('C00011250')
test4.cpds[0].mol

output_47_0.png

Lassen Sie uns diese Eingabeverbindung zerlegen.

# Disassemble the query molecule

test4.disassemble()
# List output files

sorted(glob.glob('./output/' + test4.name + '/*'))
['./output/C00011250/0.png',
 './output/C00011250/1.png',
 './output/C00011250/2.png',
 './output/C00011250/3.png',
 './output/C00011250/4.png',
 './output/C00011250/5.png',
 './output/C00011250/C00011250.mol',
 './output/C00011250/result.txt']

Für diese Verbindung war der dritte Kandidat die richtige Antwort. ""

# Display the "third" image

display_png(Image('./output/' + test4.name + '/2.png'))

output_51_0.png

Die abgeleitete Verbindung ist

bu_info = test4.output_matched_bu(result_id=2)
n = 0

print('Biosynthetic Unit IDs:')
print(bu_info[n]['bu_id'])

bu_info[n]['mol']
Biosynthetic Unit IDs:
['C00078_01', 'C00398']

output_53_1.png

https://www.genome.jp/dbget-bin/www_bget?cpd:C00078 ★
https://www.genome.jp/dbget-bin/www_bget?cpd:C00398

Speichern Sie das Berechnungsergebnis auf dem lokalen Computer

!zip -r /content/result.zip /content/output
from google.colab import files

files.download('/content/result.zip')

Recommended Posts

Verwenden Sie den Metabolic Disassembler in Google Colaboratory
Verwenden Sie music21 in Google Colaboratory
Probieren Sie StyleGAN mit Google Colaboratory aus
Pandas 100 klopft an Google Colaboratory
Ich kann den Darknet-Befehl in Google Colaboratory nicht verwenden!
So verwenden Sie Google Colaboratory
■ [Google Colaboratory] Morphologische Analyse verwenden (janome)
■ [Google Colaboratory] Verwenden Sie die morphologische Analyse (MeCab)
Verwenden Sie ndb.tasklet mit Google App Engine
Führen Sie Keras auf Google Colaboratory TPU aus
Sakura Verwenden von Python im Internet
Google-Labor
So verwenden Sie Google Assistant unter Windows 10
Verwenden Sie den Grove-Sensor mit Raspberry Pi
Verwenden Sie Cartopy mit Google Colaboratory, ohne an Fehlern zu leiden
Verwenden Sie externe Module mit Google App Engine
Verwenden Sie TPU und Keras mit Google Colaboratory
Starten und verwenden Sie das IPython-Notebook im Netzwerk
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Verwenden Sie AppSync am vorderen und hinteren Ende
Verwendung der Google Cloud Translation API
Bis Sie die Google Speech API verwenden können
Laden Sie die von Google Colaboratory erstellte CSV-Datei herunter
[Erklärung zur Implementierung] Verwendung der japanischen Version von BERT in Google Colaboratory (PyTorch)
Verwendung von Django mit Google App Engine / Python
Verwendung des japanischen Spacy-Modells mit Google Colaboratory
Anzeigen von Wettervorhersagen auf M5Stack + Google Cloud Platform
Erstellen einer Umgebung für die Verwendung von CaboCha mit Google Colaboratory
Zusammenfassung der Einrichtung von Google Colaboratory
Verwenden Sie pyvenv unter Windows
Verwenden Sie Ansible unter Windows
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 14) Führen Sie das Programm in Kapitel 4 in Google Colaboratory aus
Verwenden Sie QuTiP unter Windows
So zeichnen Sie einfach die Struktur eines neuronalen Netzwerks in Google Colaboratory mit "convnet-drawer"
Verwenden Sie pip unter Windows
Verwenden Sie den Schlüssel P12 des Dienstkontos mit dev_appserver des GAE SDK
Umfrage zum Einsatz von maschinellem Lernen in realen Diensten
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Verwenden Sie pyOCR, um die Beschreibung auf der Karte in Text umzuwandeln
Zeigen Sie die mit Rails gem'geocoder 'eingegebene Adresse in Google Map an
[Python] Die größten Schwächen und Nachteile von Google Colaboratory [Für Anfänger]
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek