毕设日志3:CAFA3的使用

关于CAFA3的使用

相关链接:CAFA-evaluator/README.md at main · BioComputingUP/CAFA-evaluator · GitHub
已知:相关

1.文件路径确认(文件格式要求参见以上链接):

记录GT文件URL:(sftp://ubuntu@117.50.81.106)/home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv

记录obo本体文件URL:/home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo
记录Pred文件URL:/home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv

观察URL输入文件是否符合格式,符合格式的话,CAFA3的使用命令
 

python evaluate.py \
  -pred /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv \
  -ref /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -obo /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  -out /home/ubuntu/yun/CAFA-evaluator/results

2.可以使用以下命令调节参数:

-ont:指定 GO 本体(bpo、mfo 或 cco),默认为 bpo。

-mode:指定评估模式(partial 或 full),默认为 partial。

-t:指定阈值(用于计算 F-max),默认为 0.0。

例如:
python evaluate.py -pred data/predictions.txt -ref data/ground_truth.txt -out results/ -ont mfo -mode full -t 0.5

(因为我在毕设主要参考实验相关论文中没有找到关于CAFA3中参数设置相关细节,所以暂定为默认值)

3.结合以上信息得到完整命令:

python evaluate.py \
  -pred /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv \
  -ref /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -obo /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  -out /home/ubuntu/yun/CAFA-evaluator/results \
  -ont bpo \
  -mode partial \
  -t 0.0

4.后来发现不对,好像有点看错了:运行下面命令会告诉你找不到文件

python evaluate.py --help

才发现启动文件是cafaeval里的__main__.py文件,但是运行这个文件也还是报错:

Traceback (most recent call last):
  File "evaluation.py", line 5, in <module>
    from cafaeval.parser import obo_parser, gt_parser, pred_parser
  File "/home/ubuntu/yun/CAFA-evaluator/src/cafaeval/parser.py", line 142
    with (open(pred_file) as f):
                          ^
SyntaxError: invalid syntax
#这是报错#


相关报错被后面的操作覆盖了,所以没办法截屏。

解决办法:

nano /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/parser.py
#打开然后把142行代码最外面括号删掉就好,ctrl+x退出#

然后运行以下命令:

python __main__.py --help
#要在src/cafaeval下执行,或者干脆复制完整地址让文件能被找到#

理想输出:

可以看到第一行运行 evaluation.py是没用的,__main__.py才是入口。

5.那么之后就要稍微修改命令为:

python __main__.py \
  -pred /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv \
  -ref /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -obo /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  -out /home/ubuntu/yun/CAFA-evaluator/results \
  -ont bpo \
  -mode partial \
  -t 0.0

  5.1然后再运行尝试: 失败,告诉我要用python3,修改如下:
 

python3 __main__.py \
  -pred /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv \
  -ref /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -obo /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  -out /home/ubuntu/yun/CAFA-evaluator/results \
  -ont bpo \
  -mode partial \
  -t 0.0

5.2修改python3再尝试:告知我缺失No module named 'numpy' ,但是我记得我一定安了,退到包含numpy主目录再运行完整代码目录如下:

以上证明numpy确实安装到虚拟环境中了(以上在vscode终端输入)

python3 /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/__main__.py \
  -pred /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv \
  -ref /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -obo /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  -out /home/ubuntu/yun/CAFA-evaluator/results \
  -ont bpo \
  -mode partial \
  -t 0.0

5.3还是报错:

发现可能是root模式覆盖虚拟环境了,exit退回虚拟环境

5.4再试一次,这是什么情况我看看:

至少不报错说缺少numpy了,说明上一步没错。这个可能是格式问题:休息一下ing 

好的回来了,再输一遍然后分析一下什么毛病:

1)-t想调阈值要指定,要修--th_step。或者反正我也用默认值,删掉也行。

2)选项参数不需要标出来,按默认位置输入就好

3)调整一下参数位置

好,调好就是下面这样:

python3 /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/__main__.py \
  /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/ \
  /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -out_dir /home/ubuntu/yun/CAFA-evaluator/results \
  -ont bpo \
  -mode partial \
  --th_step 0.0

5.5 好,再试一次

还是报格式错误,可能是参数格式问题,去相关CAFA3源代码看看

# 核心参数定义(源码节选)
parser.add_argument("obo_file", type=str, help="Path to the OBO file.")
parser.add_argument("pred_dir", type=str, help="Path to the prediction directory.")
parser.add_argument("gt_file", type=str, help="Path to the ground truth file.")
parser.add_argument("-out_dir", type=str, default=".", help="Output directory.")
parser.add_argument("-ia", type=str, help="...")
parser.add_argument("-no_orphans", action="store_true", help="...")
# 没有 -ont/-mode/--th_step 参数!
#根据usage信息,正确的位置参数是obo_file、pred_dir、gt_file,而选项参数包括-out_dir、-ia、-no_orphans、-norm、-prop、-th_step、-max_terms、-threads、-log_level等。因此,用户使用的-ont、-mode并不是有效的参数,需要替换为工具支持的参数。#

看起来好像是说明文档过时了没有修改,根据原代码可以知道 ont,mode都是非法参数,th_step必须大于0小于0.1,按照新文档备注修改参数如下(几乎按照修改前意思都是默认值)(注意:新代码可以根据预测文件名判断bp,mf,cc分类所以不需要ont标注):

python3 /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/__main__.py \
  /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/ \
  /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -out_dir /home/ubuntu/yun/CAFA-evaluator/results \
  -prop fill \
  -norm cafa \
  -th_step 0.1

5.6 好,再试一次

成功起步运行了,但是还是有错误,分析一下错误是什么:

根据报错信息 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte,可以确定以下问题:

1)文件编码问题
工具尝试以 UTF-8 编码读取预测文件(results_bp.csv 或其他文件),但文件实际编码可能为其他格式(如 ASCII、ISO-8859-1 或 Windows-1252),导致解码失败。

2)文件内容异常
文件开头包含非法字符(如 0x80),可能是由于文件生成时使用了不兼容的编码方式,或文件被意外损坏。

3)预测文件格式问题
预测文件可能未按 CAFA 格式要求生成(每行格式应为 <蛋白ID>\t<GO术语>\t<置信度>),导致解析失败。

先从第一个问题验证:

vscode界面预测文件.csv显示出来是这样的,应该符合内容要求。

1)使用file 命令检查文件编码:

(deepss2go_env) ubuntu@10-60-148-216:~$ file -i /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv
/home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv: application/csv; charset=us-ascii

这里检查发现是ASCII码不符合输入要求,问题1)确认,需要使用icnov命令将文件从us-ascii转换为UTF-8,并保存到目标文件夹:

iconv -f US-ASCII -t UTF-8 /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/results_bp.csv -o /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/predictions/results_bp_utf8.csv

 理想结果,按照此法把mf和cc也转换一下

第一个问题应该解决了,要注意用CAFA3的时候要把预测文件改成.utf8文件所在位置

2)关于内容验证,原内容格式是原实验设计好的应该没有错误问题,保留意见

3)若发现非法字符(如 0x80),使用 sed 或 tr 清理文件:涉及改动源文件,与2)同保留意见,不行再备份源文件然后修改尝试

5.7 好的,修改1)后再试一遍:

python3 /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/__main__.py \
  /home/ubuntu/yun/DeepSS2GO/PredictNew/s3_PredictNew_AlphaBeta/s3_AlphaBeta_bpccmf/data/go.obo \
  /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/predictions/ \
  /home/ubuntu/yun/CAFA-evaluator/src/cafaeval/data/example/ground_truth.tsv \
  -out_dir /home/ubuntu/yun/CAFA-evaluator/results \
  -prop fill \
  -norm cafa \
  -th_step 0.1 \
  -log_level debug

结果比之前好,应该是运行一遍但是靠后的程序出现问题了:

分析问题:分析说是文件内容问题,最不想的来了 ,我是不想改的,原实验输入格式就是这样,用的也确实是CAFA3,中间需要转换成utf-8我都当作者可能省略了,直接改预测文件格式不说麻烦是否还听起来就也不很靠谱。

5.8用测试文件试一下是不是程序有问题吧:

用CAFA3下载时的原测试文件也报错了 ,说明格式问题应该不是首要问题,先分析一下是不是相同错误吧:

5.8 搞错了ground_truth文件,我以为下载的安装包里给的是完整通用的,没想到不是,那么就找找我复现的实验用到的ground_truth文件,但是它没有附,于是顺着引用相关寻找中ing


5.9 回来了,中间走了很多弯路,最后是去Uniprot官网下了Swissprot的数据集,然后用python脚本处理下载到的.dat文件得到蛋白质名称+GO术语ID,不过处理出来的多了好几倍,现在排查原因中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值