在生物信息学领域,Claude code(AI coder)的强大能力正在得到越来越多的认可,特别是在搭建和优化生信分析流程方面。在之前的文章中,我们成功使用Claude code复现了文献中的图表,展现了其在标准流程执行上的精准性。然而,今天我们将更进一步,探索Claude code在个性化分析中的表现,看看它是否能够理解我们基于已有结果的分析意图,并且精准地帮助我们提取出预期的结果。

本次测试将集中在单细胞高阶分析上,特别是蛋白互作网络图和细胞通讯分析两个方面。我们将使用来自GEO数据库的肺部疾病数据集—— 特发性肺动脉高压(IPAH) 与健康供体对照组样本(GSE169471)进行深入分析。通过这次测试,我们希望验证Claude code在个性化数据分析中的表现,以及它如何在复杂的生物学问题上展现出灵活的处理能力。

原文链接:https://pmc.ncbi.nlm.nih.gov/articles/PMC7052475/#sec5-2045894020908782

Claude Code复现流程

第一步:数据准备

对照组样本(CON)包括了六个健康供体的样本:GSM5206782-89 IPAH组包含三名特发性肺动脉高压患者的样本:GSM5206779-81

图片

第二步:初始化CLAUDE.md

# 项目概述
本仓库包含了一个以平滑肌细胞为对象的生物信息学研究项目,主要利用单细胞RNA测序数据,对平滑肌细胞的差异基因进行分析,并构建其分子互作网络。
# 数据结构
主要数据源为 GSE169471.zip,该压缩包包含:
- 单细胞RNA-seq数据,H5格式(文件名如 GSM5206779-GSM5206789.h5)
- 质控报告和分析PDF文档
- 差异表达基因结果(CSV格式)
- UMAP可视化图
# 研究目标
1. 平滑肌细胞差异基因分析及网络构建
基于平滑肌差异基因,利用 Cytoscape 进行网络可视化
2. 关键基因介导的细胞通信分析
分析平滑肌细胞与其他细胞亚群之间,关键基因在细胞通信中的作用
构建信号通路网络,识别基因为发送者、接收者、中介因子或影响因子等角色
输出详细的细胞通讯结果,包括:
源细胞、靶细胞、配体、受体
概率值、P值、互作名称
信号通路及注释信息
# 分析流程
根据已有的图示,主要流程包括:
网络分析(Figure 1):利用 Cytoscape 构建蛋白质互作(PPI)网络,识别枢纽基因
细胞通讯(Figure 2):分析 CCL 和补体信号通路在不同细胞类型(包括平滑肌细胞、内皮细胞、巨噬细胞及其他免疫细胞)间的相互作用
# 核心分析细胞类型
平滑肌细胞(分析重点)
内皮细胞
巨噬细胞
T细胞、B细胞、NK细胞
单核细胞、中性粒细胞
软骨细胞
组织干细胞

第三步:Claude code(AI coder)执行

指令:将DEGs上传到STRING数据库进行PPI分析之后 ,基于平滑肌差异基因,用Cytoscape对网络进行可视化。

图片

从STRING数据库获取蛋白质相互作用数据

def get_string_ppi_data(genes, species=9606, score_threshold=400):
    """
    从STRING数据库获取蛋白质相互作用数据
    Args:
        genes: 基因列表
        species: 物种ID (默认9606为人类)
        score_threshold: 相互作用置信度阈值 (默认400)
    Returns:
        相互作用数据DataFrame
    """
    # 构建查询URL
    string_api_url = "https://version-11-5.string-db.org/api"
    output_format = "tsv-no-header"
    method = "network"
    # 将基因列表转换为查询字符串
    my_genes = "\r".join(genes[:30])  # 限制前30个基因以避免请求过大
    # 构建请求参数
    params = {
        "identifiers": my_genes,
        "species": species,
        "required_score": score_threshold,
        "network_flavor": "evidence",
        "caller_identity": "ppi_analysis"
    }
    try:
        # 发送请求
        print("正在从STRING数据库获取PPI数据...")
        request_url = f"{string_api_url}/{output_format}/{method}"
        response = requests.post(request_url, data=params, timeout=30)
        if response.status_code == 200:
            # 解析响应数据
            lines = response.text.strip().split('\n')
            if len(lines) > 1:  # 确保有数据
                data = []
                for line in lines:
                    parts = line.split('\t')
                    if len(parts) >= 9:
                        try:
                            data.append({
                                'stringId_A': parts[0],
                                'stringId_B': parts[1],
                                'preferredName_A': parts[2],
                                'preferredName_B': parts[3],
                                'ncbiTaxonId': parts[4],
                                'score': int(float(parts[5])),
                                'nscore': float(parts[6]),
                                'fscore': float(parts[7]),
                                'pscore': float(parts[8])
                            })
                        except (ValueError, IndexError):
                            continue

                df = pd.DataFrame(data)
                print(f"成功获取 {len(df)} 个蛋白质相互作用")
                return df
            else:
                print("未找到相互作用数据")
                return None
        else:
            print(f"请求失败,状态码: {response.status_code}")
            return None
    except Exception as e:
        print(f"获取数据时出错: {str(e)}")
        return None

创建Cytoscape网络文件

def create_cytoscape_network_file(ppi_data, gene_info, output_file):
    """
    创建Cytoscape网络文件

    Args:
        ppi_data: PPI数据DataFrame
        gene_info: 基因信息字典
        output_file: 输出文件路径
    """
    if ppi_data is None or len(ppi_data) == 0:
        print("没有PPI数据可用于创建网络文件")
        return

    # 创建节点文件
    nodes = set()
    for _, row in ppi_data.iterrows():
        nodes.add(row['preferredName_A'])
        nodes.add(row['preferredName_B'])

    # 创建SIF格式的网络文件 (Simple Interaction Format)
    sif_content = []
    for _, row in ppi_data.iterrows():
        interaction = f"{row['preferredName_A']}\tpp\t{row['preferredName_B']}"
        sif_content.append(interaction)

    # 保存SIF文件
    sif_file = output_file.replace('.txt', '.sif')
    with open(sif_file, 'w') as f:
        f.write('\n'.join(sif_content))

    print(f"SIF网络文件已保存到: {sif_file}")

    # 创建节点属性文件
    node_attr_file = output_file.replace('.txt', '_nodes.txt')
    with open(node_attr_file, 'w') as f:
        f.write("Gene\tType\tExpression\n")
        for node in nodes:
            if node in gene_info:
                f.write(f"{node}\tSMC_gene\t{gene_info[node]['avg_log2FC']:.3f}\n")
            else:
                f.write(f"{node}\tInteracting_gene\t0.000\n")

    print(f"节点属性文件已保存到: {node_attr_file}")

    # 创建边属性文件
    edge_attr_file = output_file.replace('.txt', '_edges.txt')
    with open(edge_attr_file, 'w') as f:
        f.write("Source\tTarget\tInteraction\tScore\n")
        for _, row in ppi_data.iterrows():
            f.write(f"{row['preferredName_A']}\t{row['preferredName_B']}\tpp\t{row['score']}\n")

    print(f"边属性文件已保存到: {edge_attr_file}")

图片

结果图: 成功完成了基于全部2,085个平滑肌细胞差异基因的PPI网络分析

图片

Cytoscape专业可视化

图片

指令:对于当前路径下的数据,使用CellChat方法对11个样本进行了完整的细胞通讯分析

图片

图片

结果图:

图片

总结

本文以单细胞测序数据为例,测试了Claude Code(AI coder)在生信高阶分析中的实际能力。结果表明,它不仅能够精准执行标准流程,还能在已有结果基础上理解分析意图,辅助完成个性化的蛋白互作网络构建与细胞通讯解析,展现出强大的AI分析潜力。

如何使用Claude code(AICoder)

登录网址:https://ai.dftianyi.com

选择Claude code(AICoder)后,点击您所需要的套餐。请耐心等待,待状态变为 “运行中”,然后点击 “查看 API KEY” 按钮,即可获取API 密钥。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐