利用biomart实现同源基因自动批量查找

https://github.com/yoshirinda/find-homologs

已经封装为了可执行文件,欢迎尝试

Ensemble plants网站是少数提供了biomart的外部可访问api链接的数据库。

网站事先通过序列比对和进化树构建找到已收录的各物种的同源基因。

利用biomart python包可以直接访问http://plants.ensembl.org/biomart' 

每个基因的注释中有对应的{species}_eg_homolog_ensembl_gene的属性,该属性对应了目的基因在各物种中的同源基因。其中物种名采取缩写形式,如玉米 zea mays 为zmays。

利用本机python运行只需两分钟就能完成拟南芥中16个基因在四个物种中的同源基因批量查询。

注意,要求数据库必须被ensemble网站收录。

代码如下,空闲的时候可以考虑将其封装为简单操作的软件。

import requests
from biomart import BiomartServer
import os

# 连接到Ensembl的Biomart服务器
server = BiomartServer('http://plants.ensembl.org/biomart')

# 选择拟南芥的数据集
mart = server.datasets['athaliana_eg_gene']

# 定义拟南芥基因列表
athaliana_genes = [
    'At2g47430', 'At1g09570', 'At2g18790', 'At1g66340', 'At1g04310', 
    'At3g23150', 'At2g40940', 'At5g10720', 'At2g01830', 'At1g27320', 
    'At5g35750', 'At2g17820', 'At3g04580', 'At4g16250', 'At5g35840',
    'At4g18130'  # 添加新的拟南芥基因
]

# 定义物种及其数据集名称
species_datasets = {
    'Zea Mays': 'zmays_eg_gene',
    'Galdieria sulphuraria': 'gsulphuraria_eg_gene',
    'Cyanidioschyzon merolae': 'cmerolae_eg_gene',
    'Chondrus crispus': 'ccrispus_eg_gene',
    'Ostreococcus lucimarinus': 'olucimarinus_eg_gene'
}

# 创建输出目录
output_dir = 'output_files'
os.makedirs(output_dir, exist_ok=True)

# 定义一个函数来查询蛋白质序列
def fetch_protein_sequences(dataset, gene_ids):
    response = dataset.search({
        'filters': {'ensembl_gene_id': gene_ids},
        'attributes': ['ensembl_gene_id', 'peptide']
    })
    sequences = []
    for row in response.iter_lines():
        columns = row.decode('utf-8').split('\t')
        if len(columns) == 2:
            sequences.append((columns[0], columns[1]))  # 确保基因ID和蛋白质序列正确对应
    return sequences

# 处理每个拟南芥基因
processed_sequences = {}
for athaliana_gene in athaliana_genes:
    print(f"正在处理基因: {athaliana_gene}")
    
    for species, dataset_name in species_datasets.items():
        homolog_attr = f"{dataset_name.split('_')[0]}_eg_homolog_ensembl_gene"
        
        # 构建查询,查询拟南芥基因的同源基因
        try:
            print(f"查询基因 {athaliana_gene} 在物种 {species} 中的同源基因...")
            response = mart.search({
                'filters': {'ensembl_gene_id': athaliana_gene},
                'attributes': [homolog_attr]
            })
            
            homolog_gene_ids = set()
            for row in response.iter_lines():
                columns = row.decode('utf-8').split('\t')
                if len(columns) == 1 and columns[0]:
                    homolog_gene_ids.add(columns[0])
            
            if homolog_gene_ids:
                # 保存同源基因ID到文件
                with open(os.path.join(output_dir, f"{species}_homolog_gene_ids.txt"), 'a') as f:
                    f.write(f"{athaliana_gene}\t{species}\t{','.join(homolog_gene_ids)}\n")
                
                print(f"基因 {athaliana_gene} 在物种 {species} 中的同源基因: {homolog_gene_ids}")
                
                # 查询蛋白质序列
                sequences = fetch_protein_sequences(server.datasets[dataset_name], list(homolog_gene_ids))
                
                # 保存蛋白质序列到字典,避免重复输出
                for gene_id, seq in sequences:
                    if gene_id not in processed_sequences:
                        processed_sequences[gene_id] = seq
                    else:
                        # 如果已经存在相同名称的序列,保存较长的那条
                        if len(seq) > len(processed_sequences[gene_id]):
                            processed_sequences[gene_id] = seq
                
                print(f"基因 {athaliana_gene} 的蛋白质序列已保存到字典")
            else:
                print(f"基因 {athaliana_gene} 在物种 {species} 中没有找到同源基因")
        
        except Exception as e:
            print(f"查询基因 {athaliana_gene} 在物种 {species} 中的同源基因时出错: {e}")

# 最终输出到FASTA文件
with open(os.path.join(output_dir, f"all_species_protein_sequences.fasta"), 'w') as f:
    for gene_id, seq in processed_sequences.items():
        f.write(f">{gene_id}\n{seq}\n")

print(f"所有基因的同源基因ID和蛋白质序列已保存到文件")

<think>好的,我现在需要帮助用户查找EPCAM、MME和PECAM1这三个基因的小鼠对应名称及其功能和相关性的信息。首先,我要确认用户的需求。用户提到这三个基因,可能是在进行跨物种比较,比如人类和小鼠之间的基因转换,尤其是在单细胞分析或基因表达研究中。根据用户提供的引用资料,特别是引用[1],里面提到人和小鼠的基因命名规则不同,人的基因通常是大写字母,而小鼠的同源基因是首字母大写其余小写,但仅凭大小写可能不够,需要对应列表或其他方法。 接下来,我需要逐个处理这三个基因: 1. **EPCAM**:人类中的EPCAM基因,全称为Epithelial Cell Adhesion Molecule,主要在上皮细胞中表达,参细胞间粘附。根据小鼠基因命名规则,可能对应Epcam。需要验证是否确实是小鼠中的同源基因,并确认其功能是否相似。 2. **MME**:人类MME基因,即Membrane Metalloendopeptidase,编码CD10抗原,参细胞表面蛋白水解。小鼠中的同源基因可能为Mme,功能可能人类类似,如B细胞发育和神经肽降解。 3. **PECAM1**:人类PECAM1是Platelet and Endothelial Cell Adhesion Molecule 1,主要在内皮细胞和血小板中表达,参细胞粘附和信号传导。小鼠中的对应基因应为Pecam1,功能可能类似,如血管生成和免疫反应。 接下来需要验证这些对应是否正确。可能需要查阅权威数据库,如NCBI Gene、MGI(Mouse Genome Informatics)或Ensembl。例如,在MGI数据库中搜索人类基因EPCAM,查看小鼠的同源基因是否为Epcam,并获取其功能描述。 此外,用户提到的引用[2]涉及单细胞分析中的marker基因列表,可能用户在进行单细胞测序数据分析,需要这些基因的小鼠对应名称来注释细胞类型。例如,EPCAM可能作为上皮细胞的标记,PECAM1作为内皮细胞的标记,而MME可能某些免疫细胞相关。 需要确保提供的功能描述准确,并引用相关文献或数据库支持。同时,可能需要提醒用户注意基因命名的差异,以及验证基因对应的重要性,避免仅依赖大小写转换。此外,用户可能需要进一步了解这些基因在小鼠特定组织或疾病模型中的表达和功能,这可以体现在相关问题中。 最后,根据用户提供的引用资料,特别是引用[1]的方法,建议用户使用可靠的基因对应列表或工具进行转换,而不仅仅是依赖命名规则,以确保准确性。同时,引用[2]中的去重方法可能帮助用户处理单细胞数据中的基因列表,避免重复影响分析结果。</think>### 关于EPCAM、MME、PECAM1的小鼠基因信息 #### 1. **EPCAM(Epithelial Cell Adhesion Molecule)** - **小鼠基因名称**:$Epcam$(首字母大写,其余小写)[^1] - **功能**: - 在上皮细胞中高表达,维持细胞间黏附极性 - 参干细胞微环境调控(如肠道干细胞) - 肿瘤发生相关(如乳腺癌标志物) - **相关性**:常用作上皮细胞或肿瘤细胞的标记基因[^2] #### 2. **MME(Membrane Metalloendopeptidase)** - **小鼠基因名称**:$Mme$(首字母大写,其余小写) - **功能**: - 编码CD10抗原,参细胞表面蛋白水解 - 在B细胞发育和神经肽降解中起关键作用 - 免疫调节和炎症反应相关 - **相关性**:常见于免疫细胞亚群(如前体B细胞)的标记基因[^2] #### 3. **PECAM1(Platelet and Endothelial Cell Adhesion Molecule 1)** - **小鼠基因名称**:$Pecam1$ - **功能**: - 介导内皮细胞间黏附血管通透性调控 - 参白细胞跨内皮迁移过程 - 在血管生成和免疫应答中发挥重要作用 - **相关性**:内皮细胞的核心标记基因 --- ### 基因对应关系验证建议 1. 通过**MGI数据库**(Mouse Genome Informatics)查询人类基因的小鼠同源基因 $$ \text{人类基因名} \xrightarrow{\text{Orthology Search}} \text{小鼠基因名} $$ 2. 使用**Ensembl Biomart工具**批量转换基因名 3. 注意小鼠基因命名可能存在**大小写混合形式**(如$Cd34$ vs人类$CD34$) ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值