重测序数据处理得到vcf文件

重测序数据处理得到vcf文件

文章目录

  • 重测序数据处理
    • 前言
    • 1. 数据是rawdata,需用fastp对数据进行质控和过滤
    • 2. 利用getorganelle软件组装叶绿体基因组
    • 3. 检查基因组大小,确认是否完整,然后和已知的红毛菜科叶绿体基因组一起构树
    • 4. 根据树形结果挑选坛紫菜个体,为了后续分析方便,对所有个体进行重命名
    • 5. 给参考基因组建索引
    • 6. clean reads 比对到参考基因组生成bam文件并对bam文件进行排序
    • 7. 按个体文件编号统计sort.bam文件
    • 8. 简单过滤,去除unmapped和mate unmapped的reads生成sort_flt.bam文件
    • 9.标记重复生成srt_flt_dup.bam文件
    • 10. 使用GATK的HaplotypeCaller进行SNP/INDEL分析
    • 11.使用gatk的CombineGVCFs命令将前面鉴定的坛紫菜样品的.g.vcf文件整合到一起
    • 12. 获得原始vcf文件
    • 13.保留双等位基因型
    • 14.最终得到vcf文件
  • 总结


重测序数据处理

所属目录:紫菜创建时间:2024/7/8作者:星云<XingYun>更新时间:2024/7/22URL:https://blog.csdn.net/2301_78630677/article/details/140570255

前言

本文主要是记录了重测序数据处理流程:对于送往公司的DNA样品进行重测序后,得到的数据进行一系列处理得到vcf文件。

有关于重测序数据处理的理论以及其它相关了解内容,若想了解,请查看另一篇为此专门写的博客:补充——重测序数据处理的理论以及其它相关了解内容

数据处理程序流程图
在这里插入图片描述

!!!注意: 后续处理流程的代码仅供参考,请根据自己的实际情况自行修改!

1. 数据是rawdata,需用fastp对数据进行质控和过滤

有关使用fastp对数据进行质控和过滤,推荐阅读:fastp:数据质控 + 过滤

fastp -i GQS10_1_T_1.fq.gz -I GQS10_1_T_2.fq.gz -o GQS10_1_T_1.clean.fq.gz -O GQS10_1_T_2.clean.fq.gz

2. 利用getorganelle软件组装叶绿体基因组

有关使用getorganelle软件组装叶绿体基因组,推荐阅读:零基础教程 | 叶绿体基因组组装 - GetOrganelle

get_organelle_from_reads.py -1 GQS10_1_T_1.clean.fq.gz -2 GQS10_1_T_2.clean.fq.gz
-F embplant_pt -o GQS10_1_T-cp -R 10 -t 30 -k 21,45,65,85,105

3. 检查基因组大小,确认是否完整,然后和已知的红毛菜科叶绿体基因组一起构树

有关如何构树,请参考之前我的另一篇博客:实验篇——多序列比对,构树 , 只不过用的是muscle比对,但具体流程差不多。

有关于mafft比对与muscle比对。推荐查看这篇文章:4-【mafft、muscle】的安装和使用

先用mafft比对
trimal修剪改格式
iqtree2构树

4. 根据树形结果挑选坛紫菜个体,为了后续分析方便,对所有个体进行重命名

在这一步,标记好哪些文件是坛紫菜,用于后续的挑选(如果此时就将需要的样品直接挑选出来进行后续的分析,那么第11步就直接使用第一个脚本文件;如果此时只是记录,没有直接挑选出来,而是一起进行后续分析,那么第11步使用第二个脚本文件)

5. 给参考基因组建索引

T2T_genome.fa为参考基因组;
这段代码是用于对一个名为 T2T_genome.fa 的基因组序列文件进行索引和字典创建。

bwa index T2T_genome.fa  
samtools faidx T2T_genome.fa
samtools dict T2T_genome.fa>T2T_genome.dict

在这里插入图片描述
在这里插入图片描述

6. clean reads 比对到参考基因组生成bam文件并对bam文件进行排序

这段代码的主要目的是使用bwa对clean.fq.gz文件(_1.clean.fq.gz与_2.clean.fq.gz)进行比对,并将结果保存为bam格式,然后进行排序

工作路径:在存放.clean.fq.gz数据的目录

for fname in *_1.clean.fq.gz
dobase=${fname%_1.clean.fq.gz}sample=${fname%%_*}bwa mem -t 20 -M -R "@RG\tID:${sample}\tSM:${sample}\tPL:illumina\tLB:${sample}" ../Ref-T2T/T2T_genome.fa "$fname" "${base}_2.clean.fq.gz" |samtools view -b -@ 5 -|samtools sort -m 5g -@ 5 - > "../1.sortbam/${base}_sort.bam"
done
##代码解释:
../Ref-T2T/T2T_genome.fa表示参考基因组文件的路径。(按具体情况修改)"$fname"表示输入的clean.fq.gz文件的路径。"${base}_2.clean.fq.gz"表示对应的_2.clean.fq.gz文件的路径。|samtools view -b -@ 5 -表示将比对结果从SAM格式转换为BAM格式。|samtools sort -m 5g -@ 5 -表示对BAM文件进行排序。"../1.sortbam/${base}_sort.bam"表示排序后的bam文件的输出路径。(按具体情况修改)

7. 按个体文件编号统计sort.bam文件

depth.txt是测序深度,coverage.txt是覆盖度,coverage_4X.txt是4x覆盖度

这段代码主要用于统计和分析 bam 文件中的比对结果和覆盖度信息

工作目录:在前一步创建的1.sortbam目录下运行

#运行此脚本
for filename in *_sort.bam
do
samtools flagstat $filename|paste -sd "/t" - >> stat_res.txt
samtools depth $filename|awk '{sum+=$3}END{print sum/NR}' >> depth.txt
samtools depth $filename|awk '{if($3>0)a+=1}END{print a/NR}' >> coverage.txt
samtools depth $filename|awk '{if($3>4)a+=1}END{print a/NR}' >> coverage_4X.txt
done

stat_res.txt文件解读:
在这里插入图片描述

在这里插入图片描述

上述结果是按照bam文件在文件夹中的排序得到的:
(1)获得所有bam文件的id

ls *bam>bam.id.txt

(2)合并个体编号的stat的结果

paste bam.id.txt stat_res.txt >248stat_res.txt #用excel提取总total 和mapped的 reads数,以及mapped的比例,

(3)利用vi 给depth.txt、coverage.txt 和coverage_4X.txt加抬头,并合并

paste depth.txt coverage.txt coverage_4X.txt >248.txt

(4)去掉excel处理后的文件中的^M,然后再和上述结果合并

sed -e 's/.$//' 248stat_res.txt >248stat_res.new.txt    #将每行文本的最后一个字符删除
paste 248stat_res.new.txt 248.txt >248tongji.txt

补充:用代码提取总total 和mapped的 reads数,以及mapped的比例,(以下代码皆为本人使用,至于是否具有普适性,请自行修改和判断)

#1.
import pandas as pd
#按照文件中第二列内容中的“/”号分割为多列(N/A不分割)
df = pd.read_csv(r"C:\Users\Desktop\248stat_res.txt", delimiter="\t", header=None)
# 提取第一列数据
column1 = df.iloc[:, 0]
# 将第二列按 "/" 分割成多列
df_split = df.iloc[:, 1].str.split('/', expand=True)
# 创建一个空的列表用于存储处理后的列
processed_columns = []
# 合并相邻的首尾为 "N" 或 "A" 的列
i = 0
while i < len(df_split.columns):if i < len(df_split.columns) - 1 and (df_split[i].str.endswith('N') | df_split[i].str.endswith('A')).all() and (df_split[i + 1].str.startswith('N') | df_split[i + 1].str.startswith('A')).all():processed_columns.append(df_split[i] + '/' + df_split[i + 1])i += 2else:processed_columns.append(df_split[i])i += 1
# 将处理后的列合并成新的DataFrame
df_processed = pd.concat([column1, pd.concat(processed_columns, axis=1)], axis=1)
# 打印处理后的数据
# print(df_processed)
# df_l = df_processed.iloc[1,:]
# print(len(df_l))
# for i in df_l:
#     print(i)
# 将处理后的DataFrame保存为txt文件
df_processed.to_csv(r"C:\Users\Desktop\processed_248stat_res.txt", sep='\t', index=False, header=False)#2.#用excel提取总total 和mapped的 reads数,以及mapped的比例,#即形成四列(Sample、total reads、mapped reads、mapping rate)# 读取txt文件
df = pd.read_csv(r"C:\Users\Desktop\processed_248stat_res.txt", delimiter="\t", header=None)
Sample = df.iloc[:, 0]
print(Sample)
# 提取第二列和第五列数据
column2 = df.iloc[:, 1]
column5 = df.iloc[:, 4]
# # 打印提取的数据
# print("第二列数据:")
# print(column2)
#
# print("\n第五列数据:")
# print(column5)# 使用正则表达式提取数字
total_reads = column2.str.extract(r'(\d+)')[0]
# print(total_reads)# 提取第五列数据中的数字和百分比
extracted_data = column5.str.extract(r'duplicatest(\d+) \+ \d+ mapped \((\d+\.\d+)% :')# 添加列标签
extracted_data.columns = ['mapped reads', 'mapping rate']# 添加百分号到 Mapping Rate 列
extracted_data['mapping rate'] = extracted_data['mapping rate'] + '%'extracted_data['Sample'] = Sample
extracted_data['total reads'] = total_reads
extracted_data =extracted_data[['Sample','total reads','mapped reads','mapping rate']]
# 打印提取的数据
print(extracted_data)
# 将处理后的extracted_data保存为txt文件
extracted_data.to_csv(r"C:\Users\Desktop\finally_248stat_res.txt", sep='\t', index=False)#3.
# 按照另一个表格文件的样本名相应的将本txt文件中对应的内容填写(将填写的表格内容复制即可)
df = pd.read_csv(r"C:\Users\Desktop\248tongji.txt", delimiter="\t")
# print(df)
Sample = df.iloc[:, 0]
split_Sample = Sample.str.split("_")
first_elements = [item[0] for item in split_Sample]
print(first_elements)
df['Sample'] = first_elements
print(df)
# print(new_Sample)
#读取xlsx文件中的一个表(248比对到T2T统计)
# 读取xlsx文件
file_path = r"C:\Users\Desktop\248重测序样本20240706.xlsx"  
df_xlsx = pd.read_excel(file_path, sheet_name='248比对到T2T统计')
# 打印读取的表格内容
print(df_xlsx)
# 根据第一列Sample列的样本数据查询并填充信息
df_merged = df.merge(df_xlsx, on="Sample", how="right")
print(df_merged)
df_merged.to_csv(r"C:\Users\Desktop\248比对到T2T统计.txt", sep='\t', index=False)

8. 简单过滤,去除unmapped和mate unmapped的reads生成sort_flt.bam文件

先在上一级目录创建2.sort_flt.bam文件夹
代码工作目录:在1.sortbam目录下运行

#运行guolv.sh脚本:
for fname in *_sort.bam
do
sample=${fname%_sort.bam}
samtools view -q 20 -f 0x0002 -F 0X0004 -F 0X0008 -b $fname
>../2.sort_flt.bam/${sample}_sort_flt.bam
done

9.标记重复生成srt_flt_dup.bam文件

先在上一级目录创建3.srt_flt_dup.bam文件夹

代码工作目录:在上面创建的2.sort_flt.bam目录下运行

#运行bioajichongfu.sh脚本
for fname in *_sort_flt.bam
do
sample=${fname%_sort_flt.bam}
picard MarkDuplicates I=$fname O=../3.srt_flt_dup.bam/${sample}_srt_flt_dup.bam
M=../3.srt_flt_dup.bam/${sample}.duplicates.log
done

10. 使用GATK的HaplotypeCaller进行SNP/INDEL分析

先在上一级目录创建4.srt_flt_dup.g.vcf文件夹

工作路径:上一步创建的3.srt_flt_dup.bam文件夹

#先对文件夹中的bam文件建索引
for fname in *_srt_flt_dup.bam
do
samtools index $fname
done
#再使用gatk HaplotypeCaller进行SNP/INDEL分析
for fname in *_srt_flt_dup.bam
do
sample=${fname%_srt_flt_dup.bam}
gatk HaplotypeCaller -R ../Ref-T2T/T2T_genome.fa -I $fname -ERC GVCF -O
../4.srt_flt_dup.g.vcf/${sample}_srt_flt_dup.g.vcf.gz
done

11.使用gatk的CombineGVCFs命令将前面鉴定的坛紫菜样品的.g.vcf文件整合到一起

这里for循环不好用,需要用-V 把每个文件依次输入。最终获得248toTZC.g.vcf.gz文件
先在上一级目录创建5.haitanensis文件夹

工作路径:上一步创建的4.srt_flt_dup.g.vcf文件夹

可以直接用-V 来一个一个添加待整合的vcf文件(但是太慢了,可以考虑使用脚本来循环处理)
在这里插入图片描述

为了方便,可以在当前目录下创建一个combine.sh脚本,用于合并vcf文件(注意:如果是之前第4步已经挑选了所需要的坛紫菜样品,则直接获取当前目录中所有匹配的 VCF 文件,也就是用以下的代码)

#!/bin/bash# 指定参考基因组文件
REF_GENOME="../Ref-T2T/T2T_genome.fa"# 指定输出文件
OUTPUT="../5.haitanensis/248toTZC.g.vcf.gz"# 获取当前目录中所有匹配的 VCF 文件
VCF_FILES=$(ls *_srt_flt_dup.g.vcf.gz)# 初始化 -V 参数
V_ARGS=""# 遍历 VCF 文件列表
for VCF_FILE in $VCF_FILES; do# 获取文件名(不包括扩展名)FILE_BASE=$(basename $VCF_FILE _srt_flt_dup.g.vcf.gz)# 为每个文件添加 -V 参数V_ARGS="$V_ARGS -V $FILE_BASE\_srt_flt_dup.g.vcf.gz"
done# 使用 CombineGVCFs 合并 VCF 文件
gatk CombineGVCFs -R $REF_GENOME $V_ARGS -O $OUTPUT

如果之前第4步没有立即挑选出所需要的坛紫菜样品,而是只是用一个表格记录下来;那么要从当前目录中获取坛紫菜样品的vcf文件。使用以下代码:

#!/bin/bash
# 指定参考基因组文件
REF_GENOME="../Ref-T2T/T2T_genome.fa"
# 指定输出文件
OUTPUT="../5.haitanensis/149toTZC.g.vcf.gz"
# 获取当前目录中所有匹配的 VCF 文件
VCF_FILES=$(cat tang_fixed.txt | xargs -n 1 ls)
# 初始化 -V 参数
V_ARGS=""# 遍历 VCF 文件列表
for VCF_FILE in $VCF_FILES; doif [ -f "$VCF_FILE" ]; thenecho "文件存在: $VCF_FILE"# 获取文件名(不包括扩展名)FILE_BASE=$(basename $VCF_FILE _srt_flt_dup.g.vcf.gz)# 为每个文件添加 -V 参数V_ARGS="$V_ARGS -V $FILE_BASE\_srt_flt_dup.g.vcf.gz"elseecho "文件不存在: $VCF_FILE"fi
done
# 使用 CombineGVCFs 合并 VCF 文件
gatk CombineGVCFs -R $REF_GENOME $V_ARGS -O $OUTPUT

补充:(tang_fixed.txt文件形成)
在这之前需要将cp构树鉴定结果为“坛紫菜”的挑选出来,获取对应重测序分析编号,以便获取对应的vcf文件名称。

在这里插入图片描述

#使用代码形成为坛紫菜的vcf文件名称,保存到tang.txt文件中
import pandas as pd
file_path = r"C:\Users\Desktop\tang.xlsx"
df_xlsx= pd.read_excel(file_path)
# print(df_xlsx)
print(df_xlsx.columns)
# print(df_xlsx.index)
# # 筛选数据
filtered_data = df_xlsx[df_xlsx["cp构树鉴定结果"] == "坛紫菜"]
# 重置索引
filtered_data.reset_index(drop=True, inplace=True)
# 输出结果
print(filtered_data)
# 获取第一列数据
first_column = filtered_data.iloc[:, 0]
# 将第一列数据写入文本文件
with open("tang.txt", "w") as f:for item in first_column:f.write(str(item) + "_srt_flt_dup.g.vcf.gz\n")

如果文件名之间有分隔符,可能会导致问题。

#删除 tang.txt 文件中的所有 \r 字符,然后将结果保存到名为tang_fixed.txt 的新文件
tr -d '\r' < tang.txt > tang_fixed.txt

12. 获得原始vcf文件

工作路径:上一步创建的5.haitanensis文件夹
运行此脚本

echo 'start_get_rawVCF'
gatk GenotypeGVCFs -R ../Ref-T2T/T2T_genome.fa -O
149toTZC.variant.raw.vcf.gz -V 149toTZC.g.vcf.gz -all-sites 1>
log_GenotypeGVCFs_all_sites.txt 2>&1
echo 'done_get_rawVCF'

13.保留双等位基因型

工作路径:5.haitanensis文件夹

vcftools --gzvcf 149toTZC.variant.raw.vcf.gz --min-alleles 2 --max-alleles 2 --
recode --recode-INFO-all --out 149toTZC.2allele.vcf

14.最终得到vcf文件

查看一下得到的文件

less -N 149toTZC.2allele.vcf.recode.vcf

在这里插入图片描述

sed -n '40,70p' 149toTZC.2allele.vcf.recode.vcf | cut -f 1-6,10-14

在这里插入图片描述


总结

本文主要了对重测序数据进行处理得到vcf文件的流程,从得到rawdata,用fastp对数据进行质控和过滤,使用getorganelle软件对叶绿体基因组进行组装、通过构树鉴定所需个体;
再到后期的给参考基因组建索引、clean reads比对到参考基因组生成bam文件、对bam文件进行一系列处理、使用gatk软件进行SNP/INDEL分析、文件整合、获得原始vcf文件。

总之,得到了vcf文件后,是用于后续的继续分析。

2024/7/21

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微积分-微分应用2(平均值定理)

要得出平均值定理&#xff0c;我们首先需要以下结果。 罗尔定理 设函数 f f f 满足以下三个假设&#xff1a; f f f 在闭区间 [ a , b ] [a, b] [a,b] 上连续。 f f f 在开区间 ( a , b ) (a, b) (a,b) 上可导。 f ( a ) f ( b ) f(a) f(b) f(a)f(b) 则在开区间 ( a , b …

CTFHUB-SQL注入-UA注入

目录 判断是否存在注入 判断字段数量 判断回显位置 查询数据库名 查询数据库下的表名 查询表中的字段名 查询字段名下的数据 由于本关是UA注入&#xff0c;就不浪费时间判断是什么注入了&#xff0c;在该页面使用 burp工具 抓包&#xff0c;修改User-Agent&#xff0c;加…

JavaScript之Web APIs-DOM

目录 DOM获取元素一、Web API 基本认知1.1 变量声明1.2 作用和分类1.3 DOM树1.4 DOM对象 二、获取DOM对象2.1 通过CSS选择器来获取DOM元素2.2 通过其他方式来获取DOM元素 三、操作元素内容3.1 元素.innerTest属性3.2 元素.innerHTML属性 四、操作元素属性4.1 操作元素常用属性4…

图形编辑器基于Paper.js教程09:鼠标拖动画布,以鼠标点为缩放中心进行视图的缩放

如何使用Paper.js实现画布的缩放与拖动功能 在Web开发中&#xff0c;利用Paper.js库进行图形的绘制和交互操作是一种常见的实践。Paper.js是一个强大的矢量图形库&#xff0c;可以让开发者通过简洁的API完成复杂的图形操作。在本文中&#xff0c;我们将详细探讨如何使用Paper.…

昇思25天学习打卡营第29天 | 基于MindSpore通过GPT实现情感分类

基于MindSpore框架通过GPT模型实现情感分类展示了从项目设置、数据预处理到模型训练和评估的详细步骤&#xff0c;提供了一个完整的案例来理解如何在自然语言处理任务中实现情感分析。 首先&#xff0c;环境配置是任何机器学习项目的起点。项目通过安装特定版本的MindSpore和相…

未来已来:生成式 AI 在对话系统与自主代理中的探索

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 一、整体介绍 对话系统&#xff08;Chat&#xff09; 自主代理&#xff08;Agent&#xff09; 二、技术对比 技术差异 优…

安装anaconda后jupyter notebook打不开 闪退

首先&#xff0c;通过清华源安装了最新的anaconda&#xff08;安装在了D盘&#xff09; 尝试打开jupyter&#xff0c;发现小黑框1s后自己关了&#xff0c;根本不打开浏览器 之后尝试按照这个做了一遍https://blog.csdn.net/gary101818/article/details/123560304还是不行。。…

【BUG】已解决:TypeError: Descriptors cannot not be created directly.

已解决&#xff1a;TypeError: Descriptors cannot not be created directly. 目录 已解决&#xff1a;TypeError: Descriptors cannot not be created directly. 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来…

创建和管理大量的数据对象:ScriptableObject

一、创建一个继承自ScriptableObject&#xff0c;名为ItemData的类 1、ItemData.cs using UnityEngine;[CreateAssetMenu(menuName "Items/Item")] public class ItemData : ScriptableObject {public string description;public Sprite thumbnail;public GameObj…

数据挖掘-分类和预测

来自&#x1f96c;&#x1f436;程序员 Truraly | 田园 的博客&#xff0c;最新文章首发于&#xff1a;田园幻想乡 | 原文链接 | github &#xff08;欢迎关注&#xff09; 文章目录 概念KNN 算法决策树ID3 算法缺点 C4.5 算法CART 算法 贝叶斯算法朴素贝叶斯算法贝叶斯信念网络…

如何做好结构化逻辑分析:分析之万能公式

有人问&#xff1a;我看了很多书&#xff0c;可是一到分析问题和解决问题时&#xff0c;还是不知如何下手。你能给我一个万能框架吗&#xff1f;这样我遇到问题就可以马上找到思路、直接套用&#xff0c;再也不用让大脑去神游和不知所措了。 我想了想&#xff0c;总结出了这个…

突破•指针二

听说这是目录哦 复习review❤️野指针&#x1fae7;assert断言&#x1fae7;assert的神奇之处 指针的使用和传址调用&#x1fae7;数组名的理解&#x1fae7;理解整个数组和数组首元素地址的区别 使用指针访问数组&#x1fae7;一维数组传参的本质&#x1fae7;二级指针&#x…

2-41 基于matlab的小车倒立摆系统的控制及GUI动画演示

基于matlab的小车倒立摆系统的控制及GUI动画演示。输入小车及倒立摆的初始参数&#xff0c;位置参数&#xff0c;对仿真时间和步长进行设置&#xff0c;通过LQR计算K值&#xff0c;进行角度、角速度、位置、速度仿真及曲线输出&#xff0c;程序已调通&#xff0c;可直接运行。 …

Linux设置开机启动Nginx

设置开机启动项 systemctl enable nginx 这个命令会创建一个符号链接到/etc/systemd/system/目录下的multi-user.target.wants/目录&#xff0c;从而确保Nginx在系统启动时自动运行。 查看Nginx是否已设置开机启动项 systemctl list-unit-files | grep nginx 删除开机启动 …

数据无忧:2024年高效硬盘数据恢复解决方法

在这个数字化时代&#xff0c;数据已成为我们生活与工作中不可或缺的一部分。手机或者电脑不够存储数据的时候我们最常用的就是采购硬盘来存储。以备不时之需我们来学习一下硬盘数据恢复的一些技巧吧。 1.福、昕数据恢复 这工具是一款简单小巧的数据恢复工具。下载安装在一分…

文心一言 VS 讯飞星火 VS chatgpt (307)-- 算法导论22.2 5题

五、证明&#xff1a;在广度优先搜索算法里&#xff0c;赋给结点 u 的 u.d 值与结点在邻接链表里出现的次序无关。使用图 22-3 作为例子&#xff0c;证明&#xff1a;BFS 所计算出的广度优先树可以因邻接链表中的次序不同而不同。如果要写代码&#xff0c;请用go语言。 文心一…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图&#xff1a;STC8H8K64URA8889开发板&#xff0c;使用P2口I2C接口&#xff1a; 2.实物连…

2024 年 100 大数据科学面试问答

2024 年 100 大数据科学面试问答 一、说明 数据科学是一个快速发展的领域&#xff0c;它正在改变组织根据数据理解和做出决策的方式。因此&#xff0c;公司越来越多地寻求聘请数据科学家来帮助他们理解数据并推动业务成果。这导致了对数据科学家的高需求&#xff0c;这些职位的…

《Windows API每日一练》13.1 打印基础

在Windows中使用打印机时&#xff0c;在调用一系列与打印相关的GDI绘图函数的背后&#xff0c;实际上启动了一系列模块之间复杂的交互过程&#xff0c;包括 GDI32库模块、打印机设备驱动程序库模块&#xff08;带.DRV后缀的文件&#xff09;、Windows后台打印处理程序&#xff…

(AAAI,2024)Structure-CLIP:利用场景知识图谱增强多模态结构化表征

文章目录 Structure-CLIP: Towards Scene Graph Knowledge to Enhance Multi-modal Structured Representations相关资料摘要引言方法通过场景图进行语义负采样场景图生成选择语义负样本对比学习目标知识增强编码器 Structure-CLIP: Towards Scene Graph Knowledge to Enhance …