2024.09.03【代码实现L1】|使用AI助手0编程基础写脚本

【代码实现L1】| 生信小白0编程基础编写统计脚本


出品| 木青生信大模型
作者| 穆易青、kimi

最近工作比较忙,更新有点慢,希望后面能够加快更新速度。
在生物信息学领域,数据处理和分析是日常工作的重要组成部分。写论文也需要通过表格对结果进行统计比较。对于没有编程基础的生信小白来说,编写一个统计脚本可能是一项挑战。

表1 细菌组装注释结果统计表(示例)

Sequence IDGenome size (bp)GC content (%)CDSs num (#)Average Protein Len (bp)Coding Ratio (%)
Sample1_pilon3,146,35956.33,471268.588.9
Sample2_pilon3,155,27956.33,472269.589.0
Sample3_pilon3,160,12356.53,455267.089.5
Sample4_pilon3,140,56756.13,438265.588.0
Sample5_pilon3,130,78955.93,410264.087.5

尽管通过excel将本地数据一个个不断Ctrl+CCtrl+V,但遇到如群体遗传分析大样本量情况,挨个复制粘贴显然不现实。今天这篇文章将会以统计脚本为例,讲解如何与AI助手的合作,即使是编程新手也能够快速上手。本文将指导你如何向AI助手提供清晰的指令和要求,以便它能够为你生成一个准确无误的统计脚本。

为什么需要AI助手?

AI助手,如Kimi,可以帮助你:

  1. 理解需求:通过对话理解你的具体需求。
  2. 生成代码:根据你的需求生成相应的代码。
  3. 调试和优化:帮助你检查和优化代码,确保其正确性和效率。

如何向AI助手提供指令?

  1. 明确需求:首先,提供详细的描述,如数据的来源路径、格式;其次,指定脚本语言、工具和库;最后,明确你想要实现的目标(如何处理)与需求。
  2. 提供示例:如果可能,给出输入和期望输出的示例,这样AI助手可以更准确地理解你的需求。
  3. 指定工具和库:如果你有特定的工具或库要求,比如使用Python和Pandas,也要明确告知。
  4. 描述错误处理:如果你希望脚本能够处理特定的错误或异常,也要提前说明。

示例:编写统计脚本

假设你需要一个Python脚本,用于从多个样品文件夹内的statistics.txt文件中提取数据,并汇总到一个表格中。以下是如何向AI助手提供指令:

  1. 明确任务

User:我需要一个Python脚本,用于统计每个sample文件夹内的statistics.txt文档,并将结果汇总到一个csv表格中。

加粗位置都有对应明确的要求,比如我让AI助手用我熟悉的语言进行编写,没有编程基础的读者可以让助手用bash写shell脚本。而后面对文档的描述一定要清晰,如文档名称和相对路径,这样才能尽可能地让AI助手生成脚本可以准确地提取文档信息。

  1. 提供输入/输出格式
    输入文件名:sample/statistics.txt
    输入格式:
    "Total Sequence Length (bp)	3260264
    Number of Sequences	17
    Longest Sequences (bp)	971111
    ..."
    
    输出参考格式:
    "Sequence ID	Genome size(bp)	GCcontent(%)	CDSs num(#)	Average Protein Len(bp)	Coding Ratio(%)
    SAMPLE1_pilon	3146359	56.3	3471	268.5	88.9
    ..."
    

提供示例是提示工程里非常重要的一个技巧。第一个要求就是对输入,输出的格式用冒号+双引号扩入表示,以免AI将要求与格式混合。这里输入/输出的格式也非常重要,经常会遇到的就是文本之间分隔有的是空格,有的是分隔符。如果对分隔符文档进行全选复制,粘贴给AI助手后会变成空格分隔,导致生成的脚本出现bug。如果能输入markdown格式最好,可以将输入,输出格式先让AI助手转换成markdown格式,进行校正(AI识别错误会在markdown格式中体现)再进行输入。

后面两点比较高级,适合有基础的读者使用。

  1. 指定工具和库
    请使用Python语言
    利用第三方库(如Pandas)来处理数据(有编程基础可选)。
    明确工具和相应参数
    

指定工具属于比较高级的应用,更适合做一些指向性明确的分析。对于初学者而言,并不清楚什么工具做什么分析;而有编程基础的研究人员,就可以明确清楚哪些工具可以进行什么分析。需要注意的是,仅仅提供工具的名称可能会出现模型幻觉问题,即AI助手将多个类似功能的工具参数进行混用,或者无中生有,生成一个工具本身没有的参数。解决方案是在要求写代码前,先向AI助手提供相关的github链接,或者上传工具的使用文档让AI助手理解,以提高工具的使用准确性。

  1. 描述错误处理
    如果遇到无法读取的文件或格式错误,请在脚本中添加错误处理机制。
    

同样属于高级内容,当遇到比较复杂的分析情况时,通常会遇到一些错误,如某行数据为空,行列不一致等情况,和自己写代码的时候差不多,需要实际情况实际处理。在执行一次代码遇到报错后,需要详细描述报错内容,并向AI助手请求提供解决方案,比如遇到样品部分表达水平为空,需要强调对为空的数据进行替换或者归一化。或者,当生成结果与预期不一致时,可以重新调整指令,重点强调AI哪里没有做对,应该如何做。

AI助手生成的代码

根据上述指令,AI助手会生成以下代码:

import os
import pandas as pd

input_dir = 'sample'
output_file = 'summary_statistics.csv'

summary_df = pd.DataFrame(columns=[
    'Sequence ID', 'Genome size(bp)', 'GCcontent(%)', 'CDSs num(#)', 
    'Average Protein Len(bp)', 'Coding Ratio(%)'
])

for root, dirs, files in os.walk(input_dir):
    for file in files:
        if file == 'statistics.txt':
            file_path = os.path.join(root, file)
            with open(file_path, 'r') as f:
                lines = f.readlines()
                data = {line.split('\t')[0].strip(): line.split('\t')[1].strip() for line in lines}
                row = {
                    'Sequence ID': os.path.basename(root),
                    'Genome size(bp)': data['Total Sequence Length (bp)'],
                    'GCcontent(%)': data['GCcontent (%)'],
                    'CDSs num(#)': data['Number of CDSs'],
                    'Average Protein Len(bp)': data['Average Protein Length'],
                    'Coding Ratio(%)': data['Coding Ratio (%)']
                }
                summary_df = summary_df.append(row, ignore_index=True)

summary_df.to_csv(output_file, index=False)
print(f'Summary statistics have been written to {output_file}')

对我而言,pandas库其实我不是很熟,但是因为有python基础,这个代码我是可以读懂的,能读懂的意思就是可以改。我在样品文件夹当前路径vim创建了一个py脚本,把代码复制粘贴进去,把input_dir = 'sample'改成input_dir = './'(如果指令中说当前路径下的文件夹或许这里也不用改)。直接运行,结果非常顺利生成了统计文档。

Sequence IDGenome size (bp)GC content (%)CDSs num (#)Average Protein Len (bp)Coding Ratio (%)
Sample1_pilon3,146,35956.33,471268.588.9
Sample2_pilon3,155,27956.33,472269.589.0
Sample3_pilon3,160,12356.53,455267.089.5
Sample4_pilon3,140,56756.13,438265.588.0
Sample5_pilon3,130,78955.93,410264.087.5

总结

示例中还有很多可以优化的地方,比如输出文档的名称没有要求、输出参考格式应当强调列名的统一(或者说不应该用参考二字),实际情况是我生成的代码将statistics.txt里面所有的结果都做了一行进行汇总统计,而不是我指定输出的五列结果(AI助手生成的代码已是二次调整后生成)。另外input_dir = 'sample'这里只是一个示例,需要读者自己选择在哪里执行脚本来运行。

通过向AI助手提供清晰的指令和要求,即使是没有编程基础的生信小白也能够获得一个定制的统计脚本。记住,与AI助手的沟通越明确,生成的代码就越能满足你的需求。不要害怕提问和提供反馈,这是提高代码质量和效率的关键。

🌟 非常感谢您抽出宝贵的时间阅读我的文章。如果您觉得这篇文章对您有所帮助,或者激发了您对数据科学的兴趣,我诚挚地邀请您:

👍 点赞这篇文章,让更多人看到我们共同的热爱和追求。
🔔 关注我的账号,不错过每一次知识的分享和探索的旅程。
📢 您的每一个点赞和关注都是对我最大的支持和鼓励,也是推动我继续创作优质内容的动力。
📚 我承诺,将持续为您带来深度与广度兼具的数据科学内容,让我们一起在知识的海洋中遨游,发现更多未知的奇迹。
💌 如果您有任何问题或想要进一步交流,欢迎在评论区留言,我会尽快回复您。
🌐 点击下方的微信名片,获取本书资料,加入交流群,与志同道合的朋友们一起探讨、学习和成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穆易青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值