NBT群落物种级丰度鉴定新方法sylph
文章目录
- 简介
- 为什么选择Sylph?
- Sylph的工作原理
- Install
- 使用
- 解析成gtdb格式
- sylph 能做什么?
- sylph 不能做什么?
- ANI定义
- 如何使用 sylph-utils 生成包含分类信息的配置文件
- 耗时:66个样本耗时1h
- 转成easymicroplot可用数据
简介
Sylph是一个程序(https://github.com/bluenote-1577/sylph),用于对元基因组随机抽样样本执行超快速(1)平均核苷酸一致性(ANI)查询或(2)元基因组分析。
ANI查询:Sylph可以搜索您的样本中的基因组,例如大肠杆菌。如果Sylph输出97%的ANI估计值,则表示您的样本中包含一个与查询基因组具有97%ANI的大肠杆菌。
元基因组分析:Sylph可以确定您样本中的物种/分类群及其丰度,类似于Kraken或MetaPhlAn。能够在几秒钟内对1 Gbp的小鼠肠道读取进行针对85,205个基因组的分析。
为什么选择Sylph?
- 精确的物种级分析:我们的测试表明,Sylph的假阳性率低于Kraken,并且与标记基因方法(如MetaPhlAn, mOTUs)一样精确和敏感。
- 超快速、多线程、多样本处理:Sylph在处理多个样本时比其他方法快50倍以上。在对整个GTDB-R220数据库(110k个基因组)进行分析时,Sylph仅需约15GB的RAM。
- 准确的(包含)ANI信息:Sylph能够在覆盖度低至0.1x的情况下,提供参考基因组和您的元基因组样本之间准确的ANI估计值。
- 可定制的数据库和预建数据库:我们提供原核生物、病毒、真核生物的预建数据库。构建自定义数据库(例如,使用您自己的MAGs)也很简单。可以将分类学信息纳入下游的传统分析报告。
- 支持短读长和长读长:虽然Sylph主要针对短读长进行了基准测试,但在Oxford Nanopore的独立基准测试中,Sylph也是最准确的方法。
Sylph的工作原理
sylph 的新颖之处在于使用基于kmer统计技术对低覆盖率基因组的 ANI 进行校正,ANI大于95%的则归为同种,从而为低丰度基因组提供准确的结果。 有关 sylph 能做什么和不能做什么的更多信息,请参见此处。
- 图 1,使用 sylph sketch 选项将读数和参考基因组分解成 k-mers。k-mers 按 c 的分数(默认 = 200)进行下采样。
- 图 1,使用 sylph query 或 sylph profile,将每个参考基因组中的 k-mers 与读数中的 k-mers 进行核对。
- 图2,Sylph 使用统计数据估算每个参考基因组与元基因组之间的包含 ANI。
- 图 3,sylph 查询:报告上一步中所有 ANI 较高(默认值大于 90%)的基因组。 没有丰度。
- 图 3,sylph profile:如果 ANI > 95%,则使用 k-mer 重映射算法计算丰度并报告物种级的现有基因组。
几秒钟内对 85,205 个基因组分析 1 Gbp 的小鼠肠道读数
Install
(base) [yut@io02 GGG4622_add_jmk423_dRep0.95]$ mamba --version
mamba 1.5.8
conda 24.3.0[yut@n60 ~]$ mamba create -n sylph -c bioconda sylph
- database
# download GTDB-R220 pre-built database (~13 GB)
wget http://faust.compbio.cs.cmu.edu/sylph-stuff/gtdb-r220-c200-dbv1.syldb[yut@workstation Database]$ ll gtdb-r220-c200-dbv1.syldb
-rw-rw-r-- 1 yut yut 13G Oct 10 19:30 gtdb-r220-c200-dbv1.syldb# /datanode02/yut/Database/SylphDB//gtdb-r220-c200-dbv1.syldb # 兰州服务器# 安装解析成gtdb脚本
(sylph) [yut@io02 results]$ conda install -c bioconda sylph-tax
# 下载50M数据库
(sylph) [yut@io02 Database]$ sylph-tax download --download-to /datanode02/yut/Database/SylphDB/
使用
- 几个样本
[yut@n101 Batch1_192Samples_20240801]$ time sylph profile /data/users/yut/Database/gtdb-r220-c200-dbv1.syldb -1 Trimgalore/ZXGL2_1.fq.gz Trimgalore/2208QL1_1.fq.gz -2 Trimgalore/ZXGL2_2.fq.gz Trimgalore/2208QL1_2.fq.gz -t 10 -o profiling1.tsv 2>test_sylph.log&[yut@n101 Batch1_192Samples_20240801]$ jobs
[1]+ Running time sylph profile /data/users/yut/Database/gtdb-r220-c200-dbv1.syldb -1 Trimgalore/ZXGL2_1.fq.gz -2 Trimgalore/ZXGL2_2.fq.gz -t 10 > profiling.tsv &
2024-10-10T11:45:24.582Z INFO [sylph::contain] Trimgalore/ZXGL2_1.fq.gz taxonomic profiling; reassigning k-mers for 287 genomes...
2024-10-10T11:45:28.775Z INFO [sylph::contain] Trimgalore/ZXGL2_1.fq.gz has 194 genomes passing profiling threshold.
2024-10-10T11:45:28.783Z INFO [sylph::contain] Finished paired sample Trimgalore/ZXGL2_1.fq.gz.
2024-10-10T11:45:28.783Z INFO [sylph::contain] sylph finished.
real 7m38.125s
[1]+ Done time sylph profile /data/users/yut/Database/gtdb-r220-c200-dbv1.syldb -1 Trimgalore/ZXGL2_1.fq.gz -2 Trimgalore/ZXGL2_2.fq.gz -t 10 > profiling.tsv
- 多个,通配符
time sylph profile /data/users/yut/Database/gtdb-r220-c200-dbv1.syldb -1 Trimgalore/*_1.fq.gz -2 Trimgalore/*_2.fq.gz -t 40 -o 192Samples_sylph_abundance/192Samples_sylph_abundance.profiling 2>192Samples_sylph.log
解析成gtdb格式
- 1.解析成gtdb格式的一个样本一个表
(sylph) [yut@node02 Others]$ mkdir sylph_tables; time sylph-tax taxprof 66Samples_sylph_abundance.profiling -o sylph_tables/ -t /datanode02/yut/Database/SylphDB/gtdb_r220_metadata.tsv.gz
- 2.合并表格
(sylph) [yut@node02 sylph_tables]$ cd sylph_tables
(sylph) [yut@node02 sylph_tables]$ sylph-tax merge *sylphmpa --column relative_abundance -o 66Samples_sylph_output_table.tsv```# 输出
Sylph 输出一个 TSV(以制表符分隔的值)文件。 每一行是元基因组样本中检测到的一个基因组。```bash
Sample_file Genome_file Taxonomic_abundance Sequence_abundance Adjusted_ANI Eff_cov ANI_5-95_percentile Eff_lambda Lambda_5-95_percentile Median_cov Mean_cov_geq1 Containment_ind Naive_ANI Contig_name
reads.fq genome.fa 78.1242 81.8234 97.53 264.000 NA-NA HIGH NA-NA 264 264.143 10281/22299 97.53 NC_016901.1 Shewanella baltica OS678, complete genome
- Sample_file:读数/样本的文件名
- Genome_file:检测到的基因组的文件名
- Taxonomic_abundance:归一化分类丰度百分比。 覆盖率归一化–与 MetaPhlAn 丰度相同 不用于 sylph 查询
- Sequence_abundance:归一化序列丰度百分比。 分配给每个基因组的 “读数百分比”–与 Kraken 丰度相同 不适用于 sylph 查询
- Adjusted_ANI:调整后的覆盖率 ANI 估计值。 如果可以调整覆盖率(cov < 3x cov):返回调整后的覆盖率 ANI 如果覆盖率过低/过高:返回 Naive_ANI(见下文 Eff_cov/True_cov:有效覆盖率估计值,如果指定 -u,则返回真实覆盖率估计值。 总是小数。
- ANI_5-95_percentile:[5%,95%] 置信区间。 如果可以调整覆盖率:浮动-浮动,例如 98.52-99.55 如果覆盖率过低/过高:
- Eff_lambda:有效覆盖率参数的估计值。 如果可以调整覆盖率:给出 lambda 估计值 如果覆盖率过低/过高,则输出 LOW 或 HIGH
- Lambda_5-95_percentile: lambda 的 [5%, 95%] 置信区间。 与 ANI_5-95_percentile 的格式规则相同。
- Median_cov:多重性 >= 1 的 k-mer多重性中位数。
- Mean_cov_geq1:多重性 >= 1 的 k-mer的平均 k-mer多重性。
- Containment_ind:显示包含指数(样本中发现的 k-mer数除以 k-mer总数)的 int/int,例如 959/1053。例如 959/1053。
- Naive_ANI:不进行覆盖率调整的包含 ANI。 kmers_reassigned:从基因组中重新分配的 k-mers 数量。 sylph 查询中不存
- Contig_name:基因组中第一个contig的名称(或 -i 选项中的等位组名称)。
sylph 能做什么?
- 定量元基因组:sylph 可以利用参考数据库计算样本中基因组的丰度,这与 Kraken 或 MetaPhlAn 的输出类型相同。
- 根据元基因组搜索基因组:sylph 可以检查您的样本中是否含有某个基因组(例如,我的样本中是否含有这个大肠杆菌基因组?
- ANI 查询:sylph 可以估算参考基因组与您样本中基因组的平均核苷酸同一性(ANI)。
- 使用自定义参考数据库: 真核生物、病毒和任何 fasta 文件集都可以使用。
- 可使用长读数:sylph 可以高精度地利用纳米孔或 PacBio 读数。 最近的一项研究发现,在他们的数据中,sylph 是最精确的定量方法
- 计算覆盖率:sylph 可以估算数据库中基因组的覆盖率(而不仅仅是丰度)。
- 计算数据库中检测到的物种级读数百分比:sylph 可以检查数据库 "捕获 "了多少元基因组。
sylph 不能做什么?
- 比对reads: 与 Kraken 不同,sylph 不会对每个读数进行分类。
- 查找超低丰度基因组。 Sylph 要求细菌基因组的覆盖率至少 > 0.01-0.05 倍。 所有细菌基因组都需要至少几百个短读数。
- 能可靠地找到属或属以上级别的基因组(如果没有种级别的基因组)。 如果您的样本没有被数据库很好地描述,sylph 可能会很吃力。 注意:这也适用于大多数定量软件。
- Compare genomes to genomes / metagenomes to metagenomes / contigs to genomes
- 处理 16S / ITS 数据
ANI定义
在 sylph 中,ANI 暗指基因组与元基因组之间的包含 ANI。 包含 ANI 是根据元基因组中包含的参考基因组中的 k-mers 数量计算得出的。 如果 "元基因组 "是单个基因组,则包含 ANI 近似于标准 ANI。 如果 "元基因组 "是基因组集合,则包含 ANI 可解释为 “近邻 ANI”(profiling): 如果 "元基因组 "是从基因组集合中读取的,则 sylph 会用统计模型估算出调整后(包含)的 ANI,该 ANI 与情况 2 相同。 注意:包含 ANI 会略微高估真实 ANI。 参见我们论文中的补充图。
如何使用 sylph-utils 生成包含分类信息的配置文件
默认情况下,sylph 的 TSV 输出不包含分类信息。 不过,sylph 支持整合几个主要的基因组数据库,以获得分类概况。 在 sylph-utils 资源库中,sylph_to_taxprof.py 脚本的使用方法如下
在 sylph-utils 软件仓库中,sylph_to_taxprof.py 脚本的使用方法如下
git clone https://github.com/bluenote-1577/sylph-utils
sylph profile gtdb-r220-c200-dbv1.syldb sample.sylsp -o result.tsv
python sylph-utils/sylph_to_taxprof.py -s result.tsv -m sylph-utils/prokaryote/gtdb_r220_metadata.tsv.gz
ls *.sylphmpa# 兰大超算
mkdir results && cd results # 先创建输出目录,切换到对应目录再分析
[yut@n101 Batch1_192Samples_20240801]$ time sylph_to_taxprof.py -s profiling.tsv -m ~/Software/sylph-utils/prokaryote/gtdb_r220_metadata.tsv.gz
Reading metadata files: ['/home/yut/Software/sylph-utils/prokaryote/gtdb_r220_metadata.tsv.gz'] ...
Processing sylph output file: profiling.tsv ...
Writing output to: ZXGL2_1.fq.gz.sylphmpa ...real 0m51.314syut@n101 192Samples_sylph_abundance]$ head ../192Samples_sylph.log
2024-10-10T23:25:21.267Z INFO [sylph::contain] Obtaining sketches...
2024-10-10T23:25:56.852Z INFO [sylph::contain] Finished obtaining genome sketches.
2024-10-10T23:31:23.396Z INFO [sylph::contain] Trimgalore/2208QL3_1.fq.gz taxonomic profiling; reassigning k-mers for 183 genomes...
2024-10-10T23:31:49.080Z INFO [sylph::contain] Trimgalore/2208QL3_1.fq.gz has 110 genomes passing profiling threshold.
2024-10-10T23:31:49.139Z INFO [sylph::contain] Finished paired sample Trimgalore/2208QL3_1.fq.gz.
2024-10-10T23:32:16.937Z INFO [sylph::contain] Trimgalore/2305QL2_1.fq.gz taxonomic profiling; reassigning k-mers for 195 genomes...
2024-10-10T23:32:16.937Z INFO [sylph::contain] Trimgalore/2304QL1-MIX_1.fq.gz taxonomic profiling; reassigning k-mers for 287 genomes...
2024-10-10T23:32:16.937Z INFO [sylph::contain] Trimgalore/2305QL2-16m_1.fq.gz taxonomic profiling; reassigning k-mers for 107 genomes...
2024-10-10T23:32:46.438Z INFO [sylph::contain] Trimgalore/2305QL2-16m_1.fq.gz has 48 genomes passing profiling threshold.
2024-10-10T23:32:46.441Z INFO [sylph::contain] Finished paired sample Trimgalore/2305QL2-16m_1.fq.gz.
024-10-11T00:27:22.802Z INFO [sylph::contain] Trimgalore/LGCL3-S_1.fq.gz has 66 genomes passing profiling threshold.
2024-10-11T00:27:22.803Z INFO [sylph::contain] Finished paired sample Trimgalore/LGCL3-S_1.fq.gz.
2024-10-11T00:27:22.803Z INFO [sylph::contain] sylph finished.
- 192个宏基因组样本40核心1h跑完
gtdb_r220_metadata.tsv.gz 文件将 GTDB 分类法与每个基因组联系起来。 它将所有结果按样本名称分组,并输出一个名为 sample.sylphmpa 的文件,格式如下所示。
MetaPhlAn-like or CAMI-like outputs
*.sylphmpa files look like this:
#SampleID biofilm_reads/SRR24442552_1.fastq.gz
clade_name relative_abundance sequence_abundance ANI (if strain-level)
d__Bacteria 99.99999999999997 3.4775000000000014 NA
d__Bacteria|p__Actinomycetota 1.7266 0.0414 NA
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia 1.3727 0.0313 NA
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o__Acidimicrobiales 1.3727 0.0313 NA
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o__Acidimicrobiales|f__Ilumatobacteraceae 1.3727 0.0313 NA
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o__Acidimicrobiales|f__Ilumatobacteraceae|g__Casp-actino5 1.0267 0.0172 NA
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o__Acidimicrobiales|f__Ilumatobacteraceae|g__Casp-actino5|s__Casp-actino5 1.0267 0.0172 NA
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o__Acidimicrobiales|f__Ilumatobacteraceae|g__Casp-actino5|s__Casp-actino5|t__GCA_017859785.1 1.0267 0.0172 98.54
d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o__Acidimicrobiales|f__Ilumatobacteraceae|g__Ilumatobacter 0.346 0.0141 NA
....
提示 这是一个有效的 TSV 文件,但前缀为 # 的行是注释。 您可以用 python 读取 .sylphmpa 文件,如 pd.read_csv(‘output.sylphmpa’,sep=‘\t’,comment=‘#’)。 有五个重要列:clade_name:描述支系的字符串,如 d__Bacteria|p__Actinomycetota|c__Acidimicrobiia|o_Acidimicrobiales|f__Ilumatobacteraceae。
- relative_abundance(相对丰度):该支系在分类学上的相对丰度
- sequence_abundance(序列丰度):该支系的序列丰度,即分配 ANI 的读数百分比:除菌株水平(t__strain)外,该值为 NA。
- Coverage:(sylph_to_taxprof.py 0.2 版新增)这是 sylph 输出中的 Eff_cov 或 True_cov 列。
在 sylph_to_taxprof.py v0.2 中,病毒宿主信息可用于 IMG/VR 4.1。 -a选项在.sylphmpa文件中增加了一列将病毒基因组与其宿主相关联的新内容。 例如,一行可以是这样的:r__Duplodnaviria|k__Heunggongvirae|p__Uroviricota|c__Caudoviricetes|||||t__IMGVR_UViG_2503982007_000001 … d__Bacteria;p__Firmicutes;c__Bacilli;o__Staphylococcales;f__Staphylococcaceae;g__Staphylococcus;s__Staphylococcus epidermidis 其中 IMGVR_UVIG_2503982007 的宿主是表皮葡萄球菌。
sylph_to_taxprof.py 文件非常简单。 简而言之:-m 选项指定的 gtdb_r220_metadata.tsv 文件(可以压缩,也可以不压缩)是一个有两列的文件。 第一列是你的 fasta 文件的名称,第二列是一个分类字符串,看起来像 d__Archaea;p__Methanobacteriota_B;c__Thermococcci;o__Thermococcales;f__Thermococcaceae;g__Thermococcus_A;s__Thermococcus_A alcaliphilus。 假设你想在 GTDB 分类中添加 genome1.fa 和 genome2.fa,两个新的 MAG。 您可以通过添加两行新内容,将 gtdb_r220_metadata.tsv 文件改成这样:
…
…
GCA_945889495.1 d__Bacteria;p__Desulfobacterota_B;c__Binatia;o__UBA9968;f__UBA9968;g__DP-20;s__DP-20 sp945889495
GCA_934500585.1 d__Bacteria;p__Bacillota_A;c__Clostridia;o__UBA1381;f__UBA1381;g__RQCD01;s__RQCD01 sp008668455
genome1.fa d__Archaea;(…);s__My new species name genome2.fa d__Bacteria;(...);g__My_genus_name;s__My species name2
并将其用于 python 脚本中的 -m 选项。 不要添加 t__STRAIN 行,脚本会自动添加。 警告 对于 Genbank/RefSeq 汇编,必须小心处理文件名。 如果基因组文件名中含有 _genomic 或 _ASM,例如 GCF_002863645.1_ASM286364v1_genomic.fna.gz,请使用 “GCF_002863645.1”,而不是第一列中的整个文件名。
耗时:66个样本耗时1h
转成easymicroplot可用数据
# 只要样本和相对丰度列
[yut@workstation raw_sylphmpa]$ for i in *.sylphmpa;do awk '{print $1"\t"$2}' $i >../processed_for_easymicroplot/${i};done# 合并表格,并且替换|为;并去掉样本后缀名称
[yut@workstation 192Samples_sylph_abundance]$ Merged_abundance_table_by_tab.sh processed_for_easymicroplot/ |sed "s/|/;/g"|sed "s/_1.fq.gz.sylphmpa//g" >192Samples_sylph_mpa4.tsv
# 去掉多余行
[yut@workstation 192Samples_sylph_abundance]$ Merged_abundance_table_by_tab.sh processed_for_easymicroplot/ |sed "s/|/;/g"|sed "s/_1.fq.gz.sylphmpa//g"|awk 'NR!=2 && NR!=3'|sed "s/gene/SampleID/" >192Samples_sylph_mpa4.tsv# 样本名称统一添加字母s_
[yut@workstation 192Samples_sylph_abundance]$ awk 'NR==1 {OFS="\t";for(i=2; i<=NF; i++) $i="s_" $i; print} NR>1 {print}' 192Samples_sylph_mpa4.tsv >192Samples_sylph_mpa4_for_easymicroplot.tsv
相关文章:
NBT群落物种级丰度鉴定新方法sylph
文章目录 简介为什么选择Sylph?Sylph的工作原理 Install使用解析成gtdb格式sylph 能做什么?sylph 不能做什么?ANI定义如何使用 sylph-utils 生成包含分类信息的配置文件耗时:66个样本耗时1h 转成easymicroplot可用数据 简介 Sylp…...
长视频生成、尝试性检索、任务推理 | Big Model Weekly 第56期
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 COMAL:AConvergent Meta-Algorithm for Aligning LLMs with General Preferences 许多对齐方法,包括基于人类反馈的强化学习(RLHF),依赖于布拉德利-特里&#…...
使用右侧值现象来处理一个word导入登记表的需求
需求也简单,导word文件用户登记表,有各部门的十几个版本(为什么这么多?不知道)。这里说下谈下我的一些代码做法: 需求分析: 如果能解决java字段和各项填的值怎么配对的问题,那么就…...
FRRouting配置与OSPF介绍,配置,命令,bfd算法:
文章目录 1、frrouting的配置:2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置: sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…...
基于ThinkPHP 5~8兼容的推荐算法类实现,
在现代推荐系统中,随着用户量和物品量的增长,传统的推荐算法可能会面临性能瓶颈。本文将介绍如何基于 ThinkPHP 实现一个高性能的推荐系统,结合显性反馈(如兴趣选择)、隐性反馈(如观看时长、评论、点赞、搜…...
使用Python爬虫实时监控行业新闻案例
目录 背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结 在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时…...
kong身份认证插件详解之Basic Auth插件
1.3、Basic Authentication 支持基于用户名和密码的基本认证,通常用于简单的身份验证场景。 1.3.1、环境准备 1.3.1.1、创建一个服务,basic-auth-service curl -i -s -X POST http://localhost:8001/services \--data namebasic-auth-service \--dat…...
Copilot基于企业PPT模板生成演示文稿
关于copilot创建PPT,咱们写过较多文章了: Copilot for PowerPoint通过文件创建PPT Copilot如何将word文稿一键转为PPT Copilot一键将PDF转为PPT,治好了我的精神内耗 测评Copilot和ChatGPT-4o从PDF创建PPT功能 Copilot for PPT全新功能&a…...
用React实现一个登录界面
使用React来创建一个简单的登录表单。以下是一个基本的React登录界面示例: 1. 设置React项目 如果你还没有一个React项目,你可以使用Create React App来创建一个。按照之前的步骤安装Create React App,然后创建一个新项目。 2. 创建登录组…...
前端布局的方式有哪些
前端布局的方式有哪些 在前端开发里,布局就像是装修房子,把不同的东西合理地摆放在合适的位置,让整个空间既美观又实用。下面给你介绍几种常见的前端布局方式: 1. 普通流布局(标准文档流布局) 这就像是按…...
seata集成nacos
#nacos集成nacos并配置mysql数据源 1. 所需依赖 <!--seata 分布式事务--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency> 2. 打开seata目录ÿ…...
第29篇 基于ARM A9处理器用C语言实现中断<五>
Q:怎样设计基于ARM A9处理器的C语言程序使用定时器中断实现实时时钟? A:在上一期的程序中添加A9 Private Timer作为第三个中断源,配置该定时器使其每隔0.01秒产生一次中断。使用该定时器使全局变量time的值递增,并将…...
deepseek多列数据对比,联想到excel的高级筛选功能
目录 1 业务背景 2 deepseek提示词输入 3 联想分析 4 EXCEL高级搜索 1 业务背景 系统上线的时候经常会遇到一个问题,系统导入的数据和线下的EXCEL数据是否一致,如果不一致,如何快速找到差异值,原来脑海第一反应就是使用公…...
C 程序多线程拆分文件
C 程序多线程拆分文件 在C语言中,实现多线程来拆分文件通常需要借助多线程库,比如 POSIX 线程库(pthread)或者 Windows 的线程库(CreateThread 或类似的函数)。下面我将分别展示在 Linux 和 Windows 环境下…...
mysql 使用 CONCAT、GROUP_CONCAT 嵌套查询出 json 格式数据
tb_factory表由 factory_code 和 factory_name 字段,查询出如下所示效果: {"factory_0001": "工厂1","factory_0002": "工厂2",... } select sql: SELECT CONCAT( "{",GROUP_CONCAT( C…...
Leetcode 2466. Count Ways To Build Good Strings
Problem Given the integers zero, one, low, and high, we can construct a string by starting with an empty string, and then at each step perform either of the following: Append the character ‘0’ zero times.Append the character ‘1’ one times. This can …...
分布式 IO 模块:食品罐装产线自动化与高效运行的推手
在当今竞争激烈的罐装视频生产行业,如何实现产线的自动化与连续性高效运行,成为了众多企业追求的核心目标。明达技术推出的MR30分布式 IO 模块作为一种先进的工业控制技术,正逐渐崭露头角,为食品罐装产线带来了前所未有的变革。 痛…...
rustdesk编译修改名字
最近,我用Rust重写了一个2W行C代码的linux内核模块。在此记录一点经验。我此前没写过内核模块,认识比较疏浅,有错误欢迎指正。 为什么要重写? 这个模块2W行代码量看起来不多,却在线上时常故障,永远改不完。…...
MySQL 窗口函数:功能、使用场景与性能优化
MySQL 8.0 引入了一个强大的新特性——**窗口函数(Window Functions)**。它为数据分析和复杂查询提供了极大的便利,但同时也可能带来性能问题。本文将带你快速了解窗口函数的功能、使用场景以及如何优化性能。 --- ## **什么是窗口函数&#…...
数据权限校验实践
数据权限控制实践 最近在实习中为公司项目完成一个文件数据权限校验代码的转换重构,写这篇博客来记录前后两种权限校验的实现方案与相关概念 原实现方案:RBAC-基于角色的访问控制 RBAC(Role-Based Access Control) RBAC 是一种常…...
spring boot对接clerk 实现用户信息获取
在现代Web应用中,用户身份验证和管理是一个关键的功能。Clerk是一个提供身份验证和用户管理的服务,可以帮助开发者快速集成这些功能。在本文中,我们将介绍如何使用Spring Boot对接Clerk,以实现用户信息的获取。 1.介绍 Clerk提供…...
公网远程家里局域网电脑过程详细记录,包含设置路由器。
由于从校内迁居小区,校内需要远程控制访问小区内个人电脑,于是早些时间刚好自己是电信宽带,可以申请公网ipv4不需要花钱,所以就打电话直接申请即可,申请成功后访问光猫设备管理界面192.168.1.1,输入用户名密码登录超管(密码是网上查下就有了)设置了光猫为桥接模式,然后…...
自制简单的图片查看器()
图片格式:支持常见的图片格式(JPG、PNG、BMP、GIF)。 import os import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTkclass ImageViewer:def __init__(self, root):self.root rootself.root.…...
25/2/17 <嵌入式笔记> 桌宠代码解析
这个寒假跟着做了一个开源的桌宠,我们来解析下代码,加深理解。 代码中有开源作者的名字。可以去B站搜着跟着做。 首先看下main代码 #include "stm32f10x.h" // Device header #include "Delay.h" #include &quo…...
Kafka偏移量管理全攻略:从基础概念到高级操作实战
#作者:猎人 文章目录 前言:概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…...
python中使用日期和时间差:datetime模块
datetime模块的表示时间的有 datetime.datetime #时间包含年月日时分秒毫秒 datetime.date #时间只包含年月日 datetime.time #只包含时分秒 获取当前时间 import datetime now datetime.datetime.now() print(now)得到 atetime中的年月日时分秒可以分别取出来 import da…...
申论对策建议类【2022江苏B卷第一题“如何开展网络直播”】
材料: 近年来,公安交管部门通过网络直播,将执法过程和执法细节以视频形式呈现在公众面前,吸引“围观”、组织点评,让执法过程变成一堂生动的法治公开课。 “各位网友,大家好!这里是‘全国交通…...
Blazor-父子组件传递任意参数
在我们从父组件传参数给子组件时,可以通过子组件定义的[Parameter]特性的公开属性进行传值,但是当我们需要传递多个值的时候,就需要通过[Parameter]特性定义多个属性,有没有更简便的方式? 我们可以使用定义 IDictionar…...
Python的那些事第二十三篇:Express(Node.js)与 Python:一场跨语言的浪漫邂逅
摘要 在当今的编程世界里,Node.js 和 Python 像是两个性格迥异的超级英雄,一个以速度和灵活性著称,另一个则以强大和优雅闻名。本文将探讨如何通过 Express 框架将 Node.js 和 Python 结合起来,打造出一个高效、有趣的 Web 应用。我们将通过一系列幽默风趣的实例和表格,展…...
win11安装wsl报错:无法解析服务器的名称或地址(启用wsl2)
1. 启用wsl报错如下 # 查看可安装的 wsl --install wsl --list --online此原因是因为没有开启DNS的原因,所以需要我们手动开启DNS。 2. 按照如下配置即可 Google的DNS(8.8.8.8和8.8.4.4) 全国通用DNS地址 (114.114.114.114) 3. 运行以下命令来重启 WSL…...
【设计模式】【结构型模式】桥接模式(Bridge)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
1997-2019年各省进出口总额数据
1997-2019年各省进出口总额数据 1、时间:1997-2020年 2、来源:国家统计局、各省年鉴 3、指标:进出口总额 4、范围:31省 5、指标解释:进出口总额是指以货币表示的一定时期内一国实际进出口商品的总金额ÿ…...
AI前端开发效率革命:拥抱AI,开启前端开发新纪元
前端开发行业竞争日益激烈,项目交付周期不断缩短,对开发效率的要求也越来越高。在这种高压环境下,开发者们常常面临着巨大的压力。而近年来,人工智能技术的飞速发展,特别是AI写代码工具的出现,为前端开发带…...
Rust编程语言入门教程(一)安装Rust
目录 引言一、为什么要用 Rust?二、与其他语言比较三、Rust 特别擅长的领域四、Rust 与 Firefox五、Rust 的用户和案例六、Rust 的优缺点七、安装 Rust1、访问官网下载 Rust2、下载完成,执行exe文件 八、Rust 安装验证九、开发工具结束语 引言 在当今快…...
Kubernetes控制平面组件:Kubernetes如何使用etcd
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
2025年-G4-Lc78--121. 买卖股票的最佳时机--(java版)
1.题目描述 2.思路 思路1: 做两轮排序,第一轮排序找到最小的那个数,然后再判断最小的那个数之后还有其他数吗,如果有在进行排序,选出最大的那个数,然后值相减。 问题要点: (1)你需要…...
LabVIEW 中的 3dgraph.llb 库
3dgraph.llb 库位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform 目录下,是 LabVIEW 系统中用于 3D 图形相关操作的重要库。它为 LabVIEW 用户提供了丰富的功能,能在应用程序中创建、显示和交互各种 3D 图形,…...
通过VSCode直接连接使用 GPT的编程助手
GPT的编程助手在VSC上可以直接使用 选择相应的版本都可以正常使用。每个月可以使用40条,超过限制要付费。 如下图对应的4o和claude3.5等模型都可以使用。VSC直接连接即可。 配置步骤如下: 安装VSCODE 直接,官网下载就行 https://code.vis…...
[LeetCode力扣hot100]-C++常用数据结构
0.Vector 1.Set-常用滑动窗口 set<char> ans;//根据类型定义,像vector ans.count()//检查某个元素是否在set里,1在0不在 ans.insert();//插入元素 ans.erase()//删除某个指定元素 2.栈 3.树 树是一种特殊的数据结构,力扣二叉树相…...
2-安装YIUI
YIUI框架:GitHub - LiShengYang-yiyi/YIUI: Unity3D UGUI Framework, 基于UI数据事件绑定为核心 数据驱动的UGUI框架, ETUI框架, ET框架官方推荐UI框架 ET框架:egametang/ET: Unity3D Client And C# Server Framework (github.com) 1 - 安装YIUI框架&a…...
16-使用QtChart创建动态图表:入门指南
QtChart是Qt框架中的一个强大模块,用于创建各种类型的图表,如折线图、柱状图、饼图等。它提供了丰富的API和灵活的配置选项,使得开发者能够轻松地将数据可视化集成到应用程序中。本文将介绍如何使用QtChart创建一个简单的动态折线图ÿ…...
蓝耘智算携手DeepSeek,共创AI未来
🌟 各位看官号,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习如何通过蓝耘智算使用DeepSeek R1模型 👍 如果觉得这篇文章有帮助,欢迎您一键三连&a…...
具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例
随着机器人技术和人工智能的迅速发展,具身智能在各行业的应用日益广泛,尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作,存在着高温、高压、强电磁场等危险环境,且效率较低。开关柜带电操作机器人作…...
【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.6 RNN与LSTM的变体与发展趋势】
引言:时间序列的魔法钥匙 在时间的长河中,信息如同涓涓细流,绵延不绝。而如何在这无尽的数据流中捕捉、理解和预测,正是循环神经网络(RNN)及其变体长短时记忆网络(LSTM)所擅长的。今天,我们就来一场深度探索,揭开RNN与LSTM的神秘面纱,看看它们如何在时间序列的海洋…...
【R语言】回归分析与判别分析
一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…...
git开发流程以及github社区企业版
常规开发流程 1、将仓库 clone 到本地,已经 clone 的要 fetch & pull,保证本地 master 分支已经更新到最新状态 2、在 master 最新分支的基础上 checkout 一个开发分支,分支命名要求规范,如带用户名、日期、bug id 等关键信…...
DeepSeek + Vue实战开发
利用DeepSeek V3模型、siliconflow大模型一站式云服务平台以及vue3.0实现一个在线人工智能客服对话系统。 因为deepseek官网的api密钥使用起来比较缓慢,所以可以使用第三方的,具体操作请自行查阅资料。 siliconflow官网 SiliconFlow, Accelerate AGI …...
从安装软件到flask框架搭建可视化大屏(二)——创建一个flask页面,搭建可视化大屏,零基础也可以学会
附录:所有文件的完整代码 models.py # models/models.py from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()class User(db.Model):__tablename__ user # 显式指定表名为 userid db.Column(db.Integer, primary_keyTrue)username db.Column(db.String(…...
Python编程中,async/await/asyncio分别是干啥的?
在Python异步编程中,async、await和asyncio是三个核心概念。它们共同构成了Python处理高并发I/O密集型任务的解决方案。本文将通过代码实例解析它们的作用和用法。 一、异步编程基础 1.1 同步 vs 异步 同步编程:代码按顺序执行,遇到I/O操作(如网络请求、文件读写)时会阻塞…...
vue非组件的初学笔记
1.创建Vue实例,初始化渲染的核心 准备容器引包创建Vue实例new Vue() el用来指定控制的盒子data提供数据 2.插值表达式 作用利用表达式插值,将数据渲染到页面中 格式{{表达式}} 注意点 表达式的数据要在data中存在表达式是可计算结果的语句插值表达式…...