【R语言】基于Biomod2集成平台探究物种分布区的构建流程(SDMs)(持续更新中。。。。。。)

Species Distribution Models

  • 1.写在前面
  • 2.物种分布模型介绍
  • 3.输入数据准备及预处理
    • 3.1.如何从GBIF网站上获取分布点数据(基于rgbif包)
    • 3.2.分布点稀疏处理(基于spThin函数)
    • 3.3.如何获取环境变量数据(基于getData函数)
    • 3.4.环境变量多重共线性分析
  • 4.Biomod2模型构建(v.3.5.1)

1.写在前面

  我为什么想要写这个内容呢? 其实我已经想了很久了,但是一直没有把所有的代码给理清楚,此外这将是我之后研究的主要方向。我对这个方向已经有了初步的了解,看到的满是绝望和不甘。就我个人看法,这个方向已经过了它的热潮,目前正处于低谷期,无人问暇。因此,今年上半年我曾经有一段时间非常痛苦,辗转反侧,我不知道方向还有研究的价值或者必要吗?已经有很多人做过这个方向了,我再来做还有用吗?能提升吗?实际上,可能大多数人只是把这个作为一个应用的工具(水论文),而不是深入的探究,因此我认为只是做应用层面的,这个方向已经饱和了,而我们想要继续深挖下去,就得更加了解其原理和意义,与实际情况相结合才能用更好的产出(如生物多样性保护等)。目前来说物种分布模型(Species Distribution Models,SDMs)已经有很多人在研究了,包括国内的中科院动物所乔慧捷老师、中科院青藏高原所的郭彦龙老师、以及法国科学院的Wilfried Thuiller教授(Biomod2包的发明者)。
  现在,我把我的所有SDMs的构建流程进行记录,希望对相关研究方向的学者有所助益。
在这里插入图片描述

2.物种分布模型介绍

  目前常用的SDMs有单一模型和集成模型,考虑到单个模型的优点和缺点,使用整体模型可能更安全。其中,Biomod2平台是目前常用的集成平台,它包括了十个不同类型的模型:

  • 三个回归模型:广义线性模型(generalized linear model, GLM);多元自适应回归样条(multivariate adaptive regression splines, MARS),广义加法模型(generalized additive models, GAM);
  • 五个机器学习模型:人工神经网络(artificial neural network, ANN),最大熵(maximum entropy, MaxEnt),随机森林(random forest, RF)和广义助推模型(generalized boosting model, GBM),分类树分析(classification tree analysis, CTA)、
  • 一个分类模型:灵活判别分析(flexible discriminant analysis, FDA)
  • 一个范围包络:表面分布区分室模型(surface range envelope, SRE)

在这里插入图片描述

  如果你想继续了解SDMs的研究方向和基本知识,我推荐你阅读以下几篇 综诉类文献:

[1] 郭彦龙,赵泽芳,乔慧捷,等.物种分布模型面临的挑战与发展趋势[J].地球科学进展,2020,35(12):1292-1305.

在这里插入图片描述

[2] 刘晓彤,袁泉,倪健.中国植物分布模拟研究现状[J].植物生态学报,2019,43(04):273-283.

在这里插入图片描述

[3] 许仲林,彭焕华,彭守璋.物种分布模型的发展及评价方法[J].生态学报,2015,35(02):557-567.

在这里插入图片描述

3.输入数据准备及预处理

  首先我们需要知道构建SDMs需要哪些要素:物种分布点数据(Species occurrence data)和环境变量数据(Environmental data),分布点数据可从几个地方进行获取,首先是全球生物多样性网络(GBIF)、中国数字植物标本馆(CVH)、NSII-中国国家标本资源平台以及自己的野外调查数据。

在这里插入图片描述

3.1.如何从GBIF网站上获取分布点数据(基于rgbif包)

##需要改四个地方的物种名 ----
setwd("D:/SDMs/Thesis/Data/")
library(mapdata)
library(sp)
library(sf)
library(raster)
library(ggplot2) 
library(CoordinateCleaner)
library(rgbif)
library(dplyr) 
library(beepr)# 这个包是用来进行声音提示的#第一步:使用''rgbif'' 包从 GBIF 中搜索与目标物种小叶栎(Quercus chenii)相关的数据------
key <- name_suggest(q="Quercus chenii", rank='species')$data$key[1]
key #物种识别号:2879172
occ_count(taxonKey=key, georeferenced=TRUE,basisOfRecord = "PRESERVED_SPECIMEN") 
# 266,目前,GBIF 数据库中有 266 条基于博物馆的记录是具有经纬度信息的。
# 需要注意的是,因为数据库一直在更新,这个数字可能会变动,
# 因此使用本流程过程中可能会有部分数值有一些小范围的变动。data <- occ_search(scientificName = "Quercus chenii", limit= 10000, hasCoordinate = TRUE, basisOfRecord= "PRESERVED_SPECIMEN"# ,country = "CN" # 将物种限定在中国境内) #这一步需要 1-2 分钟完成,具体看网速和物种分布数量。
beepr::beep(8) # 上面代码运行结束会有声音提示
str(data$data) 
data$meta # 查看有多少个物种分布点
names(data$data) #检查数据的列名,一共有162列数据
head(data$data[,c("countryCode","country")]) # 例如:检查 54 列和 57 列的列名datasel<-data$data %>% dplyr::select(species, decimalLongitude,decimalLatitude,country,coordinateUncertaintyInMeters) %>%rename(Species = species, Long = decimalLongitude, Lat =decimalLatitude, Uncertain=coordinateUncertaintyInMeters) %>%mutate (Species = as.factor(Species), country=as.factor(country))datasel # 现在有了一个包含266 行、5 列数据:Species、Long、Lat、country、Uncertaindatasel %>% group_by(country) %>% summarize(total= n()) %>%arrange(desc(total)) # GBIF 检索的数据集中每个国家的记录数量
# write.csv(datasel, "Quercus acutissima Carruth.csv")#第二步:使用 CoordinateCleaner 包删除有问题的分布记录--------------------------
map('worldHires', col=1:10)
# plot(world_map, col="tan2",bg="lightblue", border= NA) #图示地图。
points(datasel$Long, datasel$Lat, bg="red", col='white', pch=21, cex=1.0)
#将从 GBIF 下载的数据映射到地图上 (图 9)。
datasel %>% filter(Long==0, Lat==0) # 统计经纬度等于零的记录 problem_records<- clean_coordinates(datasel, lon = "Long", lat = "Lat", species = "Species",tests = c("capitals", "centroids", "equal","institutions","zeros", "seas")) 
# 检测记录点坐标是否围绕首都、国家的中心
# 是否落入海洋,为零,或在饲养动物的博物馆(机构)周围。 
summary(problem_records) # 2个有问题的分布点被发现datasel_problematic <- datasel[which(problem_records$.summary=="FALSE"),] #只选择有问题的点。
# 查看有问题分布点的位置
map('worldHires', col=1:10)
points(datasel_problematic$Long, datasel_problematic$Lat, bg="red", col='white', pch=22, cex=0.8) # 将有问题的点映射到地图上# 从数据集中排除所有有问题的记录
datasel_clean <- datasel[which(problem_records$.summary== "TRUE"),]
str(datasel_clean) # 现在还剩下264个正常分布点数据# 删除坐标中具有较高不确定性的记录。
# 看看有多少个体有这样的信息,并把值的范围图像化 
summary(is.na(datasel_clean$Uncertain))
hist(datasel_clean$Uncertain/1000, breaks = 10,main="Coordinate uncertainy in km", xlab= "Uncertainty in km")
# 注意,GBIF 提供的信息是以米为单位
# 但是为了评估不确定性,使用千米为单位更加方便。 (图 13)。
# 这个命令中用于选择“信息不确定”的点,或者是数值<10 km 以下的点。
datasel_cleanF<-datasel_clean %>% filter(is.na(Uncertain)| Uncertain/1000 < 10)
#最后一步是删除重复的记录。
datasel_cleanF <- datasel_cleanF %>% distinct(Long, Lat,.keep_all=T) 
str(datasel_cleanF) # 图 14。#以下代码可以图示这个最终数据集。
map('worldHires', col=1:10)
points(datasel_cleanF$Long, datasel_cleanF$Lat, bg="blue", col='white', pch=21, cex=0.5) # 图 15
# 最后记得将数据保存下来
write.csv(datasel_cleanF, "Quercus chenii_gbif.csv")

  如果你想要从CVH网站上获得分布点数据,就需要自己去查看里面的标本记录,然后手动记录下来,这个过程可能比较繁琐,目前没有相关的包能够获取上面的记录。

3.2.分布点稀疏处理(基于spThin函数)

  为了防止数据空间自相关性对模拟结果的影响,通常需要对分布点数据进行稀疏处理,如10km范围内只保留一个分布点数据。目前常用的方法是在ArcGIS中安装SDMtoolbox (v.2.5) 小插件,并使用其中所提供的 “Spatially Rarefy Occurence Data” 功能进行处理。但是采用这样的方式有时候会报让人摸不着头脑的错误,所以我提供了一个使用R语言进行稀疏处理的方法,如下:

## thin----------------------------------------------
setwd("C:\\Users\\YP\\Desktop\\SDMData")
# library(wallace)
library(spThin) # v.0.2.0
library(readxl)
library(mapdata)
# run_wallace()   ##运行run后可直接进入到浏览器界面QuercusL <- read.csv("Quercus chenii_gbif.csv", sep = ",")
head(QuercusL)
summary(QuercusL)# remove rows with duplicate coordinates
occs.dups <- duplicated(QuercusL[c('Long', 'Lat')])
occs <- QuercusL[!occs.dups,]
# remove NAs
occs <- occs[complete.cases(occs$Long, occs$Lat), ]
summary(occs)output <- spThin::thin(occs, 'Lat', 'Long', 'Species', thin.par = 10, reps = 100, # 稀疏距离参数thin.par设置为10km,并重复运行100次locs.thinned.list.return = TRUE,write.files = FALSE,verbose = TRUE)
plotThin(output)# 基于最优迭代构建最优输出
maxThin <- which(sapply(output, nrow) == max(sapply(output, nrow)))
# if there's more than one max, pick the first one
maxThin <- output[[ifelse(length(maxThin) > 1, maxThin[1], maxThin)]]  
# subset occs to match only thinned occs
occs <- occs[as.numeric(rownames(maxThin)),]
write.csv(occs,"./Quercus chenii_gbif_occs.csv")# plot
map('worldHires', 'China')
points(occs$Long, occs$Lat, bg="red", col='white', pch=21, cex=1.0)

分布点空间位置:

3.3.如何获取环境变量数据(基于getData函数)

  目前,常用的大尺度空间数据主要由WorldClim提供,我之前写了一篇关于如何下载该数据的方法,感兴趣的可以看看:Worldclim(v1.4、v2.1)数据集使用介绍
  在这里我可以提供另一种方法:使用R语言下载数据。代码如下:

##使用"Raster"包从 WorldClim 下载环境数据--------------------------------
# 目前该函数只提供了下载2.5, 5, 和 10 min的空间分辨率下的数据,且来源于worldclim1.4(CMIP5)
bioclim<-getData('worldclim', var="bio", res=5) #把 19 个5min分辨率的气候数据图层下载到本地Future_bioclim2<-getData('CMIP5', var='tmin', res=10, rcp=85, model='AC', year=70) # 获取未来气候数据
names(bioclim) #查看存储在"bioclim"对象中的不同气候变量层的名称

  我可能不太建议使用R代码来下载数据,因为这可能受到网速的限制,导致下载突然中断,所以直接到官网里面下载,这样也很方便。
  当然还可以使用CHELSA数据集,这是由瑞士森林雪和景观研究所(WSL)提供的。现在也有很多研究使用该数据:
在这里插入图片描述

在这里插入图片描述

3.4.环境变量多重共线性分析

  在构建SDMs时,会存在不同环境变量对分布分布点的贡献程度相似,即可看做这几个变量对物种分布的作用相同,因此为了降低模型拟合的不确定性,就需要从这几个变量中选择一个贡献度最高,最关键的环境变量,因此就需要使用多重共线性分析。常用的方法为Pearson相关性系数以及方差膨胀因子(VIF)。其中Pearson相关性系数和VIF计算方法如下:

library(raster)
library(pheatmap) 
library(usdm)
setwd("C:/Users/YP/Desktop/SDMData")quercus <- read.csv("Quercus chenii_gbif_occs.csv", sep = ",")
summary(quercus)
current_folder1 <- "C:/Users/YP/Desktop/Data/"
# 气候因子1
current_bio <- stack(paste0(current_folder1,c("wc2.1_30s_bio_1","wc2.1_30s_bio_2","wc2.1_30s_bio_3","wc2.1_30s_bio_4","wc2.1_30s_bio_5","wc2.1_30s_bio_6","wc2.1_30s_bio_7","wc2.1_30s_bio_8","wc2.1_30s_bio_9","wc2.1_30s_bio_10","wc2.1_30s_bio_11","wc2.1_30s_bio_12","wc2.1_30s_bio_13","wc2.1_30s_bio_14","wc2.1_30s_bio_15","wc2.1_30s_bio_16","wc2.1_30s_bio_17","wc2.1_30s_bio_18","wc2.1_30s_bio_19"),".tif")
)
# 修改变量名
new_names1 <- paste0("bio", 1:19)
names(current_bio) <- new_names1# 地形因子2
current_topo <- stack(paste0(current_folder1,c("DEM_2023", "Aspect", "Slope"),".tif")
)
new_names2 <- c("Elevation", "Aspect", "Slope")
names(current_topo) <- new_names2# 土壤因子3
current_soil <- stack(paste0(current_folder1,c("BD1","PH1", "TK1","TN1","TP1","soil_1km1"),".tif")
)
new_names3 <- c("BD","pH","TK","TN","TP","SoilType")
names(current_soil) <- new_names3# 将以上不同变量数据合并为一个叠加图层
(current <- stack(current_bio, current_topo, current_soil))# 进行坐标转换,将分布点数据转换为环境数据空间投影格式,即WGS1984
longlat <- as.data.frame(quercus[, c(4:5)]) # Long Lat
coordinates(longlat) <- c("Long", "Lat") # 这里只能是Long在前,Lat在后,不然下一行代码会报错!!!
proj4string(longlat) <- CRS("+proj=longlat +datum=WGS84")
UTM_Proj <- CRS(st_crs(current)$proj4string)
xy <- spTransform(longlat, UTM_Proj)# 检查坐标系是否一致
if (st_crs(current)$proj4string == st_crs(xy)$proj4string) {print("坐标系转换结果:坐标系相同")
} else {print("坐标系转换结果:坐标系不同")
}# 从所有的记录中提取环境因子对应值
data <- raster::extract(current, xy)
data_na <- na.omit(data)# 构建pearson相关分析(pearson>0.80)
cor_matrix <- cor(data_na, method = "pearson") # R在带stats包
cor_matrix
# dev.off() # 聚类热图绘制报错时可以使用,这可以清除之前可能干扰当前绘图的图形设置
pheatmap(cor_matrix,cluster_cols = F,display_numbers = T,main = "环境因子相关性分析")# 计算方差膨胀因子VIF
vifstep(data_na) # usdm包:vifstep()

  多重共线性诊断VIF: 一般文章的材料方法中对VIF的限定不同,有的限定在5以内,有的限定在10以内,也有的限定在20以内,这个根据自己的判断来定,没有十分明确的数值,数值越小越好,一般建议保留在VIF<10的变量。

文章:

  • 1. Analysis of the distribution pattern of Chinese Ziziphus jujuba under climate change based on optimized biomod2 and MaxEnt models. Ecological Indicators:
    在这里插入图片描述

  • 2. Predicting the invasive trend of exotic plants in China based on the ensemble model under climate change: A case for three invasive plants of Asteraceae. Science of The Total Environment:
    在这里插入图片描述

  • 3. Projected degradation of quercus habitats in southern China under future global warming scenarios. Forest Ecol. Manag.:
    在这里插入图片描述

  • 4. Incorporating eco-evolutionary information into species distribution models provides comprehensive predictions of species range shifts under climate change. Science of The Total Environment:在这里插入图片描述
    在这里插入图片描述

Pearson相关性热图:
在这里插入图片描述
  在得到Pearson相关性系数之后,如果我们要去除Pearson>0.80的变量,那么我们应该选择这两个变量中好解释的变量(不要为难自己,给自己挖坑),或者是你认为更加重要的变量(你就是这个领域的专家,你的知识就是最正确的)。

4.Biomod2模型构建(v.3.5.1)

  目前最新的版本应该是v.4.2-1,最新版可能使用起来更加流畅和友好,但是我比较习惯使用v.3.5.1版本构建模型,这个是已经成熟使用过的版本,可能报错少一些,运行更加稳定。

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

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

相关文章

创建一个Spring MVC项目(配置,导入依赖,以及前端控制器)

Tomcat&#xff08;10.1.28&#xff09;配置 详细讲解&#xff01; 链接https://blog.csdn.net/or77iu_N/article/details/141266535?spm1001.2014.3001.5502 1、创建 Java Web 项目 File -> New -> Project 2、导入 Spring MVC 相关依赖 <dependency> <gro…

汽车乘客热舒适度大挑战,如何利用仿真技术提高汽车环境舒适度

舒适性在人们选择汽车的决定性方面占比越来越重&#xff0c;而汽车乘员舱环境的舒适性是指为乘员提供舒适愉快便利的乘坐环境与条件&#xff0c;包括良好的平顺性、车内的低噪声、适宜的空气环境以及良好的驾驶操作性能。 舒适性 经济性 安全性、动力性 典型的乘员舱热舒适性模…

测试 UDP 端口可达性的方法

前言&#xff1a; UDP (User Datagram Protocol) 是一种无连接的传输层协议&#xff0c;它不像 TCP 那样提供确认机制来保证数据包的可靠传输。因此&#xff0c;测试 UDP 端口的可达性通常需要一些特殊的方法&#xff0c;因为传统的端口扫描工具&#xff08;如 nmap&#xff0…

AGI系列(9)手把手带你玩转 Coze 画板节点

本文以智能体“日签卡片生成器”的制作来阐述 Coze 画板节点的使用方法。 效果演示 核心流程 日签卡片生成器工作流整体分为两部分&#xff1a; 工作流&#xff1a;其核心流程为通过用户输入的主题词生成卡片的标题、内容 图像流&#xff1a;通过LLM输出的内容在图像流完成卡…

Verilog开源项目——百兆以太网交换机(七)包修改模块设计

Verilog开源项目——百兆以太网交换机&#xff08;七&#xff09;包修改模块设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦整体…

Java项目: 基于SpringBoot+mysql网上订餐系统分前后台(含源码+数据库+开题报告+PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql网上订餐系统分前后台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单…

【北森-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

(二)Kafka离线安装 - Zookeeper下载及安装

一、下载 下载ZooKeeper之前&#xff0c;需要根据下载的Kafka版本&#xff0c;来确定ZooKeeper的版本。 Kafka官方地址&#xff1a;Apache Kafka 1、先下载源码版本&#xff0c;下载完后解压&#xff0c;在kafka-3.8.0-src\gradle目录下找到dependencies.gradle文件&#xff…

我用GPT对RAG技术的学习和探索

思维导图 下图是我的学习和探索过程&#xff0c;红点表示已研究&#xff0c;黄点表示待研究 目录 思维导图RAG技术概述RAG 的关键优点应用场景 如何了解RAG技术的原理和应用1. **基础理论学习**2. **实战演练**3. **学习资源利用**4. **保持学习的连贯性**5. **多角度理解**6. …

RASA使用长文记录以及一些bug整理

RASA 学习笔记整理 一 安装 在虚拟环境中安装&#xff0c;进入python3版本的环境 conda activate python3 ai04机器旧版本&#xff1a;rasa-nlu和rasa-core是分开安装的 最新版本&#xff1a;rasa 将二者做了合并 直接安装 pip3 install rasa 在安装到如下步骤时候会报…

应急响应-爆破漏洞应急响应流程(以SSH爆破为例)

目录 概述研判分析登录成功登录失败历史命令authorized_keys 定损止损攻击链路还原清理恢复总结复盘参考 概述 爆破漏洞是比较常见漏洞&#xff0c;端口开放&#xff0c;管理后台没有做登录频率限制等情况都可能遭受到爆破攻击&#xff0c;本文以SSH爆破为例&#xff0c;介绍下…

N10 - NLP中的注意力机制

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 1. 注意力机制是什么2. 注意力实现步骤0. 准备隐藏状态1. 获取每个编码器隐藏状态的分数2. 通过softmax层运行所有分数3. 通过softmax得分将每个编码器的…

以低代码技术加速推动企业数字创新

在数字化转型的浪潮中&#xff0c;企业面临着前所未有的挑战和机遇。随着技术的不断进步&#xff0c;企业需要快速适应市场变化&#xff0c;创新产品和服务&#xff0c;以保持竞争力。低代码技术作为一种新兴的开发模式&#xff0c;正逐渐成为企业数字创新的重要推动力。 低代码…

《深入浅出WPF》读书笔记.8路由事件

《深入浅出WPF》读书笔记.8路由事件 背景 路由事件是直接响应事件的变种。直接响应事件&#xff0c;事件触发者和事件响应者必须显示订阅。而路由事件的触发者和事件响应者之间的没有显示订阅&#xff0c;事件触发后&#xff0c;事件响应者安装事件监听器&#xff0c;当事件传…

财富趋势金融大模型已通过备案

财富趋势金融大模型已通过备案 8月28日晚&#xff0c;国内领先的证券软件与信息服务提供商——财富趋势&#xff0c;公布了其2024年上半年财务报告&#xff1a; 今年上半年&#xff0c;财富趋势营收1.48亿元&#xff0c;同比增长0.14%&#xff1b;实现归母净利润为1亿元&#x…

国标GB28181视频监控EasyCVR视频汇聚平台国标注册被陌生IP入侵如何处理?

GB28181国标/GA/T1400协议/安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。智慧安防/视频存储/视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级…

nginx容器映射配置文件后,启动一直报错提示:failed (13: Permission denied)的排查

问题现象&#xff1a; 使用harbor 的install.sh 创建docker-compose之后&#xff0c;出现nginx容器一直重启。 查看日志发现是&#xff1a;配置文件无权限。报错信息如下&#xff1a; Sep 2 16:43:13 172.28.0.1 nginx[1344]: 2024/09/02 08:43:13 [emerg] 1#0: open() “/e…

HarmonyOS开发实战( Beta5版)线程间通信场景最佳实践

简介 在应用开发中&#xff0c;经常会需要处理一些耗时的任务&#xff0c;如果全部放在主线程中执行就会导致阻塞&#xff0c;从而引起卡顿或者掉帧现象&#xff0c;降低用户体验&#xff0c;此时就可以将这些耗时操作放到子线程中处理。通常情况下&#xff0c;子线程可以独立…

linux离线安装nacos

1、打开 Nacos-GitHub &#xff0c;点击 Release 可以看到 Nacos 的各版本跟新信息和安装包之类的 点击下载nacos-server-2.4.1.tar.gz&#xff0c;在linux创建nacos文件夹&#xff0c;把下载好的文件上传到nacos文件夹&#xff0c;并通过命令解压:tar -zxvf nacos-server-2.4.…

《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → &#x1f41f; 摸鱼小网站地址 学代码 → &#x1f4bb; 源码库地址 一、前言 我们已经成功实现了一个完整的热搜组件&#xff0c;从后端到前端&#xff0c;构建了这个小网站的核心功能。接下来&#xff0c;我们…