水稻MSU和RAP格式ID转换
本帖最后由 Anome 于 2023-5-5 22:34 编辑### 1.作用
如题,水稻有两种注释,分别是(https://rapdb.dna.affrc.go.jp/)和(http://rice.uga.edu/),分别使用RAP和MSU两种格式的基因ID,RAP格式为“Os-Chr-g-number”,MSU格式为“LOC_Os-Chr-g-number”。有时候需要将它们互相转化。Ensembl plant数据库和RAP-DB数据库都可以在线转换,但是感觉下载不是很方便,所以自己写了一个转换用的脚本。
### 2.用法
- 使用了pandas包,没有安装的需要安装一下。
- 将需要转换的基因id复制到文件raw_id.txt里,一行一个基因ID
- 直接运行脚本即可
- 我是直接判断第一行是不是Os开头的,是就认为是RAP格式,不是就认为是MSU格式,所以第一行不要写其他东西,要符合RAP或者MSU的格式。代码中有注释说明
### 3.文件说明
- **gene_id_conversion.py** 为脚本本身
- **RAP-MSU_2023-03-15.txt** 为从RAP-DB数据库下载的两种ID对应的文件。里面挺多其中一种ID有而另外一种没有。如果数据库中这个有更新,可以自己去下载,然后替换掉这个文件,将代码中读取这个文件的那一行改成新文件。
- **raw_id.txt** 需要将你需要转换的id复制到这里
- **result.txt** 这个是转换成功的,脚本运行结束后打开这个文件copy即可。
- **result_None.txt** 这个对应其中一种id存在而另外一种id不存在的情况,例如基因Os01g0100300在RAP中存在,但是对应到MSU中则没有,为None。
- **result_no_exist.txt** 对应的是不存在这种ID,例如不小心写入了OOOs1323这种错误的id,或者是其他格式的ID,则会写入到这个文件里。
- 我的压缩包里的文件里有内容,是我之前进行转换的时候存在的,可以按照raw_id.txt里的那种进行输入。
### 4.代码
```python
import pandas as pd
# 读取文件
df = pd.read_csv('RAP-MSU_2023-03-15.txt', sep='\t', header=None)
# 获取用户输入。下面这些本来是手动选择转换的形式的,后来来回转换每次都选择太麻烦了,就删除了,可以直接删掉
# col_num = int(input("请输入要转换的形式(输入1或2):\n1:RAP -> MSU\n2:MSU -> RAP\n"))
# search_dir = input("请输入要转换的id所在文件路径:")
# with open(search_dir, "r") as f:
# search_values = f.read().split()
with open("raw_id.txt", "r") as f:
search_values = f.read().split()
# 确定要检索的列。同上,可以直接删掉
# if col_num == 1:
# search_col = 0
# result_col = 1
# else:
# search_col = 1
# result_col = 0
# 我是直接判断第一行是不是Os开头的,是就认为是RAP格式,不是就认为是MSU格式,所以第一行不要写其他东西,要符合RAP或者MSU的格式。
if search_values.startswith("Os"):
search_col = 0
result_col = 1
else:
search_col = 1
result_col = 0
# 将df转换为字典形式
id_dict = dict(zip(df.iloc[:, search_col], df.iloc[:, result_col]))
# 检索值并输出结果
res = []
res_n = []
no_res = []
for value in search_values:
if value in id_dict.keys():
result = id_dict
if result != "None":
res.append(result)
else:
res_n.append(f"{value} None")
else:
no_res.append(f"{value} 不存在")
res = '\n'.join(res)
res_n = '\n'.join(res_n)
no_res = '\n'.join(no_res)
with open("result.txt", "w", encoding="utf-8") as f:
f.write(res)
with open("result_None.txt", "w", encoding="utf-8") as f:
f.write(res_n)
with open("result_no_exist.txt", "w", encoding="utf-8") as f:
f.write(no_res)
```
支持原创,感谢分享。 吼吼,是袁隆平搞的东西吗?? xixicoco 发表于 2023-5-6 06:57
吼吼,是袁隆平搞的东西吗??
啊这,还没那么高级,哈哈,是生信分析用到的一小步,之前用其中一种ID进行的align,后来发现有的功能不能用这种id来实现,只能转成另一种来做。
页:
[1]