uniprot中PTM数据的下载
首先是PTM的介绍:
参考:https://en.wikipedia.org/wiki/Post-translational_modification
蛋白质的翻译后修饰(PTM)通过改变氨基酸残基的化学结构,显著影响其带电性质,从而调控蛋白质的功能、定位和相互作用。
一,如何在uniprot中查看每个蛋白质的PTM修饰信息:
还是以CTCF为例子:
https://www.uniprot.org/uniprotkb/P49711/entry#ptm_processing
首先我们可以看到:
残基的PTM修饰信息基本上有4类:
1,modified residue:最常见的
https://www.uniprot.org/help/mod_res
help界面也解释了一些常见的PTM修饰:
磷酸化:
甲基化:
乙酰化:
氨基化:
吡咯烷羧酸:
异构化:
羟基化:
硫化:
黄素结合:
半胱氨酸氧化和硝基化:
再回过头来看:
来源source都是uniprot,然后description表明是“xxx修饰xxx残基”
仔细点开发现有注释来源,是来自于文献,可见是人工整理的
例如:
https://www.uniprot.org/help/evidences#ECO:0007744
可以说这一部分数据就是uniprot中人工整理的,一般都是来自于文献中报道证实的修饰数据,会比较可靠
2,chain:
https://www.uniprot.org/help/evidences#ECO:0007744
这个条目其实和我们理解的氨基酸水平上的翻译后修饰不太一样:
一般是“经过处理或蛋白酶解切割后成熟蛋白质中多肽链”那个层面上发生的广义修饰事件,不再是单个氨基酸水平上的修饰
3,crosslink:
https://www.uniprot.org/help/crosslnk
其实我们可以发现描述的是chain层面上的link事件的修饰,也不是残基水平上的
同样的,互作的修饰关系会引用文献,还是有一定可靠性的
4,modified residue(large scale data)
https://www.uniprot.org/help/mod_res_large_scale
可以看到,我们能够下载的数据部分是(1)条目中的手动整理,来源是uniprot的数据,
但是还是有一些数据是额外提供的,在可下载版本里是看不到的数据,也就是常规方法无法下载的数据;
这部分数据是来自于大规模蛋白质组学项目,也就是大规模质谱项目中获取的数据信息:
数据主要来源于两个项目:
我们可以简单理解为除了人工注释的基因组数据之外,还有ENCODE、TCGA之类的大规模项目中的基因组数据,就这么来类比。
总之还有一大批规模的数据,没有经过人工整理,因为比较复杂;
然后其实我们也看到了:
这些大规模数据的PTM右上角有金银铜的标注
同样的,我们查看已经描述好的数据:
除了提及的2个大型项目,同样还是有文献引用,所以是combined
当然其实我们点进去:
https://proteomecentral.proteomexchange.org/cgi/GetDataset?ID=PXD005296
发现就是这篇文献,所以应该是大型项目本身的文献
再看一个同理:
https://proteomecentral.proteomexchange.org/cgi/GetDataset?ID=PXD001281
就是项目本身的文献
当然,还有一些是没有引用文献的:
——》我已经测试过了,我们平常在选定范围后的蛋白质result界面中,能够下载的PTM信息实际上只有(1)条目中的数据,是下载不了这部分大规模组学数据的修饰信息的
要下载的话,只能使用uniprot提供的API接口,然后自己编写python自动化脚本去获取这部分数据
当然了,还有一种方法,就是用爬虫,直接一力降十会;
最笨的方法,就是一个一个蛋白质去搜索,然后记录在csv或者excel表格文件中
二,如何下载这些PTM修饰的数据:
1,常规的方法就是使用结果界面中的download
因为我们后期需要注意的是所有的修饰类型不是一起修饰的,肯定是分时期以及特征生理条件的,所以我们得经过文献校验,确定我们代码中是不是将统一并且确定的修饰位点都考虑进去了,而不是一股脑全都放上去
我此处使用的是text格式
(1)PHOSPHORYLATION 磷酸化(全大写)
(2)ACETYLATION 乙酰化
(3)SUMOYLATION SUMO化
对照uniprot中的数据,
我们应该主要关注两个modified即可
位点 1:N-acetylmethionine x-28
位点 18:Sumoylated lysine (Silver) x-31
位点 74:Sumoylated lysine (Gold)
位点 168:Sumoylated lysine (Silver)
位点 219:Sumoylated lysine (Gold) x-31
位点 224:Phosphoserine
位点 250:Sumoylated lysine (Gold)
位点 289:Phosphothreonine x-25
位点 317:Phosphothreonine x-25
位点 317:Phosphothreonine x-25
位点 349:Sumoylated lysine (Bronze)
位点 374:Phosphothreonine x-20
位点 374:Phosphothreonine x-20
位点 402:Phosphoserine x-20
位点 402:Phosphoserine x-20
位点 407:Phosphotyrosine
位点 450:Phosphoserine
位点 461:Phosphoserine
位点 609:Phosphoserine x-20 x-25 x-27
位点 610:Phosphoserine x-20 x-25 x-27
位点 612:Phosphoserine x-20 x-25 x-27
位点 689:Sumoylated lysine (Gold) x-29 x-31
位点 690:Sumoylated lysine (Bronze)
位点 717:Phosphothreonine
发现text中的PTM注释信息是不全面的,而且这个注释很奇怪,既不是modified residue里的,也不是large scale data里的——》text格式不能用
法2:通过下载的注释excel信息
如果是excel的表格的话:
modified residue里的信息倒是全面的,但是large scale data的修饰注释就完全丢失了
下载gff文件:
可以发现还是8个,还是modified residue里的,但是就是没有large scale 的data
下载XML文件发现同样只能下载8个:
json文件倒是有
tsv文件的话同理,和excel一样,只有modified residue
法3:通过直接在网页下载json文件
但这种方法还不如直接手动抄录,还是一个一个蛋白的,没法自动化
——》综上,如果要使用只有uniprot中的人工整理的注释的话,建议下载gff格式比较好
另外按理来说json格式是能够获取所有的注释的
2,利用python或R自动获取数据:
当然了,我们是学生信的,做计算的,如果不会自动获取大规模数据,也未免太丢人了。
https://www.biostars.org/p/261823/
https://www.biostars.org/p/197473/
(1)python使用bioservices
https://bioservices.readthedocs.io/en/main/
https://bioservices.readthedocs.io/en/main/references.html#module-bioservices.uniprot
github官网见https://github.com/cokelaer/bioservices
from bioservices import UniProt
u = UniProt(verbose=False)
data = u.search("zap70+and+taxonomy_id:9606", frmt="tsv", limit=3,columns="id,length,accession, gene_names")
print(data)
如果我们这样直接在uniprot中搜索的话:
我们再来仔细研究一下这些参数:
首先是query,可以参考:
https://www.uniprot.org/help/query-fields
我主要关注的是其他数据库的参考引用:
查看文档:
https://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/docs/dbxref.txt
https://www.uniprot.org/help/id_mapping
这里其实能够满足uniprot中蛋白质id的mapping等工作
然后是frmt参数:其实就是数据格式,
和能够直接在uniprot结果界面中下载的格式一致
依据前面的经验,我们选择的下载格式是tsv、fasta以及gff格式
还有1个column参数:
只有当下载的数据格式frmt是tsv或者是xlsx的时候,该参数才有效
但是我们可以看到,使用的列比较有限
当下载fasta序列格式的时候,我们一般不选择isoform,就是异构体的数据我们不要
然后就是其他的参数,
总之所有参数如下:
如果多个数据库参考
# reviewed
from bioservices import UniProt
u = UniProt(verbose=False)
c2h2_zf_PROSITE = u.search("xref:PROSITE-PS00028+and+xref:PROSITE-PS50157+and+organism_name:Human", frmt="tsv",columns="accession,id,gene_names,length")
print(c2h2_zf_PROSITE)
import io
import pandas as pd
# 将 TSV 格式的字符串转换为 DataFrame
df = pd.read_csv(io.StringIO(c2h2_zf_PROSITE), sep='\t')# 现在你可以使用 df.shape 来获取 DataFrame 的形状
print(df.shape)
print(df)
问题是实际上筛选的时候有2.5k左右
所以正确的方式不是使用organism_name,而是使用taxonomy_id:9606
也就是说在uniprot中直接搜索的时候正确的检索方式是:
(xref:PROSITE-PS00028) AND (xref:PROSITE-PS50157) #在检索界面中选中human,√(xref:PROSITE-PS00028) AND (xref:PROSITE-PS50157) AND (taxonomy_id:9606) #√(xref:PROSITE-PS00028) AND (xref:PROSITE-PS50157) AND (organism_name:Homo sapiens) #也可以√
但是唯独human不行:
(xref:PROSITE-PS00028) AND (xref:PROSITE-PS50157) AND (organism_name:Human) # X
事实上我们可以从NCBI中获取该ID的意义,就是对应homo sapiens
https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=info&id=9606
所以正确的使用方式是:
# reviewed
from bioservices import UniProt
u = UniProt(verbose=False)
c2h2_zf_PROSITE = u.search("xref:PROSITE-PS00028+and+xref:PROSITE-PS50157+and+taxonomy_id:9606", frmt="tsv",columns="accession,id,gene_names,length")
print(c2h2_zf_PROSITE)
import io
import pandas as pd
# 将 TSV 格式的字符串转换为 DataFrame
df = pd.read_csv(io.StringIO(c2h2_zf_PROSITE), sep='\t')# 现在你可以使用 df.shape 来获取 DataFrame 的形状
print(df.shape)
print(df)
只能说数据上确实还是差点
但是奇了怪了,还是差了一个id
——》总之,使用该python库
https://bioservices.readthedocs.io/en/main/protein.html
——》但是获取的数据信息实在是有限,尤其是如果我们想获取更多的细节信息的时候,比如说domain、structure或者是PTM等每个蛋白质条目点进去才能获取的信息的时候
https://stackoverflow.com/questions/33689703/ptm-data-from-bioservices-uniprot
https://stackoverflow.com/questions/33689703/ptm-data-from-bioservices-uniprot
但是很奇怪,不管用,也许是version问题
事实上我们正常pip之后的操作是
pip install bioservices# 查看版本信息
pip show bioservicespip install --upgrade bioservices
已经是最新版本了,所以该库实际上并没有解决我们的问题
import ioimport pandas as pdfrom collections import Counterfrom bioservices import UniProtu = UniProt()n_results = []for i in range(100):res = u.search("P42328", frmt="tab", columns="id, sequence")# Store results in pandas dataframedf_res = pd.read_csv(io.StringIO(res), sep="\t")n_results.append(len(df_res))print(Counter(n_results))
事实上我们看看对于uniprot中一些feature,是怎么引用的:
https://github.com/cokelaer/bioservices/issues/163
https://github.com/cokelaer/bioservices/issues/237
从https://github.com/cokelaer/bioservices/issues/147中我们可以看到有get_df 函数
我们也使用了这个函数,但是发现实际上是有110列的,所以我们的数据是能够从这里获取的:
我们需要查看所有列的名字
import pandas as pd
from bioservices import UniProt
u = UniProt()
u.get_df("P49711") print(u.get_df("P49711").columns)
因为获取的是index类型的数据
所以我们如果要查看的话需要将数据类型进行转换:可以使用tolist转换为列表
import pandas as pd
from bioservices import UniProt
u = UniProt()
u.get_df("P49711") print(u.get_df("P49711").columns)
print(u.get_df("P49711").columns.tolist())
'Entry', 'Entry Name', 'Gene Names', 'Gene Names (primary)', 'Gene Names (synonym)', 'Gene Names (ordered locus)', 'Gene Names (ORF)', 'Organism', 'Organism (ID)', 'Protein names', 'Proteomes', 'Taxonomic lineage', 'Virus hosts', 'Fragment', 'Sequence', 'Length', 'Mass', 'Gene encoded by', 'Alternative products (isoforms)', 'Erroneous gene model prediction', 'Mass spectrometry', 'Polymorphism', 'RNA Editing', 'Sequence caution', 'Alternative sequence', 'Natural variant', 'Non-adjacent residues', 'Non-standard residue', 'Non-terminal residue', 'Sequence conflict', 'Sequence uncertainty', 'Sequence version', 'Coiled coil', 'Compositional bias', 'Domain [CC]', 'Domain [FT]', 'Motif', 'Protein families', 'Region', 'Repeat', 'Zinc finger', 'Absorption', 'Active site', 'Activity regulation', 'Binding site', 'Catalytic activity', 'Cofactor', 'DNA binding', 'EC number', 'Function [CC]', 'Kinetics', 'Pathway', 'pH dependence', 'Redox potential', 'Site', 'Temperature dependence', 'Gene Ontology (GO)', 'Gene Ontology (biological process)', 'Gene Ontology (molecular function)', 'Gene Ontology (cellular component)', 'Gene Ontology IDs', 'Interacts with', 'Subunit structure', 'Developmental stage', 'Induction', 'Tissue specificity', 'PubMed ID', 'Date of creation', 'Date of last modification', 'Date of last sequence modification', 'Entry version', '3D', 'Beta strand', 'Helix', 'Turn', 'Subcellular location [CC]', 'Intramembrane', 'Topological domain', 'Transmembrane', 'Annotation', 'Caution', 'Comments', 'Features', 'Keywords', 'Keyword ID', 'Miscellaneous [CC]', 'Protein existence', 'Tools', 'Reviewed', 'UniParc', 'Allergenic Properties', 'Biotechnological use', 'Disruption phenotype', 'Involvement in disease', 'Mutagenesis', 'Pharmaceutical use', 'Toxic dose', 'Chain', 'Cross-link', 'Disulfide bond', 'Glycosylation', 'Initiator methionine', 'Lipidation', 'Modified residue', 'Peptide', 'Post-translational modification', 'Propeptide', 'Signal peptide', 'Transit peptide', 'PDB'
最好是转换为dataframe的格式,但是df展示的时候只能最大展示20列,所有会有省略号
我们可以设置一下
此处我们需要设置max_rows这个参数,在设置前后恢复为60
# 显示所有列
pd.set_option('display.max_columns',None)
# 显示所有行
pd.set_option('display.max_rows',None)
import pandas as pd
from bioservices import UniProt
u = UniProt()
u.get_df("P49711") # 是index类型
print(u.get_df("P49711").columns)
# 可以转换为list
print(u.get_df("P49711").columns.tolist()) # 设置显示的最大行数为 None,以显示所有列
pd.options.display.max_rows = None
# 将列名转换为 DataFrame
columns_df = pd.DataFrame(u.get_df("P49711").columns, columns=['Column Names'])
columns_df
我们需要的列名是:
EntryEntry NameOrganismOrganism (ID)Protein namesSequenceDomain [CC]
Domain [FT]
MotifZinc fingerFeaturesReviewedModified residuePost-translational modification
我们可以查看一下这几列:
# 选择特定的列
selected_columns = ['Entry', 'Entry Name', 'Organism', 'Organism (ID)', 'Protein names', 'Sequence', 'Domain [CC]', 'Domain [FT]', 'Motif', 'Zinc finger', 'Features', 'Reviewed', 'Modified residue', 'Post-translational modification'
]u.get_df("P49711")[selected_columns]
这里展示行或者列是无法看清楚具体的全文内容的,所以还是重定向到一个文本文件中再查看
u.get_df("P49711")["Modified residue"]
u = UniProt()
df = u.get_df("P49711")# 将 'Modified residue' 列的内容写入一个文本文件
with open('modified_residue.txt', 'w') as file:file.write(df["Modified residue"].to_string(index=False))
还是不行
再查看其他的github问题,应该是要重新使用search进行查看
https://github.com/cokelaer/bioservices/issues/122
但是奇怪的是,还是不行:
还是有问题,应该是网络问题
https://github.com/cokelaer/bioservices/issues/219
https://github.com/cokelaer/bioservices/issues/122
https://github.com/cokelaer/bioservices/issues/109
基本上所有在github中提供的解法在我这里都没有用,可能是因为这个工具出问题了,或者是最近uniprot的API又更改了
后来查看了一下,这个版本太新了:
是2天前更新的,
也许我应该降级到一个稳定的版本试试看
pip uninstall bioservices
pip install bioservices=1.12.0
有问题
还是用conda安装:
还是会有问题
——》此方法暂时搁置
还有其他的python工具,例如bio2bel-uniprot
https://mp.weixin.qq.com/s/VH7zTodBYf5KzHqnnLZavQ
(2)python+使用uniprot的API接口
查看官网中的说明:
https://www.uniprot.org/help/mod_res_large_scale
我们可以看到所需要的实际API是:
https://www.ebi.ac.uk/proteins/api/doc/#proteomicsApi
使用此处的PTM条目进行使用——》暂时搁置,具体如何使用该API的方法
https://stackoverflow.com/questions/33689703/ptm-data-from-bioservices-uniprot
实际上还是不行
(3)uniprot+R:
如果使用python解决不了问题,可以使用R来处理
如果是R处理的话主要是2个工具:UniprotR以及rbioapi
https://github.com/moosa-r/rbioapi
https://github.com/Proteomicslab57357/UniprotR
https://github.com/Proteomicslab57357/UniprotR/blob/master/man/GetPTM_Processing.Rd
https://github.com/moosa-r/rbioapi/blob/master/vignettes/rbioapi_uniprot.Rmd
——》
我们先试试UniprotR这个R包:
直接在R中install有点麻烦,而且还是会有问题,还是使用conda
mamba install -y r-uniprotr=2.4.0library(UniprotR)
??UniprotR
help(GetPTM_Processing)
返回的值我们可以通过:
https://www.uniprot.org/help/return_fields
https://mp.weixin.qq.com/s/p4MGo-NX5bMu92NNpGwUlA
https://mp.weixin.qq.com/s/9JkQUijUx7r5UY4Q_eOa1Q
但是经常会有网络连接问题——》暂时搁置
(4)uniprot+rbioapi
这个工具还是挺新的,最近3年了
rba_uniprot_features_search(accession = "P49711",reviewed = TRUE,organism = "Human",categories = "PTM"
)
# Homo sapiens
# "MOD_RES"
但是很不幸,这个函数也只能提供modified residue以及cross link的数据,不能提供large scale data的数据
# 使用R包rbioapi获取蛋白质的序列信息
# 参考https://rbioapi.moosa-r.com/articles/rbioapi_uniprot.html# install.packages("remotes")
# remotes::install_github("moosa-r/rbioapi")
library(package = "rbioapi")# 使用entry参数获取蛋白质的序列信息
ctcf_human <- rba_uniprot_proteins(accession = "P49711")str(ctcf_human, 1)
再回过头来看看我们的数据:
说明还是挺新的,更新也考虑到了
这个函数接口只能看到mod res的8种修饰
主要使用的函数还是:
其他几个都不建议使用,
主要使用rba_uniprot_proteomics_ptm
查证下来,只有13的函数还有用:
https://rbioapi.moosa-r.com/reference/rba_uniprot_proteomics_ptm.html
https://rbioapi.moosa-r.com/reference/rba_uniprot_proteomics_ptm_search.html
先来看看我们的函数:
所得到的结果的结构
首先type、begin、end我们是要的,xref中的name和id我们也要,
重点是下面这里的ptms:
我们要提取的是ptms的name、position、source,以及dbreference的id、properties的pubmed id,以及confidence score;
编写程序,获取其中的这些字段:
查看程序结果
程序结果与获取的数据是没有问题的,
现在我们要返回去uniprot中查看这个数据结构对不对:
经过检查,确实这部分数据是完美匹配并且获取了large scale data中的PTM修饰
——》
那接下来的问题就是
①如何批量获取某个名单中的这些large scale data的PTM修饰数据
主要是前面单个的子函数要封装,然后后面就是遍历名单,写一个循环,然后批量使用上面的函数处理即可
我将这个代码的日志进行了记录:
数目上还是一致的
统计了一下,暂时是
749,也就是有42种蛋白质是没有大规模蛋白质组PTM数据的
我们需要用CTCF的数据来验证一下结果有没有问题:
和前面的完全一致,所以是可以的
②如何将large scale data的数据与modi resi的文献uniprot的数据整合在一起
分开,前者用这个R包,后者uniprot数据自提;
都用这个包,因为数据是一起提取的;
四,额外数据库下载:
uniprot下载数据的时候还可以选择
实测没用,上面large scale data的还是下载不了
相关文章:
uniprot中PTM数据的下载
首先是PTM的介绍: 参考:https://en.wikipedia.org/wiki/Post-translational_modification 蛋白质的翻译后修饰(PTM)通过改变氨基酸残基的化学结构,显著影响其带电性质,从而调控蛋白质的功能、定位和相互作…...
【QGIS二次开发】地图编辑-04
系列目录: 【QGIS二次开发】地图显示与交互-01_qgis二次开发加载地图案例-CSDN博客 【QGIS二次开发】地图显示与交互-02_setlayerlabeling-CSDN博客 【QGIS二次开发】地图符号与色表-03-CSDN博客 4 地图编辑 4.1 添加点要素 功能演示: 运行程序后…...
Qt 信号和槽-核心知识点小结(11)
目录 小结表格索引 disconnect函数 lambda表达式 啥是耦合,啥是内聚 简介:这是Qt信号和槽的最后一篇文章,最主要的是总结该信号和槽的核心知识点。以及该核心知识点的文章索引(表格太长了,手机可能看不完整&#…...
React响应事件中onClick={handleClick} 的结尾有没有小括号的区别
你可以通过在组件中声明 事件处理 函数来响应事件: function MyButton() {function handleClick() {alert(You clicked me!);}return (<button onClick{handleClick}>点我</button>);} 注意,onClick{handleClick} 的结尾没有小括号&#x…...
React-Query使用react-testing-library进行测试
1.测试react-query首先我们必须得拥有queryClient,所以我们初始化queryClient,因为默认是重试三次,这意味着如果想测试错误的查询,测试可能会超时。所以可以在初始化时关闭 const createWrapper () > {const queryClient new…...
软件设计师CISC与RISC考点分析——求三连
一、考点分值占比与趋势分析(CISC与RISC) 综合知识分值统计表 年份考题数量分值分值占比考察重点2018111.33%指令特征对比2019111.33%控制器实现方式2020222.67%寄存器数量/流水线技术2021111.33%寻址方式对比2022222.67%指令复杂度/译码方式2023111.3…...
GO语言(一期)常用关键字总结
GO语言(主题一)常用关键字总结 我们这里列出一些go语言关键字,方便各位友友们检查一下自己的学习效果,也方便友友们学习查询。 break default func interface select case defer go map …...
Ubuntu搭建NFS服务器的方法
0 工具 Ubuntu 18.041 Ubuntu搭建NFS服务器的方法 在Ubuntu下搭建NFS(网络文件系统)服务器可以让我们像访问本地文件一样访问Ubuntu上的文件,例如可以把开发板的根文件系统放到NFS服务器目录下方便调试。 1.1 安装nfs-kernel-server&#…...
京东商品详情API接口开发指南(含Java/Python实现)
接口概述 京东开放平台提供了商品详情查询接口,开发者可以通过SKUID获取商品的详细信息,包括标题、价格、图片、促销信息等。该接口需要申请API权限和认证密钥。 点击获取key和secret 接口特点 支持批量查询(最多20个SKU)返回J…...
二叉树构造:从前序、中序与后序遍历序列入手
目录 引言 从前序与中序遍历序列构造二叉树(题目 105) 解题思路 举例说明 从中序与后序遍历序列构造二叉树(题目 106) 解题思路 举例说明 总结 引言 二叉树的遍历与构造是算法领域中的经典问题。LeetCode 上的“从前序与中…...
GEE谷歌地球引擎批量下载逐日ERA5气象数据的方法
本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载逐日的ERA5土壤湿度数据(或者是其他气象数据、遥感影像数据等)的方法。 首先,明确一下本文的需求。我们希望在GEE中,下…...
C#接口(Interface)全方位讲解:定义、特性、应用与实践
引言 在面向对象编程(OOP)中,接口(Interface)是一种重要的结构,它定义了某一类对象或类应遵循的行为规范。接口强调“做什么(What)”,而非“怎么做(How&…...
索引与数据结构、并行算法
3. 索引与数据结构 索引类比目录:类似于书籍目录,帮助我们快速定位信息。索引的核心目的:提升数据查找效率,优化增删改查性能。实际应用广泛:MySQL、Redis、搜索引擎、分布式系统、中间件等。 3.1. 索引设计中的需求…...
GC全场景分析
GC全场景分析 文章目录 GC全场景分析标记-清除法**标记 - 清除法核心流程与 STW 机制****标记 - 清除法四步流程****1. STW 启动(暂停用户线程)****2. 标记可达对象(从根集合出发)****3. 清除未标记对象(回收堆内存&am…...
OSI七层模型和TCP/IP的五层(四层模型)
分层 1.什么是分层 我理解是对同一相同或者相似的事务或者操作功能进行分类,比如我们去餐厅吃饭,就可以分为好多层,客户层,服务员层,前台层,后厨层,每一层都专注自己的事情,客户层…...
MouseDown,MouseUp,LostMouseCapture的先后顺序
本文目标是实现如下功能: 按下一个按钮后置位某变量;鼠标松开后复位某个变量? 看似简单,但是一般来说会存在如下两种现象: 鼠标移出按钮:默认会丢失鼠标事件跟踪,即MouseLeftButtonUp事件并不会被触发。 焦点切换:Tab 键切换焦点会干扰按钮的事件捕获 本文通过几个…...
第8章 常用实用类
8.1 String类 在java.lang包(默认引入)中,可直接使用。 定义为final类,不能扩展String类,不可以继承,不可以有子类。 8.1.1 构造String对象 常量对象: 英文双引号括起来 String常量放入常…...
视差场(disparity field)
视差场(disparity field)是立体视觉中的一个重要概念,用于描述两幅立体图像之间像素的对应关系。以下是对视差场的详细解释: 1. 视差(Disparity)的定义 视差是指同一场景点在两幅立体图像中的像素位置差异…...
AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》
AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》 导读:2025年4月24日,OpenAI论坛全面探讨了 AI 的发展趋势、技术范式、地缘政治影响以及对经济和社会的广泛影响。强调了 AI 的通用性、可扩展性和高级推理能力,以…...
【已经解决诸多问题】Mamba安装
mamba被称为新一代的计算架构,因此在CV和时序领域存在诸多的方案开始采用这一新架构,但是这个架构的安装过程中存在诸多问题!!!!为了更好帮助大家理解我们给出一个统一的安装流程!!&…...
计算机的基本组成与性能
1. 冯诺依曼体系结构:计算机组成的金字塔 1.1. 计算机的基本硬件组成 1.CPU - 中央处理器(Central Processing Unit)。 2.内存(Memory)。 3.主板(Motherboard)。主板的芯片组(Ch…...
“绿色邮政,智能九识”——呼和浩特邮政无人快递车发车,驶向智慧物流新时代!
5月12日,“绿色邮政,智能九识”呼和浩特邮政无人驾驶快递车发车。 此次投运的邮政无人驾驶快递车实力惊人:单车运量超1000件,时速达40公里,通过智能路径规划实现24小时作业,与传统运输相比,运转…...
AGI大模型(24):通过LangChain的接口来调用OpenAI对话
1 创建对话 使用langchain库中的ChatOpenAI类来创建一个对话模型。 from dotenv import load_dotenvload_dotenv()import os from langchain_openai import ChatOpenAIllm = ChatOpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"),base_url="https://api.deepsee…...
大模型中的Token机制深度解析
目录 大模型中的Token机制深度解析 一、Token的本质与核心作用 二、主流分词算法对比 三、GPT-3分词机制详解 四、分词策略对模型性能的影响 五、工程实践建议 六、未来演进方向 一、Token的本质与核心作用 Token是大模型处理文本的最小语义单元,类似于人类语…...
【MySQL】库与表的操作
一、库的操作 1. 查看数据库 语法:show databases;这里的database是要加s的 查看当前自己所处的数据库:select database(); 例如下图,我当前所处的数据库就是在class1数据库 2. 创建数据库 语法:create database [if not e…...
创建指定版本的vite项目
1、获取vite的版本号 npm view create-vite versions 注:4.4.1版本即对应着node16版本的项目 2、创建制定版本的vite项目 npm init vite<version>...
java中的Servlet3.x详解
Servlet 3.x 是 Java Web 开发的重要里程碑,包含 Servlet 3.0(2009年发布)和 Servlet 3.1(2013年发布)两个主要版本。它通过多项革新优化了开发效率、性能及扩展性,成为现代 Java Web 应用的核心技术基础。…...
单目测距和双目测距 bev 3D车道线
单目视觉测距原理 单目视觉测距有两种方式。 第一种,是通过深度神经网络来预测深度,这需要大量的训练数据。训练后的单目视觉摄像头可以认识道路上最典型的参与者——人、汽车、卡车、摩托车,或是其他障碍物(雪糕桶之类…...
weibo_comment_pc_tool | 我于2025.5月用python开发的评论采集软件,根据帖子链接爬取评论的界面工具
本工具仅限学术交流使用,严格遵循相关法律法规,符合平台内容的合法及合规性,禁止用于任何商业用途! 一、背景分析 1.1 开发背景 微博(以下简称wb)是国内极具影响力的社交媒体平台,具有内容形式…...
ubuntu防火墙命令和放行ssh端口
一、关闭UFW防火墙(Ubuntu默认工具) 1. 临时关闭防火墙 sudo ufw disable sudo ufw status # 显示 Status: inactive 表示已关闭 2. 永久禁用防火墙(禁用系统服务) sudo systemctl stop ufw # 立即停止服务 sudo sy…...
PWM讲解+STM32任意频率、占空比、脉宽生成函数介绍
1.PWM讲解 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制。 脉宽调制 最开始使用PWM时,是做智能车时使用的舵机打角,电机驱动。这都属于比较浅显,普通的应用。下面和大家简单分享一下PWM的…...
C++23 范围迭代器作为非范围算法的输入 (P2408R5)
文章目录 一、引言二、C23及范围迭代器的背景知识2.1 C23概述2.2 范围迭代器的概念 三、P2408R5提案的内容3.1 提案背景3.2 提案内容 四、范围迭代器作为非范围算法输入的优势4.1 代码简洁性4.2 提高开发效率4.3 更好的兼容性 五、具体的代码示例5.1 使用范围迭代器进行并行计算…...
CVE-2018-1273 漏洞深度分析
漏洞概述 CVE-2018-1273 是 Spring Data Commons 中的一个高危远程代码执行(RCE)漏洞,影响版本为 Spring Data Commons 1.13–1.13.10 和 2.0–2.0.5。攻击者通过构造包含恶意 SpEL表达式的 HTTP 请求参数,触发表达式注入&#x…...
C++23:修正常量迭代器、哨兵和范围
文章目录 引言C20范围库回顾C23之前常量迭代器的问题视图可能不传播const代理对象的复杂性泛型代码中的一致性 P2278R4提案及C23的改进std::views::as_const的工作原理代码示例 浅const视图(如std::span)的改进总结 引言 在C的发展历程中,每…...
【漫话机器学习系列】266.雅可比矩阵(Jacobian Matrix)
雅可比矩阵(Jacobian Matrix)详解 | 多变量函数微积分的基石 在深度学习、计算图、优化算法、机器人控制、流形学习等众多领域中,“雅可比矩阵(Jacobian Matrix)”是一个非常核心的数学工具。 这篇文章将结合一张视觉…...
Leetcode 3551. Minimum Swaps to Sort by Digit Sum
Leetcode 3551. Minimum Swaps to Sort by Digit Sum 1. 解题思路2. 代码实现 题目链接:3551. Minimum Swaps to Sort by Digit Sum 1. 解题思路 这一题思路上我实现的非常暴力,就是先求出正确的排列,然后从头考察每一个元素是否处在其目标…...
西门子1200/1500博图(TIA Portal)寻址方式详解
西门子博图(TIA Portal)是西门子公司推出的自动化工程软件平台,广泛应用于工业自动化领域。在编写PLC程序时,寻址方式是一个非常重要的概念,它决定了如何访问和操作PLC中的数据和资源。本文将详细介绍西门子博图中的寻…...
STK手动建链+matlab联调
在右边场景区选择你要建链的卫星,右键在弹出的选项中选择Access 选择你要建链的卫星,这里我选择3轨10星与4轨8星建链,点击compute后再close就行了 建链完成,这里链路的颜色跟起始卫星的颜色一致,要想改变颜色只需改变卫…...
MATLAB中的Switch语句讲解
MATLAB中的Switch语句:一个简单的控制流工具 在MATLAB中,switch语句是一种多分支控制结构,通常用于根据某个表达式的值选择不同的代码块进行执行。它的作用类似于一系列的if-elseif-else语句,但在处理多个条件时,swit…...
【SpringBoot】✈️整合飞书群机器人发送消息
💥💥✈️✈️欢迎阅读本文章❤️❤️💥💥 🏆本篇文章阅读大约耗时3分钟。 ⛳️motto:不积跬步、无以千里 📋📋📋本文目录如下:🎁🎁&am…...
上位机知识篇---流式Web服务器模式的实现
文章目录 前言 前言 本文简单介绍了流式Web服务器模式的实现。...
Go 语言中的一等公民(First-Class Citizens)
在 Go 语言中,一等公民(First-Class Citizens) 是指语言中可以像普通值一样被自由操作的元素,包括赋值、传递、返回等。Go 虽然不是纯粹的函数式语言,但支持多种一等公民,以下是 Go 中常见的 一等公民及其特…...
python3.13版本降为3.12
目录 一、下载Python 二、安装PyCharm 三、 彩蛋 粗糙理解: PyThon是编译器(也可以在命令行编辑,但是麻烦) PyCharm是编辑器 一、下载Python https://repo.huaweicloud.com/python/3.12.9/python-3.12.9-amd64.exe 点击Insta…...
Ubuntu搭建TFTP服务器的方法
0 工具 Ubuntu 18.041 Ubuntu搭建TFTP服务器的方法 在Ubuntu下搭建TFTP服务器可以让我们下载文件到开发板更加方便,同时也可以实现TFTP加载Linux镜像,方便调试。 1.1 安装tftp-hpa(TFTP客户端)、tftpd-hpa(TFTP服务…...
【AI】Ubuntu 22.04 4060Ti16G 基于SWIFT框架的LoRA微调 模型Qwen3-1.8B 数据集弱智吧 微调笔记
下载Qwen3-1.8B 先更新安装modescope,然后下载模型 pip install -U modelscope modelscope download --model Qwen/Qwen3-1.7B 下载日志 部署模型 参考:【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8_wsl ubantu rtx4060 vllm镜像-CSDN博…...
系分论文《论信息系统缓存的分析和应用》
【摘要】 2023年3月,我作为系统分析师参与了某大型电商平台"云端购物中心"的性能优化项目。该项目日均订单量突破200万,但在促销高峰期频繁出现系统响应迟缓、数据库过载等问题。本项目以构建多级缓存体系为核心,通过系统化分析缓存应用场景和技术选型,重构了平…...
3.4/Q2,Charls最新文章解读
文章题目:Associations between reversible and potentially reversible cognitive frailty and falls in community-dwelling older adults in China: a longitudinal study DOI:10.1186/s12877-025-05872-2 中文标题:中国社区老年人可逆性和…...
Bash fork 炸弹 —— :(){ :|: };:
🧠 什么是 Fork 炸弹? Fork 炸弹是一种拒绝服务(DoS)攻击技术,利用操作系统的 fork() 系统调用不断创建新进程,直到系统资源(如进程表、CPU、内存)被耗尽,从而使系统无法…...
HarmonyOS AVPlayer 音频播放器
鸿蒙文档中心:使用AVPlayer播放视频(ArkTS)文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback 这张图描述的是 HarmonyOS AVPlayer 音频播放器的状态流转过程,展示了 AVPlayer 在不同状态之间的切换条件和关键操作…...
symfonos: 2靶场
symfonos: 2 来自 <https://www.vulnhub.com/entry/symfonos-2,331/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.253 3&…...