练习--01--对fastq文件进行序列长度统计并绘图

news/2024/7/5 8:22:32 标签: python, fastq, 生物信息, 序列统计

fastq_0">主要实现对fastq文件中不同长度序列进行统计并绘制简单的直方图

详细可见代码说明及注释

#_*_coding:UTF-8_*_
"""
对fastq文件中的序列进行处理
1.获取序列的id和序列信息
2.统计每个id对应的序列的长度
3.对序列长度进行统计
"""
import os
import pandas as pd
from collections import Counter
import matplotlib.pyplot as plt


def read_fastq_seq(file_name):
    with open(file_name, 'r') as f:
        raw_index = -1
        for line in f:
            raw_index +=1
            if raw_index % 4 == 0:
                seq_id.append(line.rstrip())
            elif raw_index % 4 == 1:
                seq.append(line.rstrip())
            else:
                continue
    seq_dic = dict(zip(seq_id, seq))  # 将序列编号和序列信息两个列表合并成字典
    for v in seq_dic.values():  # 统计序列的长度
        seq_len.append(len(v))
    return seq_id, seq, seq_len, seq_dic


def count_reads_rate(seq, seq_len):
    # 统计总的reads数
    total_reads = len(seq)
    # print(total_reads)
    # 统计每个长度的reads数量,并计算其比值
    # 新建一个字典用于存储长度对应的reads信息

    for read_seq in seq_len:
        read_len_dict.setdefault(read_seq,0)
        read_len_dict[read_seq] += 1
    # print(read_len_dict)
    return read_len_dict


def write_count(seq_id, seq, seq_len, read_len_dict):
    # pandas 写入序列编号、序列信息、序列长度
    data1 = pd.DataFrame({"Seq_ID": seq_id})
    data2 = pd.DataFrame({"Seq_Info": seq})
    data3 = pd.DataFrame({"Seq_Len": seq_len})
    # 统计不同长度序列的条数
    k_len = []
    v_count = []
    for k_len, v_count in read_len_dict.items():
        k_len.append()
        v_count.append()
        return k_len, v_count
    data4 = pd.DataFrame({ "Read_Len":k_len})
    data5 = pd.DataFrame({ "Read_Len":v_count})

    # 将序列编号,序列信息,以及序列长度写入*.xlsx文件中
    writer = pd.ExcelWriter(abs_path + '\\' + "test3.xlsx")
    data1.to_excel(writer, sheet_name="data", startcol=0, index=False)
    data2.to_excel(writer, sheet_name="data", startcol=1, index=False)
    data3.to_excel(writer, sheet_name="data", startcol=2, index=False)
    # 将序列统计后的数据写入 reads_len_count中
    data4.to_excel(writer,sheet_name="reads_len_count", startcol=0, index=False)
    data5.to_excel(writer, sheet_name="reads_len_count", startcol=1, index=False)
    writer.save()  # 数据保存为excel文件


def count_bar(seq_len):
    """
    根据上一步获得的序列长度信息,对其进行sort/uniq,matplotlib 处理并绘制直方图
    首先对数据进行排序统计对相同长度进行计数
    数据清洗后进行画bar图
    提取上一步获得第三列长度数据进行清洗并统计每个长度的个数
    """
    len_count = Counter(seq_len)
    # matplotlib绘图
    x = []
    y = []
    for k, v in len_count.items():
        x.append(k)
        y.append(v)
    # print(x, y)
    plt.bar(x, y)
    plt.xlabel("Sequence Length")
    plt.ylabel("Sequence Numbers")
    # plt.savefig()
    plt.show()


if __name__ == "__main__":
    abs_path = os.getcwd()  # 获取当前目录路径
    # print(abs_path)
    file_name = abs_path + '\\' + 'HMP_MOCK_SRR2726667_8.25M.1.trim.100.fastq.gz'  # 获取当前目录下的文件信息
    seq_id = []  # 新建列表存储fasta文件中序列编号信息
    seq = []  # 新建列表存储对应fasta文件中序列信息
    seq_len = []  # 新建列表存储对应序列的长度信息
    read_len_dict = {}
    read_fastq_seq(file_name)
    write_count(seq_id, seq, seq_len,read_len_dict)
    count_reads_rate(seq, seq_len)
    count_bar(seq_len)


http://www.niftyadmin.cn/n/1721991.html

相关文章

练习_对fastq文件进行读写

练习_对fastq文件进行读写 利用python脚本对fastq文件进行处理 首先读取fastq文件,由于该文件为压缩的二进制文件,调用gzip模块打开其次,根据fastq文件格式特点,对文件进行分离处理,第一行为序列id信息,紧…

从excel文件读取数据写入csv文件笔记记录

在之前使用的几个版本的脚本中,发现由于读取的数据和index信息不一致导致写入的结果变少,故增加判断,在生成文件过程中方便直接发现异常,并进行调整输入的文件信息。 此版本是在之前的只做了修改,未进行优化&#xff1…

参考序列中组装级别低得污染序列去除

NCBI数据库中存放着大量得WGS测序数据,随着二代测序得发展,测序成本得降低以及各种微生物组计划得实施,越来越多得测序数据得以存储,各种组装级别得参考基因组(complete genome, chromosome, scaffold, contigs&#x…

NCBI中assembly_summary.txt文件下载

最近准备下载微生物的参考基因组序列,由于是初入生信,折腾了一段时间,对NCBI中ftp中数据库结构有初步的认识,查看数据库中的一些文档,整理了assembly_summary.txt,taxonomy/文件下载的脚本,用于…

bwa、bowtie2、tophat、hisat2 比对软件学习中的笔记整理

对常用的比对软件学习进行用法整理记录。记录的内容相对简单,详细说明及用法还得参考软件使用说明书 bwa、bowtie2、tophat、hisatbwabwa(Burrows-Wheeler Aligner) bwa文档说明 http://bio-bwa.sourceforge.net/bwa.shtmlBWA用于将低差异的序列映射到一个大的参考…

fastp使用

fastpfastp 下载及安装# fastp只依赖于zlib(如果在编译fastp过程中出现“undefined reference to gzbuffer”错误,可更新zlib进行处理)#安装方式一: 下载编译好二进制(仅适用于linux系统)wget http://opengene.org/fastp/fastpchm…

python进行信息匹配

最近需要根据样本编号比对信息,故写了脚本进行处理,满足日常的匹配需求,初步编写的脚本如下: # —*—coding:utf-8_*_ # date: 2020-05-04import xlrd import csv import argparse,os,io def pre_prepration(cur_path,sample_lis…

数据可视化--表格融合练习

数据可视化--表格融合练习pd.merge()函数说明代码演练参考书籍pd.merge()函数说明 使用共有列作为两个数据框数据融合的依据,主要使用pd.merge()函数: 参数说明: left: 传递左表数据right: 传递右表数据how: 数据融合方式 left:保留左表的数…