{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "execution_count": 57, "metadata": { "id": "RzW5oRp1Cqal", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "91a45e84-ad05-48fe-a55b-69536ba7cfba" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Requirement already satisfied: biopython in /usr/local/lib/python3.11/dist-packages (1.85)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from biopython) (2.0.2)\n" ] } ], "source": [ "!pip3 install biopython" ] }, { "cell_type": "code", "source": [ "from google.colab import files\n", "uploaded = files.upload()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 69 }, "id": "mmwEH_DFGiTb", "outputId": "0065f8a2-c71d-44b0-92c9-96ecb8338b5b" }, "execution_count": 58, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", " \n", " \n", " Upload widget is only available when the cell has been executed in the\n", " current browser session. Please rerun this cell to enable.\n", " \n", " " ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "Saving uniprot_sprot.fasta to uniprot_sprot.fasta\n" ] } ] }, { "cell_type": "code", "source": [ "from Bio import SeqIO\n", "import gzip\n", "import pandas as pd\n", "\n", "sequences = []\n", "\n", "with open(\"uniprot_sprot.fasta\", \"r\") as handle:\n", " for record in SeqIO.parse(handle, \"fasta\"):\n", " uniprot_id = record.id.split('|')[1] if '|' in record.id else record.uniprot_id\n", " sequence = str(record.seq)\n", " sequences.append({\"id\": uniprot_id, \"sequence\": sequence})\n", "\n", "df = pd.DataFrame(sequences)\n", "df.to_csv(\"protein_sequences.csv\", index=False)\n", "\n", "df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 204 }, "id": "1uhDA6IgG6dF", "outputId": "dcacc64a-ef3a-4deb-a39a-c95cf043020c" }, "execution_count": 59, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " id sequence\n", "0 Q6GZX4 MAFSAEDVLKEYDRRRRMEALLLSLYYPNDRKLLDYKEWSPPRVQV...\n", "1 Q6GZX3 MSIIGATRLQNDKSDTYSAGPCYAGGCSAFTPRGTCGKDWDLGEQT...\n", "2 Q197F8 MASNTVSAQGGSNRPVRDFSNIQDVAQFLLFDPIWNEQPGSIVPWK...\n", "3 Q197F7 MYQAINPCPQSWYGSPQLEREIVCKMSGAPHYPNYYPVHPNALGGA...\n", "4 Q6GZX2 MARPLLGKTSSVRRRLESLSACSIFFFLRKFCQKMASLVFLNSPVY..." ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idsequence
0Q6GZX4MAFSAEDVLKEYDRRRRMEALLLSLYYPNDRKLLDYKEWSPPRVQV...
1Q6GZX3MSIIGATRLQNDKSDTYSAGPCYAGGCSAFTPRGTCGKDWDLGEQT...
2Q197F8MASNTVSAQGGSNRPVRDFSNIQDVAQFLLFDPIWNEQPGSIVPWK...
3Q197F7MYQAINPCPQSWYGSPQLEREIVCKMSGAPHYPNYYPVHPNALGGA...
4Q6GZX2MARPLLGKTSSVRRRLESLSACSIFFFLRKFCQKMASLVFLNSPVY...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "df" } }, "metadata": {}, "execution_count": 59 } ] }, { "cell_type": "code", "source": [ "!git config --global user.email \"lionelrozario98@gmail.com\"\n", "!git config --global user.name \"midnightoatmeal\"" ], "metadata": { "id": "S7CxyQ-YK7CA" }, "execution_count": 60, "outputs": [] }, { "cell_type": "code", "source": [ "!git clone https://github.com/midnightoatmeal/prot2func.git" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "FoaaMJkLLIfD", "outputId": "8b9375ba-3bb6-4807-a39e-d328772e9b0f" }, "execution_count": 61, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cloning into 'prot2func'...\n", "remote: Enumerating objects: 8, done.\u001b[K\n", "remote: Counting objects: 100% (8/8), done.\u001b[K\n", "remote: Compressing objects: 100% (7/7), done.\u001b[K\n", "remote: Total 8 (delta 0), reused 4 (delta 0), pack-reused 0 (from 0)\u001b[K\n", "Receiving objects: 100% (8/8), done.\n" ] } ] }, { "cell_type": "code", "source": [ "import shutil\n", "shutil.move(\"protein_sequences.csv\", \"/content/prot2func/protein_sequences.csv\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "id": "vItepcLcRI38", "outputId": "1c580446-8caa-4b52-938d-23e95bbbae75" }, "execution_count": 62, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'/content/prot2func/protein_sequences.csv'" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" } }, "metadata": {}, "execution_count": 62 } ] }, { "cell_type": "code", "source": [ "%cd /content/prot2func/\n", "!git add .\n", "!git commit -m \"Add protein sequence data\"\n", "!git push" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "OjuqwNvFRpNh", "outputId": "7321711a-3b07-4bbb-9dd1-5ffd1f2c5bda" }, "execution_count": 63, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "/content/prot2func\n", "warning: adding embedded git repository: prot2func\n", "\u001b[33mhint: You've added another git repository inside your current repository.\u001b[m\n", "\u001b[33mhint: Clones of the outer repository will not contain the contents of\u001b[m\n", "\u001b[33mhint: the embedded repository and will not know how to obtain it.\u001b[m\n", "\u001b[33mhint: If you meant to add a submodule, use:\u001b[m\n", "\u001b[33mhint: \u001b[m\n", "\u001b[33mhint: \tgit submodule add prot2func\u001b[m\n", "\u001b[33mhint: \u001b[m\n", "\u001b[33mhint: If you added this path by mistake, you can remove it from the\u001b[m\n", "\u001b[33mhint: index with:\u001b[m\n", "\u001b[33mhint: \u001b[m\n", "\u001b[33mhint: \tgit rm --cached prot2func\u001b[m\n", "\u001b[33mhint: \u001b[m\n", "\u001b[33mhint: See \"git help submodule\" for more information.\u001b[m\n", "[main 1c36b4d] Add protein sequence data\n", " 6 files changed, 4323928 insertions(+)\n", " create mode 100644 labeled_protein_data.csv\n", " create mode 100644 labeled_protein_data_2.csv\n", " create mode 100644 labled_protein_data.csv\n", " create mode 160000 prot2func\n", " create mode 100644 protein_sequences_with_labels.csv\n", " create mode 100644 uniprot_sprot.fasta\n", "fatal: could not read Username for 'https://github.com': No such device or address\n" ] } ] }, { "cell_type": "code", "source": [ "!curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash\n", "!sudo apt-get install git-lfs\n", "!git lfs install" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6Sg0-YcfUl14", "outputId": "0c800584-fb3c-4dfe-a888-a87b89331047" }, "execution_count": 64, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Detected operating system as Ubuntu/jammy.\n", "Checking for curl...\n", "Detected curl...\n", "Checking for gpg...\n", "Detected gpg...\n", "Detected apt version as 2.4.14\n", "Running apt-get update... done.\n", "Installing apt-transport-https... done.\n", "Installing /etc/apt/sources.list.d/github_git-lfs.list...done.\n", "Importing packagecloud gpg key... Packagecloud gpg key imported to /etc/apt/keyrings/github_git-lfs-archive-keyring.gpg\n", "done.\n", "Running apt-get update... done.\n", "\n", "The repository is setup! You can now install packages.\n", "Reading package lists... Done\n", "Building dependency tree... Done\n", "Reading state information... Done\n", "git-lfs is already the newest version (3.6.1).\n", "0 upgraded, 0 newly installed, 0 to remove and 36 not upgraded.\n", "Updated Git hooks.\n", "Git LFS initialized.\n" ] } ] }, { "cell_type": "code", "source": [ "!git rm --cached protein_sequences.csv" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "WGDbmEikWusb", "outputId": "991eeaa5-c35b-4cb2-efbc-06e4373e8c06" }, "execution_count": 65, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "rm 'protein_sequences.csv'\n" ] } ] }, { "cell_type": "code", "source": [ "!git reset --hard HEAD~2" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "O2yrGUhMXIiC", "outputId": "a10b5ebd-2043-4d01-c870-36f4811ec53e" }, "execution_count": 66, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "warning: unable to rmdir 'prot2func': Directory not empty\n", "HEAD is now at e66ef5c Initial commit\n" ] } ] }, { "cell_type": "code", "source": [ "!git lfs install\n", "!git lfs track \"protein_sequences.csv\"\n", "!git add .gitattributes\n", "!git add protein_sequences.csv\n", "!git commit -m \"Add protein sequences using git lfs\"" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "JQKs61DoXNZJ", "outputId": "f50dabf3-e182-4328-ab61-8b8559ad6013" }, "execution_count": 67, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Updated Git hooks.\n", "Git LFS initialized.\n", "Tracking \"protein_sequences.csv\"\n", "[main 9598725] Add protein sequences using git lfs\n", " 2 files changed, 4 insertions(+)\n", " create mode 100644 .gitattributes\n", " create mode 100644 protein_sequences.csv\n" ] } ] }, { "cell_type": "code", "source": [ "import requests\n", "\n", "def fetch_uniprot_info(uniprot_id):\n", " url = f\"https://rest.uniprot.org/uniprotkb/{uniprot_id}.json\"\n", " response = requests.get(url)\n", " if response.status_code != 200:\n", " return None\n", " data = response.json()\n", "\n", " # try to extract enzyme classification or functional annotation\n", " ec_numbers = []\n", " for comment in data.get('comments', []):\n", " if comment['commentType'] == 'FUNCTION':\n", " text = comment['texts'][0]['value']\n", " return text\n", " return None\n", "" ], "metadata": { "id": "cYPxIAKnXq-p" }, "execution_count": 69, "outputs": [] }, { "cell_type": "code", "source": [ "import requests\n", "url = \"https://rest.uniprot.org/uniprotkb/P00374.json\" # Alcohol dehydrogenase\n", "r = requests.get(url)\n", "data = r.json()\n", "\n", "for comment in data.get('comments', []):\n", " print(comment.get('commentType'))\n", " if comment.get('commentType') == 'CATALYTIC ACTIVITY':\n", " print(comment)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "l-_eowJLrNCt", "outputId": "f3ee903e-5f04-40bd-992f-870091c8fdac" }, "execution_count": 70, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "FUNCTION\n", "CATALYTIC ACTIVITY\n", "{'commentType': 'CATALYTIC ACTIVITY', 'reaction': {'name': '(6S)-5,6,7,8-tetrahydrofolate + NADP(+) = 7,8-dihydrofolate + NADPH + H(+)', 'reactionCrossReferences': [{'database': 'Rhea', 'id': 'RHEA:15009'}, {'database': 'ChEBI', 'id': 'CHEBI:15378'}, {'database': 'ChEBI', 'id': 'CHEBI:57451'}, {'database': 'ChEBI', 'id': 'CHEBI:57453'}, {'database': 'ChEBI', 'id': 'CHEBI:57783'}, {'database': 'ChEBI', 'id': 'CHEBI:58349'}], 'ecNumber': '1.5.1.3', 'evidences': [{'evidenceCode': 'ECO:0000255', 'source': 'PROSITE-ProRule', 'id': 'PRU00660'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '12096917'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '15039552'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '17569517'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '19196009'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '19478082'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '21876184'}, {'evidenceCode': 'ECO:0000269', 'source': 'PubMed', 'id': '9719595'}]}}\n", "BIOPHYSICOCHEMICAL PROPERTIES\n", "PATHWAY\n", "SUBUNIT\n", "SUBCELLULAR LOCATION\n", "ALTERNATIVE PRODUCTS\n", "TISSUE SPECIFICITY\n", "DISEASE\n", "SIMILARITY\n", "WEB RESOURCE\n" ] } ] }, { "cell_type": "code", "source": [ "import requests\n", "\n", "def is_enzyme(uniprot_id):\n", " url = f\"https://rest.uniprot.org/uniprotkb/{uniprot_id}.json\"\n", " try:\n", " r = requests.get(url)\n", " if r.status_code != 200:\n", " return None\n", " data = r.json()\n", "\n", " for comment in data.get('comments', []):\n", " if comment.get('commentType') == 'CATALYTIC ACTIVITY':\n", " if 'reaction' in comment:\n", " ec_number = comment['reaction'].get('ecNumber')\n", " if ec_number:\n", " return 1 # Enzyme\n", " return 0 # Not an enzyme\n", " except Exception as e:\n", " return None" ], "metadata": { "id": "NnPVL4txsQGT" }, "execution_count": 71, "outputs": [] }, { "cell_type": "code", "source": [ "from tqdm import tqdm\n", "import time\n", "\n", "df_sample = df.head(500)\n", "enzyme_labels = []\n", "\n", "for pid in tqdm(df_sample['id']):\n", " label = is_enzyme(pid)\n", " enzyme_labels.append(label)\n", " time.sleep(0.1)\n", "df_sample['is_enzyme'] = enzyme_labels\n", "df_sample.to_csv(\"labeled_protein_data.csv\", index=False)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2eB6rJIK1771", "outputId": "6025dfd1-15ac-46c3-8ce0-9e6f6fa552d9" }, "execution_count": 72, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 500/500 [05:33<00:00, 1.50it/s]\n", ":11: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " df_sample['is_enzyme'] = enzyme_labels\n" ] } ] }, { "cell_type": "code", "source": [ "df = pd.read_csv(\"labeled_protein_data.csv\")\n", "df.head()\n", "df.info()\n", "df.describe()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 467 }, "id": "hMrjxnSG3h20", "outputId": "d66d7a7f-77a2-4bb2-ec7f-05424face810" }, "execution_count": 73, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 500 entries, 0 to 499\n", "Data columns (total 3 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 id 500 non-null object\n", " 1 sequence 500 non-null object\n", " 2 is_enzyme 500 non-null int64 \n", "dtypes: int64(1), object(2)\n", "memory usage: 11.8+ KB\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ " is_enzyme\n", "count 500.000000\n", "mean 0.026000\n", "std 0.159295\n", "min 0.000000\n", "25% 0.000000\n", "50% 0.000000\n", "75% 0.000000\n", "max 1.000000" ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
is_enzyme
count500.000000
mean0.026000
std0.159295
min0.000000
25%0.000000
50%0.000000
75%0.000000
max1.000000
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"df\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"is_enzyme\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 176.7171624854003,\n \"min\": 0.0,\n \"max\": 500.0,\n \"num_unique_values\": 5,\n \"samples\": [\n 0.026,\n 1.0,\n 0.15929453694021686\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 73 } ] }, { "cell_type": "code", "source": [ "df['is_enzyme'].value_counts()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 176 }, "id": "L_LJt4an5kG0", "outputId": "c38b848a-55c3-4707-8459-a4c78f80eb30" }, "execution_count": 74, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "is_enzyme\n", "0 487\n", "1 13\n", "Name: count, dtype: int64" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
is_enzyme
0487
113
\n", "

" ] }, "metadata": {}, "execution_count": 74 } ] }, { "cell_type": "code", "source": [ "df_more = df[500:1500].copy()\n" ], "metadata": { "id": "epewshg95yuI" }, "execution_count": 75, "outputs": [] }, { "cell_type": "code", "source": [ "df = pd.read_csv(\"protein_sequences.csv\")\n", "df_more = df[500:1000].copy()" ], "metadata": { "id": "zACPBrQd5-jh" }, "execution_count": 76, "outputs": [] }, { "cell_type": "code", "source": [ "df_sample = df_more.copy()" ], "metadata": { "id": "JtNRKx57emJM" }, "execution_count": 77, "outputs": [] }, { "cell_type": "code", "source": [ "print(len(df_sample))\n", "print(df_sample['id'].head())" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "qs0HgTYMfWzP", "outputId": "9a9d0306-71a7-4a5c-cd31-e5e0949607db" }, "execution_count": 78, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "500\n", "500 Q9MB95\n", "501 Q06402\n", "502 Q00257\n", "503 Q00379\n", "504 Q7XQ85\n", "Name: id, dtype: object\n" ] } ] }, { "cell_type": "code", "source": [ "from tqdm import tqdm\n", "import time\n", "\n", "df_sample = df_more.head(500).copy()\n", "\n", "# Safety check\n", "if 'id' not in df_sample.columns:\n", " raise ValueError(\"Missing 'id' column!\")\n", "\n", "enzyme_labels = []\n", "\n", "for pid in tqdm(df_sample['id']):\n", " label = is_enzyme(pid)\n", " enzyme_labels.append(label)\n", " time.sleep(0.1)\n", "\n", "df_sample['is_enzyme'] = enzyme_labels\n", "df_sample.to_csv(\"labeled_protein_data_2.csv\", index=False)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "P8u-bz1hfZhD", "outputId": "c550b070-07fe-4a35-a65d-c82e85cf529a" }, "execution_count": 79, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 500/500 [05:34<00:00, 1.50it/s]\n" ] } ] }, { "cell_type": "code", "source": [ "df_more.head(20)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 669 }, "id": "emNmMU4yfc0u", "outputId": "47c01992-edda-4244-caff-902be7c59412" }, "execution_count": 80, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " id sequence\n", "500 Q9MB95 MGSSSATANRFLLSKIATSEGHGENSPYFDGWKAYDRNPFHPTKNP...\n", "501 Q06402 MGLPGKNKGAVLSKIATNNQHGENSEYFDGWKAYDKDPFHLSRNPH...\n", "502 Q00257 MKMLSTKATCNSHGQDSSYFLGWEAYENNPFHHTSNPNGIIQMGLA...\n", "503 Q00379 MGFHQIDERNQALLSKIAIDDGHGENSAYFDGWKAYDNNPFHPENN...\n", "504 Q7XQ85 MAYQGIDLLSTKAAGDDHGENSSYFDGWKAYDTNPFDLRHNRGGVI...\n", "505 P18485 MGFEIAKTNSILSKLATNEEHGENSPYFDGWKAYDSDPFHPLKNPN...\n", "506 A0A0P0WIY3 MVGRMLSSPEPTLSTMAMSAAHGEDSPYFAGWRAYDEDPYDPITNP...\n", "507 Q42881 MKLLSEKATCNSHGQDSSYFLGWQEYEKNPYDEIQNPKGIIQMGLA...\n", "508 Q43309 MVQLSRKATCNSHGQVSSYFLGWEEYEKNPYDVTKNPQGIIQMGLA...\n", "509 Q5W6F9 MGVKLLADGCAGASSSPALSRVATSAAHGEGSPYFAGWKAYDEDPY...\n", "510 P29535 MDLETSEISNYKSSVVLSKLASNEQHGENSPYFDGWKAYDNDPFHL...\n", "511 Q37001 MKQLSTKVTSNGHGQDSSYFLGWEEYEKNPYDEIKNPNGMIQMGLA...\n", "512 A0A0P0UZP7 MIMSGFHIGIYTSICLYIPLPHLEPWIISSHTPKNLNLLDCLLYCS...\n", "513 Q9SAR0 MVAFATEKKQDLNLLSKIASGDGHGENSSYFDGWKAYEENPFHPID...\n", "514 Q9SNN8 MRRSGNGGAAKKKKKRSASAASERRPRADGGMRIVVPLQGVVQGRG...\n", "515 Q9STR4 MGLPLMMERSSNNNNVELSRVAVSDTHGEDSPYFAGWKAYDENPYD...\n", "516 Q9T065 MGLLSKKASCNTHGQDSSYFWGWEEYEKNPYDEIKNPDGIIQMGLA...\n", "517 Q9M2Y8 MKQLSRKVTSNAHGQDSSYFLGWEEYEKNPYDEIKNPNGIIQMGLA...\n", "518 P27486 MGSYKGVYDREILSKIATNDGHGENLEYFDGWKAYDRDPYHSTKNS...\n", "519 P37821 MRMLSRNATFNSHGQDSSYFLGWQEYEKNPYHEVHNTNGIIQMGLA..." ], "text/html": [ "\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idsequence
500Q9MB95MGSSSATANRFLLSKIATSEGHGENSPYFDGWKAYDRNPFHPTKNP...
501Q06402MGLPGKNKGAVLSKIATNNQHGENSEYFDGWKAYDKDPFHLSRNPH...
502Q00257MKMLSTKATCNSHGQDSSYFLGWEAYENNPFHHTSNPNGIIQMGLA...
503Q00379MGFHQIDERNQALLSKIAIDDGHGENSAYFDGWKAYDNNPFHPENN...
504Q7XQ85MAYQGIDLLSTKAAGDDHGENSSYFDGWKAYDTNPFDLRHNRGGVI...
505P18485MGFEIAKTNSILSKLATNEEHGENSPYFDGWKAYDSDPFHPLKNPN...
506A0A0P0WIY3MVGRMLSSPEPTLSTMAMSAAHGEDSPYFAGWRAYDEDPYDPITNP...
507Q42881MKLLSEKATCNSHGQDSSYFLGWQEYEKNPYDEIQNPKGIIQMGLA...
508Q43309MVQLSRKATCNSHGQVSSYFLGWEEYEKNPYDVTKNPQGIIQMGLA...
509Q5W6F9MGVKLLADGCAGASSSPALSRVATSAAHGEGSPYFAGWKAYDEDPY...
510P29535MDLETSEISNYKSSVVLSKLASNEQHGENSPYFDGWKAYDNDPFHL...
511Q37001MKQLSTKVTSNGHGQDSSYFLGWEEYEKNPYDEIKNPNGMIQMGLA...
512A0A0P0UZP7MIMSGFHIGIYTSICLYIPLPHLEPWIISSHTPKNLNLLDCLLYCS...
513Q9SAR0MVAFATEKKQDLNLLSKIASGDGHGENSSYFDGWKAYEENPFHPID...
514Q9SNN8MRRSGNGGAAKKKKKRSASAASERRPRADGGMRIVVPLQGVVQGRG...
515Q9STR4MGLPLMMERSSNNNNVELSRVAVSDTHGEDSPYFAGWKAYDENPYD...
516Q9T065MGLLSKKASCNTHGQDSSYFWGWEEYEKNPYDEIKNPDGIIQMGLA...
517Q9M2Y8MKQLSRKVTSNAHGQDSSYFLGWEEYEKNPYDEIKNPNGIIQMGLA...
518P27486MGSYKGVYDREILSKIATNDGHGENLEYFDGWKAYDRDPYHSTKNS...
519P37821MRMLSRNATFNSHGQDSSYFLGWQEYEKNPYHEVHNTNGIIQMGLA...
\n", "
\n", "
\n", "\n", "
\n", " \n", "\n", " \n", "\n", " \n", "
\n", "\n", "\n", "
\n", " \n", "\n", "\n", "\n", " \n", "
\n", "\n", "
\n", "
\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "variable_name": "df_more", "summary": "{\n \"name\": \"df_more\",\n \"rows\": 500,\n \"fields\": [\n {\n \"column\": \"id\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 500,\n \"samples\": [\n \"C0HMB7\",\n \"Q9WY68\",\n \"Q65123\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"sequence\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 470,\n \"samples\": [\n \"MNLQRFPRYPLTFGPTPIQPLARLSKHLGGKVHLYAKREDCNSGLAFGGNKTRKLEYLIPEALAQGCDTLVSIGGIQSNQTRQVAAVAAHLGMKCVLVQENWVNYSDAVYDRVGNIQMSRILGADVRLVPDGFDIGFRRSWEDALESVRAAGGKPYAIPAGCSDHPLGGLGFVGFAEEVRAQEAELGFKFDYVVVCSVTGSTQAGMVVGFAADGRADRVIGVDASAKPAQTREQITRIARQTAEKVGLERDIMRADVVLDERFAGPEYGLPNEGTLEAIRLCARTEGMLTDPVYEGKSMHGMIEMVRNGEFPEGSRVLYAHLGGVPALNGYSFIFRDG\",\n \"MSHRSDTLPVPSGQRRGRVPRDHSIYTQLLEITLHLQQAMTEHFVQLTSRQGLSLEERRHTEAICEHEALLSRLICRMINLLQSGAASGLELQVPLPSEDSRGDVRYGQRAQLSGQPDPVPQLSDCEAAFVNRDLSIRGIDISVFYQSSFQDYNAYQKDKYHKDKNTLGFINLGTSENKLCMDLMTERLQESDMNCIEDTLLQYPDWRGQPFLREEVARFLTYYCRAPTRLDPENVVVLNGCCSVFCALAMVLCDPGEAFLVPAPFYGGFAFSSRLYAKVELIPVHLESEVTVTNTHPFQLTVDKLEEALLEARLEGKKVRGLVLINPQNPLGDIYSPDSLMKYLEFAKRYNLHVIIDEIYMLSVFDESITFHSILSMKSLPDSNRTHVIWGTSKDFGISGFRFGALYTHNKEVASAVSAFGYLHSISGITQHKLCQLLQNTEWIDKVYLPTNCYRLREAHKYITAELKALEIPFHNRSSGLYVWINLKKYLDPCTFEEERLLYCRFLDNKLLLSRGKTYMCKEPGWFCLIFADELPRLKLAMRRFCDVLQEQKEALIVKQLEDAMRE\",\n \"MNLQRFPRYPLTFGPTPIQPLKRLSEHLGGKVELYAKREDCNSGLAFGGNKTRKLEYLIPDALEQRADTLVSIGGVQSNQTRQVAAVAAHLGMKCVLVQEHWVNYDDPVYDRVGNIQLSRMMGADVRLVPDGFDIGIRRSWEEALESVKQAGGRPYPIPAGCSEHPLGGLGFVGFAEEVRAQEAQFGLRFDYIVVCSVTGSTQAGMIVGFAADGRADRVIGIDASATPARTREQITRIARHTAELVDLGRDITDADVVLDTRYAGPEYGLPNEGTLEAIRLCARLEGVLTDPVYEGKSMHGMIDKVRRGEFEPGSKVLYAHLGGVPALSAYSAIFADG\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {}, "execution_count": 80 } ] }, { "cell_type": "code", "source": [ "df = pd.read_csv(\"protein_sequences.csv\")\n", "print(df.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9m_zNv1vg5PP", "outputId": "fb9d72e1-a164-4f39-be2a-5325306b681f" }, "execution_count": 81, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(573230, 2)\n" ] } ] }, { "cell_type": "code", "source": [ "df_more = df[500:1000].copy()" ], "metadata": { "id": "JDovIYbGhY_C" }, "execution_count": 82, "outputs": [] }, { "cell_type": "code", "source": [ "from tqdm import tqdm\n", "import time\n", "\n", "enzyme_labels = []\n", "\n", "for pid in tqdm(df_more['id']):\n", " label = is_enzyme(pid)\n", " enzyme_labels.append(label)\n", " time.sleep(0.1)\n", "df_more['is_enzyme'] = enzyme_labels\n", "df_more.to_csv(\"labeled_protein_data_2.csv\", index=False)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Dks74rt9hd_W", "outputId": "05809966-54e2-4491-d2e9-5ea9253c3573" }, "execution_count": 83, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 500/500 [05:26<00:00, 1.53it/s]\n" ] } ] }, { "cell_type": "code", "source": [ "df_more['is_enzyme'].value_counts()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 176 }, "id": "1S8X5wPdh7wa", "outputId": "644f6470-2098-4f09-c111-c5fd5658a82e" }, "execution_count": 84, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "is_enzyme\n", "0 360\n", "1 140\n", "Name: count, dtype: int64" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
is_enzyme
0360
1140
\n", "

" ] }, "metadata": {}, "execution_count": 84 } ] }, { "cell_type": "code", "source": [ "df = pd.read_csv(\"protein_sequences.csv\")\n", "df_sample = df.head(500).copy()" ], "metadata": { "id": "PXaaLEpwjgfN" }, "execution_count": 85, "outputs": [] }, { "cell_type": "code", "source": [ "from tqdm import tqdm\n", "import time\n", "\n", "enzyme_labels = []\n", "for pid in tqdm(df_sample['id']):\n", " label = is_enzyme(pid)\n", " enzyme_labels.append(label)\n", " time.sleep(0.1)\n", "df_sample['is_enzyme'] = enzyme_labels\n", "df_sample.to_csv(\"labled_protein_data.csv\", index=False)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "jg8FDPwfj6Ei", "outputId": "4be20a34-3592-4ee8-e6ec-bd9823dbe72a" }, "execution_count": 86, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 500/500 [05:26<00:00, 1.53it/s]\n" ] } ] }, { "cell_type": "code", "source": [ "df1 = pd.read_csv(\"labled_protein_data.csv\")\n", "df2 = pd.read_csv(\"labeled_protein_data_2.csv\")\n", "\n", "print(df1.shape)\n", "print(df2.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "wB7OtHuclKJr", "outputId": "f44a07d6-56b1-4dce-e75c-ab8970ffb54c" }, "execution_count": 87, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(500, 3)\n", "(500, 3)\n" ] } ] }, { "cell_type": "code", "source": [ "df1 = pd.read_csv(\"labeled_protein_data.csv\")\n", "df2 = pd.read_csv(\"labeled_protein_data_2.csv\")\n", "df_combined = pd.concat([df1, df2], ignore_index=True)\n", "df_combined = df_combined.dropna(subset=[\"is_enzyme\"])\n", "df_combined[\"is_enzyme\"] = df_combined[\"is_enzyme\"].astype(int)" ], "metadata": { "id": "LOlQVxjwm4y0" }, "execution_count": 88, "outputs": [] }, { "cell_type": "code", "source": [ "import pandas as pd\n", "import time\n", "from tqdm import tqdm\n", "\n", "# Load full dataset\n", "df = pd.read_csv(\"protein_sequences.csv\")\n", "\n", "# Take the first 500 and copy\n", "df_sample = df.head(500).copy()\n", "\n", "# Reuse your is_enzyme() function\n", "enzyme_labels = []\n", "\n", "for pid in tqdm(df_sample['id']):\n", " label = is_enzyme(pid)\n", " enzyme_labels.append(label)\n", " time.sleep(0.1)\n", "\n", "df_sample['is_enzyme'] = enzyme_labels\n", "\n", "# Save the newly labeled file\n", "df_sample.to_csv(\"labeled_protein_data.csv\", index=False)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VEtggRwqoCVe", "outputId": "48e4541b-dc42-49ab-db7a-96baffd0e41e" }, "execution_count": 89, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "100%|██████████| 500/500 [05:25<00:00, 1.53it/s]\n" ] } ] }, { "cell_type": "code", "source": [ "df1 = pd.read_csv(\"labeled_protein_data.csv\")\n", "df2 = pd.read_csv(\"labeled_protein_data_2.csv\")\n", "df_combined = pd.concat([df1, df2], ignore_index=True)\n", "print(df_combined.shape) # should be (1000, 3)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GZCAwm07oDbM", "outputId": "3ce0fd57-9bb8-4ca1-8dbb-f931224a67ef" }, "execution_count": 90, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(1000, 3)\n" ] } ] }, { "cell_type": "code", "source": [ "from collections import Counter\n", "import pandas as pd\n", "\n", "AMINO_ACIDS = list(\"ACDEFGHIKLMNPQRSTVWY\")\n", "\n", "def aa_composition(seq):\n", " count = Counter(seq)\n", " total = len(seq)\n", " return [count.get(aa, 0) / total for aa in AMINO_ACIDS]\n", "\n", "df_features = df_combined.copy()\n", "df_features[AMINO_ACIDS] = df_features[\"sequence\"].apply(lambda x: pd.Series(aa_composition(x)))\n" ], "metadata": { "id": "GnCD_hWaqDaN" }, "execution_count": 92, "outputs": [] }, { "cell_type": "code", "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "\n", "sns.countplot(x=\"is_enzyme\", data=df_features)\n", "plt.title(\"Enzyme vs Non-Enzyme Count\")\n", "plt.xlabel(\"Is Enzyme\")\n", "plt.ylabel(\"Count\")\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 472 }, "id": "KuaIedLMZt2u", "outputId": "44ec7386-2732-49da-ba25-66de1bf86a11" }, "execution_count": 94, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPVtJREFUeJzt3X1YVHX+//HXcCtKMwgKSKHivRhmi4bTjZWSaOjmipu6lmimrQuW8suKb95bWVrpepeV5U1qpn3LyjYNMbXvSmiY5n1Wlm46YBmMWoLC+f3RxawTYIrg4PH5uK5zXc3n8znnvM+ZwXl17sZiGIYhAAAAk/LydAEAAADVibADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbCDq8bChQtlsVgqnD777DNPl2haGzZscO3nnJycMv2DBg1SYGCgBypzr628afny5R6pqyY5ffq0pk+frri4ONlsNtWqVUstWrRQamqqvvrqK0+XJ0navHmzJkyYoPz8fE+XghrIx9MFAJfbpEmTFBUVVaa9WbNmHqjm6jNhwgR98MEHni6jjIcfflgdOnQo02632z1QTc3x448/qlu3bsrJyVGPHj30t7/9TYGBgdq/f7+WL1+uV155RUVFRZ4uU5s3b9bEiRM1aNAgBQUFeboc1DCEHVx1unfvrvbt23u6jKtSu3bttHr1am3btk1/+tOfPF2Om9tuu019+vTxdBk1zqBBg/TFF1/o7bffVlJSklvf5MmT9eSTT3qoMuDCcRoL+J3vvvtOFotFzz//vF555RU1bdpU/v7+6tChg7Zu3eoad77TH40bN5YkJScnq169ejpz5kyZ9XTt2lUtW7Z0vbZYLEpNTdXKlSsVHR2tgIAA2e127dy5U5L08ssvq1mzZqpVq5buuOMOfffdd2WWmZ2drW7duslms6l27dq6/fbb9e9///u825ubmysfHx9NnDixTN/+/ftlsVg0e/ZsSdKZM2c0ceJENW/eXLVq1VJISIhuvfVWZWRk/OF+laQRI0aobt26mjBhwgWNnzt3rtq0aSN/f39FREQoJSWlzGmKO+64Q9dff7327NmjO++8U7Vr19a1116rqVOnXtA6Lkbpe7Rq1Spdf/318vf3V5s2bbRmzRrXmNLPT0WTJI0fP16+vr46duxYmXUMGzZMQUFBOn36tCSpcePG6tGjhzZs2KD27dsrICBAMTEx2rBhgyTpnXfeUUxMjGrVqqXY2Fh98cUXZZa5b98+9enTR8HBwapVq5bat2+v999//w+3Nzs7Wx9++KGGDBlSJuhIkr+/v55//nm3tvXr1+u2225TnTp1FBQUpHvuuUd79+51GzNo0CDX38i5JkyY4NpHpS5kn0+YMEGjR4+WJEVFRbn2dXl/I7hKGcBVYsGCBYYkY926dcaxY8fcph9//NE17uDBg4Yk48YbbzSaNWtmPPfcc8bUqVONevXqGdddd51RVFRkGIZhOBwO44033nCbZs2aZfj6+hodOnQwDMMwMjIyDEnGBx984FbL0aNHDW9vb2PSpEmuNklG27ZtjcjISOPZZ581nn32WcNmsxkNGzY0Zs+ebURHRxsvvPCCMWbMGMPPz8+488473ZaZmZlp+Pn5GXa73XjhhReM6dOnG23btjX8/PyM7Ozs8+6bzp07G9HR0WXaJ06caHh7exsOh8MwDMP4n//5H8NisRhDhw41Xn31VeOFF14w+vfvbzz77LPnXf4nn3xiSDJWrlxpTJo0yZBk5OTkuPqTk5ONOnXquM0zfvx4Q5IRHx9vzJo1y0hNTTW8vb2NDh06uN4DwzCM22+/3YiIiDAiIyONRx55xJg7d67RuXNnQ5Lxr3/967x1nVvb66+/XuZzcezYMaOkpMQ1VpJxww03GA0aNDAmT55szJgxw2jSpIlRu3Zt12fo5MmTZT4Xr7/+umGz2Yz69esbhmEYBw4cMCQZs2bNcqulsLDQqFu3rvHAAw+42ho1amS0bNnSaNCggTFhwgRj+vTpxrXXXmsEBgYaS5YsMRo2bOj2eWnWrJlRXFzsmn/Xrl2GzWYzoqOjjeeee86YPXu20alTJ8NisRjvvPPOeffN//zP/xiSjE2bNv3hfjSM3z7vPj4+RosWLYypU6caEydONOrVq2fUrVvXOHjwoGtccnKy0ahRozLzl77n57qQfb5jxw6jf//+hiRj+vTprv1+8uTJC6ob5kfYwVWjNOyUN/n7+7vGlYadkJAQ4/jx46729957r9zgUqqkpMTo0aOHERgYaOzevdswDMMoLi42rrvuOqNv375uY1988UXDYrEY3377rauttI5zvxRefvllQ5IRHh5uOJ1OV3t6erohyTW2pKTEaN68uZGQkOD25fzLL78YUVFRxl133XXefVO6np07d7q1R0dHG507d3a9vuGGG4zExMTzLqs854ad/Px8o27dusaf//xnV//vw05eXp7h5+dndO3a1e2Le/bs2a5gUur22283JBmLFy92tRUWFhrh4eFGUlLSBddW0XT06FHXWEmGn5+f8fXXX7vaduzYUW5wOdc//vEPw9vb21i/fr2rzW63G3FxcW7j3nnnHUOS8cknn7jaGjVqZEgyNm/e7Gpbu3atIckICAgwvv/+e1d76ft47vxdunQxYmJijNOnT7vaSkpKjJtvvtlo3rz5effNX/7yF0OS8fPPP593XKl27doZoaGhxk8//eRq27Fjh+Hl5WUMHDjQ1XaxYedC9vm0adPc/iaAc3EaC1edOXPmKCMjw2366KOPyozr27ev6tat63p92223SZK+/fbbcpc7efJkrV69WgsXLlR0dLQkycvLSwMGDND777+vEydOuMYuXbpUN998c5kLpbt06eJ2eD8uLk6SlJSUpGuuuaZMe2kt27dv14EDB/S3v/1NP/30k3788Uf9+OOPOnXqlLp06aJNmzappKSkwn3Su3dv+fj46K233nK17dq1S3v27FHfvn1dbUFBQdq9e7cOHDhQ4bL+iM1m08iRI/X++++Xe8pFktatW6eioiKNHDlSXl7//Wdq6NChslqt+vDDD93GBwYG6r777nO99vPz00033VThe1WecePGlflcZGRkKDg42G1cfHy8mjZt6nrdtm1bWa3WCte1ePFizZ07V1OnTtWdd97pah84cKCys7P1zTffuNqWLl2qyMhI3X777W7LiI6OdrtQuvT979y5sxo2bFimvbSW48ePa/369br33nt14sQJ1+fip59+UkJCgg4cOKAffvihwn3idDolye2zV5GjR49q+/btGjRokNs+a9u2re666y7961//+sNlVORi9znwe4QdXHVuuukmxcfHu03nfgmVOvdLRJIr+Pz8889lxq5Zs0YTJ05Uenp6mWsbBg4cqF9//VXvvvuupN+ug8nJydH999//h+u02WySpMjIyHLbS2spDR/JycmqX7++2zR//nwVFhaqoKCggj0i1atXT126dNGKFStcbW+99ZZ8fHzUu3dvV9ukSZOUn5+vFi1aKCYmRqNHj9aXX35Z4XIr8sgjjygoKKjCa3e+//57SXK7pkn6LcQ0adLE1V/quuuuK3OtR926dd3eK4fD4Tb9+uuvbuNjYmLKfC7i4+Pl5+fnNu7371F56yq1fft2/f3vf1f//v2Vlpbm1te3b1/5+/tr6dKlkqSCggKtXr1aAwYMKLMtlf1cfP311zIMQ2PHji3zuRg/frwkKS8vr0zdpaxWqyS5BfWKVPSeSVLr1q1d4bsyLmafA+XhbiygAt7e3uW2G4bh9vrgwYMaMGCA7rrrLj311FNlxkdHRys2NlZLlizRwIEDtWTJEvn5+enee++94HX+US2lR22mTZumdu3alTv2j55j069fPw0ePFjbt29Xu3bttGLFCnXp0kX16tVzjenUqZO++eYbvffee/r44481f/58TZ8+XfPmzdODDz543uWfq/TozoQJEyo8unMxLuS9atCggVvfggULNGjQoGpZl/Rb4EhKSlKLFi00f/78MuPr1q2rHj16aOnSpRo3bpzefvttFRYWuh2h+qN1Xujn4tFHH1VCQkK5Y8/3yIVWrVpJknbu3Ok6slkVfh/mShUXF5fbfqH7HKgIYQe4BL/++qt69+6toKAgvfnmm26nXM41cOBApaWl6ejRo1q2bJkSExPdTpFdqtJD/FarVfHx8ZVaRq9evfTQQw+5TmV99dVXSk9PLzMuODhYgwcP1uDBg3Xy5El16tRJEyZMuKiwI0kjR47UjBkzNHHixDLPRWnUqJGk346CNWnSxNVeVFSkgwcPVmobf3/HWJs2bS56GReqpKREAwYMUH5+vtatW6fatWuXO27gwIG65557tHXrVi1dulQ33nhjldZVuu98fX0rtc969uypKVOmaMmSJX8Yds59z35v3759qlevnurUqSPpt6BX3sP/fn/E7mJUFKAAidNYwCX5+9//rq+++krvvvvuecNL//79ZbFY9Mgjj+jbb78t9//eL0VsbKyaNm2q559/XidPnizTX94tzr8XFBSkhIQErVixQsuXL5efn5969erlNuann35yex0YGKhmzZqpsLDwomsuPbrz3nvvafv27W59paePZs6c6fZ/76+99poKCgqUmJh40ev7/emp3x/pqUoTJ07U2rVr9eabb5b7AMtS3bt3V7169fTcc89p48aNVf65CA0N1R133KGXX35ZR48eLdP/R58Lu92ubt26af78+Vq1alWZ/qKiIj366KOSfjty1q5dOy1atMgt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64MHD2r79u0KDg5Ww4YNPVgZagJuPcdVZfbs2Zo2bZocDofatWunmTNnKi4uztNlAbhEGzZs0J133lmmPTk5WQsXLrz8BaFGIewAAABT45odAABgaoQdAABgaoQdAABgaoQdAABgaoQdAABgaoQdAABgaoQdAABgaoQdAABgaoQdANVi0KBB6tWrV6Xm/e6772SxWMqdPvvss6otFIDp8dtYAGqsdevWqU2bNm5tISEhHqoGwJWKIzsALou3335bMTExCggIUEhIiOLj43Xq1KnzzhMSEqLw8HC3ydfXV5I0YcIEtWvXTm+88YYaN24sm82mfv366cSJE5IqPjp0xx136NSpU7JarXr77bfd1rdq1SrVqVNHJ06ccM2/YsUK3XbbbQoICFCHDh301VdfaevWrWrfvr0CAwPVvXt3HTt2zG058+fPV+vWrVWrVi21atVKc+fOrcI9CeBiEXYAVLujR4+qf//+euCBB7R3715t2LBBvXv31qX+NN8333yjVatWafXq1Vq9erU2btyoZ599VpIUGRmpo0ePuqYvvvhCISEh6tSpk+rUqaN+/fppwYIFbstbsGCB+vTpo2uuucbVNn78eI0ZM0bbtm2Tj4+P/va3v+mxxx7TP//5T3366af6+uuvNW7cONf4pUuXaty4cXr66ae1d+9ePfPMMxo7dqwWLVp0SdsK4BIYAFANkpOTjXvuuccwDMPIyckxJBnffffdBc178OBBQ5IREBBg1KlTx20qNX78eKN27dqG0+l0tY0ePdqIi4srs7xff/3ViIuLM3r06GEUFxcbhmEY2dnZhre3t3HkyBHDMAwjNzfX8PHxMTZs2OBWw/z5813LefPNNw1JRmZmpqttypQpRsuWLV2vmzZtaixbtsxt/ZMnTzbsdvsFbTuAqsc1OwCq3Q033KAuXbooJiZGCQkJ6tq1q/r06aO6deued7633npLrVu3rrC/cePGbkdhGjRooLy8vDLjHnjgAZ04cUIZGRny8vrtgPZNN92kNm3aaNGiRXriiSe0ZMkSNWrUSJ06dXKbt23btq7/DgsLkyTFxMS4tZWu89SpU/rmm280ZMgQDR061DXm7Nmzstls591WANWHsAOg2nl7eysjI0ObN2/Wxx9/rFmzZunJJ59Udna2oqKiKpwvMjJSzZo1q7C/9PqdUhaLRSUlJW5tTz31lNauXastW7a4BSNJevDBBzVnzhw98cQTWrBggQYPHiyLxVLhOkr7ft9Wus6TJ09Kkl599VXFxcWV2QcAPINrdgBcFhaLRbfccosmTpyoL774Qn5+fnr33XerdZ3/+7//q0mTJmnFihVq2rRpmf777rtP33//vWbOnKk9e/YoOTn5ktYXFhamiIgIffvtt2rWrJnbdL5QB6B6cWQHQLXLzs5WZmamunbtqtDQUGVnZ+vYsWPnPUUlST/99JMcDodbW1BQkGrVqvWH69y1a5cGDhyoxx9/XG3atHEtx8/PT8HBwZKkunXrqnfv3ho9erS6du2q6667rpJb+F8TJ07Uww8/LJvNpm7duqmwsFCff/65fv75Z6WlpV3y8gFcPI7sAKh2VqtVmzZt0t13360WLVpozJgxeuGFF9S9e/fzzhcfH68GDRq4TatWrbqgdX7++ef65Zdf9NRTT7nN37t3b7dxQ4YMUVFRkR544IHKbp6bBx98UPPnz9eCBQsUExOj22+/XQsXLuTIDuBBFsO4xHs/AeAK9sYbb2jUqFE6cuSI/Pz8PF0OgGrAaSwAV6VffvlFR48e1bPPPquHHnqIoAOYGKexAFyVpk6dqlatWik8PFzp6emeLgdANeI0FgAAMDWO7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFMj7AAAAFP7/70bb0Up65giAAAAAElFTkSuQmCC\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "df_features[AMINO_ACIDS].hist(figsize=(15, 10), bins=20)\n", "plt.suptitle(\"Amino Acid Composition Distributions\")\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 594 }, "id": "xsEgmPZgaG5D", "outputId": "e45ff4b9-487d-4eff-921b-8c34c9c31121" }, "execution_count": 95, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAABM4AAAORCAYAAAAK9u75AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xt8VNW9//93EnIhQBICJCEFAijKVaAgIV5RQgJGBUELiAqUiqWBqqk3TpGrNpTaSrURrEcJ1kQqFrACDYlB4CjhlmorF/kBJxQtJih8IVwkGZL1+4OTKUMmZCbMZGYyr+fjMQ/ce6/Z81lrZj7ufGbvvQKMMUYAAAAAAAAAbAR6OgAAAAAAAADAG1E4AwAAAAAAAOygcAYAAAAAAADYQeEMAAAAAAAAsIPCGQAAAAAAAGAHhTMAAAAAAADADgpnAAAAAAAAgB0UzgAAAAAAAAA7KJwBAAAAAAAAdlA4AwDAQ4YMGaIhQ4Z4OgyXCAgI0Ny5c+ttN3fuXAUEBLg/oCYkOztbAQEBOnz4cL1tN23apICAAG3atMntcblC586dNWnSJLe/zuHDhxUQEKDs7GzrukmTJqlly5Zuf+0ajn5HAACAd6FwBgCAHa+99poCAgKUmJjo6VDcav369QoICFB8fLyqq6s9HU4tmzZt0ujRoxUXF6eQkBDFxMTonnvu0apVqzwdmke99tprNkUgbzBkyBAFBAQoICBAgYGBioiI0PXXX6+HH35YBQUFLnud9evXe20ByptjAwAADRNgjDGeDgIAAG9z88036+jRozp8+LAOHDiga6+91uWvUVlZKUkKCQlx+b4dNWHCBG3dulWHDx9WQUGBkpOTG7Sf8+fPq1mzZmrWrNkV282dO1fz5s2TI4cfc+bM0fz589WtWzeNHz9eCQkJOn78uNavX69NmzYpJydHDz74YIPi9SVVVVWyWCwKDQ21nq3Xu3dvtW3bttaZZdXV1aqsrFRISIgCAxv399EhQ4bo0KFDyszMlCSdPXtWBw8e1KpVq/S///u/+tGPfqR33nlHwcHB1udUVFQoMDDQZl19pk+frqysLIc+QzWMMaqoqFBwcLCCgoIkXTzj7P3339eZM2cc3s/VxObodwQAAHgX/s8NAMBlSkpKtHXrVq1atUqPPfaYcnJyNGfOHJe/jicLZtLFwsYHH3ygzMxMLVu2TDk5OQ0unIWFhbk0tvfff1/z58/X/fffr9zcXJvCytNPP60NGzbIYrG49DW9VVBQkLXYU5/AwECXvxfOiIyM1EMPPWSzbuHChfr5z3+u1157TZ07d9avf/1r67bQ0FC3xnPhwgVVV1crJCTEo+Miuf47AgAAGgeXagIAcJmcnBy1bt1aaWlpuv/++5WTk1OrTc09k1566SVlZWWpa9euCg8PV0pKir766isZY7RgwQJ16NBBzZs318iRI3XixAmbfVx+j7Oa+1O99957evHFF9WhQweFhYVp6NChOnjwYK0YVq5cqQEDBqh58+Zq27atHnroIf373/92uJ+rV6/W999/rwceeEDjxo3TqlWrdP78+Vrtzp8/r7lz5+q6665TWFiY2rdvr9GjR+vQoUPWNvbu3/TJJ5/oxhtvVFhYmK655hq9/vrrDsf2/PPPKzo6Wm+99Zbds5FSU1N19913W5ePHTumKVOmKDY2VmFhYerbt6+WL19u8xxXvGedO3fW3Xffrfz8fPXr109hYWHq2bOn3UtH//d//1cPPPCAoqOjFR4ersGDB2vdunW12r366qvq1auXwsPD1bp1aw0cOFC5ubnW7Zff46xz587as2ePNm/ebL00suZzVNc9zhz5rNTc8+vf//63Ro0apZYtW6pdu3Z66qmnVFVVVftNclBQUJBeeeUV9ezZU3/4wx906tQp67bL73FmsVg0b948devWTWFhYWrTpo1uueUW66WekyZNUlZWliRZ+15zFt6l7+/ixYt1zTXXKDQ0VHv37rV7j7Ma//u//6vU1FS1aNFC8fHxmj9/vs0ZY3WN6eX7vFJsNesu/4589tlnGjFihCIiItSyZUsNHTpU27Zts2lT8/5/+umnysjIULt27dSiRQvdd999+vbbb23a7tq1S6mpqWrbtq2aN2+uLl266Mc//nEd7wwAAHAEZ5wBAHCZnJwcjR49WiEhIRo/fryWLFminTt36sYbb7TbtrKyUjNmzNCJEye0aNEi/ehHP9Kdd96pTZs26dlnn9XBgwf16quv6qmnntJbb71V7+svXLhQgYGBeuqpp3Tq1CktWrRIEyZM0Pbt261tsrOzNXnyZN14443KzMxUWVmZfv/73+vTTz/VZ599pqioKIf6eccddyguLk7jxo3Tc889pw8//FAPPPCAtU1VVZXuvvtuFRYWaty4cXr88cd1+vRpFRQUaPfu3brmmmvs7vuLL75QSkqK2rVrp7lz5+rChQuaM2eOYmNj643rwIED+vLLL/XjH/9YrVq1qrf9999/ryFDhujgwYOaPn26unTpopUrV2rSpEk6efKkHn/88Vr9vpr37MCBAxo7dqx++tOfauLEiVq2bJkeeOAB5eXladiwYZKksrIy3XTTTTp37px+/vOfq02bNlq+fLnuvfdevf/++7rvvvskSW+88YZ+/vOf6/7779fjjz+u8+fP65///Ke2b99e52Woixcv1owZM9SyZUv98pe/lKQrjqszn5WqqiqlpqYqMTFRL730kj766CP99re/1TXXXKNp06bV+17UJSgoSOPHj9fzzz+vTz75RGlpaXbbzZ07V5mZmfrJT36iQYMGqby8XLt27dLf//53DRs2TI899piOHj2qgoIC/elPf7K7j2XLlun8+fOaOnWqQkNDFR0dXef9+6qqqjR8+HANHjxYixYtUl5enubMmaMLFy5o/vz5TvXRkdgutWfPHt16662KiIjQM888o+DgYL3++usaMmSINm/eXOv+ijNmzFDr1q01Z84cHT58WIsXL9b06dP15z//WdLF4nHNd+65555TVFSUDh8+7Pf3AwQA4KoZAABgtWvXLiPJFBQUGGOMqa6uNh06dDCPP/64TbuSkhIjybRr186cPHnSun7mzJlGkunbt6+xWCzW9ePHjzchISHm/Pnz1nW33367uf32263LH3/8sZFkevToYSoqKqzrf//73xtJ5osvvjDGGFNZWWliYmJM7969zffff29tt3btWiPJzJ49u95+lpWVmWbNmpk33njDuu6mm24yI0eOtGn31ltvGUnmd7/7Xa19VFdXW/9bkpkzZ451edSoUSYsLMz861//sq7bu3evCQoKMvUdfnzwwQdGknn55Zfr7YcxxixevNhIMu+88451XWVlpUlKSjItW7Y05eXlxhjXvGcJCQlGkvnLX/5iXXfq1CnTvn17079/f+u6J554wkgy//M//2Ndd/r0adOlSxfTuXNnU1VVZYwxZuTIkaZXr15X7N+yZcuMJFNSUmJd16tXL5vPTo2az9DHH39sHQdHPysTJ040ksz8+fNt9tm/f38zYMCAK8ZozMXP85X6snr1aiPJ/P73v7euS0hIMBMnTrQu9+3b16SlpV3xddLT0+1+hmre34iICHPs2DG725YtW2ZdV9PfGTNmWNdVV1ebtLQ0ExISYr799ltjTO0xvdI+64rNGPvfkZCQEHPo0CHruqNHj5pWrVqZ2267zbqu5v1PTk62+c49+eSTJigoyPpZrhnfnTt32n19AADQMFyqCQDAJXJychQbG6s77rhD0sXLq8aOHasVK1bYvVztgQceUGRkpHW55iyRhx56yOYm4ImJiaqsrHToUsrJkyfb3P/s1ltvlXTxkjLp4uVYx44d089+9jOb+yalpaWpe/fudi8HvNyKFSsUGBioMWPGWNeNHz9ef/vb3/T//t//s677y1/+orZt22rGjBm19nHpZWiXqqqq0oYNGzRq1Ch16tTJur5Hjx5KTU2tN7by8nJJcuhsM+niTIZxcXEaP368dV1wcLB+/vOf68yZM9q8ebNN+6t9z+Lj461njElSRESEHnnkEX322WcqLS21xjRo0CDdcsst1nYtW7bU1KlTdfjwYe3du1eSFBUVpa+//lo7d+50qK/Oashn5ac//anN8q233mr97F2Nli1bSpJOnz5dZ5uoqCjt2bNHBw4caPDrjBkzRu3atXO4/fTp063/HRAQoOnTp6uyslIfffRRg2OoT1VVlfLz8zVq1Ch17drVur59+/Z68MEH9cknn1i/BzWmTp1q85279dZbVVVVpX/961+SZD1zcO3atX5z/z8AABoDhTMAAP5PVVWVVqxYoTvuuEMlJSU6ePCgDh48qMTERJWVlamwsLDWcy4tDEmyFmQ6duxod/2lRam6XL7P1q1b2zy35g/l66+/vtZzu3fvbt1+Je+8844GDRqk48ePW/vZv39/VVZWauXKldZ2hw4d0vXXX+/UTIDffvutvv/+e3Xr1q3WNnsxXy4iIkLSlQssl/rXv/6lbt261ZpFskePHtbtl7ra9+zaa6+tVTS87rrrJMl6H7J//etfdvt6eUzPPvusWrZsqUGDBqlbt25KT0/Xp59+eoXeOsfZz0pYWFitolPr1q0d+tzWp2b2yisVROfPn6+TJ0/quuuuU58+ffT000/rn//8p1Ov06VLF4fbBgYG2hSupNrvpTt8++23OnfuXJ2fkerqan311Vc26+vLC7fffrvGjBmjefPmqW3btho5cqSWLVumiooKN/UCAAD/QOEMAID/s3HjRn3zzTdasWKFunXrZn386Ec/kiS7kwTUNdthXevNJTcdr8vVPNcRBw4c0M6dO/XJJ5/Y9LPm7Ch7/WxM3bt3l3TxPmnu4I73rKF69Oih/fv3a8WKFbrlllv0l7/8RbfccotbZnF1hKOzdzbE7t27JV0sPNbltttu06FDh/TWW2+pd+/e+u///m/98Ic/1H//9387/DrNmze/6lgvdaUzKxtTfZ/PgIAAvf/++yoqKtL06dP173//Wz/+8Y81YMAAa9ESAAA4j8IZAAD/JycnRzExMVq5cmWtx/jx462zUHpaQkKCJGn//v21tu3fv9+6vS45OTkKDg7WihUravXz8ccf1//8z//oyJEjkqRrrrlG+/fvd+rSr3bt2ql58+Z2L7ezF/PlrrvuOl1//fX64IMPHPqDPyEhQQcOHKh1A/gvv/zSut2VDh48WKuY9v/9f/+fpIuzRNa8pr2+2oupRYsWGjt2rJYtW6YjR44oLS1NL774ot0ZTmvUVcy53NV+VlylqqpKubm5Cg8Pt7l81Z7o6GhNnjxZ7777rr766ivdcMMNNrNROtp3R1RXV9e6DPXy97LmzK6TJ0/atLN3ZqejsbVr107h4eF1fkYCAwNrnQHpqMGDB+vFF1/Url27lJOToz179mjFihUN2hcAAKBwBgCApIszM65atUp333237r///lqP6dOn6/Tp0/rrX//q6VA1cOBAxcTEaOnSpTaXYf3tb3/Tvn376pyxsEZOTo5uvfVWjR07tlY/n376aUnSu+++K+ni/aK+++47/eEPf6i1n7rOxAoKClJqaqrWrFljLcBJ0r59+7RhwwaH+jhv3jwdP35cP/nJT3ThwoVa2/Pz87V27VpJ0l133aXS0lLr7IKSdOHCBb366qtq2bKlbr/9dode01FHjx7V6tWrrcvl5eV6++231a9fP8XFxVlj2rFjh4qKiqztzp49qz/+8Y/q3LmzevbsKUk6fvy4zb5DQkLUs2dPGWOuWKxs0aJFrUKOPVf7WXGFqqoq/fznP9e+ffv085//3Hoprj2Xj0fLli117bXX2sTeokULSbULWQ116WfbGKM//OEPCg4O1tChQyVdLD4GBQVpy5YtNs977bXXau3L0diCgoKUkpKiDz74wOaS0LKyMuXm5uqWW2654jjZ8//+3/+r9Z3s16+fJHG5JgAAV8HxG5YAANCE/fWvf9Xp06d177332t0+ePBgtWvXTjk5ORo7dmwjR2crODhYv/71rzV58mTdfvvtGj9+vMrKyvT73/9enTt31pNPPlnnc7dv366DBw/a3BD9Uj/4wQ/0wx/+UDk5OXr22Wf1yCOP6O2331ZGRoZ27NihW2+9VWfPntVHH32kn/3sZxo5cqTd/cybN095eXm69dZb9bOf/cxayOrVq5dD96waO3asvvjiC7344ov67LPPNH78eCUkJOj48ePKy8tTYWGhcnNzJV28afrrr7+uSZMmqbi4WJ07d9b777+vTz/9VIsXL3Z4kgFHXXfddZoyZYp27typ2NhYvfXWWyorK9OyZcusbZ577jm9++67GjFihH7+858rOjpay5cvV0lJif7yl79Y78eWkpKiuLg43XzzzYqNjdW+ffv0hz/8QWlpaVeMe8CAAVqyZIleeOEFXXvttYqJidGdd95Zq93VfFYa4tSpU3rnnXckSefOndPBgwe1atUqHTp0SOPGjdOCBQuu+PyePXtqyJAhGjBggKKjo7Vr1y69//77Np/XAQMGSJJ+/vOfKzU1VUFBQRo3blyD4g0LC1NeXp4mTpyoxMRE/e1vf9O6dev0X//1X9Z7vUVGRuqBBx7Qq6++qoCAAF1zzTVau3atjh07Vmt/zsT2wgsvqKCgQLfccot+9rOfqVmzZnr99ddVUVGhRYsWOd2X5cuX67XXXtN9992na665RqdPn9Ybb7yhiIgI3XXXXU7vDwAA/B+PzecJAIAXueeee0xYWJg5e/ZsnW0mTZpkgoODzXfffWdKSkqMJPOb3/zGps3HH39sJJmVK1farF+2bJmRZHbu3Gldd/vtt5vbb7+93ufWvNayZcts1v/5z382/fv3N6GhoSY6OtpMmDDBfP3111fs54wZM4wkc+jQoTrbzJ0710gy//jHP4wxxpw7d8788pe/NF26dDHBwcEmLi7O3H///Tb7kGTmzJljs5/NmzebAQMGmJCQENO1a1ezdOlSM2fOHOPM4UdhYaEZOXKkiYmJMc2aNTPt2rUz99xzj/nggw9s2pWVlZnJkyebtm3bmpCQENOnT59a4+WK9ywhIcGkpaWZDRs2mBtuuMGEhoaa7t2713quMcYcOnTI3H///SYqKsqEhYWZQYMGmbVr19q0ef31181tt91m2rRpY0JDQ80111xjnn76aXPq1KlacZSUlFjXlZaWmrS0NNOqVSsjyfo5qunL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d4/jN2/ePP93HEGLfOa9YMhjddLT040ePXo02qZHjx5Gly5dfPJ+LUXugr+Q0xoWTLnLk4aOz377298akozVq1eb9t6GQZ5qijfj84tf/MK46667jPj4eOO2224zbDabsX79+gD0OrSRz/zPl3kyOzvbSEhIoHjZDOTf+qIMwzB8PYsN8Ma6des0ZcoU7dixQ/3799f169e1d+9e5eXl6dq1azp16pTuuOOOQHcTABp16dIlJScna+zYsdq0aVOD7caOHav/+Z//UXV1tRISEvzXQQDwgqfjswMHDmjGjBmqrq7W6dOn1aVLl0B3EwCapbS0VKNHj5YkDRkyRA899JBGjBihRx55RLGxsQHuHYJdSN8cAOHl27es7d69u95++22KZgBCwuXLlyWpyWJY3frLly9TOAMQ9L59fNajRw/993//N0UzACFl5MiRKi8vV2FhobZt26by8nItXbpUt99+u/7whz/oiSeeCHQXEcQonCFoFBUV6Z577lGbNm2Ulpame++9V9HRIX3/CgAR5NaCWGMuX76sqKgoderUyR/dAoBWqTs+u3Tpkv74xz9q9+7dslgsge4WAHjt/vvv17vvvqsbN27o73//uzZu3Kjly5frX/7lX3T48GH17t070F1EkKJwhqAxZMiQ8L0LB4Cwl5SUpPT0dH388ceNtvv444/VpUsXxcXF+alnANBytx6fjRs3TsOGDdMPf/hDnTx5Uh06dAhw7wDAe3Fxcbr//vt1//3365577tGUKVO0YcMGzZs3L9BdQ5BiOg8AAD7y+OOPq7KyUnv27PG4/n//93/16aef6l//9V/93DMAaL2YmBgVFhbqiy++0G9/+9tAdwcAWq3uxMDZs2cD3BMEMwpnAAD4yPPPP6927drpxz/+sc6fP++27sKFC/qP//gPJSYmKj8/P0A9BIDWGT58uIYMGaIVK1bo+vXrge4OADTLBx98IE/3Rdy6dask6d577/V3lxBC+KkmAAA+ctddd+mtt97SU089pb59+2rq1KnKyMjQp59+qjfeeEP/3//3/2n9+vXKyMgIdFcBoMV+9rOf6V//9V+1bt06/cd//EeguwMATZo5c6auXbumJ598Uj179tSNGze0b98+/fnPf1aPHj00ZcqUQHcRQYzCGQAAPpSbm6u//e1vKiws1B/+8AedO3dOtbW1io+PV0VFBRee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mJDPggdj1DTGqGmRPEb+ymdSeI0zsQSncIpFCr94/IFjNN8gvtBGfK0XZYTjvYcBAAAAAACAVgrINc4AAAAAAACAYEfhDAAAAAAAAPCAwhkAAAAAAADgAYUzAAAAAAAAwIOwKJwVFRWpR48eio+PV2Zmpg4ePNho+w0bNqhnz56Kj49X3759tXXrVj/11He8ifnYsWPKzc1Vjx49FBUVpRUrVvivoz7mTdyvv/66HnroId1222267bbblJWV1eR3I1h5E/e7776rwYMHKzk5We3bt9eAAQP0X//1X37sLVojEvOZtyI1/3kjUnOlN8ir/hFOOS2cck845Yhw25e93WfqrF+/XlFRURo3bpy5HYwgvs5fhmFo7ty56ty5s9q2bausrCydOnXKzBAa5ev4nn32WUVFRbk9Ro0aZWYIDTIjX7d03zSDr+ObP39+vc+uZ8+eJkbQOF//G+WTfc8IcevXrzfi4uKMP/7xj8axY8eMadOmGcnJyUZVVZXH9nv37jViYmKMpUuXGsePHzfmzJljxMbGGkeOHPFzz1vO25gPHjxoPP/888af/vQnw2q1GsuXL/dvh33E27h/+MMfGkVFRcZHH31knDhxwnj22WeNpKQk4/PPP/dzz1vH27g/+OAD49133zWOHz9unD592lixYoURExNjlJSU+Lnn8FYk5jNvRWr+80ak5kpvkFf9I5xyWjjlnnDKEeG2L3sbT53KykrjjjvuMB566CFj7Nix/ulsmDMjfy1ZssRISkoyNm3aZPz97383nnjiCSMjI8P46quv/BWWixnxTZ482Rg1apRx9uxZ1+PChQv+CsnFjHzd0n3TDGbEN2/ePOO+++5z++z+7//+z+RIPDPj3yhf7HshXzgbMmSIkZeX53peU1NjpKenG4WFhR7b/9u//ZsxZswYt2WZmZnGj3/8Y1P76Uvexnyr7t27B9XBmzdaE7dhGMbNmzeNhIQE48033zSri6ZobdyGYRgDBw405syZY0b34EORmM+8Fan5zxuRmiu9QV71j3DKaeGUe8IpR4TbvtySeG7evGk88MADxh/+8Adj8uTJFM58xNf5q7a21rBarcavfvUr1/qLFy8aFovF+NOf/mRCBI0zIz8Hy/fPjHzti1zjK2bEN2/ePKN///4+7GXL+frfKF/teyH9U80bN26ooqJCWVlZrmXR0dHKyspSeXm5x9eUl5e7tZeknJycBtsHm5bEHA58Efe1a9fkdDqVkpJiVjd9rrVxG4ahsrIynTx5Ug8//LCZXUUrRWI+81ak5j9vRGqu9AZ51T/CKaeFU+4JpxwRbvtyS+NZuHChUlNTNXXqVH90MyKYkb8qKytlt9vd2iQlJSkzM9PvecTM/Lxz506lpqbq3nvv1YwZM3T+/HnfB9AIM/J1MP0bYGZfTp06pfT0dN15552aOHGizpw509rues2Mf6N8te+FdOHsyy+/VE1NjdLS0tyWp6WlyW63e3yN3W73qn2waUnM4cAXcb/44otKT0+vl/SDWUvjvnTpkjp06KC4uDiNGTNGq1at0siRI83uLlohEvOZtyI1/3kjUnOlN8ir/hFOOS2cck845Yhw25dbEs+ePXv0xhtv6PXXX/dHFyOGGfmr7r/BkEfMys+jRo3SW2+9pbKyMv3yl7/Url27NHr0aNXU1Pg+iAaYka+D6d8As/qSmZmpdevWqaSkRKtXr1ZlZaUeeughXb58ubVd9ooZ/0b5at9r0+yWgAmioqKa1W7Dhg2tep8lS5Zo/fr12rlzp+Lj41u1rVCQkJCgw4cP68qVKyorK1NBQYHuvPNODR8+PNBdA8LWE088oR07dqiqqkoJCQke20ycOFEbNmzQ2bNn1bFjRz/3sGmRliu9QV5FJHjnnXf0gx/8QO+++66efPJJt3X9+/fXxx9/rA4dOmjv3r1uOaJbt27q0qWL9u3b5+8uey1c9uXLly/rmWee0euvv65OnToFujuAJkyY4Pr/vn37ql+/fvrOd76jnTt3asSIEQHs2ddOnjyp2267Tf/4xz/qFVEuXbqknj176sKFC6qtrQ1QDwNn9OjRrv/v16+fMjMz1b17d73zzjshNZvVzOPYkC6cderUSTExMaqqqnJbXlVVJavV6vE1VqvVq/bBpiUxB7Nv38norbfeUmlpab3lmZmZLY572bJlWrJkiXbs2KF+/fr5puN+0tLPOzo6WnfddZckacCAATpx4oQKCwtD7qAwkkRiPvNWsOe/iRMn6q9//as2btyoSZMm1Vt/7do1vffeexo1apRpRbPWjFEo50pvkFf9I5xyWrDnHm80FcuwYcMkfT2T6dbCWXV1tY4cOSJJevrpp91yxGeffabPPvvM7Y9mfwi3fdnbeD755BN9+umnevzxx13L6v7gb9OmjU6ePKnvfOc75nY6TJmRv+r+W1VVpc6dO7u1GTBggA973zR/5ec777xTnTp10unTp/1WOGsstsGDB6u8vFzPPfeciouL3db//Oc/15dffqnbb79d0dHuP8oLpn8D/NWX5ORk3XPPPTp9+rTPttkcZhzH+mrfC+mfasbFxWnQoEEqKytzLautrVVZWZlsNpvH19hsNrf2klRaWtpg+2DTkpiD2dNPP+32uOeeezwu79q1a4viXrp0qRYtWqSSkhINHjzY9Hh8zVefd21trRwOhxldhI9EYj7zVrDnvyeeeEIJCQn1DsbqvPfee7p69aomTpxoWh9aOkahniu9QV71j3DKacGee7zRVCzp6enKyMjQnj173F733HPPyTAMjRw5UpWVlW7r6trWFd38Jdz2ZW/j6dmzp44cOaLDhw+7Hk888YQeeeQRHT58WF27dvVn98OKGfkrIyNDVqvVrU11dbUOHDjg9zzir/z8+eef6/z5827FCrM1FltWVpbmzZunP/3pT9q+fbtr/aFDh7RmzRoVFBQoLi7Oq22GwmfXEleuXNEnn3zi189OMuc41mf7XrNvIxCk1q9fb1gsFmPdunXG8ePHjenTpxvJycmG3W43DMMwnnnmGeOll15ytd+7d6/Rpk0bY9myZcaJEyeMefPmBc2tzpvL25gdDofx0UcfGR999JHRuXNn4/nnnzc++ugj49SpU4EKoUF5eXlGQ19Lb+NesmSJERcXZ/zlL39xu7Xu5cuX/RKLr3gb96uvvmps377d+OSTT4zjx48by5YtM9q0aWO8/vrrgQoBzRSJ+cxbwZ7/Jk+ebLRp08bjLbO///3vGwkJCca1a9dMee86kZorvUFe9Y9wymnBnnu80VQsd955pxEdHe3KVUuWLDGio6ONbt26GStXrjQSExONf/7zn64ckZeXZ0RFRRlffvll0MUSavuyt/F8W7Dc1TAcmJG/lixZYiQnJxvvvfee8fHHHxtjx441MjIyjK+++irk47t8+bLx/PPPG+Xl5UZlZaWxY8cO47vf/a5x9913G9evXw+a2JxOp3HbbbcZycnJxldffWXcvHnTGDhwoHHHHXcY+/btazBfNzVewRKfYbTs36Of/vSnxs6dO43Kykpj7969RlZWltGpUyfj3LlzQR9fc45jfbHvhXzhzDAMY9WqVUa3bt2MuLg4Y8iQ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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "avg_comp = df_features.groupby(\"is_enzyme\")[AMINO_ACIDS].mean().T\n", "avg_comp.plot(kind=\"bar\", figsize=(15, 5))\n", "plt.title(\"Average Amino Acid Composition by Class\")\n", "plt.xlabel(\"Amino Acid\")\n", "plt.ylabel(\"Average Frequency\")\n", "plt.legend([\"Non-Enzyme\", \"Enzyme\"])\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 311 }, "id": "ZQY3l6sfalBe", "outputId": "17bdf5b5-d6a8-44d4-d0e4-a7481e76eb28" }, "execution_count": 96, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAABNoAAAHWCAYAAAChceSWAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAaIZJREFUeJzt3XdcVuX/x/H3zUYRnIAr0TRx722iZmKuyG3mTs2Rmt80rRT3Ks2dWY5SHJmmZqUpqWVa5s4cWWpOxAlOVDi/P3p4/7oDlBsO3ICv5+NxHnlf57rO+Vw3twjvrnOOxTAMQwAAAAAAAABSxMnRBQAAAAAAAACZAUEbAAAAAAAAYAKCNgAAAAAAAMAEBG0AAAAAAACACQjaAAAAAAAAABMQtAEAAAAAAAAmIGgDAAAAAAAATEDQBgAAAAAAAJiAoA0AAAAAAAAwAUEbAAB4Ym3dulUWi0Vbt251dCkpNnLkSFksliT1tVgsGjlyZOoWlMkEBASoS5cuSepbt25d1a1bN1XrSciiRYtksVi0e/fuND93Yk6dOiWLxaJFixY5uhQAANIEQRsAAA4wZ84cWSwWVatWzdGlpFuxsbHKly+fLBaLvv32W0eXk6qqVq0qi8WiDz/80NGlxBMdHa1Ro0apXLly8vLykqenp0qXLq233npL58+fd3R5DnP48GGNHDlSp06dcnQpDrN161a1aNFC/v7+cnNzk6+vr5o1a6bVq1c7ujQAAByGoA0AAAcICwtTQECAdu3apT///NPR5aRL33//vS5cuKCAgACFhYWlyjnq1KmjO3fuqE6dOqly/KQ4fvy4fv311xTP891339WdO3dMrEw6ceKEypcvrzFjxqhkyZKaNGmSZsyYoXr16mn+/PkOWbXlKMeOHdPHH39sfX348GGNGjUqwaDtu+++03fffZeG1aW90NBQ1atXT4cOHVKvXr00d+5cDR48WDdv3lTLli21dOlSR5cIAIBDuDi6AAAAnjQnT57Ujh07tHr1avXq1UthYWEKDQ1N0xri4uJ07949eXh4pOl57bFkyRJVrFhRnTt31ttvv61bt24pa9aspp7DycnJ4e/BkiVL5OvrqylTpqhVq1Y6deqUAgIC7D6Oi4uLXFzM+9HuwYMHatGihS5evKitW7eqdu3aNvvHjRunSZMmmXa+9M7d3T3Jfd3c3FKxEsf74osvNHr0aLVq1UpLly6Vq6urdd/gwYO1ceNG3b9/34EVAgDgOKxoAwAgjYWFhSlHjhxq0qSJWrVqZbOK6f79+8qZM6e6du0ab1x0dLQ8PDz05ptvWttiYmIUGhqqokWLyt3dXQULFtSQIUMUExNjM9Zisahfv34KCwtTqVKl5O7urg0bNkiS3n//fdWsWVO5cuWSp6enKlWqpC+++CLe+e/cuaP+/fsrd+7cypYtm5o3b65z584leL+vc+fOqVu3bvLz85O7u7tKlSqlBQsWJPk9unPnjr788ku1a9dObdq00Z07d7R27dp4/bp06SIvLy+dPn1aTZs2lZeXl/Lnz6/Zs2dLkn777TfVr19fWbNmVaFCheKtsknoHm1169ZV6dKldfjwYdWrV09ZsmRR/vz5NXny5Hjnj4yMVPfu3eXn5ycPDw+VK1dOn376aZLnKUlLly5Vq1at1LRpU/n4+CS6EuiXX35R48aNlSNHDmXNmlVly5bV9OnTrfsTukdbTEyM3njjDeXJk8f6NTt79myS6lq1apUOHDigd955J17IJkne3t4aN26cTdvKlStVqVIleXp6Knfu3HrllVd07tw5mz4p/Zo9vA/ZDz/8oF69eilXrlzy9vZWp06ddO3atXh1zpkzx/qZz5cvn/r27avr16/b9Dl+/Lhatmwpf39/eXh4qECBAmrXrp2ioqKsff59j7ZFixapdevWkqR69erJYrHYfI4SukdbUj4rD+9n9v7772vevHl6+umn5e7uripVqujXX3+NN7fE3L59+5HvTefOnZU7d+4Ew7CGDRuqePHijzz+8OHDlTNnTi1YsMAmZHsoODhYTZs2TXT8wYMH1aVLFxUpUkQeHh7y9/dXt27ddOXKFZt+N27c0MCBAxUQECB3d3f5+vrq+eef1969e619kvK1AwAgLRG0AQCQxsLCwtSiRQu5ubmpffv21ksHJcnV1VUvvfSS1qxZo3v37tmMW7NmjWJiYtSuXTtJ/6xKa968ud5//301a9ZMM2fOVEhIiD744AO1bds23nm///57vfHGG2rbtq2mT59uXTU1ffp0VahQQaNHj9b48ePl4uKi1q1b6+uvv7YZ36VLF82cOVONGzfWpEmT5OnpqSZNmsQ7z8WLF1W9enVt3rxZ/fr10/Tp01W0aFF1795d06ZNS9J7tG7dOt28eVPt2rWTv7+/6tatm+hllbGxsXrhhRdUsGBBTZ48WQEBAerXr58WLVqkRo0aqXLlypo0aZKyZcumTp066eTJk489/7Vr19SoUSOVK1dOU6ZMUWBgoN566y2be8XduXNHdevW1eLFi9WhQwe999578vHxUZcuXWwCsEf55Zdf9Oeff6p9+/Zyc3NTixYtEpznpk2bVKdOHR0+fFgDBgzQlClTVK9ePa1fv/6Rx3/11Vc1bdo0NWzYUBMnTpSrq2uCX7OErFu3TpLUsWPHJPVftGiR2rRpI2dnZ02YMEE9evTQ6tWrVbt27XjBlhlfs379+unIkSMaOXKkOnXqpLCwMIWEhMgwDGufkSNHqm/fvsqXL5+mTJmili1b6qOPPlLDhg2tIdO9e/cUHBysn3/+Wa+//rpmz56tnj176sSJE/HqfqhOnTrq37+/JOntt9/W4sWLtXjxYpUoUSLB/vZ+VpYuXar33ntPvXr10tixY3Xq1Cm1aNEiyavEHvfedOzYUVeuXNHGjRttxkVEROj777/XK6+8kuixjx8/rqNHjyokJETZsmVLUj3/tWnTJp04cUJdu3bVzJkz1a5dOy1fvlyNGze2+fq99tpr+vDDD9WyZUvNmTNHb775pjw9PXXkyBFJyfvaAQCQ6gwAAJBmdu/ebUgyNm3aZBiGYcTFxRkFChQwBgwYYO2zceNGQ5Lx1Vdf2Yxt3LixUaRIEevrxYsXG05OTsaPP/5o02/u3LmGJOOnn36ytkkynJycjN9//z1eTbdv37Z5fe/ePaN06dJG/fr1rW179uwxJBkDBw606dulSxdDkhEaGmpt6969u5E3b17j8uXLNn3btWtn+Pj4xDtfQpo2bWrUqlXL+nrevHmGi4uLERkZadOvc+fOhiRj/Pjx1rZr164Znp6ehsViMZYvX25tP3r0aLxat2zZYkgytmzZYm0LCgoyJBmfffaZtS0mJsbw9/c3WrZsaW2bNm2aIclYsmSJte3evXtGjRo1DC8vLyM6Ovqx8+zXr59RsGBBIy4uzjAMw/juu+8MSca+ffusfR48eGAULlzYKFSokHHt2jWb8Q/HGYZhhIaGGv/+0W7//v2GJKNPnz42Y15++eV470NCKlSoYPj4+Dx2Dobxz7x9fX2N0qVLG3fu3LG2r1+/3pBkjBgxwtqW0q/ZwoULDUlGpUqVjHv37lnbJ0+ebEgy1q5daxiGYURGRhpubm5Gw4YNjdjYWGu/WbNmGZKMBQsWGIZhGPv27TMkGStXrnzkHAsVKmR07tzZ+nrlypXxPjsPBQUFGUFBQdbXSf2snDx50pBk5MqVy7h69aq179q1axP8nvBfSX1vYmNjjQIFChht27a1GT916lTDYrEYJ06cSPQcD2v54IMPHlnLQw/ntHDhQmtbQt8Dli1bZkgyfvjhB2ubj4+P0bdv30SPndSvHQAAaYkVbQAApKGwsDD5+fmpXr16kv65pLNt27Zavny5YmNjJUn169dX7ty5tWLFCuu4a9euadOmTTYr1VauXKkSJUooMDBQly9ftm7169eXJG3ZssXm3EFBQSpZsmS8mjw9PW3OExUVpWeffdbm8qyHl5n26dPHZuzrr79u89owDK1atUrNmjWTYRg2dQUHBysqKsrmuAl5uNKmffv21raWLVvKYrHo888/T3DMq6++av1z9uzZVbx4cWXNmlVt2rSxthcvXlzZs2fXiRMnHnl+SfLy8rJZ1ePm5qaqVavajP3mm2/k7+9vU6erq6v69++vmzdvatu2bY88x4MHD7RixQq1bdvWesln/fr15evra7Oqbd++fTp58qQGDhyo7Nmz2xzjv5eK/ts333wjSdaVVw8NHDjwkXU9FB0dneQVS7t371ZkZKT69Oljc8+7Jk2aKDAwMN7qSCnlX7OePXvaXLbYu3dvubi4WOe9efNm3bt3TwMHDpST0///yNujRw95e3tba/Lx8ZEkbdy4Ubdv307SfO1l72elbdu2ypEjh/X1s88+K0lJ+uxKj39vnJyc1KFDB61bt043btyw9gsLC1PNmjVVuHDhRI8dHR0tSclezSbZfs+5e/euLl++rOrVq0uSzfeH7Nmz65dffkn06bZp8bUDAMBeBG0AAKSR2NhYLV++XPXq1dPJkyf1559/6s8//1S1atV08eJFhYeHS/rnpvYtW7bU2rVrrfdaW716te7fv28TtB0/fly///678uTJY7M988wzkv65J9S/JfbL8/r161W9enV5eHgoZ86cypMnjz788EObexz9/fffcnJyineMokWL2ry+dOmSrl+/rnnz5sWr6+F95/5b13+tWLFC9+/fV4UKFazv0dWrV1WtWrUEL6v08PBQnjx5bNp8fHxUoECBeEGUj49Pgvfx+q+ExubIkcNm7N9//61ixYrZ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fvy48fbbbxsFCxY0XF1djWbNmjm6pFQTExNjfP/998bgwYMNb2/vTPFzwrx584xs2bIZL730khEZGenocpLE5fFRHMz07bffqn///urdu7eKFSvm6HJSVf78+XXo0CEVLVo0wf0HDx7MNCsOli1bprffflv16tWLt69+/foaOnSowsLCErzUCemPxWKJd3lPZrj099+uX79uc6+RS5cu2eyPi4vL8PciQeb16quv6urVq3rxxRe1du1ajRgxQufPn9e2bduUL18+R5cHO82ePVtTp07V6tWrtWDBAg0bNkxNmjRR9+7d1bBhw0z3/VeSzp8/r9DQUH366acKDg7W/v37Vbp0aUeXZYoHDx7Iw8PDps3V1VX37993UEWp48KFCypVqlSi+0uXLi0nJ6f0t8rCTitXrtRnn32m5s2b69ChQypbtqwePHigAwcOZKq/m35+fjp58qQKFiyoe/fuae/evRo1apR1/40bN+Tq6urACs0xatQo6y1gniRFixbV22+/rUKFCmnYsGH6+uuvHV2Sae7du6eff/5ZW7ZssV5CWrBgQdWpU0ezZs3K8FdsNGrUSLt27dKsWbMy1O/SBG1pbPv27Zo/f74qVaqkEiVKqGPHjmrXrp2jy0oVjRs31vDhw9WoUaN4P3DduXNHoaGhatq0qYOqM9fBgwc1efLkRPe/8MILmjFjRhpWlDqehABK+ufywi5dusjd3V3SP0uxX3vtNWXNmtWmX0a+11WBAgV06NAhFS9ePMH9Bw8eVIECBdK4KiDphgwZoqtXr+q5555TQECAtm7dmuk+s4+7797169fTppA04O7urvbt26t9+/b6+++/tWjRIvXp00cPHjzQ77//Li8vL0eXaIqoqCiNHz9eM2fOVPny5RUeHp7p7hv0339DpYT/Hc3I/4ZKUu7cuXXq1KlEv++cPHkyU9wL6+zZs6pUqZKkf8JDd3d3vfHGG5nu57/GjRtr6NChmjRpktasWaMsWbLY/N08ePCgnn76aQdWaI527dplis+lPX744QctWLBAq1atkpOTk9q0aaPu3bs7uixT1K9fX7/88osKFy6soKAg9erVS0uXLs00i1kkKTY2NkP+XkLQlsaqV6+u6tWra9q0aVqxYoUWLFigQYMGKS4uTps2bVLBggWVLVs2R5dpinfffVerV6/WM888o379+ll/oT969Khmz56t2NhYvfPOOw6u0hxXr1595I0m/fz8dO3atTSsKHU8LoDKLCug/nsflVdeecVBlaSexo0ba8SIEWrSpEmCQfioUaPUpEkTB1WX+jLbLwhPkv+GT66ursqdO7cGDBhg057Rf4mX9NhVBz4+Phnq/+4m1cOHBhiGkeHvP/dvkydP1qRJk+Tv769ly5bpxRdfdHRJqSKhe5Flxn9Hg4OD9c4771jvXfZvMTEx1v/ZnNHFxsbazM/FxSXTBN//NmbMGLVo0UJBQUHy8vLSp59+ajPvBQsWqGHDhg6sMOWepJ99zp8/r0WLFmnRokX6888/VbNmTc2YMUNt2rSJ9z/OM7Iff/xRefPmVf369VW3bl0FBQUpV65cji7LVJs2bXJ0CcnCwxDSgWPHjmn+/PlavHixrl+/rueff17r1q1zdFmm+Pvvv9W7d29t3LjReoNji8Wi4OBgzZ49W4ULF3ZwheZwdnZWREREojcXzSwPCXhSbrb+JLh48aLKly8vNzc39evXT88884ykf74fzZo1Sw8ePNC+ffsyxZOK/hvMfPXVV6pfv36mWqH4JOH7UOYUExNjvXR0+/btatq0qbp27apGjRplmhvoOzk5ydPTUw0aNJCzs3Oi/fhelDGcPXtWlStXlru7u/r27WvzIKw5c+YoJiZGv/76q5566ilHl5oiTk5OeuGFF6z/kzWz/xsaFRUlLy+veH9Hr169Ki8vr3ihakbypDx19IUXXtDmzZuVO3duderUSd26dUv0Co6M7tatW/rxxx+1detWbdmyRfv379czzzyjoKAga/D2pDz8Ir0haEtHYmNj9dVXX2nBggWZJmh76Nq1a/rzzz9lGIaKFSumHDlyOLokU/33h5D/iomJ0YYNGzJ80IbM5eTJk+rdu7c2bdpkE4Q///zzmjNnTqZ5yirBDJC+9enTR8uXL1fBggXVrVs3dejQQblz53Z0Wabr0qVLklaU8L0o4zh58qT69Omj7777Lt6/o7NmzUr0PsUZCf+GIqNp3ry5unfvrqZNmz7yf2pkRjdu3ND27dut92s7cOCAihUrpkOHDjm6tCcOQRtgAn4IQUZ29epV/fnnn5L+uVlszpw5HVwRgCeJk5OTnnrqKVWoUOGRQVRmWTGDzOfatWs6fvy4JP4dBeA4cXFx+vXXX7VlyxZt2bJF27dv1927d1ns4QAEbQAAAHAYVnoBAGC/uLg47d6923rp6E8//aRbt24pf/78qlevnnUrVKiQo0t94hC0AQAAAAAAZCDe3t66deuW/P39raFa3bp1M8UTcjM6gjYAAAAAAIAM5KOPPlK9evWsDzVD+kHQBgAAAAAAAJggczwvHQAAAAAAAHAwgjYAAAAAAADABARtAAAAAAAAgAkI2gAAADK5unXrauDAgY4u47EWLVqk7NmzP7LPyJEjVb58+TSpBwAAwF4EbQAAAOnIzp075ezsrCZNmph2zNWrV2vMmDGmHe9xgoOD5ezsrF9//dWucW3bttUff/yRSlUBAACkPoI2AACAdGT+/Pl6/fXX9cMPP+j8+fOmHDNnzpzKli2bKcd6nNOnT2vHjh3q16+fFixYYNdYT09P+fr6plJlAAAAqY+gDQAAIJ24efOmVqxYod69e6tJkyZatGiRzf6tW7fKYrFo48aNqlChgjw9PVW/fn1FRkbq22+/VYkSJeTt7a2XX35Zt2/fto7776WjAQEBGj9+vLp166Zs2bLpqaee0rx582zO9dtvv6l+/fry9PRUrly51LNnT928efOxc1i4cKGaNm2q3r17a9myZbpz547N/uvXr6tXr17y8/OTh4eHSpcurfXr10tK+NLRiRMnys/PT9myZVP37t119+7dJLyTAAAAjkHQBgAAkE58/vnnCgwMVPHixfXKK69owYIFMgwjXr+RI0dq1qxZ2rFjh86cOaM2bdpo2rRpWrp0qb7++mt99913mjlz5iPPNWXKFFWuXFn79u1Tnz591Lt3bx07dkySdOvWLQUHBytHjhz69ddftXLlSm3evFn9+vV75DENw9DChQv1yiuvKDAwUEWLFtUXX3xh3R8XF6cXXnhBP/30k5YsWaLDhw9r4sSJcnZ2TvT9GDlypMaPH6/du3crb968mjNnzuPeRgAAAIchaAMAAEgn5s+fr1deeUWS1KhRI0VFRWnbtm3x+o0dO1a1atVShQoV1L17d23btk0ffvihKlSooGeffVatWrXSli1bHnmuxo0bq0+fPipatKjeeust5c6d2zpm6dKlunv3rj777DOVLl1a9evX16xZs7R48WJdvHgx0WNu3rxZt2/fVnBwsCTplVde0fz5823279q1S6tXr9bzzz+vIkWKqGnTpnrhhRcSPN60adPUvXt3de/eXcWLF9fYsWNVsmTJR7+JAAAADkTQBgAAkA4cO3ZMu3btUvv27SVJLi4uatu2rU1Q9VDZsmWtf/bz81OWLFlUpEgRm7bIyMhHnu/fx7BYLPL397eOOXLkiMqVK6esWbNa+9SqVUtxcXHWVW8JWbBggdq2bSsXFxdJUvv27fXTTz/pr7/+kiTt379fBQoU0DPPPPPI2h46cuSIqlWrZtNWo0aNJI0FAABwBII2AACAdGD+/Pl68OCB8uXLJxcXF7m4uOjDDz/UqlWrFBUVZdPX1dXV+meLxWLz+mFbXFzcI8+XnDGPcvXqVX355ZeaM2eOtf78+fPrwYMH1ocieHp6Jvv4AAAAGQFBGwAAgIM9ePBAn332maZMmaL9+/dbtwMHDihfvnxatmxZmtZTokQJHThwQLdu3bK2/fTTT3JyclLx4sUTHBMWFqYCBQrowIEDNnOYMmWKFi1apNjYWJUtW1Znz57VH3/8keQ6fvnlF5u2n3/+OfkTAwAASGUEbQAAAA62fv16Xbt2Td27d1fp0qVttpYtWyZ4+Whq6tChgzw8PNS5c2cdOnRIW7Zs0euvv66OHTvKz88vwTHz589Xq1at4tXfvXt3Xb58WRs2bFBQUJDq1Kmjli1batOmTTp58qS+/fZbbdiwIcFjDhgwQAsWLNDChQv1xx9/KDQ0VL///ntqTh0AACBFCNoAAAAcbP78+WrQoIF8fHzi7WvZsqV2796tgwcPplk9WbJk0caNG3X16lVVqVJFrVq10nPPPadZs2Yl2H/Pnj06cOCAWrZsGW+fj4+PnnvuOWtYuGrVKlWpUkXt27dXyZIlNWTIEMXGxiZ43LZt22r48OEaMmSIKlWqpL///lu9e/c2b6IAAAAmsxgJPTMeAAAAAAAAgF1Y0QYAAAAAAACYgKANAAAAAAAAMAFBGwAAAAAAAGACgjYAAAAAAADABARtAAAAAAAAgAkI2gAAAAAAAAATELQBAAAAAAAAJiBoAwAAAAAAAExA0AYAAAAAAACYgKANAAAAAAAAMAFBGwAAAAAAAGACgjYAAAAAAADABP8HZUvcfPiiYAkAAAAASUVORK5CYII=\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X = df_features[AMINO_ACIDS]\n", "y = df_features[\"is_enzyme\"]\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X,\n", " y,\n", " test_size=0.2,\n", " random_state=42,\n", " stratify=y)" ], "metadata": { "id": "M55A9wGPa5TN" }, "execution_count": 97, "outputs": [] }, { "cell_type": "code", "source": [ "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import classification_report\n", "\n", "model = LogisticRegression(max_iter=1000)\n", "model.fit(X_train, y_train)\n", "\n", "y_pred = model.predict(X_test)\n", "print(classification_report(y_test, y_pred))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2fo6VUtZaoPl", "outputId": "710f2d5e-b963-4c8d-ebf5-6d0f9237c2f9" }, "execution_count": 98, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " precision recall f1-score support\n", "\n", " 0 0.84 1.00 0.92 169\n", " 1 0.00 0.00 0.00 31\n", "\n", " accuracy 0.84 200\n", " macro avg 0.42 0.50 0.46 200\n", "weighted avg 0.71 0.84 0.77 200\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", "/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" ] } ] }, { "cell_type": "code", "source": [ "# convert data to tensors\n", "\n", "import torch\n", "from torch.utils.data import TensorDataset, DataLoader\n", "\n", "X_tensor = torch.tensor(X.values, dtype=torch.float32)\n", "y_tensor = torch.tensor(y.values, dtype=torch.long)\n", "\n", "dataset = TensorDataset(X_tensor, y_tensor)\n", "train_size = int(0.8 * len(dataset))\n", "test_size = len(dataset) - train_size\n", "\n", "train_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_size, test_size])\n", "train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)\n", "test_loader = DataLoader(test_dataset, batch_size=32)" ], "metadata": { "id": "J0lOv_kIcCVw" }, "execution_count": 100, "outputs": [] }, { "cell_type": "code", "source": [ "import torch.nn as nn\n", "import torch.nn.functional as F\n", "\n", "class EnzymeClassifier(nn.Module):\n", " def __init__(self):\n", " super().__init__()\n", " self.fc1 = nn.Linear(20, 64)\n", " self.fc2 = nn.Linear(64, 32)\n", " self.out = nn.Linear(32, 2)\n", "\n", " def forward(self, x):\n", " x = F.relu(self.fc1(x))\n", " x = F.relu(self.fc2(x))\n", " return self.out(x)\n", "" ], "metadata": { "id": "0KdLM-kncCTS" }, "execution_count": 101, "outputs": [] }, { "cell_type": "code", "source": [ "model_2 = EnzymeClassifier()\n", "model_2" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VUIzfyJAcCRC", "outputId": "d6fcda6d-7912-4930-8f07-055ec1f7be0e" }, "execution_count": 103, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "EnzymeClassifier(\n", " (fc1): Linear(in_features=20, out_features=64, bias=True)\n", " (fc2): Linear(in_features=64, out_features=32, bias=True)\n", " (out): Linear(in_features=32, out_features=2, bias=True)\n", ")" ] }, "metadata": {}, "execution_count": 103 } ] }, { "cell_type": "code", "source": [ "model_2.state_dict()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "coVQGIlFcCOv", "outputId": "1a9c46a0-928d-44fa-a873-dee2b6be71dc" }, "execution_count": 104, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "OrderedDict([('fc1.weight',\n", " tensor([[ 0.0410, -0.1476, 0.2080, ..., -0.0241, -0.1369, 0.1540],\n", " [-0.1473, -0.0169, 0.2216, ..., -0.0375, -0.1823, -0.0753],\n", " [ 0.0144, 0.0473, -0.0789, ..., -0.2203, -0.1355, -0.0128],\n", " ...,\n", " [-0.0488, -0.0619, 0.2074, ..., -0.1802, 0.1857, 0.1643],\n", " [-0.2169, -0.1247, 0.0188, ..., -0.0551, -0.1546, 0.0597],\n", " [-0.1639, 0.1408, -0.1742, ..., 0.0760, -0.1133, 0.1541]])),\n", " ('fc1.bias',\n", " tensor([-0.1309, 0.0898, 0.0059, -0.0417, 0.0076, -0.0474, 0.1032, 0.0107,\n", " -0.0422, 0.1092, -0.0110, -0.0662, 0.1191, -0.0829, -0.0477, -0.0964,\n", " 0.0637, 0.2169, 0.1400, -0.1837, 0.1026, 0.2030, -0.0347, 0.0665,\n", " 0.2205, -0.1009, 0.0097, 0.0110, -0.0588, 0.0032, 0.1974, -0.0925,\n", " 0.0532, -0.0293, 0.1615, 0.1930, 0.1386, 0.0043, -0.0231, -0.0520,\n", " -0.0197, 0.1594, -0.0794, -0.1531, -0.1223, -0.1384, 0.1953, -0.1388,\n", " -0.0298, -0.0497, 0.0439, -0.1429, -0.1219, -0.1391, -0.0532, 0.1787,\n", " 0.1363, -0.1857, 0.0893, 0.0765, -0.0644, 0.0401, -0.0966, 0.0877])),\n", " ('fc2.weight',\n", " tensor([[-0.0899, -0.1130, 0.0197, ..., -0.1224, 0.0717, -0.0582],\n", " [ 0.0211, 0.0454, -0.0317, ..., 0.0948, -0.0936, -0.0913],\n", " [ 0.0673, 0.0885, 0.1090, ..., -0.0793, -0.1180, -0.0295],\n", " ...,\n", " [ 0.0196, 0.1200, 0.0544, ..., 0.1175, 0.0340, 0.1146],\n", " [ 0.1213, -0.0066, 0.1137, ..., 0.0984, 0.0300, 0.0117],\n", " [-0.0632, 0.0259, 0.1151, ..., 0.0957, 0.0925, -0.0794]])),\n", " ('fc2.bias',\n", " tensor([-0.0482, 0.0810, -0.0419, 0.0688, 0.1186, -0.0406, 0.0037, 0.1210,\n", " 0.1234, -0.0761, -0.0849, -0.0485, -0.0360, -0.0421, -0.0280, 0.0126,\n", " 0.0363, -0.0211, 0.1194, -0.0999, -0.1136, -0.0183, -0.1132, -0.0300,\n", " -0.0597, -0.0802, -0.0052, -0.0499, -0.0620, -0.0373, 0.1030, -0.0608])),\n", " ('out.weight',\n", " tensor([[-0.0769, 0.1325, 0.0899, 0.0475, -0.1640, -0.0764, -0.1678, 0.1567,\n", " -0.1409, 0.0330, 0.1529, 0.0310, 0.1456, 0.1646, 0.0874, -0.1520,\n", " -0.1327, -0.1322, 0.0446, -0.0214, 0.1517, -0.0761, 0.0419, -0.1600,\n", " -0.1451, 0.0538, -0.0954, 0.1679, 0.1426, -0.0949, -0.0915, 0.1232],\n", " [-0.1702, -0.0823, -0.0003, -0.0992, -0.1160, 0.0447, 0.0252, 0.0281,\n", " -0.0028, 0.0548, -0.1235, -0.1541, 0.1076, 0.1538, -0.1310, -0.1645,\n", " 0.0006, 0.0612, -0.1102, -0.0599, 0.0454, -0.0632, -0.0555, 0.0351,\n", " 0.1637, 0.1032, 0.0536, -0.1686, 0.1537, -0.0998, 0.1476, 0.0393]])),\n", " ('out.bias', tensor([-0.1499, -0.1382]))])" ] }, "metadata": {}, "execution_count": 104 } ] }, { "cell_type": "code", "source": [ "model = EnzymeClassifier()\n", "loss_fn = nn.CrossEntropyLoss()\n", "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n", "\n", "for epoch in range(20):\n", " model.train()\n", " total_loss = 0\n", " for xb, yb in train_loader:\n", " pred = model(xb)\n", " loss = loss_fn(pred, yb)\n", " optimizer.zero_grad()\n", " loss.backward()\n", " optimizer.step()\n", " total_loss += loss.item()\n", " print(f\"Epoch {epoch+1}, loss: {total_loss:.4f}\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "FoY_b85PcCF3", "outputId": "bcb05f0e-84c8-4ab6-e28d-89c33a2a33dd" }, "execution_count": 105, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1, loss: 15.5039\n", "Epoch 2, loss: 13.1869\n", "Epoch 3, loss: 11.1452\n", "Epoch 4, loss: 10.5861\n", "Epoch 5, loss: 10.5612\n", "Epoch 6, loss: 10.4999\n", "Epoch 7, loss: 10.4306\n", "Epoch 8, loss: 10.3792\n", "Epoch 9, loss: 10.2836\n", "Epoch 10, loss: 10.1962\n", "Epoch 11, loss: 10.0914\n", "Epoch 12, loss: 9.9736\n", "Epoch 13, loss: 9.8301\n", "Epoch 14, loss: 9.6838\n", "Epoch 15, loss: 9.5342\n", "Epoch 16, loss: 9.3001\n", "Epoch 17, loss: 9.0728\n", "Epoch 18, loss: 8.8039\n", "Epoch 19, loss: 8.5540\n", "Epoch 20, loss: 8.3271\n" ] } ] }, { "cell_type": "code", "source": [ "!pip3 install torchmetrics" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "x98mplkEe31C", "outputId": "456f7b2a-4371-4a37-b944-c5904ec7c401" }, "execution_count": 107, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting torchmetrics\n", " Downloading torchmetrics-1.7.2-py3-none-any.whl.metadata (21 kB)\n", "Requirement already satisfied: numpy>1.20.0 in /usr/local/lib/python3.11/dist-packages (from torchmetrics) (2.0.2)\n", "Requirement already satisfied: packaging>17.1 in /usr/local/lib/python3.11/dist-packages (from torchmetrics) (24.2)\n", "Requirement already satisfied: torch>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from torchmetrics) (2.6.0+cu124)\n", "Collecting lightning-utilities>=0.8.0 (from torchmetrics)\n", " Downloading lightning_utilities-0.14.3-py3-none-any.whl.metadata (5.6 kB)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.11/dist-packages (from lightning-utilities>=0.8.0->torchmetrics) (75.2.0)\n", "Requirement already satisfied: typing_extensions in /usr/local/lib/python3.11/dist-packages (from lightning-utilities>=0.8.0->torchmetrics) (4.13.2)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (3.18.0)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (3.4.2)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (3.1.6)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (2025.3.2)\n", "Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (0.6.2)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (2.21.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (12.4.127)\n", "Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=2.0.0->torchmetrics)\n", " Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Requirement already satisfied: triton==3.2.0 in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (3.2.0)\n", "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch>=2.0.0->torchmetrics) (1.13.1)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch>=2.0.0->torchmetrics) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch>=2.0.0->torchmetrics) (3.0.2)\n", "Downloading torchmetrics-1.7.2-py3-none-any.whl (962 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m962.5/962.5 kB\u001b[0m \u001b[31m20.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading lightning_utilities-0.14.3-py3-none-any.whl (28 kB)\n", "Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m4.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m137.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m102.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m69.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m2.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m6.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m15.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m9.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m1.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m69.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hInstalling collected packages: nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, lightning-utilities, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, torchmetrics\n", " Attempting uninstall: nvidia-nvjitlink-cu12\n", " Found existing installation: nvidia-nvjitlink-cu12 12.5.82\n", " Uninstalling nvidia-nvjitlink-cu12-12.5.82:\n", " Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82\n", " Attempting uninstall: nvidia-curand-cu12\n", " Found existing installation: nvidia-curand-cu12 10.3.6.82\n", " Uninstalling nvidia-curand-cu12-10.3.6.82:\n", " Successfully uninstalled nvidia-curand-cu12-10.3.6.82\n", " Attempting uninstall: nvidia-cufft-cu12\n", " Found existing installation: nvidia-cufft-cu12 11.2.3.61\n", " Uninstalling nvidia-cufft-cu12-11.2.3.61:\n", " Successfully uninstalled nvidia-cufft-cu12-11.2.3.61\n", " Attempting uninstall: nvidia-cuda-runtime-cu12\n", " Found existing installation: nvidia-cuda-runtime-cu12 12.5.82\n", " Uninstalling nvidia-cuda-runtime-cu12-12.5.82:\n", " Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82\n", " Attempting uninstall: nvidia-cuda-nvrtc-cu12\n", " Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82\n", " Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:\n", " Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82\n", " Attempting uninstall: nvidia-cuda-cupti-cu12\n", " Found existing installation: nvidia-cuda-cupti-cu12 12.5.82\n", " Uninstalling nvidia-cuda-cupti-cu12-12.5.82:\n", " Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82\n", " Attempting uninstall: nvidia-cublas-cu12\n", " Found existing installation: nvidia-cublas-cu12 12.5.3.2\n", " Uninstalling nvidia-cublas-cu12-12.5.3.2:\n", " Successfully uninstalled nvidia-cublas-cu12-12.5.3.2\n", " Attempting uninstall: nvidia-cusparse-cu12\n", " Found existing installation: nvidia-cusparse-cu12 12.5.1.3\n", " Uninstalling nvidia-cusparse-cu12-12.5.1.3:\n", " Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3\n", " Attempting uninstall: nvidia-cudnn-cu12\n", " Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n", " Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n", " Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n", " Attempting uninstall: nvidia-cusolver-cu12\n", " Found existing installation: nvidia-cusolver-cu12 11.6.3.83\n", " Uninstalling nvidia-cusolver-cu12-11.6.3.83:\n", " Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83\n", "Successfully installed lightning-utilities-0.14.3 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127 torchmetrics-1.7.2\n" ] } ] }, { "cell_type": "code", "source": [ "import torchmetrics\n", "from torchmetrics import Accuracy, Precision, Recall, F1Score\n", "\n", "accuracy = Accuracy(task=\"binary\")\n", "precision = Precision(task=\"binary\")\n", "recall = Recall(task=\"binary\")\n", "f1 = F1Score(task=\"binary\")" ], "metadata": { "id": "kNVjqpExfGts" }, "execution_count": 108, "outputs": [] }, { "cell_type": "code", "source": [ "model_2.eval()\n", "\n", "all_preds = []\n", "all_labels = []\n", "\n", "with torch.inference_mode():\n", " for xb, yb in test_loader:\n", " logits = model_2(xb)\n", " preds = torch.argmax(logits, dim=1)\n", "\n", " all_preds.append(preds)\n", " all_labels.append(yb)\n", "\n", "all_preds = torch.cat(all_preds)\n", "all_labels = torch.cat(all_labels)\n", "\n", "acc = accuracy(all_preds, all_labels)\n", "prec = precision(all_preds, all_labels)\n", "rec = recall(all_preds, all_labels)\n", "f1_score = f1(all_preds, all_labels)\n", "\n", "print(f\"Accuracy: {acc:.4f}\")\n", "print(f\"Precision: {prec:.4f}\")\n", "print(f\"Recall: {rec:.4f}\")\n", "print(f\"F1 Score: {f1_score:.4f}\")" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "qEGYAri4fyMU", "outputId": "9ef4a54b-96c1-4aa2-d8df-620d44cca592" }, "execution_count": 109, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Accuracy: 0.2100\n", "Precision: 0.1640\n", "Recall: 1.0000\n", "F1 Score: 0.2818\n" ] } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "T4UtTVd9fyKH" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [], "metadata": { "id": "Y9_e7LcRfyHe" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [], "metadata": { "id": "YAxQh4omfx_n" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [], "metadata": { "id": "l3imvBYdfx5d" }, "execution_count": null, "outputs": [] } ] }