Source code for graphein.grn.parse_trrust

"""Utilities for parsing the TRRUST database."""

# %%
# Graphein
# Author: Ramon Vinas, Arian Jamasb <arian@jamasb.io>
# License: MIT
# Project Website: https://github.com/a-r-j/graphein
# Code Repository: https://github.com/a-r-j/graphein

import os
from collections.abc import Callable
from functools import lru_cache
from pathlib import Path

import pandas as pd
import wget
from loguru import logger as log

from graphein.utils.utils import filter_dataframe


def _download_TRRUST(root_dir: Path | None = None) -> str:
    """
    Downloads TRRUST from
    https://www.grnpedia.org/trrust/data/trrust_rawdata.human.tsv

    :param root_dir: Path to desired output directory to download TRRUST to.
        Defaults to None (downloads to graphein/datasets/trrust/)
    :type root_dir: pathlib.Path, optional
    :returns: Path to downloaded TRRUST Dataset.
    :rtype: str
    """
    url = "https://www.grnpedia.org/trrust/data/trrust_rawdata.human.tsv"

    if root_dir is None:
        root_dir = Path(__file__).parent.parent.parent
    trrust_dir = f"{root_dir}/datasets/trrust"
    Path(trrust_dir).mkdir(parents=False, exist_ok=True)
    file = f"{trrust_dir}/human.tsv"

    # Download data
    if not os.path.exists(file):
        log.info("Downloading TRRUST ...")
        wget.download(url, file)

    return file


[docs] @lru_cache def load_TRRUST(root_dir: Path | None = None) -> pd.DataFrame: """ Loads the TRRUST datafile. If file not found, it is downloaded. :param root_dir: Root directory path to either find or download TRRUST :type root_dir: pathlib.Path, optional :returns: TRRUST database as a dataframe :rtype: pd.DataFrame """ file = _download_TRRUST(root_dir) return pd.read_csv( file, delimiter="\t", header=None, names=["g1", "g2", "regtype", "references"], )
[docs] def parse_TRRUST( gene_list: list[str], root_dir: Path | None = None ) -> pd.DataFrame: """ Parser for TRRUST regulatory interactions. If the TRRUST dataset is not found in the specified root_dir, it is downloaded :param gene_list: List of gene identifiers to restrict dataframe to. :type gene_list: List[str] :param root_dir: Root directory path to either find or download TRRUST. Defaults to ``None`` (downloads dataset to ``graphein/datasets/trrust``) :type root_dir: pathlib.Path, optional :returns: Pandas DataFrame with the regulatory interactions between genes in the gene list. :rtype: pd.DataFrame """ df = load_TRRUST(root_dir=root_dir) # Select input genes return df[df["g1"].isin(gene_list) & df["g2"].isin(gene_list)]
[docs] def filter_TRRUST( df: pd.DataFrame, funcs: list[Callable] | None ) -> pd.DataFrame: """ Filters results of TRRUST call according to user kwargs. :param df: Source specific Pandas dataframe (TRRUST) with results of the API call :type df: pd.DataFrame :param funcs: User functions to filter the results. :type funcs: List[Callable] :return: Source specific Pandas dataframe with filtered results :rtype: pd.DataFrame """ if funcs is not None: df = filter_dataframe(df, funcs) return df
[docs] def standardise_TRRUST(df: pd.DataFrame) -> pd.DataFrame: """ Filters results of TRRUST call by providing a list of user-defined functions that accept a dataframe and return a dataframe. :param df: pd.Dataframe to filter. Must contain columns: ``["g1", "g2", "regtype"]``. :type df: pd.DataFrame :param funcs: List of functions that carry out dataframe processing. :type funcs: List[Callable] :return: Processed DataFrame. :rtype: pd.DataFrame """ # Rename & delete columns df = df[["g1", "g2", "regtype"]] # Rename type of regulatory interaction df["regtype"].replace( {"Activation": "+", "Repression": "-", "Unknown": "?"}, inplace=True ) # Add source column df["source"] = "TRRUST" return df
[docs] def TRRUST_df( gene_list: list[str], filtering_funcs: list[Callable] | None = None ) -> pd.DataFrame: """ Generates standardised dataframe with TRRUST protein-protein interactions, filtered according to user's input. :param gene_list: List of gene identifiers to restrict dataframe to. :type gene_list: List[str] :param filtering_funcs: Functions with which to filter the dataframe. :type filtering_funcs: List[Callable] :return: Standardised dataframe with TRRUST interactions. :rtype: pd.DataFrame """ df = parse_TRRUST(gene_list=gene_list) df = filter_TRRUST(df, filtering_funcs) return standardise_TRRUST(df)