dbSNP Queries
Query rsID via myvariant.info
import myvariant
mv = myvariant.MyVariantInfo()
def get_rsid_info(rsid): '''Get variant info by rsID''' result = mv.getvariant(rsid, fields=['dbsnp', 'clinvar', 'gnomad_exome']) return result
result = get_rsid_info('rs121913527')
Query via NCBI Entrez
from Bio import Entrez import xml.etree.ElementTree as ET
Entrez.email = 'your@email.com'
def search_dbsnp(rsid): '''Search dbSNP by rsID''' handle = Entrez.esearch(db='snp', term=rsid) record = Entrez.read(handle) handle.close() return record
def fetch_dbsnp(snp_id): '''Fetch dbSNP record by internal ID''' handle = Entrez.efetch(db='snp', id=snp_id, rettype='xml') xml_data = handle.read() handle.close() return xml_data
Map Coordinates to rsID
def coords_to_rsid(chrom, pos, ref, alt): '''Find rsID for genomic coordinates''' mv = myvariant.MyVariantInfo()
# Query by HGVS notation
hgvs = f'chr{chrom}:g.{pos}{ref}>{alt}'
result = mv.getvariant(hgvs, fields=['dbsnp.rsid'])
if result:
return result.get('dbsnp', {}).get('rsid')
return None
Map rsID to Coordinates
def rsid_to_coords(rsid): '''Get genomic coordinates for rsID''' mv = myvariant.MyVariantInfo() result = mv.getvariant(rsid, fields=['dbsnp', 'vcf'])
if not result:
return None
dbsnp = result.get('dbsnp', {})
return {
'chrom': dbsnp.get('chrom'),
'pos': dbsnp.get('hg38', {}).get('start'),
'ref': dbsnp.get('ref'),
'alt': dbsnp.get('alt')
}
Batch rsID Lookup
def batch_rsid_lookup(rsids, fields=None): '''Look up multiple rsIDs''' mv = myvariant.MyVariantInfo()
if fields is None:
fields = ['dbsnp', 'clinvar.clinical_significance', 'gnomad_exome.af.af']
results = mv.getvariants(rsids, fields=fields)
return results
Parse dbSNP Annotations
def parse_dbsnp(result): '''Extract key dbSNP annotations''' dbsnp = result.get('dbsnp', {})
return {
'rsid': dbsnp.get('rsid'),
'chrom': dbsnp.get('chrom'),
'pos_hg38': dbsnp.get('hg38', {}).get('start'),
'pos_hg19': dbsnp.get('hg19', {}).get('start'),
'ref': dbsnp.get('ref'),
'alt': dbsnp.get('alt'),
'gene': dbsnp.get('gene', {}).get('symbol'),
'class': dbsnp.get('class'), # snv, ins, del, etc.
'validated': dbsnp.get('validated')
}
Variant Classes in dbSNP
Class Description
snv Single nucleotide variant
ins Insertion
del Deletion
indel Insertion/deletion
mnv Multiple nucleotide variant
Query NCBI Variation Services API
import requests
def query_spdi(rsid): '''Query NCBI Variation Services for SPDI notation''' url = f'https://api.ncbi.nlm.nih.gov/variation/v0/refsnp/{rsid[2:]}' response = requests.get(url) if response.ok: return response.json() return None
Related Skills
-
myvariant-queries - Aggregated variant queries
-
clinvar-lookup - ClinVar pathogenicity
-
database-access/entrez-search - General Entrez queries