SCI文章复现 | GEO文章套路,数据下载和批次效应处理

news2024/12/26 21:57:16

原文链接:

SCI文章复现 | GEO文章套路,数据下载和批次效应处理icon-default.png?t=N7T8https://mp.weixin.qq.com/s/KBA67EJ7cCK5NDTUzrwJ2Q


一、前言

这是2024年春节后的第一个推送教程,我们也给大家赠送一个福利。将前期的付费教程免费推送给大家。其实,这个教程的周期是很长的,但是到现在也没有更新完。主要原因是,在于自己的时间,自己一个人并没有那么多的业余时间来完成非领域的知识点,只能是在自己得空的时候,来做一做。

因此,小杜一直鼓励和希望大家可以进行投稿(对于,投稿。个人认为是对自己今天做的知识点总结,我们每个人精力是有限的,不可能记忆力那么好(天才排除),一旦时间太久,你再来做同样的事情,可能你依旧不会那么顺利。以上是自己的理解。)

我们第一篇复现的文章寻找的是来自Front Immunol (IF:7.3)题目为:"肾纤维化神经网络诊断模型的建立及免疫浸润特性的研究"。本篇文章发表日期在2023年6月,也算是比较新的文章。

原文链接:SCI文章复现 | GEO文章套路,数据下载和批次效应处理

本期文章目录

1.1文章标题:

「英文标题:」Construction of a neural network diagnostic model for renal fibrosis and investigation of immune infiltration characteristics「翻译标题:」肾纤维化神经网络诊断模型的建立及免疫浸润特性的研究

1.2 文章网址:

https://pubmed.ncbi.nlm.nih.gov/37359552/


二、文章摘要

「Background:」 近年来,世界范围内肾纤维化的发病率不断上升,极大地增加了社会负担。然而,该疾病的诊断和治疗工具不足,因此需要筛选潜在的生物标志物来预测肾纤维化。

「Methods:」 利用基因表达综合数据库(Gene Expression Omnibus, GEO),我们获得了来自肾纤维化患者和健康个体的两个基因阵列数据集(GSE76882和GSE22459)。我们鉴定了肾纤维化和正常组织之间的差异表达基因(DEGs),并使用机器学习分析了可能的诊断生物标志物。采用受试者工作特征(ROC)曲线评价候选标志物的诊断效果,并采用逆转录定量聚合酶链反应(RT-qPCR)验证其表达。采用CIBERSORT算法测定肾纤维化患者中22种免疫细胞的比例,研究生物标志物表达与免疫细胞比例的相关性。最后,我们建立了肾脏纤维化的人工神经网络模型。

「Results:」 DOCK2、SLC1A3、SOX9和TARP 4个候选基因被确定为肾纤维化的生物标志物,其ROC曲线下面积(AUC)值均大于0.75。接下来,我们通过RT-qPCR验证这些基因的表达。随后,我们通过CIBERSORT分析揭示了肾纤维化组免疫细胞的潜在紊乱,发现免疫细胞与候选标记物的表达高度相关。

「Conclusion:」  DOCK2、SLC1A3、SOX9和TARP被鉴定为肾纤维化的潜在诊断基因,并鉴定出最相关的免疫细胞。我们的发现为肾纤维化的诊断提供了潜在的生物标志物。


三、文章的思路与方法

3.1 思路

Fig. 1A Flowchart of the research以及把整篇文章的框架以及罗列出来,基本思路比较清晰的。

3.2 方法

  1. GEO数据下载:从GEO数据库下载GSE22459数据集和GSE76882数据集中获得患病样本和正常样本,作为训练集。

  2. 进行差异分析,获得DEG数据集

  3. 进行WGCNA分析

  4. 取DEG和WGCNA数据集的交集进行后续分析

  5. 交集数据进行PPI分析

  6. 进行LASSO和SVM-RFE分析获得4个基因

  7. 进行gene expression, ROC,GSEA功能富集、免疫细胞与候选标志物相关性分析和实验验证(说白了就是对前面获得4个基因的功能验证)

  8. ENDING

  9. 发表文章,发表在IF为7.3的期刊上

  10. 借此文章,完成任务之一、考核目标、获得升职机会或获得2023奖学金*W元


四、文章复现声明

我们复现文章,「可能不会获得与作者一样的结果」(不同的人来做,获得结果不一样)。「但是,我们的确保按照作者的思路完成文章重要的部分。也帮助大家根据我们的教程,可以做相关的分析,对于我们来来,这就够了」。学到自己需要的即可。

五、文章结果文件

「Figure 1」 Identification of renal fibrosis-related DEGs. (A) Flowchart of the research. (B) Heat map of differentially expressed genes between renal fibrosis samples and healthy samples. (C) Volcano plot of differentially expressed genes between renal fibrosis samples and healthy samples. (D) weighted correlation network analysis of train cohort. (E) Correlation between blue module and renal fibrosis. (F) Venn of DEGs and WGCNA.

「Figure 2」 Enrichment analisis of renal fibrosis-related DEGs. (A) PPI network of renal fibrosis-related DEGs. (B) The number of connection nodes of hub genes. (C, D) Correlations between top 20 hub genes. (E) The top 10 most significantly enriched GO terms. (F) The top 30 most significantly enriched KEGG pathways.

「Figure 3」 Identification of diagnostic markers for renal fibrosis. (A, B) Tuning feature screening in the LASSO model. (C, D) A plot of biological marker screening via the SVM-RFE arithmetic. (E) Venn graph displaying 4 diagnosis biomarkers shared by LASSO and SVM-RFE.

「Figure 4」 The ROC curve and expression of candidate biomarkers. (A) The ROC curve of DOCK2, SOX9, SLC1A3 and TARP. (B) The expression of DOCK2, SOX9, SLC1A3 and TARP in GSE76882. (C) RT-qPCR of DOCK2, SOX9, SLC1A3 and TARP in HK-2 cells with or without TGF-β. (D) The expression of DOCK2, SOX9, SLC1A3 and TARP in patients with renal fibrosis and healthy individuals.

「Figure 5」 Immune cell infiltration in renal fibrosis samples and control samples. (A) Comparison of 22 immune cell types in renal fibrosis samples and control samples. (B–K) Correlation between candidate biomarkers and neutrophils, macrophages M1, activated mast cells.

「Figure 6」 Correlation between four candidate biomarkers and immune cells. (A) DOCK2. (B) SLC1A3. (C) SOX9. (D) TARP. Correlation between four candidate biomarkers and immune related genes. (E) Chemokine. (F) MHC. (G) Receptor. (H) Immune checkpoint.

「Figure 7」 Gene set enrichment analysis (GSEA) identifies signaling pathways involved in the candidate biomarkers. (A) DOCK2. (B) SLC1A3. (C) SOX9. (D) TARP.


2.1 材料与方法

2.1.1 数据下载

肾纤维化和对照样本的基因表达水平来自基因表达综合GEO数据库。使用数据集GSE76882作为训练集,其中包括99个对照组和175个肾纤维化样本。所有样本都经过标准化处理,以便进行后续分析。为了验证神经网络模型的可靠性,使用数据集GSE22459作为验证集,其中包括25个对照样本和40个肾纤维化样本。

2.1.2 差异分析与WGCNA分析

采用R包“limma”筛选对照样本与肾纤维化样本间基因(DEGs)表达差异,筛选条件为:对FC大于2,fdr小于0.05。随后,我们通过加权相关网络分析(weighted correlation network analysis, WGCNA)获得与肾纤维化相关性最高的模块(8),并通过交叉得到与肾纤维化相关的DEG。进行基因本体(GO)和京都基因与基因组百科全书(KEGG)富集。

2.2.3 肾纤维化预测标志物的鉴定和验证

最小绝对收缩和选择算子(LASSO)逻辑回归和支持向量机递归特征消除(SVM-RFE)用于识别肾纤维化的预测基因。使用R软件包“glmnet”进行LASSO分析,通过SVM-RFE算法找到最优变量。使用这两种算法筛选候选诊断标记,并使用逆转录定量聚合酶链反应(RT-qPCR)进行验证

2.2.4 免疫细胞与候选生物标志物的相关性分析

使用CIBERSORT算法评估肾纤维化和对照样本中的免疫细胞。使用R包“ggplot2”进行Spearman秩相关分析,以可视化候选生物标志物与各种免疫细胞之间的相关性。

2.1.5 GSEA富集分析

2.1.6 Drug sensitivity analysis

为了确定治疗肾纤维化的候选生物标志物的其他药物,我们进行了药物敏感性分析。使用CellMiner数据库下载基因表达数据和药敏数据。

2.1.7实验验证

2.1.8 采用人工神经网络建立肾纤维化分类模型

首先,将DEG表达数据转换为基于表达水平的基因评分表。将所有样本表达值的中位数与给定样本中单个基因的表达值进行比较。如果上调基因的表达值大于0,则赋值为1;否则,它被赋值为0。同样,如果下调基因的表达值较高,则赋值为0;否则,它被赋值为1。肾纤维化是结局变量;病例被赋值为1,而对照组被赋值为0。基于构建的Gene Score表,使用R软件包neuralnet(19)可视化人工神经网络模型。模型参数设置为5个隐藏层。为了优化模型,减少过拟合,使用R包Caret(20)计算人工神经网络模型的5重交叉验证。


总的来说,主要流程与Fig. 1A是一样的,我们只是根据作者在Methods描述,进行理解。

「自己理解错误地方」:对我们理解不同的就是,数据上的不同。我原以为是GSE76882GSE22459都是用来做的训练集的。但是根据Methods的描述,只有GSE76882作为训练集,GSE22459做验证集。OK,这就是我们需要看Methods的作用。


2.2 数据下载(Data acuisition)

分别下载GSE76882GSE22459,我们可以在NCBI中查看GEO数据集的分析。

2.2.1 在NCBI中查看GEO数据

  1. 打开网页https://www.ncbi.nlm.nih.gov/

  2. 输入GEO号

    可以看到使用该数据集发表的文章数据量(PS:收录在NCBI中的期刊,有些期刊可能未收录NCBI中)。

  3. 点击GEO SERIES

  4. 查看数据集信息 查看该数据集的详细信息,包括样本的分类和的使用平台等信息。


2.2.2 使用R语言下载数据集

以下的分析就开始我们教程真正的分析练习,「如果你想跟着我们的步伐走,那么就一起动手敲代码吧!」

数据下载代码

  1. 设置路径和创建分析文件夹

##'@设置路径
setwd("E:\\小杜的生信筆記\\2023-复现期刊文章系列教程\\复现文章一分析")
##'@创建文件夹
dir.create('00.GEO_RawData', recursive = TRUE)
dir.create('01.GEO_Data', recursive = TRUE)

「注意:」创建文件后,我们最好把此代码注释掉,防止后续分析,又再一次创建,覆盖原有的分析结果。


在此说明一下,我们为什么要创建文件夹,主要是为了后续的分析规范化。不然结果很乱,数据很乱,你找得很辛苦。

2. 加载数据

library(GEOquery)
library(limma)
library(tibble)
library(dplyr)
library(tidyr)
  1. 下载数据 我们这里提供不同的下载方法,就看你自己的数据集能是否符合哪一种下载方法。

下载数据集方法一

(1)、需要在GEO数据集中下载Soft formatted family file文件,并进行解压

(2)、运行以下代码即可,「注意需要更改你对应的数据号」

##  下载数据
gset <- getGEO('GSE22459',getGPL = F,destdir = ".")
gset=gset[[1]]
exprSet1 = exprs(gset)
#exprSet1 = read.csv("GSE51588.csv",row.names = 1) #####rowname=1很重要
exprSet1[1:5,1:5]
## 导出结果
write.csv(exprSet1, file = "00.GEO_RawData/GSE22459_raw.data.csv",row.names = T,quote = F)

(3)、转换Gene symbol

##'@加载family.soft文件
anno <-data.table::fread("00.GEO_RawData/GSE22459/GSE22459_family.soft",skip ="ID",header = T)
anno[1:5,1:8]

#colnames(anno)[6] <- "Symbol"

probe2symbol <- anno %>%
  
  dplyr::select("ID","Gene Symbol") %>% dplyr::rename(probeset = "ID",symbol="Gene Symbol") %>%
  
  filter(symbol != "") %>%
  tidyr::separate_rows( `symbol`,sep="///")
## 导出  gene symbol数据集合
write.csv(probe2symbol,"00.GEO_RawData/GSE22459/GSE22459_geneSymbol_ID.csv", )
probe2symbol[1:10,1:2]
##转换
exprSet <- exprSet1 %>% as.data.frame() %>%
  rownames_to_column(var="probeset") %>% 
  #合并的信息
  inner_join(probe2symbol,by="probeset") %>% 
  #去掉多余信息
  dplyr::select(-probeset) %>% 
  #重新排列
  dplyr::select(symbol,everything()) %>% 
  #求出平均数(这边的点号代表上一步产出的数据)
  mutate(rowMean =rowMeans(.[grep("GSM", names(.))])) %>% 
  #去除symbol中的NA
  filter(symbol != "NA") %>% 
  #把表达量的平均值按从大到小排序
  arrange(desc(rowMean)) %>% 
  # symbol留下第一个
  distinct(symbol,.keep_all = T) %>% 
  #反向选择去除rowMean这一列
  dplyr::select(-rowMean) %>% 
  # 列名变成行名
  column_to_rownames(var = "symbol")

若需要归一化请进行归一化

##  归一化数据集合
# normalizeExp <- rbind(id=colnames(exprSet1), exprSet1)
# head(normalizeExp)
## 导出数据
write.csv(exprSet,"00.GEO_RawData/GSE22459_uniq.exp.csv",row.names = T)

GEO数据下载方法二

  1. 获得GOE号

  2. 获得芯片平台

  3. 加载代码

在我们构建的语雀网址教程中可以获得!

2.2.3 获得最终的数据集


2.3 数据去重和标准化

2.3.1 数据去重

数据去重是做GEO数据必做的步骤。

其实,使用下载数据的代码,已经做过去重的步骤了。

我们这里依旧给出一套去重的代码,供给有写数据无法使用我们的代码下载时进行去重处理(「PS:如果你需要,你可以保留」)。

##'@去重
##'@若你的数据未进行去重处理,你可以使用以下代码进行去重
##'@在我们前面代码中,已经做了去重处理,这里无需进行
## --
rt <- read.csv("00.GEO_RawData/GSE22459_uniq.exp.csv", header = T, check.names = F)
rt[1:10,1:10]
##
rt <- as.matrix(rt)  ## 转换矩阵
##第一列为行名,第二列以后为表达量
rownames(rt) <- rt[,1]
exp <- rt[,2:ncol(rt)]
##
dimnames = list(rownames(exp), colnames(exp))  #转换成字符串
data <-  matrix(as.numeric(as.matrix(exp)), nrow = nrow(exp), dimnames = dimnames)
## 除去重复值,取平均值
data <- avereps(data)
dim(data)
write.csv(data, "../01.GEO_Data/GSE76882_Exp02.csv")

2.3.2 标准化(归一化)处理

  1. 原始数据值

  2. 标准化(归一化)处理后数值

标准化方法一

我们直接使用scale()函数,直接了当。

df01 <- read.csv("00.GEO_RawData/GSE22459_uniq.exp.csv",header = T, row.names = 1)
df01[1:10,1:10]
normalizeExp <- scale(df01)
normalizeExp[1:10,1:10]

标准化方法二

使用log()函数,log()函数又分为log2()long10()。我们根据自己情况使用即可。

###'@方法二
nor59 <- log2(df01+1)
nor59[1:10,1:10]

那为什么要log2(df01+1)呢?主要是,数据矩阵中有数值为0.不加1,数据矩阵中会出现NA

log10()函数操作使用一致。


我们这里对其进行log2(data+1)的标准化处理。目前,还未知文章中作者是否进行标准化,以及如何标准化。


2.3.3 去批次效应

此代码是来自m유양아之手,若大家需要,可以进行尝试一下。

我们在此对本文章的两个数据集进行合并去批次效应,运行代码。

###'@去批次效应

library(GEOquery)
library(stringr)
gseid1 = 'GSE76882'
eSet1 <- getGEO(gseid1, destdir = '.', getGPL = F)
gseid2 = 'GSE22459'
eSet2 <- getGEO(gseid2, destdir = '.', getGPL = F)

#提取表达矩阵exp
exp1 <- exprs(eSet1[[1]])
head(exp1)
exp2 <- exprs(eSet2[[1]])
head(exp2)

#检查数据是否需要对数处理
###############################


#intersect取交集
table(rownames(exp1) %in% rownames(exp2))
length(intersect(rownames(exp1), rownames(exp2)))
a <- intersect(rownames(exp1), rownames(exp2))
exp1 <- exp1[a,]
exp2 <- exp2[a,]

#check the data
boxplot(exp1)
boxplot(exp2)
#组内校正 发现exp2的第三个样本有些异常
librar(limma)
exp2 <- normalizeBetweenArrays(exp2)
boxplot(exp2)

# 提取临床信息
pd1 <- pData(eSet1)
pd2 <- pData(eSet2)

if(!identical(rownames(pd1), colnames(exp1))) exp1 = exp1[, match(rownames(pd1), colnames(exp1))]

if(!identical(rownames(pd2), colnames(exp2))) exp2 = exp2[, match(rownames(pd2), colnames(exp2))]  
# 提取芯片平台
gpl1 <- eSet1[[1]]@annotation
gpl2 <- eSet2[[1]]@annotation


# 合并表达矩阵

exp <- cbind(exp1, exp2)
boxplot(exp)

#分组 
library(stringr)
group1 <- ifelse(str_detect(pd1$title, "Tumour"), "Tumour", "Normal")
group2 <- ifelse(str_detect(pd2$source_name_ch1, "Paracancerous", "Normal","Tumour"))

group <- c(group1, group2)
table(group)
group <- factor(group, levels = c("Normal","Tumour"))
save(gseid1, gseid2, group, exp, gpl, file = 'exp.Rdata')

#检查
boxplot(exp, outline = F, notch = T, col = group, las = 2, main = 'Origina')

###处理批次效应
library(limma)
batch <- c(rep('A', 12), rep('B',6)) #各个数据集里的样本数重复
exptotal <- removeBatchEffect(exp, batch = batch)

#检查数据
boxplot(exptotal, outline = F, notch = T, col = grou , las = 2, mian = 'Batch corrected')
par(mfrow = c(1, 2)) #展示的图片为一行两列
boxplot(as.data.frame(exp), mian = 'Original')
boxplot(as.data.frame(exptotal), mian = 'Batch corrected')

下期内容

差异分析

若我们的分享对你有用,希望您可以「点赞+收藏+转发」,这是对小杜最大的支持。

「往期文章:」

「1. 复现SCI文章系列专栏」

「2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。」

「3. 最全WGCNA教程(替换数据即可出全部结果与图形)」

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程分析代码 | 代码四

  • WGCNA分析 | 全流程分析代码 | 代码五(最新版本)


「4. 精美图形绘制教程」

  • 精美图形绘制教程

「5. 转录组分析教程」

「转录组上游分析教程[零基础]」

「一个转录组上游分析流程 | Hisat2-Stringtie」

「小杜的生信筆記」,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!

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

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

相关文章

关于Build Your Own Botnet的尝试

这是一次失败的尝试、 原文地址&#xff1a;关于Build Your Own Botnet的尝试 - Pleasure的博客 下面是正文内容&#xff1a; 前言 我在上一篇关于DDOS的文章种提到过这个项目&#xff0c;而且说明了由于这个项目是在2020年发布并开源的&#xff0c;并且已经有两年没有进行跟…

C++入门学习(二十八)跳转语句—continue语句

当在循环中遇到continue语句时&#xff0c;它会跳过当前迭代剩余的代码块&#xff0c;并立即开始下一次迭代。这意味着continue语句用于跳过循环中特定的执行步骤&#xff0c;而不是完全终止循环。 直接看一下下面的代码更清晰&#xff1a; 与上一节的break语句可以做一下对比…

spring boot3登录开发-2(1图形验证码接口实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 内容简介 图形验证码接口实现 导入糊涂工具依赖 接口分析 编写验证码接口 测试验证码接口 前置条件 …

【MySQL进阶之路】MySQL中到底为什么会出现幻读?

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

第六篇【传奇开心果系列】Python微项目技术点案例示例:庖丁解牛tkinter.ttk库gui界面编程

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录前言一、主窗口和子窗口创建和切换&#xff0c;以员工信息管理系统示例代码二、主窗口添加有菜单项图标的菜单栏、工具栏和右键菜单示例代码三、使用sqlite3数据库增删改查管理员工信息示例代码四、在主…

从物联网到数字孪生:智慧社区的演变

随着科技的飞速发展和数字化转型的深入推进&#xff0c;智慧社区已成为提升城市治理水平和居民生活质量的重要方向。在这一演变过程中&#xff0c;物联网和数字孪生技术起到了至关重要的作用。本文将深入探讨从物联网到数字孪生的演变过程&#xff0c;分析这一转变对智慧社区建…

FL Studio 21中文破解激活版2024免费下载安装图文教程

FL Studio 21.2.1.3859中文破解激活版是我见过更新迭代最快的宿主软件&#xff0c;没有之一。FL Studio12、FL Studio20、FL Studio21等等。有时甚至我刚刚下载好了最新版本&#xff0c;熟悉了新版本一些好用的操作&#xff0c;Fl Studio就又推出了更新的版本&#xff0c;而且F…

基于springboot大学生租房系统源码和论文

伴随着全球信息化发展&#xff0c;行行业业都与计算机技术相衔接&#xff0c;计算机技术普遍运用于各大行业&#xff0c;大学生租房系统便是其中一种。实施计算机系统来管理可以降低大学生租房管理的成本&#xff0c;使整个大学生租房的发展和服务水平有显著提升。 本论文主要面…

知识图谱:py2neo导入周杰伦歌单csv文件

文章目录 py2neo导入csv文件py2neo导入周杰伦歌单csv效果展示 py2neo导入csv文件 之前写的知识图谱指南 知识图谱&#xff1a;py2neo将csv文件导入neo4j 因为没有区分不同实体entity的类型&#xff0c;所以颜色相同&#xff0c;无法相互区分歌手、歌曲还是专辑等等。 py2ne…

解决STM32MP157开发板密码登录问题

开发板密码登录问题是很多人遇到的问题&#xff0c;网上有很多帖子&#xff0c;我也参考过&#xff0c;不太适用&#xff0c;很复杂&#xff0c;甚至会被误导&#xff0c;我差点连ubuntu虚拟机都无法登录了。有的密码匹配&#xff0c;有的取消不了密码。 1、密码配置&#xff…

恒流模块与常用电容

户外电源电芯&#xff1a;DJ采用无热中心设计&#xff1a;每个电芯都有一部分裸露在外面&#xff0c;保证良好散热上 固态电容相较于普通电解电容具有更高的电气性能、更长的使用寿命和更稳定的温度特性&#xff0c;但成本也相对较高。固态电容在1块左右&#xff0c;电解电容在…

import tensorflow_hub报错

问题&#xff1a; 导入tensorflow_hub报ModuleNotFoundError: No module named ‘tensorflow.python.checkpoint’ 解决&#xff1a; tensorflow-estimator版本不对 和tensorflow&#xff08;2.6.0&#xff09;版本一致 。 pip install -U tensorflow-estimator2.6.0 验证&a…

无线充电 线圈设计

本文所讨论参数&#xff0c;均有论文&#xff0c;仿真和实测支撑&#xff0c;也欢迎感兴趣的小伙伴一起讨论。 有个笑话&#xff0c;说是18年无线充白牌热销的时段&#xff0c;单片机没赚到钱&#xff0c;壳料没赚到钱&#xff0c;pcba也没赚到钱&#xff0c;钱都被卖NP0电容和…

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java)

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java) 比赛链接&#xff1a;Codeforces Round 926 (Div. 2) B题传送门&#xff1a;B. Sasha and the Drawing 题目&#xff1a;B. Sasha and the Drawing Example input 3 4 3 3 3 10 3 9 4 7 7 11 2 3output 2 …

挑战杯 YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快&#xff0c;YOLOv6还没用熟YOLOv7就来了&#xff0c;如果有同学的毕设项目想用上最新的技术&#xff0c;不妨看看学长的这篇文章&#xff0c;学长带大家简单的…

JavaWeb-JDBC-API详解

一、JDBC介绍 二、JDBC 快速入门 package com.itheima.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement;public class JDCBDemo {public static void main(String[] args) throws Exception {//1、注册驱动Class.forName("co…

微信小程序: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

全文目录,一步到位 1.前言简介1.1 专栏传送门 2. 微信小程序公用功能2.1 配置准备工作2.1.1 配置文件准备(单体放yml中 微服务放配置中心)2.1.2 获取配置文件中的小程序配置2.1.3 设置redis配置 2.2 创建不同功能工具类2.2.1 创建微信服务工具类WechatServiceUtils2.2.2 创建Re…

在windows上安装好anaconda后,输入conda命令出现 OSError: [WinError 123] 文件名、目录名或卷标语法不正确。

下载anaconda后使用conda命令就会报错&#xff0c;重装几次后无效。于是潜心解决发现问题&#xff1a; 报错&#xff1a; OSError: [WinError 123] 文件名、目录名或卷标语法不正确。 在这里是路径无效&#xff0c;“.”应该是“&#xff1a;”本身没有问题。路径的错误在意…

Java集合 List接口

List接口操作 Java的List接口是Java集合框架中的一部分&#xff0c;它表示有序的集合。List接口提供了许多常用的方法&#xff0c;以下是其中的一些例子&#xff1a; 增加元素 add(E e)&#xff1a;将指定的元素插入此列表的末尾。 List<String> list new ArrayList…

linux kernel 内存踩踏之KASAN_SW_TAGS(二)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 上一篇简单介绍了标准版本的KASAN使用方法和实现&#xff0c;这里将介绍KASAN_SW_TAGS和KASAN_HW_TAGS 的使用和背后基本原理&#xff0c;下图是三种方式的对比&#x…