利用KEGGREST包提取所有代谢相关的基因

文章讲述了如何使用R语言的KEGGREST库来提取和处理KEGG数据库中的代谢通路数据,特别是以00...开头的通路。作者通过代码展示了如何获取通路中的基因ID和符号,构建数据框并去除重复项,最终保存结果为Rdata文件。文章提及KEGG的基因和通路数量会不断更新,且提到了对非00...开头通路的处理选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写笔记主要是为了自己进步,也是方便自己查看。R语言新手,如有不对请指正。

直接上代码吧

rm(list = ls())
library(KEGGREST)
library(stringr)

##提取KEGG所有的通路
hsa_path <- keggLink("pathway","hsa")

#KEGG共收集8443个相关通路的基因
length(unique(names(hsa_path)))

#涉及通路353个
length(unique(hsa_path))

#代谢相关的通路在KEGG中以“00……”开头,提取”00……“开头通路共84个
pathway= unique(hsa_path)[grepl('hsa00',unique(hsa_path))];length(pathway)


#提取这84个通路的基因
hsa_info <- lapply(pathway, keggGet)

分别把基因名字和基因的ID提取出来,合成一个数据框
gene_symbol = unlist(lapply( hsa_info , function(x) {
  g = x[[1]]$GENE
  str_split(g[seq(2,length(g),by=2)],';',simplify = T)[,1]
}))

gene_ID = unlist(lapply( hsa_info , function(x) {
  g = x[[1]]$GENE
  paste0("hsa:",g[seq(1,length(g),by=2)])
}))

genelist <- data.frame(gene_ID,gene_symbol)

#去重复,提取84个代谢通路中1728个基因
genelist <- genelist[!duplicated(genelist$gene_symbol),]
length(genelist$gene_symbol)

head(genelist)

#保存为Rdata,随时可以加载使用
save(genelist,file = "metabolism.Rdata")
最终结果长这样子:
##   gene_ID gene_symbol
1  hsa:3101         HK3
2  hsa:3098         HK1
3  hsa:3099         HK2
4 hsa:80201       HKDC1
5  hsa:2645         GCK
6  hsa:2821         GPI

KEGG上的基因数量和通路数量都是不断更新的,所以KEGGREST包能提取的基因数量也在不断变化。我去年运行的时候总基因8192个,现在已经有8443个了,以后也会不断增加。

KEGG官网上也有少量的代谢通路不以00开头,以01开头。数量太少,且不是重要的通路,所以我省略了。想要提取更全的基因基的朋友可以自己加上。

最后,本文参考自生信技能树曾老师的代码,感谢曾老师的分享。

要从KEGG下载的代谢通路中绘制含靶标基因和其他重复基因KEGG通路复合网络图,可以按照以下步骤进行: 1. **获取KEGG通路信息**: - 使用KEGG API或手动下载所需的KEGG通路文件(通常是KGML格式)。 - 可以使用Python的`requests`库或R的`KEGGREST`获取KEGG通路信息。 2. **解析KEGG通路文件**: - 使用Python的`BeautifulSoup`库或R的`XML`来解析KGML文件,提取基因和它们之间的关系。 3. **筛选靶标基因和重复基因**: - 将提取基因与已知的靶标基因进行匹配,筛选出靶标基因。 - 统计基因通路中出现的次数,筛选出重复基因。 4. **绘制网络图**: - 使用Python的`networkx`库或R的`igraph`来构建网络图。 - 将靶标基因和重复基因作为节点,基因之间的关系作为边。 - 使用`matplotlib`或`ggplot2`等绘图库来可视化网络图。 以下是一个使用Python的示例代码: ```python import requests from bs4 import BeautifulSoup import networkx as nx import matplotlib.pyplot as plt # 下载KEGG通路文件 def download_kegg_pathway(pathway_id): url = f'http://rest.kegg.jp/get/{pathway_id}/kgml' response = requests.get(url) return response.text # 解析KGML文件 def parse_kgml(kgml_content): soup = BeautifulSoup(kgml_content, 'xml') entries = soup.find_all('entry') genes = {} for entry in entries: if entry['type'] == 'gene': name = entry['name'] genes[name] = {'id': entry['id'], 'name': name} relations = soup.find_all('relation') edges = [] for relation in relations: entry1 = relation.find('entry1').text entry2 = relation.find('entry2').text edges.append((entry1, entry2)) return genes, edges # 筛选靶标基因和重复基因 def filter_genes(genes, target_genes): filtered_genes = {gene_id: gene_info for gene_id, gene_info in genes.items() if gene_info['name'] in target_genes} gene_counts = {gene_info['name']: 0 for gene_info in genes.values()} for gene_info in genes.values(): gene_counts[gene_info['name']] += 1 duplicate_genes = {gene_id: gene_info for gene_id, gene_info in genes.items() if gene_counts[gene_info['name']] > 1} return filtered_genes, duplicate_genes # 绘制网络图 def draw_network(genes, edges, target_genes, duplicate_genes): G = nx.Graph() for gene_id, gene_info in genes.items(): if gene_info['name'] in target_genes or gene_info['name'] in duplicate_genes: G.add_node(gene_info['name']) for edge in edges: node1 = genes[edge[0]]['name'] node2 = genes[edge[1]]['name'] if node1 in target_genes or node1 in duplicate_genes or node2 in target_genes or node2 in duplicate_genes: G.add_edge(node1, node2) plt.figure(figsize=(10, 8)) nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray', node_size=500) plt.show() # 示例使用 pathway_id = 'hsa04010' # 示例KEGG通路ID kgml_content = download_kegg_pathway(pathway_id) genes, edges = parse_kgml(kgml_content) target_genes = ['EGFR', 'PIK3CA'] # 示例靶标基因 filtered_genes, duplicate_genes = filter_genes(genes, target_genes) draw_network(genes, edges, target_genes, duplicate_genes) ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值