比较基因组——还是看我的教程吧!

一、运行orthofinder

首先 orthofinder使用的版本为2.5.* 不要使用2.2的,2.2默认比对是blast,速度非常慢,结果文件呈现形式也不让人满意。2.5默认用的diamond 速度非常快

第一步代码:
nohup orthofinder -t 40 -f data/ & # data中存放的是蛋白序列文件,建议测试时候最少使用4个物种也就是4份蛋白文件,因为我遇到了建立进化树过程中的报错,说小于4个物种不可以。

data文件内容:
data文件内容
运行结果示例:

在这里插入图片描述

第二步代码:
orthofinder -b WorkingDirectory # orthofinder运行结束后,再去运行这条命令,WorkingDirectory是orthofinder生成的,这条命令的目的是什么我也不知道,希望有大佬解读一下,参考的以下:
> https://www.jianshu.com/p/52c2b99615f6?ivk_sa=1024320u

运行完毕后:
在这里插入图片描述

##############################################伟大的分割线#####################################################

二、多序列比对并构建系统发育树:

cd Single_Copy_Orthologue_Sequences # Orthofinder的 Single_Copy_Orthologue_Sequences下存放着单拷贝同源基因的序列,我们可以利用这些序列构建系统发育树$vi bash.shfor i in *.fa
do muscle -in $i -out $i.1 # 多序列比对推荐使用muscle 记得测试下你的muscle有没有安装,我的安装了orthofinder后自动有这个软件了
done$sh bash.sh提取保守序列:
$vi bash2.sh
for i in *.1
do Gblocks $i -b4=5 -b5=h -t=p -e=.2 # Gblocks这个软件也是安装了orthofinder后自动有这个软件了
done
$sh bash2.sh#####################################################################
以下不用运行,是解释参数,复制的别人的:
-t= default:p设置序列的类型,可选的值是 p,d,c 分别代表 protein, DNA, Codons 。
-b1= default:( 序列条数的 50% + 1 ),设定保守性位点必须有 >= 该值的序列数。该参数后接一个 integer 数,默认下比序列条数的 50% 大 1.
-b2= default: 序列条数的 85%,确定保守位点的侧翼位点时,其位点必须有 >= 该值的序列数。该值必须要比 -b1 的值要大。
-b3= default: 8,最大连续非保守位点的长度。
-b4= default: 10,保守位点区块的最小长度。该值必须 >=2-b5= default: n, 设置允许含有 Gap 位点。可选的值有 n,h,a 分别代表 None, With Half, All 。 当为 h 时,表示
-e= default: .2, 设置输出结果的后缀。
作者:周小钊
链接:https://www.jianshu.com/p/52c2b99615f6序列合并:
$vi bash3.sh
for i in *.2
do seqkit sort $i >$i.3
seqkit seq $i.3 -w 0 > $i.3.4 # seqkit这个软件也是安装了orthofinder后自动有这个软件了,没有的话自行安装,conda就可以
done
$sh bash3.sh$mkdir new
$mv *.4 new/
$cd new
$paste -d " " *.4 > all.fa  # 这条命令可能会遇到以下报错:paste: OG0008914.fa.1.2.3.4: Too many open files。见图。
# 因此我将其改为R代码

在这里插入图片描述

# R代码:
# 获取当前目录下以".4"结尾的文件列表
file_list <- list.files(pattern = "\\.4$")# 创建一个空的矩阵,用于存储合并后的数据
merged_data <- matrix(nrow = 8, ncol = length(file_list)) #由于我使用了4个物种,所以每个OG开头的*.4结尾的文件里有8行,这里行数要根据自己需要更改# 逐个读取文件的内容并存储到矩阵中
for (i in 1:length(file_list)) {file_path <- file_list[i]file_contents <- readLines(file_path)# 将文件内容按行存储到矩阵的对应列中merged_data[, i] <- file_contents
}# 将矩阵转换为数据框,并设置列名
merged_data <- as.data.frame(merged_data)
colnames(merged_data) <- file_list# 将数据框写入到文件"all.fa"中,使用空格作为分隔符
write.table(merged_data, file = "all.fa", quote = FALSE, row.names = FALSE, sep = " ")

在这里插入图片描述

生成的文件长这样:
在这里插入图片描述
可以看到第一行是一堆文件名字,删除就可以。
第二、四、六、八行改成每个物种的名字,我的是之间按照物种蛋白质文件的顺序排列的,别人的应该也一样,如果不确定,使用以下命令检查:

cat ASM1339834v1.faa | grep '随便检索一个>名字' # 如果不确定就多检索几个。

以下是我操作截图:
在这里插入图片描述
修改后的文件长这样:

在这里插入图片描述
我的蛋白文件长这样:
OrthoFinder/ 文件夹是运行OrthoFinder后生成的。
在这里插入图片描述
接下来运行以下命令去除空格:

sed -i "s/ //g" all.fa # 去除all.fa中的空格

接下来使用Python将all.fa转为phy格式

import re
with open('all.fa', 'r') as fin:sequences = [(m.group(1), ''.join(m.group(2).split()))for m in re.finditer(r'(?m)^>([^ \n]+)[^\n]*([^>]*)', fin.read())]
with open('all.phy', 'w') as fout:fout.write('%d %d\n' % (len(sequences), len(sequences[0][1])))for item in sequences:fout.write('%-20s %s\n' % item)
# 这里我是将以上复制到了一个phy.py的文件中,然后使用python phy.py运行,看以下截图 python版本为3.12.2

在这里插入图片描述

接下来使用iqtree2构建系统发育树:

iqtree -s all.phy -m MFP -B 1000 --bnni -T AUTO #参考链接:https://cloud.tencent.com/developer/article/1991339?areaSource=&traceId=        
# 感觉这个运行了好久~

生成了以下截图中的文件,将all.phy.treefile 这个树文件传到ITOL进行美化。
在这里插入图片描述
在这里插入图片描述
进化树制作到此结束。

##############################################伟大的分割线#####################################################

三、基因家族扩张与收缩分析

首先利用OrthoFinder的Orthogroups.GeneCount.tsv文件生成符合要求的输入文件:

cp Results_May02/Orthogroups/Orthogroups.GeneCount.tsv CAFE/
cd CAFE/
awk 'OFS="\t" {$NF=""; print}' Orthogroups.GeneCount.tsv > tmp && awk '{print "(null)""\t"$0}' tmp > cafe.input.tsv && sed -i '1s/(null)/Desc/g' cafe.input.tsv && rm tmpawk 'NR==1 || $3<100 && $4<100 && $5<100 && $6<100 {print $0}' cafe.input.tsv >gene_family_filter.txt # 这里有几个物种就写到几加2,比方说我的4个物种,就写到$6<100

运行以下代码:

cafe5 -i gene_family_filter.txt -t SpeciesTree_rooted_node_labels.txt -o out -c 1 -k 2 -p # 这个树文件是不是用这个我不确定
# cafe用conda安装就行
# 结果文件在out中

结果文件展示:

在这里插入图片描述
结果文件解读:
Gamma_asr.tre ## 每个基因家族的树文件
Gamma_branch_probabilities.tab ## 每个分支计算的概率
Gamma_category_likelihoods.txt
Gamma_change.tab ## 每一个基因家族在每个节点的收缩与扩增数目
Gamma_clade_results.txt ##每个节点基因家族的扩增/收缩数目
Gamma_count.txt ## 每一个基因家族在每个节点的数目
Gamma_family_likelihoods.txt
Gamma_family_results.txt ## 基因家族变化的p值和是否显著的结果
Gamma_results.txt ## 模型,最终似然值,最终Lambda值等参数信息。

接下来画图:

使用CAFE_fig 软件画图,软件地址:https://github.com/LKremer/CAFE_fig

命令:

python ../CAFE_fig-master/CAFE_fig.py Gamma_report.cafe -pb 0.05 -pf 0.05 --dump test/ -g pdf --count_all_expansions  
# test/ 意思是生成一个test文件结果放在test下

解决CAFE_fig报错:

运行前要先运行以下:

pip install ete3  # 这个github上是pip3 install 'ete3==3.0.0b35' 建议还是使用我的命令,因为使用官网的我遇到了from ete3 import TreeStyle报错的问题
pip install six
pip install numpy

完事打开Python测试一下TreeStyle是否能导入

python3
from ete3 import TreeStyle
# 如果不报错那么也仅仅是成功了一半

如果继续报错说TreeStyle不能导入的问题,那么使用conda新创建一个名为pyqt的环境进行以下命令:

conda creat --name pyqt
conda install pyqt #如果慢可以使用mamba,自行搜索怎么用

这时候重新运行:

pip install ete3  # 这个github上是pip3 install 'ete3==3.0.0b35' 建议还是使用我的命令,因为使用官网的我遇到了from ete3 import TreeStyle报错的问题
pip install six
pip install numpy

完事打开Python测试一下TreeStyle是否能导入

python3
from ete3 import TreeStyle
# 还是那句话,如果不报错那么也仅仅是成功了一半,这时候运行这个你大概不会报错了

接下来你运行时候可能会遇到以下报错:
在这里插入图片描述
这个我也没解决,可能是没显卡问题?请大佬指点。因此我使用mac电脑来下载的CAFE_fig
之后还是刚才的操作:
创建pyqt环境并安装pyqt,进入环境运行Python,测试TreeStyle是否能导入,全部成功。
然后运行了CAFE_fig 没有报错:

python ../CAFE_fig-master/CAFE_fig.py Gamma_report.cafe -pb 0.05 -pf 0.05 --dump test/ -g pdf --count_all_expansions  
# test/ 意思是生成一个test文件结果放在test下

test下生成的文件展示:
在这里插入图片描述
生成的图很丑,可能是我物种数太少的原因,和CAFE_fig官网一点都不一样,就不展示了,自己调吧,或者有大佬指点一下给个代码?
################################################
找某个节点显著扩张/收缩的基因家族/基因信息

cat Gamma_change.tab |cut -f1,15|grep "+[1-9]" >sample.expanded #提取Gamma_change.tab第15列代表物种sample的扩张的orthogroupsID;  这里为什么要[1-9]呢有没有大佬解读一下
# 这里我的数据里没有加号,我用的cat Gamma_change.tab |cut -f1,15|grep "[1-9]" >sample.expanded 
cat Gamma_change.tab |cut -f1,15|grep "-" >sample.contracted  #提取Gamma_change.tab第15列代表物种sample的收缩的orthogroupsID
grep "sample<13>\*" Gamma_asr.tre > sample_significant_trees.tre # 根据sample ID和编号提取sample分支的基因家族显著扩张或收缩的基因家族树(Gamma_asr.tre文件中默认以p<0.05为标准判断变化是否显著)
grep -E -o "OG[0-9]+" sample_significant_trees.tre > sample_significant.ogs # 提取sample分支显著变化的OG IDs (默认以p<0.05为标准)
awk '$2 <0.01 {print $1}' Gamma_family_results.txt >p0.01_significant.ogs # 以p<0.01为标准提取所有显著扩张或收缩的orthogroupsID(根据情况调整,常用p<0.05或p<0.01)
grep -f sample_significant.ogs p0.01_significant.ogs > sample_p0.01_significant.ogs # 提取以p<0.01为标准判断显著性的sample分支基因家族显著变化的OG IDs。
grep -f sample_p0.01_significant.ogs sample.expanded |cut -f1 >s ample.expanded.significant #提取显著扩张的sample物种的orthogroupsID
grep -f sample_p0.01_significant.ogs sample.contracted |cut -f1 > sample.contracted.significant #提取显著收缩的sample物种的orthogroupsID
grep -f sample.expanded.significant ./OrthoFinder/Results_Oct14/Orthogroups/Orthogroups.txt |sed "s/ /\n/g"|grep "bv" |sort -k 1.3n |uniq >sample.expanded.significant.genes #提取显著扩张的基因列表,假设基因ID是bv的前缀。
# 问:这里要是有多个物种的基因前缀是'bv'呢 求大佬解读
grep -f sample.contracted.significant ./OrthoFinder/Results_Oct14/Orthogroups/Orthogroups.txt | sed "s/ /\n/g"|grep "bv" |sort -k 1.3n |uniq >sample.contracted.significant.genes #提取显著收缩的基因列表,假设基因ID是bv的前缀。
seqkit grep -f sample.expanded.significant.genes sample.pep.fa >sample.expanded.significant.pep.fa #提取显著扩张的基因序列
seqkit grep -f sample.contracted.significant.genes sample.pep.fa >sample.contracted.significant.pep.fa #提取显著收缩的基因序列
# 这段来源:https://yanzhongsino.github.io/2021/10/29/bioinfo_gene.family_CAFE5/

结果示例:
在这里插入图片描述
这一节结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

##############################################伟大的分割线#####################################################
明天再做,物种分歧时间那个有点看不懂怎么填那个基准时间

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

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

相关文章

【网页实战项目设计】基于SSM的医院预约挂号系统

基于SSM的医院预约挂号系统 项目截图 开发环境与技术框架 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&a…

实战whisper第二天:直播语音转字幕(全部代码和详细部署步骤)

直播语音实时转字幕&#xff1a; 基于Whisper的实时直播语音转录或翻译是一项使用OpenAI的Whisper模型实现的技术&#xff0c;它能够实时将直播中的语音内容转录成文本&#xff0c;甚至翻译成另一种语言。这一过程大致分为三个步骤&#xff1a;捕获直播音频流、语音识别&#x…

在线教育话术(1W字精选)

产品结构图 Nginx实现代理 问&#xff1a;我们在本机的host文件中配置了域名映射&#xff0c;都是同一个服务器。我们只需要输入对应的域名就可以到对应的界面&#xff0c;这是怎么实现的&#xff1f; 答&#xff1a;主要就是通过Nginx反向代理来实现的&#xff0c;Nginx会先…

2024-03-20 作业

作业要求&#xff1a; 1> 创建一个工人信息库&#xff0c;包含工号&#xff08;主键&#xff09;、姓名、年龄、薪资。 2> 添加三条工人信息&#xff08;可以完整信息&#xff0c;也可以非完整信息&#xff09; 3> 修改某一个工人的薪资&#xff08;确定的一个&#x…

电影aac是什么意思?如何播放、转换、编辑aac?

"电影AAC"这个术语可能是指电影中的音频编码格式。AAC&#xff08;Advanced Audio Coding&#xff09;是一种常见的音频编码格式&#xff0c;通常用于压缩音频文件&#xff0c;以在保持高质量的同时减小文件大小。在电影中&#xff0c;AAC格式的音频通常用于提供高质…

Java学习笔记NO.25

T2.编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。要求&#xff1a; (1)定义乐器类Instrument&#xff0c;包括方法makeSound() (2)定义乐器类的子类&#xff1a;二胡Erhu、钢琴Piano和小提琴Violin (3)定义乐手类…

H12-811题库(带解析,亲测高分可以通过)

大家可以直接点赞关注后&#xff0c;加作者微信&#xff08;备注“CSDN”&#xff09;就可以获取&#xff0c;微信在文章最后&#xff01; 808、[单选题]某公司网管要进行网络规划的时候&#xff0c;能够要让PC1访问PC2的数据包从G0/0/0口走(图上G0/0/2)。PC2访问PC1的数据包从…

浅谈RPC的理解

浅谈RPC的理解 前言RPC体系Dubbo架构最后 前言 本文中部分知识涉及Dubbo&#xff0c;需要对Dubbo有一定的理解&#xff0c;且对源码有一定了解 如果不了解&#xff0c;可以参考学习我之前的文章&#xff1a; 浅谈Spring整合Dubbo源码&#xff08;Service和Reference注解部分&am…

网络世界的城关——网卡

网络世界的城关——网卡 网卡到底是什么&#xff1f;网卡的功能网卡的真面目网卡的组成网卡的种类1.基于网络连接方式分类2.基于总线接口类型分类3.基于接口类型的分类4.基于传输速度的分类5.基于应用领域的分类 网卡到底是什么&#xff1f; 网卡我们可以这样通俗地理解&#x…

游戏平台出海运营有难度吗?

随着全球互联网的飞速发展&#xff0c;游戏产业已经成为了文化娱乐领域的重要支柱。在这个背景下&#xff0c;越来越多的游戏平台开始寻求出海运营&#xff0c;以拓展海外市场&#xff0c;实现更大的商业价值。然而&#xff0c;游戏平台出海运营并非易事&#xff0c;其中涉及到…

‍Java OCR技术全面解析:六大解决方案比较

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

个人可以做知识付费网站吗

个人可以做知识付费网站吗 个人能够做学问付费网站吗&#xff1f;答案是肯定的&#xff01;如今个人做学问付费网站并不需求太多的资金和技术支持&#xff0c;我们只需求购置一台效劳器或虚拟主机&#xff0c;然后在该主机空间上搭建一个WordPress网站&#xff0c;最后运用带有…

【C语言】数9的个数

编写程序数一下 1到 100 的所有整数中出现多少个数字9 1&#xff0c;首先产生1~100的数字。然猴设法得到数9个数&#xff0c;例如个位&#xff1a;19%109&#xff0c;十位&#xff1a;91/109。 2&#xff0c;每次得到数九的时候&#xff0c;就用一个变量来进行计数。 代码如…

【极简无废话】open3d可视化torch、numpy点云

建议直接看文档&#xff0c;很多都代码老了&#xff0c;注意把代码版本调整到你使用的open3d的版本&#xff1a; https://www.open3d.org/docs/release/tutorial/visualization/visualization.html 请注意open3d应该已经不支持centos了&#xff01; 从其他格式转换成open3d…

MySQL 索引的10 个核心要点

文章目录 &#x1f349;1. 索引底层采用什么数据结构&#xff1f;为什么不用hash&#x1f349;2. B树与B树区别&#xff1f;为何用B树&#xff1f;&#x1f349;3. 自增主键理解&#xff1f;&#x1f349;4. 为什么自增主键不连续&#x1f349;5. Innodb为什么推荐用自增ID&…

ISP技术综述

原文来自技术前沿&#xff1a;ISP芯片终极进化——VP芯片&#xff08;AI视觉处理器&#xff09; 目录 1.计算机视觉的定义 2.与计算机视觉密切相关的概念与计算机视觉密切相关的概念有机器视觉&#xff0c;图像处理与分析&#xff0c;图像和视频理解。 3.计算机视觉的应用 …

RIPGeo代码理解(四)model.py( RIPGeo的核心源代码)

​ 代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.…

六种GPU虚拟化:除了直通、全虚拟化 (vGPU)还有谁?

在大类上计算虚拟化技术有这3种&#xff1a; 软件模拟、直通独占(如网卡独占、显卡独占)、直通共享&#xff08;如vCPU 、vGPU&#xff09;。但对于显卡GPU而言我总结细化出至少这6种分类&#xff1a; 第一种、软件模拟&#xff08;eg sGPU&#xff09;, 又叫半虚拟化。第二种…

RIPGeo代码理解(三)layers.py(注意力机制的代码)

代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.py #…

STM32CubeMX学习笔记23---FreeRTOS(任务的挂起与恢复)

1、硬件设置 本实验通过freertos创建两个任务来分别控制LED2和LED3的亮灭&#xff0c;需要用到的硬件资源 LED2和LED3指示灯串口 2、STM32CubeMX设置 根据上一章的步骤创建两个任务&#xff1a;STM32CubeMX学习笔记22---FreeRTOS&#xff08;任务创建和删除&#xff09;-CS…