Modify SNPs and gene annotations for your genome assembly of interest. This example shows how one might do this for hg19
, for instance:
Download SNPs and convert to BED:
$ wget -qO- ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606_b151_GRCh37p13/VCF/common_all_20180423.vcf.gz \
| gunzip -c \
| convert2bed --input=vcf --output=bed --sort-tmpdir=${PWD} - \
> hg19.snp151.bed
Filter this BED file for entries of interest:
$ grep -wFf snps-of-interest.txt hg19.snp151.bed | cut -f1-6 > hg19.snp151.filtered.bed6
Download gene annotations and convert to BED:
$ wget -O - ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_19/gencode.v19.annotation.gtf.gz \
| gunzip -c \
| awk '($3 == "gene")' \
| gtf2bed \
> gencode.v19.genes.bed
Note: In the future, newer versions of Gencode annotations may be available for your reference assembly. Always check their site to confirm what is most recent.
Map genes to SNPs:
$ bedmap --echo --echo-map-id hg19.snp151.filtered.bed6 gencode.v19.genes.bed > snps_with_associated_gene_names.bed
A list of genes that overlap a SNP of interest will be in the seventh column of the output.
If this must be done within Python, you could use something like subprocess.call(...)
, where ...
includes commands wrapped in bash -c
.
I don't recommend this because of the need to escape quote marks and deal with Python's quirks in running command-line tasks, which makes a Python-based approach very difficult to set up and maintain. I'd suggest learning some basic bash
scripting to make this easy and fast.