【生物信息学】基因差异分析Deg(数据读取、数据处理、差异分析、结果可视化)

目录

一、实验介绍

二、实验环境

1. 配置虚拟环境

2. 库版本介绍

3. IDE

三、实验内容

0. 导入必要的工具包

1. 定义一些阈值和参数

2. 读取数据

normal_data.csv部分展示

tumor_data.csv部分展示

3. 绘制箱型图

4. 删除表达量低于阈值的基因

5. 计算差异显著的基因

6. 初始化结果数据表格

7. 进行秩和检验和差异倍数计算

8. 可视化分析

9. 代码整合


一、实验介绍

        本实验完成了基因差异分析,包括数据读取、数据处理( 绘制箱型图、删除表达量低于阈值的基因、计算差异显著的基因)、差异分析(进行秩和检验和差异倍数计算)等,成功识别出在正常样本与肿瘤样本之间显著表达差异的基因,并对其进行了进一步的可视化分析(箱型图、差异倍数fold分布图、热力图和散点图)。

        基因差异分析是研究不同条件下基因表达差异的重要手段,能够帮助我们理解生物体内基因调控的变化及其与表型特征的关联。本实验旨在探索正常样本与肿瘤样本之间基因表达的差异,并识别差异显著的基因。

二、实验环境

    本系列实验使用了PyTorch深度学习框架,相关操作如下(基于深度学习系列文章的环境):

1. 配置虚拟环境

深度学习系列文章的环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn

新增加

conda install pandas
conda install seaborn
conda install networkx
conda install statsmodels
pip install pyHSICLasso

注:本人的实验环境按照上述顺序安装各种库,若想尝试一起安装(天知道会不会出问题)

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

新增

networkx2.6.33.1
pandas1.2.32.1.1
pyHSICLasso1.4.21.4.2
seaborn0.12.20.13.0
statsmodels0.13.50.14.0

3. IDE

        建议使用Pycharm(其中,pyHSICLasso库在VScode出错,尚未找到解决办法……)

win11 安装 Anaconda(2022.10)+pycharm(2022.3/2023.1.4)+配置虚拟环境_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/128693741

三、实验内容

0. 导入必要的工具包

import numpy as np
import pandas as pd
import scipy
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import zscore
from scipy.stats import ranksums
from pyHSICLasso import HSICLasso
from sklearn.preprocessing import LabelEncoder

1. 定义一些阈值和参数

p_cutoff = 0.001
FC_cutoff = 3
num_cutoff = 10
  • p_cutoff 是判断差异显著性的 p 值阈值。
  • FC_cutoff 是判断差异的倍数阈值。
  • num_cutoff 是基因表达量筛选的阈值。

2. 读取数据

ndata = pd.read_csv("normal_data.csv", index_col=0, header=0)
tdata = pd.read_csv("tumor_data.csv", index_col=0, header=0)

        从文件 "normal_data.csv" 和 "tumor_data.csv" 中读取正常样本和肿瘤样本的基因表达数据。

normal_data.csv部分展示

TCGA-BL-A13J-11A-13R-A10U-07TCGA-BT-A20N-11A-11R-A14Y-07TCGA-BT-A20Q-11A-11R-A14Y-07TCGA-BT-A20R-11A-11R-A16R-07TCGA-BT-A20U-11A-11R-A14Y-07TCGA-BT-A20W-11A-11R-A14Y-07TCGA-BT-A2LA-11A-11R-A18C-07TCGA-BT-A2LB-11A-11R-A18C-07TCGA-CU-A0YN-11A-11R-A10U-07TCGA-CU-A0YR-11A-13R-A10U-07TCGA-GC-A3BM-11A-11R-A22U-07TCGA-GC-A3WC-11A-11R-A22U-07TCGA-GC-A6I3-11A-11R-A31N-07TCGA-GD-A2C5-11A-11R-A180-07TCGA-GD-A3OP-11A-11R-A220-07TCGA-GD-A3OQ-11A-21R-A220-07TCGA-K4-A3WV-11A-21R-A22U-07TCGA-K4-A54R-11A-11R-A26T-07TCGA-K4-A5RI-11A-11R-A28M-07
?10000000000000000000
?22.55213.89335.459416.458334.42645.221911.34638.2564.30548.747121.00843.183706.012817.762140.84528.308813.72161.5099
?38.51195.730510.44177.68119.0621.35343.421925.75141.48346.54719.65152.64725.312110.733719.36419.13819.527318.536414.4093
?4117.4995103.9108148.8251100.9537162.7054128.9808118.3924124.8423180.5137131.3118127.6985145.632795.2855119.1427149.7972128.4473142.8571128.644139.1199
?5619.5833738.4077679.3286786.70361132.5581032.8771158.651143.321687.4096690.5882697.5129697.37611551.793556.22011018.907646.4851895.4832903.8232836.9674
?60000000000000000000
?7128.3422115.4856119.258120.6965120.930254.794582.700491.372966.5702153.5294259.3317272.8863291.500794.4976250.6016253.2622313.5504270.6093187.172
?80.7376000.39570.77520.547900.463800000000.3332000
?900000000000000.398700000

tumor_data.csv部分展示

TCGA-BT-A42F-01A-11R-A23W-07TCGA-C4-A0EZ-01A-21R-A24X-07TCGA-C4-A0F0-01A-12R-A10U-07TCGA-C4-A0F1-01A-11R-A034-07TCGA-C4-A0F6-01A-11R-A10U-07TCGA-C4-A0F7-01A-11R-A084-07TCGA-CF-A1HR-01A-11R-A13Y-07TCGA-CF-A1HS-01A-11R-A13Y-07TCGA-CF-A27C-01A-11R-A16R-07TCGA-CF-A3MF-01A-12R-A21D-07TCGA-CF-A3MG-01A-11R-A20F-07TCGA-CF-A3MH-01A-11R-A20F-07TCGA-CF-A3MI-01A-11R-A20F-07TCGA-CF-A47S-01A-11R-A23W-07TCGA-CF-A47T-01A-11R-A23W-07TCGA-CF-A47V-01A-11R-A23W-07TCGA-CF-A47W-01A-11R-A23W-07TCGA-CF-A47X-01A-31R-A23W-07TCGA-CF-A47Y-01A-11R-A23W-07TCGA-CF-A5U8-01A-11R-A28M-07
?100.367100000000002.1101000000.57370
?23.76137.328105.35982.80936.477713.93723.568440.37629.09149.08534.74093.9742.39047.021111.2489019.57226.34546.4641
?32.89595.52180.663604.5452.89226.81445.397541.06653.62386.080612.13348.68657.80335.667717.39535.188717.411218.324713.092
?4117.7889443.1501144.144692.6276136.3486238.55791.604211.2791100.480927.5497101.9194105.91878.537120.6983212.084670.1299106.1415150.7324103.2415149.5243
?51754.6361546.3974391.827868.8195685.42011752.1671229.951456.665966.06551691.1261220.8531279.2292167.0481399.5921939.577978.75961754.7171110.2251262.7651477.273
?600000000000000000000
?7192.1065306.195515.926866.9972157.381932.169973.471749.6115426.9924745.960348.8152402.5713229.9982266.8196120.8459472.8729135.8491640.3191553.0694511.0994
?802.9371000.7354000.59771.16351.059600.803500.50970.60420.485501.45034.58980.5285
?900000000000000000000

3. 绘制箱型图

ndata.iloc[1000:1010, ].transpose().plot(kind='box', title='Normal Sample Gene Boxplot', rot=30)
plt.tick_params(labelsize=10)
plt.savefig('Normal_Sample_Gene_box_plot', bbox_inches='tight')
plt.show()

        绘制正常样本中部分基因的箱型图,并保存为图片文件。

4. 删除表达量低于阈值的基因

ndata = ndata.iloc[29:, :]
tdata = tdata.iloc[29:, :]

        删除正常样本和肿瘤样本中表达量低于阈值的基因。

5. 计算差异显著的基因

gene_sig = ndata[ndata.mean(axis=1) > num_cutoff].index.intersection(tdata[tdata.mean(axis=1) > num_cutoff].index)
Ndata = ndata.loc[gene_sig]
Tdata = tdata.loc[gene_sig]

        选择正常样本和肿瘤样本中表达量高于阈值的基因,并保存为新的数据。

6. 初始化结果数据表格

p_value = [1.] * len(Ndata)
log2FoldChange = []
label = ['0'] * len(Ndata)
result = pd.DataFrame([p_value, log2FoldChange, label])
result = result.transpose()
result.columns = ['p_value', 'log2FC', 'label']
result.index = Ndata.index.tolist()
p = []

        创建一个结果数据表格,包含 p 值、log2 fold change 和标签,并初始化为默认值。

7. 进行秩和检验和差异倍数计算

for i in Ndata.index:p1 = ranksums(Tdata.loc[i], Ndata.loc[i], alternative='greater')[1]p2 = ranksums(Tdata.loc[i], Ndata.loc[i], alternative='less')[1]p3 = ranksums(Tdata.loc[i], Ndata.loc[i])[1]result.loc[i, 'log2FC'] = np.log2(np.average(Tdata.loc[i]) / np.average(Ndata.loc[i]))p.append(p3)if (p1 <= p_cutoff):result.loc[i, 'p_value'] = p1if result.loc[i, 'log2FC'] > np.log2(FC_cutoff):result.loc[i, 'label'] = '1'if (p2 <= p_cutoff):result.loc[i, 'p_value'] = p2if result.loc[i, 'log2FC'] < -np.log2(FC_cutoff):result.loc[i, 'label'] = '-1'

        对每个基因进行秩和检验,计算 p 值和差异倍数,并根据设定的阈值确定差异显著的基因,并给予标签。

8. 可视化分析

print('finished')
plt.hist(result['log2FC'], bins=10, color='blue', alpha=0.6, edgecolor='black')
plt.title("fold change")
plt.show()

9. 代码整合

import numpy as np
import pandas as pd
import scipy
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import zscore
from scipy.stats import ranksums
from pyHSICLasso import HSICLasso
from sklearn.preprocessing import LabelEncoderp_cutoff = 0.001
FC_cutoff = 3
num_cutoff = 10# 读取数据ndata normal data,tdata tumor data
ndata = pd.read_csv("normal_data.csv", index_col=0, header=0)
tdata = pd.read_csv("tumor_data.csv", index_col=0, header=0)# 箱型图
# 中位数
# QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;
# QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;
# IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。
# 异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。
ndata.iloc[1000:1010, ].transpose().plot(kind='box', title='Normal Sample Gene Boxplot', rot=30)
plt.tick_params(labelsize=10)
plt.savefig('Normal_Sample_Gene_box_plot', bbox_inches='tight')
plt.show()# delete gene expression < num
ndata = ndata.iloc[29:, :]
tdata = tdata.iloc[29:, :]
gene_sig = ndata[ndata.mean(axis=1) > num_cutoff].index.intersection(tdata[tdata.mean(axis=1) > num_cutoff].index)
Ndata = ndata.loc[gene_sig]
Tdata = tdata.loc[gene_sig]
p_value = [1.] * len(Ndata)
# log2 fold change的意思是取log2,这样可以可以让差异特别大的和差异比较小的数值缩小之间的差距
log2FoldChange = []
label = ['0'] * len(Ndata)result = pd.DataFrame([p_value, log2FoldChange, label])
result = result.transpose()
result.columns = ['p_value', 'log2FC', 'label']
result.index = Ndata.index.tolist()
p = []# 秩和检验(也叫Mann-Whitney U-test),检验两组数据是否来自具有相同中位数的连续分布,检验它们是否有显著差异。
# ’less‘ 基于 x 的分布小于基于 y 的分布
# ‘greater’ x 的分布大于 y 的分布。for i in Ndata.index:p1 = ranksums(Tdata.loc[i], Ndata.loc[i], alternative='greater')[1]p2 = ranksums(Tdata.loc[i], Ndata.loc[i], alternative='less')[1]p3 = ranksums(Tdata.loc[i], Ndata.loc[i])[1]result.loc[i, 'log2FC'] = np.log2(np.average(Tdata.loc[i]) / np.average(Ndata.loc[i]))p.append(p3)if (p1 <= p_cutoff):result.loc[i, 'p_value'] = p1if result.loc[i, 'log2FC'] > np.log2(FC_cutoff):result.loc[i, 'label'] = '1'if (p2 <= p_cutoff):result.loc[i, 'p_value'] = p2if result.loc[i, 'log2FC'] < -np.log2(FC_cutoff):result.loc[i, 'label'] = '-1'print('finished')
# 查看差异倍数fold分布
plt.hist(result['log2FC'], bins=10, color='blue', alpha=0.6, edgecolor='black')
plt.title("fold change")
plt.show()# result.to_csv('result.csv')
up_data_n = Ndata.loc[result.query("(label == '1')").index]
up_data_t = Tdata.loc[result.query("(label == '1')").index]
down_data_n = Ndata.loc[result.query("(label == '-1')").index]
down_data_t = Tdata.loc[result.query("(label == '-1')").index]
data = pd.concat([pd.concat([up_data_n, up_data_t], axis=1), pd.concat([down_data_n, down_data_t], axis=1)], axis=0)
deg_gene = pd.DataFrame(data.index.tolist())
deg_gene.to_csv('deg_gene.csv')
z1 = zscore(np.log2(data+1), axis=0)sns.heatmap(data=z1, cmap="coolwarm", xticklabels=False)
plt.savefig('heatmap_plot', bbox_inches='tight')
plt.show()p = -np.log10(p)
ax = sns.scatterplot(x="log2FC", y=p,hue='label',hue_order=('-1', '0', '1'),palette=("#377EB8","grey","#E41A1C"),data=result)
ax.set_ylabel('-log(pvalue)', fontweight='bold')
ax.set_xlabel('FoldChange', fontweight='bold')plt.savefig('deg_p_fc_plot', bbox_inches='tight')
plt.show()


 

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

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

相关文章

成都瀚网科技:抖音上线地方方言自动翻译功能

为了让很多方言的地域历史、文化、习俗能够以短视频的形式生产、传播和保存&#xff0c;解决方言难以被更多用户阅读和理解的问题&#xff0c;平台正式上线推出当地方言自动翻译功能。创作者可以利用该功能&#xff0c;将多个方言视频“一键”转换为普通话字幕供大众观看。 具体…

【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Redis是否要分库的实践

Redis的分库其实没有带来任何效率上的提升&#xff0c;只是提供了一个命名空间&#xff0c;而这个命名空间可以完全通过key的设计来避开这个问题。 一个优雅的Redis的key的设计如下

Windows历史版本下载

1、微PE工具箱&#xff08;非广告本人常用&#xff09; 常用安装Windows系统的微PE工具 地址&#xff1a;https://www.wepe.com.cn/download.html 2、Windows系统下载地址&#xff08;非微软官方&#xff09; 地址&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 下载&…

【嵌入式】使用MultiButton开源库驱动按键并控制多级界面切换

目录 一 背景说明 二 参考资料 三 MultiButton开源库移植 四 设计实现--驱动按键 五 设计实现--界面处理 一 背景说明 需要做一个通过不同按键控制多级界面切换以及界面动作的程序。 查阅相关资料&#xff0c;发现网上大多数的应用都比较繁琐&#xff0c;且对于多级界面的…

并查集LRUCache

文章目录 并查集1.概念2. 实现 LRUCache1. 概念2. 实现使用标准库实现自主实现 并查集 1.概念 并查集是一个类似于森林的数据结构&#xff0c;并、查、集指的是多个不相干的集合直接的合并和查找&#xff0c;并查集使用于N个集合。适用于将多个元素分成多个集合&#xff0c;在…

[FineReport]安装与使用(连接Hive3.1.2)

一、安装(对应hive3.1.2) 注&#xff1a;服务器的和本地的要同时安装。本地是测试环境&#xff0c;服务器的是生产环境 1、服务器安装 1、下载 免费下载FineReport - FineReport报表官网 向下滑找到 2、解压 [rootck1 /home/data_warehouse/software]# tar -zxvf tomcat…

数据挖掘(1)概述

一、数据仓库和数据挖掘概述 1.1 数据仓库的产生 数据仓库与数据挖掘&#xff1a; 数据仓库和联机分析处理技术(存储)。数据挖掘&#xff1a;在大量的数据中心挖掘感兴趣的知识、规则、规律、模式、约束(分析)。数据仓库用于决策分析&#xff1a; 数据仓库&#xff1a;是在数…

机器学习算法基础--K-means应用实战--图像分割

目录 1.项目内容介绍 2.项目关键代码 3.项目效果展示 1.项目内容介绍 本项目是将一张图片进行k-means分类&#xff0c;根据色彩k进行分类&#xff0c;最后比较和原图的效果。 题目还是比较简单的&#xff0c;我们只要通过k-means聚类&#xff0c;一类就是一种色彩得出聚类之…

快速上手kettle(三)壶中可以放些啥?

序言 快速上手kettle开篇中,我们将kettle比作壶,并对这个壶做了简单介绍。 而上一期中我们实现了①将csv文件通过kettle转换成excel文件; ②将excel文件通过kettle写入到MySQL数据库表中 这两个案例。 相信大家跟我一样,对kettle已经有了初步认识,并且对这强大的工具产…

CV面试知识点总结

一.卷积操作和图像处理中的中值滤波操作有什么区别&#xff1f; 1.1卷积操作 卷积操作是一种线性操作&#xff0c;通常用于特征的提取&#xff0c;通过卷积核的加权求和来得到新的像素值。1.2中值滤波 原文&#xff1a; https://blog.csdn.net/weixin_51571728/article/detai…

leetCode 376.摆动序列 动态规划 + 图解 + 状态转移

376. 摆动序列 - 力扣&#xff08;LeetCode&#xff09; 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如…

[尚硅谷React笔记]——第2章 React面向组件编程

目录&#xff1a; 基本理解和使用&#xff1a; 使用React开发者工具调试函数式组件复习类的基本知识类式组件组件三大核心属性1: state 复习类中方法this指向&#xff1a; 复习bind函数&#xff1a;解决changeWeather中this指向问题&#xff1a;一般写法&#xff1a;state.htm…

【最新版配置conda环境】新版pycharm导入新版anaconda环境

最近下载了新版pycharm和新版anaconda&#xff0c;并且在命令行创建了环境&#xff0c;想着在pycharm里面导入环境。结果现在的导入方式发生了变化。 之前是通过导入Python.exe进行的。 现在&#xff1a; 当我们点击进去之后&#xff0c;会发现找不到python.exe了。 具体什么…

JVM学习笔记

JVM学习笔记 复习之前学的内容&#xff0c;同时补充以下知识点&#xff1a;JVM的双亲委派机制、伊甸区与老年代相关知识&#xff1b; 双亲委派机制 双亲的含义应该就是AppClassLoader有&#xff1a;ExtClassLoader和BootstrapClassLoader“两个”父加载器。 首先介绍Java中…

Stm32_标准库_4_TIM中断_PWM波形_呼吸灯

基本原理 PWM相关物理量的求法 呼吸灯代码 #include "stm32f10x.h" // Device header #include "Delay.h"TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructuer;//结构体 GPIO_InitTypeDef GPIO_InitStructur…

【Git】Git 原理和使用

Git 一、Git 本地仓库1. 本地仓库的创建2. 配置 Git3. 工作区、暂存区、版本库4. 添加文件5. 查看 .git 文件6. 修改文件7. 版本回退8. 撤销修改9. 删除文件 二、分支管理1. 理解分支2. 创建分支3. 切换分支4. 合并分支5. 删除分支6. 合并冲突7. 分支管理策略8. bug 分支9. 强制…

TempleteMethod

TempleteMethod 动机 在软件构建过程中&#xff0c;对于某一项任务&#xff0c;它常常有稳定的整体操作结构&#xff0c;但各个子步骤却有很多改变的需求&#xff0c;或者由于固有的原因 &#xff08;比如框架与应用之间的关系&#xff09;而无法和任务的整体结构同时实现。如…

Armv8/Armv9 Cache知识大纲分享--思维导图

关键词&#xff1a;cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频&#xff0c;cache视频、mmu视频&#xff0c;armv8视频、armv9视频、FF-A视频、密码学视频、RME/CC…

Acwing 838. 堆排序

Acwing 838. 堆排序 题目描述思路讲解代码展示 题目描述 思路讲解 堆是一颗完全二叉树&#xff0c;除了最下面一层&#xff0c;其余是满的&#xff0c;最后一层从左到右排列 小根堆&#xff1a;每个点小于等于左右两堆&#xff0c;所以根节点就是最小值 大根堆&#xff1a;每个…