当前位置:   article > 正文

(待更)零基础复现一篇生信网络药理学文章之大黄素篇(含所有代码、TCMSP网站、SwissADME数据库、GeneCards网站、DisGeNET数据库、OMIM网站使用教程)_生信 文章复现 csdn

生信 文章复现 csdn

前言

本机环境与复现文章

  • 需要已装好python、R语言环境。本人使用的是mac。
  • 要复现的文章是:Investigation into the Molecular Mechanisms of Rheum against Esophageal Cancer Based on Network Pharmacology and Experimental Validation

英文名

  • 大黄英文名:Dahuang
  • 食管癌英文名:esophageal cancer

网站地址

  • TCMSP网站地址:https://old.tcmsp-e.com/tcmsp.php
  • GeneCards网站首页:https://www.genecards.org/
  • OMIM网站首页:https://www.omim.org/(没什么用,建议直接去到OMIM geneMap页面)
  • OMIM geneMap页面:https://www.omim.org/search/advanced/geneMap

TCMSP筛选药物活性成份

论文原文步骤

TCMSP筛选大黄的活性成分。以“大黄”为关键词,筛选标准包括口服生物利用度(OB)≥ 20% 和药物相似性(DL)≥ 0.18,以识别具有潜在药理活性的成分。

复现步骤

网站首页

首先进入TCMSP网站如下:
在这里插入图片描述

网站搜索

直接输入大黄英文名Dahuang之后点击搜索,出现如下页面,点击拉丁名称后会跳转
在这里插入图片描述

搜索结果初筛

可以看到这里出现了搜索结果列表,我们只关注两列:OB(生物利用度)和DL(药物相似性)
在这里插入图片描述
这里每列点击后其实都可以切换顺序/倒序排序的,具体可见点击列明后的显示的是上箭头还是下箭头。
但是当列过窄时可能和筛选图标重叠,我们可以手动按住列的分割线将列拉宽点。
然后点击筛选图标,按照论文原文的生物利用度(OB)≥ 20% 药物相似性(DL)≥ 0.18进行筛选。
筛选后就从一开始的92条数据变为了29条数据(因为数据库一直在变动,所以筛选后不是29条也问题不大~)
在这里插入图片描述
在这里插入图片描述

下载数据

随后我们需要下载数据,在这里你可以选择以下任意方式之一:

手动粘贴

因为数量不多,所以可以手动粘贴到txt文件或者xlsx文件中,如下:
在这里插入图片描述

代码爬虫

本人写了个爬虫脚本,如下。

使用前提是下载你所使用的浏览器对应的`driver`,譬如你用的是`chrome`,那么要下`chromedriver`。
在这里我提供了`chromedriver`在本文章的资源绑定里面。

ps:不保障每人都能使用成功该脚本,受各种因素影响捏。
本人纯纯为爱发电,不提供代码的售后服务,有问题可在评论区留言,看到即回。
  • 1
  • 2
  • 3
  • 4
  • 5
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import pandas as pd

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)


def get_related_targets(url):
    # 打开目标网页
    driver.get(url)

    # 等待页面加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//a[contains(text(), 'Related Targets')]"))
    )

    related_targets_tab = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'Related Targets')]"))
    )
    related_targets_tab.click()

    # table = driver.find_element((By.XPATH, '//*[@id="grid2"]/div[2]/table'))
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="grid2"]/div[2]/table'))
    )
    # 初始化DataFrame来存储所有页面的表格数据
    all_pages_data = pd.DataFrame()

    # 循环遍历所有分页
    while True:
        # 获取当前页面的HTML
        html = driver.page_source
        soup = BeautifulSoup(html, 'html.parser')

        # 使用Selenium获取表格数据
        table = driver.find_element(By.CSS_SELECTOR, '#grid2 > div.k-grid-content > table')
        rows = table.find_elements(By.TAG_NAME, 'tr')
        data = []
        for row in rows:
            cols = row.find_elements(By.TAG_NAME, 'td')  # 或者 'th' 如果是表头
            cols_text = [ele.text.strip() for ele in cols]
            data.append(cols_text)
        # 将当前页面的数据添加到DataFrame
        # 跳过表头,直接使用数据行创建DataFrame
        df = pd.DataFrame(data)
        all_pages_data = pd.concat([all_pages_data, df], ignore_index=True)

        # 尝试点击下一页按钮,如果找不到则跳出循环
        try:
            # 等待“下一页”按钮可点击
            next_page_btn = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable(
                    (By.CSS_SELECTOR, '#grid2 > div.k-pager-wrap.k-grid-pager.k-widget > a:nth-child(4)'))
            )
            if "k-state-disabled" not in next_page_btn.get_attribute("class"):
                # 点击按钮
                next_page_btn.click()
                WebDriverWait(driver, 2).until(
                    EC.presence_of_element_located((By.CSS_SELECTOR, '#grid2 > div.k-grid-content > table'))
                )
            else:
                print("已到达最后一页")
                break
        except Exception as e:
            print("发生错误:", e)
            break

    # 关闭WebDriver
    driver.quit()

    # # 打印所有页面的数据
    # print(all_pages_data)

    # 如果需要,可以将数据保存到文件
    all_pages_data.to_csv('targets.txt', index=False, header=False)


if __name__ == '__main__':
    url = "https://old.tcmsp-e.com/tcmspsearch.php?qr=Coptidis%20Rhizoma&qsr=herb_en_name&token=5d5532b4c3e1a1d1aa9817e3b8d8b89a"
    # 需要换成初筛后的网址
    get_related_targets(url)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
开通会员

该网站貌似有会员服务,会提供另一个版本的网站,可选hhh

SwissADME筛选药物活性

论文原文步骤

使用SwissADME数据库进行了二次筛选,选择了具有高胃肠道吸收(GI absorption)并符合Lipinski、Ghose、Veber、Egan和Muegge等药物相似性标准的成分。经过这一筛选过程,最终确定了具有已知靶点的大黄七个活性成分:EUPATIN, Emodinanthrone, Physcion-9-O-beta-D-glucopyranoside_qt, 大黄酸, Toralactone, 大黄素, 和 Physcion。

复现步骤

待更

总之最终的结果如下:
在这里插入图片描述

GeneCards数据库筛选疾病潜在靶点

网站首页和搜索

进入GeneCards网站首页后,搜索食管癌英文esophageal cancer,随后点击搜索。
在这里插入图片描述

搜索结果下载

点击Export后点击Export to Excel(这个的下载会有点慢,可以先做下一步DisGeNET)
在这里插入图片描述

搜索结果初筛

Genecards下载的文件名也默认都是GeneCards-SearchResults.csv,我们打开下载的文件,如下:
在这里插入图片描述
我们首先需要选中表头,然后点击“筛选”下的“筛选”。
在这里插入图片描述
之后就可以看到表头的每一个都出现了筛选图标。
在这里插入图片描述
根据原文步骤相关性评分(Relevance score) ≥ 1.0,我们点击Relevance score的筛选图标后选择“数字筛选”,而后出现如下面板,输入相关信息点击确认后可以看到表格的最下方显示我们从7548条中筛选出了7227条,之后将这些数据复制到新的excel文件中。
在这里插入图片描述
在这里插入图片描述

DisGeNET数据库筛选疾病潜在靶点

OMIM数据库筛选疾病潜在靶点

网站搜索

直接来到OMIM geneMap页面,搜索食管癌英文esophageal cancer,随后点击搜索。
在这里插入图片描述

或者你可以通过首页来到gene Map页面
在这里插入图片描述

下载搜索结果

如下下载搜索结果
在这里插入图片描述

搜索结果处理

在OMIM下载的数据的文件名称都是OMIM-Entry-Retrieval.xlsx
我们点开来看,如下,我们只需要关注或者说,提取Gene/Locus这一列即可。
在这里插入图片描述
你可以选择如下两种方法之一:

excel处理

注意将逗号和前后空格都删除,并去重,一个基因名就占一行,最终结果如下:

代码处理

我写了一个python脚本,代码如下:
ps:这只是一个片段代码,如果直接跑是跑不出来结果的(

def get_gene_from_OMIM(OMIM_file_name):
    # 读取Excel文件
    df = pd.read_excel(OMIM_file_name, skiprows=4)  # 跳过前4行非数据行

    # 提取"Gene/Locus"列
    gene_locus_column = df['Gene/Locus'].dropna()

    # 创建一个空列表来存储处理后的基因名
    cleaned_genes = []

    # 遍历"Gene/Locus"列
    for item in gene_locus_column:
        # 检查是否为字符串类型
        if isinstance(item, str):
            # 去除双引号并去除两端空格
            item = item.replace('"', '').strip()
            # 分割基因名并去除每个基因名两端的空格
            genes = [gene.strip() for gene in item.split(',')]
            # 添加到列表中
            cleaned_genes.extend(genes)
    gene_df = pd.DataFrame(cleaned_genes, columns=['Gene/Locus'])
    print("omim_df 's row is: ", len(gene_df))
    return gene_df
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/931513
推荐阅读
相关标签
  

闽ICP备14008679号