Проект: парсинг UniProt

Материал из hpluswiki
Перейти к навигации Перейти к поиску

UniProt — база знаний о протеинах. Она связывает сами протеины с последовательностями генов, кодирующими их.

Она сохранена в одном маленьком текстовом файле и я решил, что пример парсинга этого файла на Python может быть полезен. Структурно, файл состоит из описания, заголовка таблицы, контента и лицензии. Мы отделяем от файла всё лишнее, потому, что так его можно читать построчно.


Требуется информация от эксперта!
Запрос: Я не очень хорошо понимаю, почему в заголовке базы UniProt говорят только о первой хромосоме.
Экспертиза: Биолог


− Не помню откуда я вышел на файлы, но для каждой хромосомы существует свой отдельный файл вида https://www.uniprot.org/docs/humchr<nn>.txt, где <nn> ::= [0-9]{2} | [xy] Denis.s (обсуждение)

Selenium[править]

Пример экспорта в JSON[править]

#!/usr/bin/env python3

"""
Read and convert humchr01.txt items.
"""

import re
import json

def main():
    """
    Load processed txt file with no header and license, scan, build JSON data, export.
    """
    gene_filename = "humchr01_for_splitting.txt"
    with open(gene_filename, 'r') as gene_file:
        original_genes = gene_file.read().splitlines()
    new_genes = []
    for gene in original_genes:
        new_gene = {}
        new_gene['gene_name'], remainder = re.split("\s+", gene, maxsplit=1)
        new_gene['chromosomal_position'], remainder = re.split("\s+", remainder, maxsplit=1)
        new_gene['swiss_prot_ac'], remainder = re.split("\s+", remainder, maxsplit=1)
        new_gene['swiss_prot_ename'], remainder = re.split("\s+", remainder, maxsplit=1)
        mim_code = ""
        description = ""
        if re.match(r'^\d+', remainder):
            new_gene['mim_code'], description = re.split("\s+", remainder, maxsplit=1)
        else:
            new_gene['description'] = remainder
        new_genes.append(new_gene)
    with open("humchr01.json", "w") as humchr_json_file:
        json.dump(new_genes, humchr_json_file, ensure_ascii=False, sort_keys=True, indent=4)

if __name__ == '__main__':
    main()

Пример экспорта в CSV[править]

Tab-delimited.

#!/usr/bin/env python3

"""
Read and convert humchr01.txt items.
"""

import re
import csv

def main():
    """
    Load processed txt file with no header and license, scan, build CSV data, export.
    """
    gene_filename = "humchr01_for_splitting.txt"
    with open(gene_filename, 'r') as gene_file:
        original_genes = gene_file.read().splitlines()
    new_genes = []
    for gene in original_genes:
        new_gene = {}
        new_gene['gene_name'], remainder = re.split("\s+", gene, maxsplit=1)
        new_gene['chromosomal_position'], remainder = re.split("\s+", remainder, maxsplit=1)
        new_gene['swiss_prot_ac'], remainder = re.split("\s+", remainder, maxsplit=1)
        new_gene['swiss_prot_ename'], remainder = re.split("\s+", remainder, maxsplit=1)
        new_gene['mim_code'] = ""
        new_gene['description'] = ""
        if re.match(r'^\d+', remainder):
            new_gene['mim_code'], description = re.split("\s+", remainder, maxsplit=1)
        else:
            new_gene['description'] = remainder
        new_genes.append(new_gene)
        with open("humchr01.csv", 'wb') as csv_file:
            writer = csv.writer(csv_file, delimiter='\t', quotechar='\\', quoting=csv.QUOTE_MINIMAL)
            for gene in new_genes:
                writer.writerow([
                    gene['gene_name'],
                    gene['chromosomal_position'],
                    gene['swiss_prot_ac'],
                    gene['swiss_prot_ename'],
                    gene['mim_code'],
                    gene['description']
                ])

if __name__ == '__main__':
    main()

Racket[править]

Сохранение отпарсенного в Tabtree[править]

Заметка о лицензии[править]

UniProt хотят, чтобы на них ссылались в научных работах. На образец можно посмотреть, пройдя по ссылке.

Creative commons[править]

Вот сам текст лицензии из файла UniProt. "Copyrighted by the UniProt Consortium, see https://www.uniprot.org/terms. Distributed under the Creative Commons Attribution (CC BY 4.0) License"

Текст и описание лицензии на сайте Creative Commons.