[PYTHON] Erstellen Sie eine Korrespondenztabelle zwischen der EC-Nummer und dem Uniprot-Eintrag aus enzym.dat

Was ist enzym.dat

ENZYME ist eine Datenbankdatei mit Informationen zur Benennung von Enzymen. In der Datei

ID  Identification                         (Begins each entry; 1 per entry)
DE  Description (official name)            (>=1 per entry)
AN  Alternate name(s)                      (>=0 per entry)
CA  Catalytic activity                     (>=1 per entry)
CF  Cofactor(s)                            (>=0 per entry)
CC  Comments                               (>=0 per entry)
PR  Cross-references to PROSITE            (>=0 per entry)
DR  Cross-references to Swiss-Prot         (>=0 per entry)

Informationen wie gespeichert.

enzyme.Inhalt von dat (Teil)

ID   1.1.1.1
DE   Alcohol dehydrogenase.
AN   Aldehyde reductase.
CA   (1) A primary alcohol + NAD(+) = an aldehyde + NADH.
CA   (2) A secondary alcohol + NAD(+) = a ketone + NADH.
CF   Zn(2+) or Fe cation.
CC   -!- Acts on primary or secondary alcohols or hemi-acetals with very broad
CC       specificity; however the enzyme oxidizes methanol much more poorly
CC       than ethanol.
CC   -!- The animal, but not the yeast, enzyme acts also on cyclic secondary
CC       alcohols.
PR   PROSITE; PDOC00058;
PR   PROSITE; PDOC00059;
PR   PROSITE; PDOC00060;
DR   P07327, ADH1A_HUMAN;  P28469, ADH1A_MACMU;  Q5RBP7, ADH1A_PONAB;
DR   P25405, ADH1A_SAAHA;  P25406, ADH1B_SAAHA;  P00327, ADH1E_HORSE;

Mit EC-Nummer (entsprechend der obigen ID), klassifiziert nach der Funktion des Enzyms als Teil der Forschung Da es notwendig war, eine Korrespondenztabelle des Uniprot-Eintrags (entsprechend der obigen DR) für jedes Protein zu erstellen, Ich entschied mich, eine Tabelle zu erstellen, indem ich aus enzym.dat Erklärungen zu ** ID **, ** DR ** und EC-Nummern (entsprechend ** DE ** oben) extrahierte.

Dinge notwendig

-enzyme.dat (erhalten von ftp://ftp.expasy.org/databases/enzyme)

Zu verwendendes Python-Modul

--pandas (wird zum Erstellen von DataFrame verwendet)

Dinge die zu tun sind

Erstellen Sie eine Liste, indem Sie die Zeilen extrahieren, die mit ID, DE und DR beginnen. Erstellen Sie eine Tabelle mit DataFrame und exportieren Sie sie als CSV-Datei.

Was ich getan habe

Datei öffnen

path = "enzyme.dat"
with open(path) as f:
    s = f.readlines() #Durch Zeile getrennt und als Liste gelesen
    s = s[24:] #Schließen Sie den Erklärungsteil des Kopfes aus

ID-Liste erstellen

id_list = []
for i in s:
    if i.startswith("ID  "): #Suchen Sie eine Zeichenfolge, die mit einer ID beginnt
        x = i[5:-1] # "ID   "Holen Sie sich die nachfolgende Zeichenfolge
        id_list.append(x) #Zur Liste hinzufügen
id_list[:10]

['1.1.1.1',
 '1.1.1.2',
 '1.1.1.3',
 '1.1.1.4',
 '1.1.1.5',
 '1.1.1.6',
 '1.1.1.7',
 '1.1.1.8',
 '1.1.1.9',
 '1.1.1.10']

Beschreibungsliste erstellen

Da DE und DR zwei oder mehr Zeilen haben können, fügen Sie Elemente hinzu, während Sie nach einer Zeile auf den Inhalt verweisen. Fügen Sie weitere Zeichenfolgen hinzu, bis der Zeilenanfang nicht mehr "DE" ist. Wenn die letzte Zeile von DE erreicht ist, fügen Sie sie der Liste hinzu.

description_list = []
name = ""
for i in range(len(s)):
    if s[i].startswith("DE   "):
        x = s[i][5:-1]
        name += x
        if not s[i + 1].startswith("DE   "):
            description_list.append(name)
            name = ""
description_list[:10]

['Alcohol dehydrogenase.',
 'Alcohol dehydrogenase (NADP(+)).',
 'Homoserine dehydrogenase.',
 '(R,R)-butanediol dehydrogenase.',
 'Transferred entry: 1.1.1.303 and 1.1.1.304.',
 'Glycerol dehydrogenase.',
 'Propanediol-phosphate dehydrogenase.',
 'Glycerol-3-phosphate dehydrogenase (NAD(+)).',
 'D-xylulose reductase.',
 'L-xylulose reductase.']

Erstellen einer Beitrittsspalte

accession_list = []
name = ""
for i in range(len(s)):
    if s[i].startswith("DR   "):
        x = s[i][5:-1]
        name += x
        if not s[i + 1].startswith("DR   "):
            accession_list.append(name)
            name = ""

accession_list[1]

'Q6AZW2, A1A1A_DANRE;  Q568L5, A1A1B_DANRE;  Q24857, ADH3_ENTHI ;Q04894, ADH6_YEAST ;  P25377, ADH7_YEAST ;  O57380, ADH8_PELPE ;Q9F282, ADHA_THEET ;  P0CH36, ADHC1_MYCS2;  P0CH37, ADHC2_MYCS2;P0A4X1, ADHC_MYCBO ;  P9WQC4, ADHC_MYCTO ;  P9WQC5, ADHC_MYCTU ;P27250, AHR_ECOLI  ;  Q3ZCJ2, AK1A1_BOVIN;  Q5ZK84, AK1A1_CHICK;O70473, AK1A1_CRIGR;  P14550, AK1A1_HUMAN;  Q9JII6, AK1A1_MOUSE;P50578, AK1A1_PIG  ;  Q5R5D5, AK1A1_PONAB;  P51635, AK1A1_RAT  ;Q6GMC7, AK1A1_XENLA;  Q28FD1, AK1A1_XENTR;  Q9UUN9, ALD2_SPOSA ;P27800, ALDX_SPOSA ;  P75691, YAHK_ECOLI ;'

Danach sollte ich in der Lage sein, mithilfe dieser drei Listen einen DataFrame zu erstellen. Vergleichen der Anzahl der Elemente in der erstellten Liste

len(id_list), len(description_list), len(accession_list)

(7876, 7876, 5001)

Nur accession_list stimmt nicht überein

Warum stimmt die Nummer nicht mit accession_list überein?

Wenn Sie die Datendatei sorgfältig prüfen

//
ID   1.14.13.42
DE   Deleted entry.
//
ID   1.14.13.43
DE   Questin monooxygenase.
AN   Questin oxygenase.
CA   Questin + NADPH + O(2) = demethylsulochrin + NADP(+).
CC   -!- The enzyme cleaves the anthraquinone ring of questin to form a
CC       benzophenone.
CC   -!- Involved in the biosynthesis of the seco-anthraquinone (+)-geodin.
//

Es gibt einige IDs ohne DR. Deshalb

# PR, CC, DE, CA,Verwenden Sie CF, um Enzyme ohne DR zu finden
for name in ("PR", "CC", "DE", "CA", "CF"):
    print("start", name)
    no_dr_enzyme = []
    for i in range(len(s)):
        if s[i].startswith(f"{name}   "):
            if s[i + 1].startswith("//"):
                no_dr_enzyme.append(i)
    x = 1
    for i in no_dr_enzyme:
        s.insert(i + x, "DR   none ;\n")
        x += 1

Fügen Sie der ID ohne DR die Zeile "DR none" hinzu.

Wenn Sie accession_list erneut erstellen und die Anzahl der Elemente vergleichen

len(id_list), len(description_list), len(accession_list)
(7876, 7876, 7876)

Nachdem die Zahlen vollständig sind, können Sie einen DataFrame erstellen.

Erstellen Sie einen DataFrame und exportieren Sie ihn in eine CSV-Datei

import pandas as pd

df = pd.DataFrame(
    {"ID": id_list, "Description": description_list, "Accession": accession_list}
)

#Als CSV-Datei exportieren
df.to_csv("enzyme.csv", index=False)

Skript abgeschlossen (make_enzyme_table.py)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# make_enzyme_table.py
#

import pandas as pd

def main():
    #Datei lesen
    path = "enzyme.dat"

    with open(path) as f:
        s = f.readlines()
        s = s[24:]
        print(s[:10])

    #Erstellung der ID-Spalte
    id_list = []
    for i in s:
        if i.startswith("ID  "):
            x = i[5:-1]
            id_list.append(x)

    #Beschreibungsspalte erstellen
    description_list = []
    name = ""
    for i in range(len(s)):
        if s[i].startswith("DE   "):
            x = s[i][5:-1]
            name += x
            if not s[i + 1].startswith("DE   "):
                description_list.append(name)
                name = ""

    # PR, CC, DE, CA,Verwenden Sie CF, um Enzyme ohne DR zu finden und zu ergänzen
    for name in ("PR", "CC", "DE", "CA", "CF"):
        print("start", name)
        no_dr_enzyme = []
        for i in range(len(s)):
            if s[i].startswith(f"{name}   "):
                if s[i + 1].startswith("//"):
                    no_dr_enzyme.append(i)
        x = 1
        for i in no_dr_enzyme:
            s.insert(i + x, "DR   none ;\n")
            x += 1

    #Erstellen einer Beitrittsspalte
    accession_list = []
    name = ""
    for i in range(len(s)):
        if s[i].startswith("DR   "):
            x = s[i][5:-1]
            name += x
            if not s[i + 1].startswith("DR   "):
                accession_list.append(name)
                name = ""

    #Erstellen eines DataFrame
    df = pd.DataFrame(
        {"ID": id_list, "Description": description_list, "Accession": accession_list}
    )

    #CSV schreiben
    df.to_csv("enzyme.csv", index=False)

if '__main__' == __name__:
    main()

Komplett

enzyme.Inhalt von csv (Teil)

ID,Description,Accession
1.1.1.1,Alcohol dehydrogenase.,"P07327, ADH1A_HUMAN;  P28469, ADH1A_MACMU;  Q5RBP7, ADH1A_PONAB;P25405, ADH1A_SAAHA;  P25406, ADH1B_SAAHA;  P00327, ADH1E_HORSE;P00326, ADH1G_HUMAN;  O97959, ADH1G_PAPHA;  P00328, ADH1S_HORSE;P80222, ADH1_ALLMI ;  P30350, ADH1_ANAPL ;  P49645, ADH1_APTAU ;P06525, ADH1_ARATH ;  P41747, ADH1_ASPFN ;  Q17334, ADH1_CAEEL ;P43067, ADH1_CANAX ;  P85440, ADH1_CATRO ;  P14219, ADH1_CENAM ;P48814, ADH1_CERCA ;  Q70UN9, ADH1_CERCO ;  P23991, ADH1_CHICK ;P86883, ADH1_COLLI ;  P19631, ADH1_COTJA ;  P23236, ADH1_DROHY ;P48586, ADH1_DROMN ;  P09370, ADH1_DROMO ;  P22246, ADH1_DROMT ;P07161, ADH1_DROMU ;  P12854, ADH1_DRONA ;  P08843, ADH1_EMENI ;P26325, ADH1_GADMC ;  Q9Z2M2, ADH1_GEOAT ;  Q64413, ADH1_GEOBU ;Q64415, ADH1_GEOKN ;  P12311, ADH1_GEOSE ;  P05336, ADH1_HORVU ;P20369, ADH1_KLULA ;  Q07288, ADH1_KLUMA ;  P00333, ADH1_MAIZE ;P86885, ADH1_MESAU ;  P00329, ADH1_MOUSE ;  P80512, ADH1_NAJNA ;Q9P6C8, ADH1_NEUCR ;  Q75ZX4, ADH1_ORYSI ;  Q2R8Z5, ADH1_ORYSJ ;P12886, ADH1_PEA   ;  P22797, ADH1_PELPE ;  P41680, ADH1_PERMA ;P25141, ADH1_PETHY ;  O00097, ADH1_PICST ;  Q03505, ADH1_RABIT ;P06757, ADH1_RAT   ;  P14673, ADH1_SOLTU ;  P80338, ADH1_STRCA ;P13603, ADH1_TRIRP ;  P00330, ADH1_YEAST ;  Q07264, ADH1_ZEALU ;P20368, ADH1_ZYMMO ;  O45687, ADH2_CAEEL ;  O94038, ADH2_CANAL ;P48815, ADH2_CERCA ;  Q70UP5, ADH2_CERCO ;  Q70UP6, ADH2_CERRO ;P27581, ADH2_DROAR ;  P25720, ADH2_DROBU ;  P23237, ADH2_DROHY ;P48587, ADH2_DROMN ;  P09369, ADH2_DROMO ;  P07160, ADH2_DROMU ;P24267, ADH2_DROWH ;  P37686, ADH2_ECOLI ;  P54202, ADH2_EMENI ;Q24803, ADH2_ENTHI ;  P42327, ADH2_GEOSE ;  P10847, ADH2_HORVU ;P49383, ADH2_KLULA ;  Q9P4C2, ADH2_KLUMA ;  P04707, ADH2_MAIZE ;Q4R1E8, ADH2_ORYSI ;  Q0ITW7, ADH2_ORYSJ ;  O13309, ADH2_PICST ;P28032, ADH2_SOLLC ;  P14674, ADH2_SOLTU ;  F2Z678, ADH2_YARLI ;P00331, ADH2_YEAST ;  F8DVL8, ADH2_ZYMMA ;  P0DJA2, ADH2_ZYMMO ;P07754, ADH3_EMENI ;  P42328, ADH3_GEOSE ;  P10848, ADH3_HORVU ;P49384, ADH3_KLULA ;  P14675, ADH3_SOLTU ;  P07246, ADH3_YEAST ;P49385, ADH4_KLULA ;  Q09669, ADH4_SCHPO ;  A6ZTT5, ADH4_YEAS7 ;P10127, ADH4_YEAST ;  Q6XQ67, ADH5_SACPS ;  P38113, ADH5_YEAST ;P28332, ADH6_HUMAN ;  P41681, ADH6_PERMA ;  Q5R7Z8, ADH6_PONAB ;Q5XI95, ADH6_RAT   ;  P40394, ADH7_HUMAN ;  Q64437, ADH7_MOUSE ;P41682, ADH7_RAT   ;  P9WQC0, ADHA_MYCTO ;  P9WQC1, ADHA_MYCTU ;O31186, ADHA_RHIME ;  Q7U1B9, ADHB_MYCBO ;  P9WQC6, ADHB_MYCTO ;P9WQC7, ADHB_MYCTU ;  P9WQB8, ADHD_MYCTO ;  P9WQB9, ADHD_MYCTU ;P33744, ADHE_CLOAB ;  P0A9Q8, ADHE_ECO57 ;  P0A9Q7, ADHE_ECOLI ;P81600, ADHH_GADMO ;  P72324, ADHI_RHOS4 ;  Q9SK86, ADHL1_ARATH;Q9SK87, ADHL2_ARATH;  A1L4Y2, ADHL3_ARATH;  Q8VZ49, ADHL4_ARATH;Q0V7W6, ADHL5_ARATH;  Q8LEB2, ADHL6_ARATH;  Q9FH04, ADHL7_ARATH;P81601, ADHL_GADMO ;  P39451, ADHP_ECOLI ;  O46649, ADHP_RABIT ;O46650, ADHQ_RABIT ;  Q96533, ADHX_ARATH ;  Q3ZC42, ADHX_BOVIN ;Q17335, ADHX_CAEEL ;  Q54TC2, ADHX_DICDI ;  P46415, ADHX_DROME ;P19854, ADHX_HORSE ;  P11766, ADHX_HUMAN ;  P93629, ADHX_MAIZE ;P28474, ADHX_MOUSE ;  P80360, ADHX_MYXGL ;  P81431, ADHX_OCTVU ;A2XAZ3, ADHX_ORYSI ;  Q0DWH1, ADHX_ORYSJ ;  P80572, ADHX_PEA   ;O19053, ADHX_RABIT ;  P12711, ADHX_RAT   ;  P80467, ADHX_SAAHA ;P86884, ADHX_SCYCA ;  P79896, ADHX_SPAAU ;  Q9NAR7, ADH_BACOL  ;P14940, ADH_CUPNE  ;  Q0KDL6, ADH_CUPNH  ;  Q00669, ADH_DROAD  ;P21518, ADH_DROAF  ;  P25139, ADH_DROAM  ;  Q50L96, ADH_DROAN  ;P48584, ADH_DROBO  ;  P22245, ADH_DRODI  ;  Q9NG42, ADH_DROEQ  ;P28483, ADH_DROER  ;  P48585, ADH_DROFL  ;  P51551, ADH_DROGR  ;Q09009, ADH_DROGU  ;  P51549, ADH_DROHA  ;  P21898, ADH_DROHE  ;Q07588, ADH_DROIM  ;  Q9NG40, ADH_DROIN  ;  Q27404, ADH_DROLA  ;P10807, ADH_DROLE  ;  P07162, ADH_DROMA  ;  Q09010, ADH_DROMD  ;P00334, ADH_DROME  ;  Q00671, ADH_DROMM  ;  P25721, ADH_DROMY  ;Q00672, ADH_DRONI  ;  P07159, ADH_DROOR  ;  P84328, ADH_DROPB  ;P37473, ADH_DROPE  ;  P23361, ADH_DROPI  ;  P23277, ADH_DROPL  ;Q6LCE4, ADH_DROPS  ;  Q9U8S9, ADH_DROPU  ;  Q9GN94, ADH_DROSE  ;Q24641, ADH_DROSI  ;  P23278, ADH_DROSL  ;  Q03384, ADH_DROSU  ;P28484, ADH_DROTE  ;  P51550, ADH_DROTS  ;  B4M8Y0, ADH_DROVI  ;Q05114, ADH_DROWI  ;  P26719, ADH_DROYA  ;  P17648, ADH_FRAAN  ;P48977, ADH_MALDO  ;  P81786, ADH_MORSE  ;  P9WQC2, ADH_MYCTO  ;P9WQC3, ADH_MYCTU  ;  P39462, ADH_SACS2  ;  P25988, ADH_SCAAL  ;Q00670, ADH_SCACA  ;  P00332, ADH_SCHPO  ;  Q2FJ31, ADH_STAA3  ;Q2G0G1, ADH_STAA8  ;  Q2YSX0, ADH_STAAB  ;  Q5HI63, ADH_STAAC  ;Q99W07, ADH_STAAM  ;  Q7A742, ADH_STAAN  ;  Q6GJ63, ADH_STAAR  ;Q6GBM4, ADH_STAAS  ;  Q8NXU1, ADH_STAAW  ;  Q5HRD6, ADH_STAEQ  ;Q8CQ56, ADH_STAES  ;  Q4J781, ADH_SULAC  ;  P50381, ADH_SULSR  ;Q96XE0, ADH_SULTO  ;  P51552, ADH_ZAPTU  ;  Q5AR48, ASQE_EMENI ;A5JYX5, DHS3_CAEEL ;  P32771, FADH_YEAST ;  A7ZIA4, FRMA_ECO24 ;Q8X5J4, FRMA_ECO57 ;  A7ZX04, FRMA_ECOHS ;  A1A835, FRMA_ECOK1 ;Q0TKS7, FRMA_ECOL5 ;  Q8FKG1, FRMA_ECOL6 ;  B1J085, FRMA_ECOLC ;P25437, FRMA_ECOLI ;  B1LIP1, FRMA_ECOSM ;  Q1RFI7, FRMA_ECOUT ;P44557, FRMA_HAEIN ;  P39450, FRMA_PHODP ;  Q3Z550, FRMA_SHISS ;P73138, FRMA_SYNY3 ;  E1ACQ9, NOTN_ASPSM ;  N4WE73, OXI1_COCH4 ;N4WE43, RED2_COCH4 ;  N4WW42, RED3_COCH4 ;  P33010, TERPD_PSESP;O07737, Y1895_MYCTU;"
1.1.1.2,Alcohol dehydrogenase (NADP(+)).,"Q6AZW2, A1A1A_DANRE;  Q568L5, A1A1B_DANRE;  Q24857, ADH3_ENTHI ;Q04894, ADH6_YEAST ;  P25377, ADH7_YEAST ;  O57380, ADH8_PELPE ;Q9F282, ADHA_THEET ;  P0CH36, ADHC1_MYCS2;  P0CH37, ADHC2_MYCS2;P0A4X1, ADHC_MYCBO ;  P9WQC4, ADHC_MYCTO ;  P9WQC5, ADHC_MYCTU ;P27250, AHR_ECOLI  ;  Q3ZCJ2, AK1A1_BOVIN;  Q5ZK84, AK1A1_CHICK;O70473, AK1A1_CRIGR;  P14550, AK1A1_HUMAN;  Q9JII6, AK1A1_MOUSE;P50578, AK1A1_PIG  ;  Q5R5D5, AK1A1_PONAB;  P51635, AK1A1_RAT  ;Q6GMC7, AK1A1_XENLA;  Q28FD1, AK1A1_XENTR;  Q9UUN9, ALD2_SPOSA ;P27800, ALDX_SPOSA ;  P75691, YAHK_ECOLI ;"
1.1.1.3,Homoserine dehydrogenase.,"P00561, AK1H_ECOLI ;  P27725, AK1H_SERMA ;  P00562, AK2H_ECOLI ;Q9SA18, AKH1_ARATH ;  P49079, AKH1_MAIZE ;  O81852, AKH2_ARATH ;P49080, AKH2_MAIZE ;  P57290, AKH_BUCAI  ;  Q8K9U9, AKH_BUCAP  ;Q89AR4, AKH_BUCBP  ;  P37142, AKH_DAUCA  ;  P44505, AKH_HAEIN  ;P19582, DHOM_BACSU ;  P08499, DHOM_CORGL ;  Q5B998, DHOM_EMENI ;Q9ZL20, DHOM_HELPJ ;  P56429, DHOM_HELPY ;  Q9CGD8, DHOM_LACLA ;P52985, DHOM_LACLC ;  P37143, DHOM_METGL ;  Q58997, DHOM_METJA ;P63630, DHOM_MYCBO ;  P46806, DHOM_MYCLE ;  P9WPX0, DHOM_MYCTO ;P9WPX1, DHOM_MYCTU ;  P29365, DHOM_PSEAE ;  O94671, DHOM_SCHPO ;P52986, DHOM_SYNY3 ;  P31116, DHOM_YEAST ;  P37144, DHON_METGL ;"
1.1.1.4,"(R,R)-butanediol dehydrogenase.","P14940, ADH_CUPNE  ;  Q0KDL6, ADH_CUPNH  ;  P39714, BDH1_YEAST ;O34788, BDHA_BACSU ;  Q00796, DHSO_HUMAN ;"
1.1.1.5,Transferred entry: 1.1.1.303 and 1.1.1.304.,none ;
1.1.1.6,Glycerol dehydrogenase.,"A4IP64, ADH1_GEOTN ;  O13702, GLD1_SCHPO ;  P45511, GLDA_CITFR ;P0A9S6, GLDA_ECOL6 ;  P0A9S5, GLDA_ECOLI ;  P32816, GLDA_GEOSE ;P50173, GLDA_PSEPU ;  Q9WYQ4, GLDA_THEMA ;  Q92EU6, GOLD_LISIN ;"
1.1.1.7,Propanediol-phosphate dehydrogenase.,none ;

Anschließend können Sie durch Zusammenstellen des Explosionsergebnisses mit der erstellten Tabelle die EC-Nummernliste der Enzyme abrufen, die in der für die Explosion verwendeten Probe enthalten sind (= Sie können erfassen, welche Rolle das Enzym spielt).

Recommended Posts

Erstellen Sie eine Korrespondenztabelle zwischen der EC-Nummer und dem Uniprot-Eintrag aus enzym.dat
Erstellen Sie eine Datensatztabelle aus den JFL-Übereinstimmungsergebnissen
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Verarbeiten Sie die aus einem bestimmten Kassensystem entnommenen Daten, um eine Übersichtstabelle nach Produkt und Zeit zu erstellen
A1-Notation und 26-stellige Nummer
Unterschied zwischen ps a und ps -a