I want to map some gene ids to their proteins structures if they exist. The genes are rows of this CSV. There are other information that may help also such as Product description but that may lead to anbiguities. I am looking for a programmatic way, biopython or pdb API?
1 Answer
Not sure if you want the structure exactly or a handle of some sort, but the best way i know to get ALL your 5000 identifiers to map to uniprot/pdb is uniprot's mapping service. You can either copy your ids straight from excel or parse with python ex.:
import pandas as pd
import os
file_name = 'aap7847_Zhang_SM_Table-S5.xlsx'
sheetname = 'Table S5'
df = pd.read_excel(file_name, sheet_name=sheetname, skiprows=1)
ids = list(df['Gene_ID'])
name_of_file_to_save_to = "geneIds.txt"
with open(name_of_file_to_save_to, "w") as newf:
for id in ids:
print("{}\n".format(id), file=newf)
newf.close()
You can then save the Uniprot's response and either add it as a column to your file or map to other parts of Elixir ecosystem with SIFTS, for example, as @Matteo Ferla says.
In the case that you maybe need a single id's information, you could hit their API too, although this wouldn't work for bulk or at least didn't work for me. You can map the uniprot accession you get from this to PDB or whatever else you need!
import requests
def get_uniprot_accession(geneid, format='list'):
resp = requests.get(
"https://www.uniprot.org/uniprot/?query={}&sort=score&format={}".format(geneid, format)).text
if format == 'list':
resp = resp.strip()
return resp
pymol2
module to fix these (yup, silly but best option). Also if the organism is common you might wanna check out SwissModel's premade threaded models of close homologues(20% id min) $\endgroup$