生信算法2 - DNA测序算法实践之序列统计

生信序列基本操作算法

建议在Jupyter实践,python版本3.9

1. 读取fastq序列

# fastq序列获取
!wget http://d28rh4a8wq0iu5.cloudfront.net/ads1/data/SRR835775_1.first1000.fastq

def readFastq(filename):
    # 序列列表
    sequences = []
    # 质量值列表
    qualities = []
    with open(filename) as fh:
        # 根据fastq文件格式获取内容
        while True:
            # 跳过行
            fh.readline() 
            # 读取序列,并去除末尾换行符\n
            seq = fh.readline().rstrip() 
            # 跳过行
            fh.readline() 
            # 碱基质量
            qual = fh.readline().rstrip()
            if len(seq) == 0:
                break
            sequences.append(seq)
            qualities.append(qual)
    return sequences, qualities
seqs, quals = readFastq('SRR835775_1.first1000.fastq')
print(seqs)
print(quals)

输出结果

2. 获取fastq数据测序碱基质量直方图

# 质量值转换
def phred33ToQ(qual):
    return ord(qual) - 33

# 获取碱基质量值数据
def createHist(qualities: list):
    hist = [0]* len(qualities)
    for read in qualities:
        for phred in read:
            q = phred33ToQ(phred)
            hist[q] += 1
    return hist
hist_data = createHist(quals)
print(hist_data)

# matplotlib绘图
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot(range(len(hist_data)), hist_data)
plt.show()

碱基质量值直方图

3. 计算fastq序列的平均GC含量

# 获取fastq序列的平均GC含量
def getGCByPosition(reads):
    gc = [0] * 100
    totals = [0] * 100
    for read in reads:
        # 遍历单个reads
        for i in range(len(read)):
            if read[i] == 'C' or read[i] == 'G':
                gc[i] += 1
            # 总reads数加1
            totals[i] += 1
            
    # 获取GC含量平均值
    for i in range(len(gc)):
        if totals[i] > 0:
            gc[i] /= float(totals[i])
    return gc

gc = getGCByPosition(seqs)
# 绘图
plt.plot(range(len(gc)), gc)
plt.show()

GC含量变化图

4. 计算fastq序列的ATCGN碱基数量


import collections
count = collections.Counter()
for seq in seqs:
    count.update(seq)
count
# Counter({'G': 28742, 'C': 28272, 'T': 21836, 'A': 21132, 'N': 18})

5. 读取基因组fasta文件

!wget http://d28rh4a8wq0iu5.cloudfront.net/ads1/data/phix.fa

def readGenome(file_path):
    genome = ''
    with open(file_path, 'r') as f:
        # 遍历fasta文件每行
        for line in f:
            # 忽略>行
            if not line[0] == '>':
                genome += line.rstrip()
    return genome

genome = readGenome('phix.fa')
genome

genome内容

5. 获取短重复序列的序列位置算法

# 获取短重复序列的序列位置
def getRepeatSequencePosition(repeatSeq, seq):
    occurrences = []
    for i in range(len(seq) - len(repeatSeq) + 1):
        match = True
        for j in range(len(repeatSeq)):
            print(seq[i+j], '\t', repeatSeq[j])
            if seq[i+j] != repeatSeq[j]:
                match = False
                break
        if match:
            occurrences.append(f"{i}:{i+j}")
    return occurrences

repeatSeq = 'AG'
seq = 'AGCTTAGATAGCAGG'
getRepeatSequencePosition(repeatSeq, seq)
# ['0:1', '5:6', '9:10', '12:13']

6. 基于基因组序列随机生成reads算法

import random

# 根据给定基因组fasta文件随机生成reads序列
def generateReads(genome, numReads, readLength):
    reads = []
    for _ in range(numReads):
        start = random.randint(0, len(genome)-readLength) - 1
        reads.append(genome[start : start+readLength])
    return reads

# 生成50个长度为100bp的reads序列
reads = generateReads(genome, 50, 100)
reads

reads内容

生信算法文章

生信算法1 - DNA测序算法实践之序列操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一些程序源码及教程的网站合集~

很多时候我们需要一个快速上手的code demo及教程,除了最常用的【github】,一些中文网站可能会帮助我们更好上手~ 这里提供几个中文网站参考: 【51CTO】: Python 动态手势识别系统hmm 手势识别opencv_mob64ca140d96d9的技术博客…

5G工业物联网网关,比4G工业网关强在哪里?

​随着5G技术的广泛应用,越来越多的行业开始探索如何利用5G网络提升效率和创新能力。其中,工业物联网领域是受益最大的领域之一。作为连接物联网设备和网络的关键组件,5G工业物联网网关在这个变革中发挥着至关重要的作用。本文将深入探讨5G工…

【个人版】SpringBoot下Spring-Security核心概念解读【二】

Spring-Security HttpSecurity Spring-Security全局导读: 1、Security核心类设计 2、HttpSecurity结构和执行流程解读 3、Spring-Security个人落地篇 背景: Spring-Security框架的核心架构上一篇已经概述,展示其执行流程及逻辑,但…

科技提升安全,基于DETR【DEtection TRansformer】模型开发构建商超扶梯场景下行人安全行为姿态检测识别系统

在商超等人流量较为密集的场景下经常会报道出现一些行人在扶梯上摔倒、受伤等问题,随着AI技术的快速发展与不断普及,越来越多的商超、地铁等场景开始加装专用的安全检测预警系统,核心工作原理即使AI模型与摄像头图像视频流的实时计算&#xf…

使用对象处理流ObjectOutputStream读写文件

注意事项: 1.创建的对象必须实现序列化接口,如果属性也是类,那么对应的类也要序列化 2.读写文件路径问题 3.演示一个例子 (1)操作的实体类FileModel,实体类中有Map,HashMap这些自带的本身就实现了序列化。 public class File…

运行和部署若依分离版前端

一、运行 一、用vscode打开 二、安装依赖 # 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 npm install --registryhttps://registry.npmmirror.com# 启动服务 npm run dev浏览器访问 http://localhost:80二、部…

死锁(面试常问)

1.什么是死锁 简单来说就是一个线程加锁后解锁不了 一个线程,一把锁,线程连续加锁两次。如果这个锁是不可重入锁,会死锁。两个线程,两把锁。 举几个例子,1.钥匙锁车里了,车钥匙锁家里了。2. 现在有一本书…

两线制输入馈电型隔离变送器

两线制输入馈电型隔离变送器 产品型号:JSD TA-1021系列 馈电型隔离变送器产品介绍: JSD TA-1021 为两线制输入馈电型高精度隔离变送器,是将输入与输出之间电气绝缘的模拟信号量进行变换、放大、隔离及远传的小型仪表设备,接收仪表…

代码随想录算法训练营Day1 | 704.二分查找、27.移除元素

LeetCode 704 二分查找 题目链接:704.二分查找 本题思路:本题题目写的是二分查找,所以我们用到的算法肯定也是二分查找,需要定义 3个变量。 l: 从数组的下标0开始 r: 数组长度 - 1 mid:(l r)…

SQL进阶理论篇(二):数据库的设计范式

文章目录 简介数据库的设计范式有哪些数据库中的几种键从1NF到3NF1NF2NF3NFBCNF(巴斯范式) 反范式设计反范式的适用场景总结参考文献 简介 本小节主要内容: 数据库的设计范式都有哪些数据库的键都有哪些1NF、2NF和3NF都是指什么&#xff1f…

基于Dockerfile创建LNMP

实验组件 172.111.0.10:nginx docker-nginx 172.111.0.20:mysql docker-mysql 172.111.0.30:php docker-php 实验步骤 1.建立nginx-lnmp镜像及容器 cd /opt mkdir nginx cd nginx/ --上传nginx-1.22.0.tar.gz和wordpress-6.4.2-zh_C…

【LeetCode每日一题】1904. 你完成的完整对局数

给你两个字符串 startTime 和 finishTime ,均符合 "HH:MM" 格式,分别表示你 进入 和 退出 游戏的确切时间,请计算在整个游戏会话期间,你完成的 完整对局的对局数 。 如果 finishTime 早于 startTime ,这表示…

欧拉函数与欧拉定理

文章目录 AcWing 873. 欧拉函数题目链接欧拉函数欧拉函数的证明思路CODE时间复杂度分析 AcWing 874. 筛法求欧拉函数题目链接问题分析与时间复杂度CODE思路 欧拉定理 AcWing 873. 欧拉函数 题目链接 https://www.acwing.com/activity/content/problem/content/942/ 欧拉函数 …

四六级高频词组7

目录 词组 其他文章链接: 词组 251. (be) equivalent to(equal in value, amount, meaning) 相等于, 相当于 252. in essence (in itsones nature) 本质上…

20、备忘录模式(Memento Pattern,不常用)

备忘录模式又叫作快照模式,该模式将当前对象的内部状态保存到备忘录中,以便在需要时能将该对象的状态恢复到原先保存的状态。 备忘录模式提供了一种保存和恢复状态的机制,常用于快照的记录和状态的存储,在系统发生故障或数据发生…

网络安全项目实战(三)--报文检测

6. TCP/IP协议栈及以太网帧 目标 了解TCP/IP协议栈的组织结构掌握以太网帧的数据格式定义能应用编码实现以太网帧的解析方法 6.1. TCP/IP 协议栈 TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层&#xf…

【UML】第4篇 UML公共机制(补扩展机制)

目录 一、扩展机制 1.1 构造型 1.2 标记值(Tagged Value) 1.3 约束(Constraint) 上节扩展机制没有讲完,如上图。 一、扩展机制 1.1 构造型 UML中的扩展机制包括约束、构造型和标记值,其中的构造型定义…

yo!这里是Linux信号相关介绍

目录​​​​​​​ 前言 基本介绍 概念 信号列表 信号处理 产生(发送)信号 通过按键产生 系统函数产生 软件条件产生 硬件异常产生 阻塞信号 信号状态 sigset_t 状态相关函数 1.sigprocmask 2.sigpending 捕捉信号 内核态与用户态 捕捉过程 sigaction 后…

分库分表及ShardingShpere-proxy数据分片

为什么需要分库? 随着数据量的急速上升,单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈,所以需要考虑拆分数据库,将数据库分布在不同实例上提升数据库可用性。主要的原因有如下: 磁盘存储。业务量剧增&…

nodejs项目设置全局变量(global)

文章目录 前言一、使用global二、解决type typeof globalThis has no index signature.ts问题1、新建 /types/global.d.ts文件2、或者直接在入口文件/src/index.ts定义 三、最终效果鼠标放在global上,可显示global的类型生效了~ ![在这里插入图片描述](https://img-…