【python】从Ensembl上,根据Array HumanMethylation450甲基化探针cg编号(比如cg13788592)获取位置

news2024/11/27 6:12:31

文章目录

  • 1. 写在前面
  • 2. 手动查找和探索过程
    • 从UCSC查找
    • 从Ensembl查找
  • 3. 代码实现

1. 写在前面

一篇专利 1 中提到多种癌种及对应的特异性CpG位点,想获取对应cg位点具体的位置或序列。专利中的一组CpG markers如下:

在这里插入图片描述
需求就是:将这些cg编号作为文件输入,获取对应的序列和位置信息。

2. 手动查找和探索过程

需求实现方式可直接到第3节:代码实现中直接查看实现代码,跳过本节。

从UCSC查找

由于之前未查询过cgxxx位置,直接网搜也找不到任何有效的信息,竟然在NCBI上也没有查到。

还是向ChatGPT2提问【怎么获取cgxxx(比如:cg01423964)对应的位置信息】,给出了有效信息。之所以说有效,是至少为我提供了查询的渠道(UCSC3),甚至还给出了具体的查询方式,比如下面:(步骤真详细差点信了!但是。。。)
在这里插入图片描述
但是,请注意:上面的这个回答获取的不是cg编号,感兴趣的朋友也可以尝试上述步骤。获取的信息倒是有位置,但不是对应cgxxx。。。获取的这个文件就是这个地址:

http://hgdownload.soe.ucsc.edu/goldenPath/hg19/database/cpgIslandExt.txt.gz 。如下截图:
在这里插入图片描述

另外,上面得到的ChatGPT的回答也是我修改了10次以上提问才得到的答案,中间有些回答一些操作方式或者没有对应的选项问题等重新进行提问。一开始回答中有提供手动获取的方式(可参考):

在这里插入图片描述

如果只查询几个cgxxx的位置信息也可以手动获取,大概是这样的:

    1. 进入网址:http://genome.ucsc.edu/cgi-bin/hgSearch --> 输入cgxxx --> 点击"Search"。(注意选择参考序列版本,这里是GRCh37/hg19)
      在这里插入图片描述
    1. 得到搜索结果:在这里插入图片描述
      此时页面中可获取位置信息(一个CG点),也可以点击cgxxx(比如: "Illumina 450k Methylation Array"进入UCSC浏览器)查看该位置的具体信息:
      在这里插入图片描述

上述这个查询方式,可以直接在UCSC浏览器上面搜索框输入cgxxx点击"go",也可同样查询(有的会直接跳转到对应位置,有的不会。注意涉及位置时请确认参考基因组版本)

在这里插入图片描述

另外,如果UCSC搜索后下面显示的信息与上面截图不一致,比如没有显示cgxxx信息或其他信息,需要修改下面的Regulation或其他相关的按钮选项(hide/隐藏 或show/显示)
在这里插入图片描述
在这里插入图片描述

从Ensembl查找

在多次向ChatGPT提问后,ChatGPT建议还可以在 Ensembl4查询cgxxx对应位置。(貌似现在有问题时,问GPT比在浏览器搜的次数要多,因为ChatGPT搜寻的答案有条理且高效,虽然并不总是正确的)

Ensembl: https://grch37.ensembl.org/index.html

这个手动查找也算方便,搜索框输入cgxxx搜索即可(同样注意参考基因组版本),然后从搜索结果中查找具体的序列、位置信息。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

笔者没有在Ensembl上找到类似UCSC上可下载的甲基化位置信息文件,后续找到合适的方式就不用通过代码从网页获取了,从下载的所有CpG位点库中本地查找更方便。

下面代码实现是基于上面网页的搜索结果,从网页中html解析得到对应信息。

3. 代码实现

脚本命名:get_ensembl_cg_position.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
date = '2023/07/14 0001'
author = 'QDZPW'

usage: python get_ensembl_cg_position.py ${cglist_file} ${output_file}
"""

from bs4 import BeautifulSoup
import requests
import sys


# 将获取的信息分割到具体位置
def split_loc(mystr):
    # 1:111217527-111217576(1)
    # 5:42994776-42994825(-1)
    chrom_locs, strand = mystr.strip(')').split('(')
    chrom, locs = chrom_locs.split(":")
    start, end = locs.split('-')
    new_strs = '\t'.join([chrom, start, end, strand])
    return new_strs
    

# 根据html文件,获取相应信息
# eg html: https://grch37.ensembl.org/Homo_sapiens/Component/Location/Genome/genome?array=HumanMethylation450;fdb=funcgen;ftype=ProbeFeature;id=cg13788592
def extract_cginfo_from_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    table = soup.find('table', id='ProbeFeature_table')
    rows = table.find_all('tr')
    
    result = []
    for row in rows[1:]:  # 跳过表头行
        cells = row.find_all('td')
        # cginfo_lst: found_cg_id, sequence, length, location. [found_cg_id: 网页获取的cg_id,保证与所查询的一致]
        # cginfo_lst = [i.text.strip() for i in cells[:4]]
        cginfo_lst = [i.text.strip() for i in cells[:4]] + [split_loc(cells[3].text.strip())]
        result.append('\t'.join(cginfo_lst))
    return result


# 批量查询位置信息
def get_cglist_info(cg_listfile, outfile):
    # 读取包含cg编号的文件, 并写入结果到输出文件
    with open(cg_listfile, 'r') as f, open(outfile, 'w') as pf:
        # 输出各列:输入的cgxxx、查到的cg及对应的序列、长度、位置
        # pf.write("#Input_cg\tProbe_cg\tSeuqence\tLength\tGenomic_location(strand)\n")
        pf.write("#Input_cg\tProbe_cg\tSeuqence\tLength\tGenomic_location(strand)\tChrom\tStart\tEnd\tStrand\n")
        for line in f:
            cg_id = line.strip()
    
            # 指定URL, 注意这里对应的是GRCH37版本的参考基因组
            url = f"https://grch37.ensembl.org/Homo_sapiens/Component/Location/Genome/genome?array=HumanMethylation450;fdb=funcgen;ftype=ProbeFeature;id={cg_id}"
    
            # 发送HTTP请求进行查询, 获取HTML内容
            response = requests.get(url)
            html = response.text
    
            # 提取序列
            result_info = '\t'.join(extract_cginfo_from_html(html))
    
            pf.write(f"{cg_id}\t{result_info}\n")
    

if __name__ == "__main__":
    cglist_file = sys.argv[1]  # 每行一个cgxxx
    out_file = sys.argv[2]  # 输出文件
    get_cglist_info(cglist_file, out_file)

使用方式:python get_ensembl_cg_position.py ${cglist_file} ${output_file}

上面代码,就是从html网页源代码中获取获取信息:
在这里插入图片描述

使用UCSC查找的方式,从网页源代码中也可用Ensenmbl代码类似的方式 获取cg对应的位置信息,只是少了序列信息。
UCSC在线手动查找方式第二步获取的网页后查看其 源代码,根据html格式获取对应信息即可:

在这里插入图片描述


  1. DNA METHYLATION MARKERS FOR NONINVASIVE DETECTION OF CANCER AND USES THEREOF: https://www.freepatentsonline.com/y2021/0171617.html ↩︎

  2. ChatGPT: https://chat2.jinshutuan.com ↩︎

  3. UCSC: http://genome.ucsc.edu/index.html ↩︎

  4. Ensembl: https://grch37.ensembl.org/index.html ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Learning Enriched Features for Fast Image Restoration and Enhancement 论文阅读笔记

这是2022年TPAMI上发表的大名鼎鼎的MIRNetv2,是一个通用的图像修复和图像质量增强模型,核心是一个多尺度的网络 网络结构整体是残差的递归,不断把残差展开可以看到是一些残差块的堆叠。核心是多尺度的MRB。网络用的损失函数朴实无华&#x…

DuDuTalk:智能语音工牌如何赋能销售过程管理?

智能语音工牌是一种智能语音采集设备,配合ASR、NLP、语音分析、文本挖掘等AI技术,它可以帮助企业实现销售过程的监控、分析和改进。在这篇文章中,我们将探讨如何利用录音工牌实现销售过程管理,并介绍其重要性和应用。 1、什么是销…

3.9 JavaDoc生成文档

3.9 JavaDoc生成文档 javadoc命令是用来生成自己API文档的 javadoc是一种技术,他可以将我们的注释信息生成一个帮助文档 参数信息author 作者名version 版本号since 指明需要最早使用的JDK版本param 参数名return 返回值情况throws 异常抛出情况文档注释 /**回车…

接口测试-Jmeter响应数据结果保存到csv文件2种方式(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 日常接口测试&…

阿里巴巴最新总结 Spring Security Oauth2.0 认证授权全彩笔记

Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是 Spring 生态系统中的一员,因此它伴随着整个 Spring 生态系统不断修正、升级,在 Spring Boot 项目中加入 Spring Security 更是十分简单&a…

C语言进阶,第4节-自定义类型详解(结构体

一、 结构体 1. 结构的声明 //描述一个学生 struct Stu//结构体标签 {//成员变量char name[20];int age;char sex[5];char id[20]; }x; //x 为 struct Stu 类型的变量//匿名结构体类型 struct {int a;char c;float f; }a;struct {int a;char c;float f; }*pa;//省略了结构体…

集群基础1——集群概念、LVS负载均衡

文章目录 一、基本了解二、LVS负载均衡2.1 基本了解2.2 工作模式2.2.1 NAT模式2.2.2 DR模式2.2.3 LVS-TUN模式2.2.4 LVS-FULLNAT模式 三、调度器算法四、ipvsadm命令 一、基本了解 什么是集群? 多台服务器做同一件事情。 集群扩展方式: scale up&#xf…

OJ练习第136题——在二叉树中分配硬币

在二叉树中分配硬币 力扣链接:979. 在二叉树中分配硬币 题目描述 给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币。 在一次移动中,我们可以选择两个相邻的结点&…

java导出pdf(纯代码实现)

java导出pdf 在项目开发中,产品的需求越来越奇葩啦,开始文件下载都是下载为excel的,做着做着需求竟然变了,要求能导出pdf。导出pdf倒也不是特别大的问题关键就是麻烦。 导出pdf我知道的一共有3中方法: 方法一&#xff…

Linux系统ubuntu22.04安装最新版的gcc13.1.0编译器,支持c++20、23

Linux系统ubuntu22.04安装最新版的gcc13.1.0编译器,支持c20、23 本文全程实操,上机验证通过。 首先查看gcc版本,以确保系统内有gcc,如果没有需要安装sudo apt install gcc 去GUN官网查看最新的gcc版本Index of /gnu/gcc 下载最…

若依添加router-view,使用详细(若依后台管理系统添加router-view)

简介:大家都知道若依后台管理系统,它是一款基于SpringBoot,Spring Security,JWT,Vue & Element 的开发的企业级后台管理系统,可以用于管理企业网站、电子商务平台、移动应用等各种应用系统,…

Shell第四章——函数

命令序列按照格式写在一起 核心:财富使用的命令序列 使用函数可以避免代码重复,函数可以将大的工程分割成若干小的功能模块,提高代码的可读性 第一种写法 第二种写法 return:表示退出函数并返回一个退出值,用…

Android init 进程启动相关分析

目录 1.概述: 2.架构 2.1 Init进程如何被启动? 2.2Init进程启动后,做了哪些事? 3.kernel启动init进程 源码分析 3.1 kernel_init 3.2 do_basic_setup 4. Init 进程启动源码分析 4.1 Init 进程入口 4.2 ueventd_main …

【mysql】—— 数据库的操作

序言: 在上篇文章我已经对数据库进行了详细的介绍,接下来我们就将上手学习操作的细节了。本篇文章便带领大家去学习有关库操作的基本知识!!! 目录 (一)库的操作 1、 创建数据库 2、字符集和…

创新涌动于先,PingCAP 用户峰会 2023 成功举办

2023 年 7 月 13 日,企业级开源分布式数据库厂商 PingCAP 在京成功举办 PingCAP 用户峰会 2023。本届峰会以“创新涌动于先”为主题,PingCAP 全面解析了 AI 时代 TiDB 的演进方向,宣布 TiDB Serverless 正式商用。会上,PingCAP 携…

功率信号源操作注意事项有哪些

功率信号源一种用来生成特定频率、幅度、相位和波形的电信号的设备,通常用于测试电子设备的性能。在使用功率信号源的过程中,需要注意一些安全性和操作规范。下面是一些有关功率信号源操作注意事项的详细介绍。 图:安泰ATG-2000系列功率信号源…

Python开源内容管理系统: Djangocms

一、Djangocms简介 Djangocms是基于Python语言开发的一款开源内容管理系统。它采用了Django框架,可以快速构建高效、灵活的网站。Djangocms拥有强大的可扩展性和易用性,支持多语言、多站点等功能。此外,Djangocms还提供了丰富的插件和主题&a…

JVM学习笔记(二)内存结构

目录 一、JVM内存结构 1. 虚拟机栈(JVM Stacks) 1)定义 2)栈内存溢出 3) 线程运行诊断 案例1:CPU占用过高 案例2:程序运行很长时间没有结果​编辑 2. 本地方法栈(Native Meth…

AlGaN基深紫外FP激光器仿真模型及材料信息数据库有何用途?

波长范围为UVC波段(100-280 nm)的深紫外FP(Fabry-Pero,法布里和珀罗是两位法国的科学家)激光器可广泛应用于数据通信、光通信、3D打印、材料加工、显示与照明、激光雷达、人脸/手势识别、医疗和表面监测等领域。FP激光…

Ubuntu 更改内核启动顺序

ubuntu服务器系统中用run包安装了某卡的驱动,后来又安装了docker,重启后,驱动失效。 经分析 安装docker时,又把新的linux内核安装上了。驱动是安装在旧内核上。 然会重新安装驱动,失败,确认是因为驱动只支…