Source code for src.graphdb_builder.databases.parsers.hpaParser

import os.path
import pandas as pd
import zipfile
from collections import defaultdict
from graphdb_builder import mapping as mp, builder_utils

##########################################
#   Human Protein Atlas (pathology)      # 
##########################################
[docs]def parser(databases_directory, download=True): config = builder_utils.get_config(config_name="hpaConfig.yml", data_type='databases') url = config['hpa_pathology_url'] disease_mapping = mp.getMappingFromOntology(ontology="Disease", source=None) protein_mapping = mp.getMultipleMappingForEntity("Protein") directory = os.path.join(databases_directory, "HPA") builder_utils.checkDirectory(directory) compressed_fileName = os.path.join(directory, url.split('/')[-1]) file_name = '.'.join(url.split('/')[-1].split('.')[0:2]) relationships_headers = config['relationships_headers'] if download: builder_utils.downloadDB(url, directory) with zipfile.ZipFile(compressed_fileName) as z: if file_name == "pathology.tsv": pathology = parsePathologyFile(config, z, file_name, protein_mapping, disease_mapping) builder_utils.remove_directory(directory) return (pathology, relationships_headers)
[docs]def parsePathologyFile(config, fhandler, file_name, protein_mapping, disease_mapping): url = config['linkout_url'] pathology = defaultdict(set) first = True with fhandler.open(file_name) as f: df = pd.read_csv(f, sep='\t', header=None, error_bad_lines=False, low_memory=False) df = df.fillna(0) first = True for index, row in df.iterrows(): if first: first = False continue identifier = row[0] name = row[1] disease_name = row[2] hexpr = row[3] mexpr = row[4] lexpr = row[5] ndetected = row[6] if isinstance(row[7],str): row[7] = float(row[7].replace('e','E')) if isinstance(row[8],str): row[8] = float(row[8].replace('e','E')) if isinstance(row[9],str): row[9] = float(row[9].replace('e','E')) if isinstance(row[10],str): row[10] = float(row[10].replace('e','E')) uprog_pos = row[8] prog_pos = row[7] if row[7] != 0 else uprog_pos uprog_neg = row[10] prog_neg = row[9] if row[9] != 0 else uprog_neg linkout = url.replace("GENECODE",identifier).replace("GENENAME",name).replace("DISEASE", disease_name.replace(' ', '+')) if identifier in protein_mapping or name in protein_mapping: if identifier in protein_mapping: identifiers = protein_mapping[identifier] else: identifiers = protein_mapping[name] for identifier in identifiers: if disease_name in disease_mapping: disease_id = disease_mapping[disease_name] pathology[("protein", "detected_in_pathology_sample")].add((identifier, disease_id, "DETECTED_IN_PATHOLOGY_SAMPLE", hexpr, mexpr, lexpr, ndetected, prog_pos, prog_neg, linkout, "Human Protein Atlas pathology")) return pathology