生态位模拟——草稿笔记

news2024/11/25 0:39:16

文章目录

  • 前言
  • ENM初识
  • 一、所需软件安装
    • 1.1. 下载ArcGIS软件:
    • 1.2. 下载 MaxEnt软件:
    • 1.3. 下载ENMtools:
  • 二、数据准备与处理
    • 2.1. 物种分布数据
    • 2.2. 环境因子数据
    • 2.3. 地图数据
    • 2.4. 物种分布点去冗余
      • 2.4.1. 使用spThin包中的thin函数
      • 2.4.2. 或者使用 ENMTools 去除冗余位点
      • 2.4.3. 或者使用 arcgis 去除
    • 2.5. 环境因子的进一步筛选
  • 三、MaxEnt建模
  • 四、MaxEnt 参数优化
  • 五、使用Arcgis裁剪(补充)
  • 六、适生区划分
    • 1. 重分类
    • 2. 适生区图绘制
  • 七、适生区面积统计
  • 八、适生区收缩扩张以及稳定区分析
  • 九、适生区质心迁移分析
  • 小结:
  • 十、 基于rbcL序列的系统发育和单倍型分布分析
  • 十一、后续补充与问题解决
  • 总结


前言

软件、代码、地图:
链接:https://pan.baidu.com/s/1eqT7axtpTVc2I4wAwOjYvA?pwd=1wht
提取码:1wht
–来自百度网盘超级会员V4的分享


ENM初识

文章:

https://blog.csdn.net/2301_78630677/article/details/135963229

一、所需软件安装

1.1. 下载ArcGIS软件:

推荐文章:https://zhuanlan.zhihu.com/p/670775519

在这里插入图片描述

1.2. 下载 MaxEnt软件:

http://lucky-boy.ysepan.com/(这个网站有许多生物信息学相关资源。强烈推荐)

推荐文章:
https://blog.csdn.net/weixin_42191203/article/details/108759365

在这里插入图片描述

使用前需要先配置java环境
在这里插入图片描述

1.3. 下载ENMtools:

参考视频:
https://www.bilibili.com/video/BV1Sa4y1w7SP/?spm_id_from=333.337.search-card.all.click

二、数据准备与处理

2.1. 物种分布数据

从GBIF网站https://www.gbif.org/zh/下载

在这里插入图片描述
或者其它途径(如采样、文献等)

2.2. 环境因子数据

从https://bio-oracle.org/downloads-to-email.php下载的。

参考文献:
在这里插入图片描述

在这里插入图片描述

我下载了present和 Future (2040-2050):RCP26 、RCP45 、 RCP85 的Surface layers的 ASCII Grid file (.asc)的所有文件

在这里插入图片描述

发送到自己的邮箱后,可以点击下载:

在这里插入图片描述

由于要一个一个点击下载压缩包,再解压,干脆用代码自动实现一下

#下面的html代码都是来自于页面的下载链接部分的html部分代码

import os
import requests
from bs4 import BeautifulSoup
from zipfile import ZipFile


def download_and_extract_zip(url, save_dir, extract_dir):
    # 确保保存目录存在
    os.makedirs(save_dir, exist_ok=True)
    os.makedirs(extract_dir, exist_ok=True)

    # 文件名从URL最后一部分获取
    local_filename = url.split('/')[-1]
    save_path = os.path.join(save_dir, local_filename)

    # 下载文件
    with requests.get(url, stream=True) as r:
        r.raise_for_status()  # 确保请求成功
        with open(save_path, 'wb') as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
    print(f"文件已下载到: {save_path}")

    # 解压文件到指定目录
    with ZipFile(save_path, 'r') as zip_ref:
        zip_ref.extractall(extract_dir)
    print(f"文件已解压到: {extract_dir}")

#
#使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_present, 'html.parser')   #当前的
#
# # 查找所有<a>标签,提取以.zip结尾的href属性
links = [a['href'] for a in soup.find_all('a', href=True) if a['href'].endswith('.zip')]
print(links)
print(len(links))
# # 示例使用
save_directory = r"D:\tangzicai_project\huanjing_yinzi\Bio-OIRCLE"  # zip文件的保存目录
#
extract_directory = r'D:\tangzicai_project\huanjing_yinzi\Bio'  # zip文件的解压目录
#
for link in links:
    try:
        download_and_extract_zip(link, save_directory, extract_directory)

    except Exception as e:
        print(f"下载并解压{link}时发生错误: {e}")

        continue



print("=============================================")

soup = BeautifulSoup(html_futurre_RCP26, 'html.parser')  #未来的 RCP26

# 查找所有<a>标签,提取以.zip结尾的href属性
links = [a['href'] for a in soup.find_all('a', href=True) if a['href'].endswith('.zip')]
print(links)
print(len(links))
# 示例使用
save_directory = r"D:\tangzicai_project\huanjing_yinzi\Bio_future_RCP26"  # zip文件的保存目录

extract_directory = r'D:\tangzicai_project\huanjing_yinzi\future_RCP26'  # zip文件的解压目录


for link in links:
    try:
        download_and_extract_zip(link, save_directory, extract_directory)

    except Exception as e:
        print(f"下载并解压{link}时发生错误: {e}")

        continue

print("=============================================")


soup = BeautifulSoup(html_futurre_RCP45, 'html.parser')  #未来的 RCP45
# 查找所有<a>标签,提取以.zip结尾的href属性
links = [a['href'] for a in soup.find_all('a', href=True) if a['href'].endswith('.zip')]
print(links)
print(len(links))

# 示例使用
save_directory = r"D:\tangzicai_project\huanjing_yinzi\Bio_future_RCP45"  # zip文件的保存目录

extract_directory = r'D:\tangzicai_project\huanjing_yinzi\future_RCP45'  # zip文件的解压目录


for link in links:
    try:
        download_and_extract_zip(link, save_directory, extract_directory)

    except Exception as e:
        print(f"下载并解压{link}时发生错误: {e}")

        continue



print("==============================================")

soup = BeautifulSoup(html_futurre_RCP85, 'html.parser')  #未来的 RCP85
# 查找所有<a>标签,提取以.zip结尾的href属性
links = [a['href'] for a in soup.find_all('a', href=True) if a['href'].endswith('.zip')]
print(links)
print(len(links))
# 示例使用
save_directory = r"D:\tangzicai_project\huanjing_yinzi\Bio_future_RCP85"  # zip文件的保存目录

extract_directory = r'D:\tangzicai_project\huanjing_yinzi\future_RCP85'  # zip文件的解压目录




for link in links:
    try:
        download_and_extract_zip(link, save_directory, extract_directory)

    except Exception as e:
        print(f"下载并解压{link}时发生错误: {e}")

        continue

2.3. 地图数据

从中国科学院资源环境科学数据中心https://www.resdc.cn/Default.aspx下载的中国省级行政区划边界地图等

在这里插入图片描述

2.4. 物种分布点去冗余

2.4.1. 使用spThin包中的thin函数

在R软件中使用spThin包中的thin函数可以实现排除物种分布原始数据中距离小于5公里的记录

在这里插入图片描述

# 安装spThin包
install.packages("spThin")

# 加载spThin包
library(spThin)

# 读取原始数据
raw_GBIF_data <- read.csv("D:/tangzicai_project/Porphyra_fenbuxinxi1.csv", header = TRUE)
summary(raw_GBIF_data)

# 使用thin函数排除距离小于5公里的记录
filtered_data <- thin(loc.data=raw_GBIF_data,lat.col = 'Latitude', long.col = 'Longtitude',spec.col = 'species',thin.par = 5,reps = 5,out.dir ="D:/tangzicai_project/" )

最后就会得到reps次随机稀疏化模拟后的csv文件,任选其一即可

在这里插入图片描述

在这里插入图片描述

2.4.2. 或者使用 ENMTools 去除冗余位点

参考视频:

https://www.bilibili.com/video/BV1M84y187ms/?spm_id_from=333.337.search-card.all.click

2.4.3. 或者使用 arcgis 去除

参考:

https://www.zhihu.com/question/555446760/answer/2699062065

2.5. 环境因子的进一步筛选

使用ENMtools中的相关性分析以及贡献度对环境因子进一步筛选

在这里插入图片描述

点击 Settings:

在这里插入图片描述

在这里插入图片描述

设置好后,点击 Run,以运行

在这里插入图片描述

额外补充:(Maxent error: Error projecting, two layers have different geographic dimensions)解决方法:

打开 asc文件,查看文件的行数和列数以及单元格大小是否相同。如果不一致,则复制标题的那几行使之一样。

参考https://blog.csdn.net/qq_32678749/article/details/124081821
在这里插入图片描述

打开结果页面

在这里插入图片描述
环境因子的贡献度排列如下:
在这里插入图片描述

去掉贡献率为 0 的环境因素,

将剩余因素使用ENMtools的correlation功能完成相关性分析

先设置输出路径:
在这里插入图片描述

回到correlation功能模块:
在这里插入图片描述
点击“GO”
在这里插入图片描述

环境变量的相关系数|r|˃0.8 定义为高度相关 ,从中筛选贡献率最高的用于后续建模

在这里插入图片描述

在这里插入图片描述

经过筛选后剩余:

在这里插入图片描述

三、MaxEnt建模

打开maxent软件,与前面差不太多,只是环境因子变为了筛选后的,

在这里插入图片描述

在这里插入图片描述

四、MaxEnt 参数优化

利用R语言的ENMeval包来进行maxent的参数优化,选取最佳参数后再在maxent软件中运行maxent模型。

参考视频:https://www.bilibili.com/video/BV1Cu41147zD/?spm_id_from=333.337.search-card.all.click

library(dismo)
install.packages("ENMeval")
library(ENMeval)
library(raster)
library(sp)
library(sf)
library(dplyr)
occs <- read.csv("D:/tangzicai_project/thinned_data_thin.csv") #排除空间自相关之后的经纬度数据,列名依次是:species-Lon-Lat(如果经纬度顺序反了请调整过来)
occs <- occs[,2:3] #提取第二第三列(Lon,Lat)
colnames(occs) <- c("x", "y") #更改列名,为了和背景点(bg)保持一致
setwd("D:/tangzicai_project/huanjing_yinzi/pre")
files=dir(pattern = "*.asc") #指定列出文件中所有asc格式文件(可以是tiff文件)
length(files)


clim=list() #生成一个空list
for (i in 1:length(files)) {
  t_texture <- raster::stack(files[i]) #asc文件导入
  clim[i] <- t_texture
} #循环,所有asc文件生成一个list(clim)
bg <- dismo::randomPoints(clim[[1]], n = 10000) %>% as.data.frame() #生成背景点,背景点数量默认10000
result <- ENMevaluate(occs = occs[,1:2], #经纬度数据
                      envs = clim, #环境图层
                      bg = bg[,1:2], #背景点 
                      partitions = 'jackknife', #五种可用"randomkfold","jackknife","block", "checkerboard1", and "checkerboard2"
                      #tune.args = list(fc="L", rm = 1:2),  
                      tune.args = list(fc=c("L", "LQ", "H", "LQH", "LQHP", "LQHPT"), rm = c(0.1, seq(0.5, 6, 0.5))),  #调控倍频(regularization multiplier, RM)和特征组合(feature combination, FC)   文献常用参数的类型
                      algorithm = 'maxent.jar') 
delta_AICc3 <- evalplot.stats(e = result,
                              stats = c("delta.AICc"),
                              color = "fc",
                              x.var = "rm",
                              error.bars = FALSE) #绘制delta_AICc曲线
pdf('delta_AICc3.pdf', width = 5, height = 4) #生成pdf
print(delta_AICc3) #打印pdf
dev.off() #保存pdf文件

即选取图中使AlCC值最小的点代表的参数,根据最佳的参数带入maxent软件中再次运行。

五、使用Arcgis裁剪(补充)

参考文章:

https://blog.csdn.net/2301_78630677/article/details/136067779

六、适生区划分

1. 重分类

打开arcgis的 "ArcToolbox—— Spatial Analyst工具 —— 重分类—— 重分类”

在这里插入图片描述

输入代表当前的栅格数据,然后再点击“分类”

在这里插入图片描述
设置类别数和中断值
在这里插入图片描述

修改图层属性,划分适生区

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. 适生区图绘制

绘制比例尺

1.打开“ 布局视图”
2. 坐标系选为 “WGS 1984"
3. “显示” 为 “千米”
4. 参考比例为 “当前比例”
5. 确定后,点击 ” 插入——比例尺——黑白相间比例尺“
6. 右键点击比例尺,选择”属性“,修改”主刻度单位”为“千米“ 等
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

插入图例和指北针

  1. 点击”插入——图例“
  2. 选择图例项,设置图例
  3. 点击”插入——指北针“

在这里插入图片描述

插入经纬度框

  1. 同样右键点击”属性“,选择”格网“,新建格网
    在这里插入图片描述

  2. 之后就是按照自己的要求去设置

右下角的小框

点击” 插入——数据框“,这样变新建了一个数据框
之后,将原来内容列表中的数据复制到此新建数据框中,选中调整大小和位置。

最终展示:

在这里插入图片描述

七、适生区面积统计

面积计算公式为:像元个数*像元面积

推荐文章:https://zhuanlan.zhihu.com/p/484912410

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

在这里插入图片描述

在这里插入图片描述

八、适生区收缩扩张以及稳定区分析

到这里要用到未来的maxent建模结果和现在的结果

  1. 以现在的和未来的RCP26为例,导入数据

在这里插入图片描述

  1. 同样进行”重分类“ (只不过类别设为1)

在这里插入图片描述

  1. 在“工具栏中点击”转换工具——由栅格转出——栅格转面“

在这里插入图片描述

在这里插入图片描述

  1. 在“工具栏中点击”转换工具——分析工具——叠加分析——相交“

在这里插入图片描述

在这里插入图片描述

  1. 在“工具栏中点击”转换工具——转为栅格——面转栅格“

在这里插入图片描述

在这里插入图片描述

  1. 将序号4代表的非适生区去除,剩下的划分为稳定区、收缩区、增长区
    在这里插入图片描述

  2. 最终结果展示:
    在这里插入图片描述

九、适生区质心迁移分析

同样先进行重分类

之后:
在这里插入图片描述

栅格转面

在这里插入图片描述

在“工具栏中点击”空间统计工具——度量地理分布——平均中心“

在这里插入图片描述

点击菜单栏的”地理处理——合并“

在这里插入图片描述

点击工具栏的”数据管理工具——要素——点集转线“

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

在这里插入图片描述

在这里插入图片描述

小结:

前文粗略的了解了一下使用maxent模型的生态位模拟的大概流程,虽然在实际再正式细致的操作中可能会有一些报错和其余问题,但是大体框架就这样,至于更细致的问题,之后具体问题具体分析吧。

我个人感觉的问题有:

之后要用到更多不同的环境因子,如海拔、太阳辐射等,可能会因为格式等问题引起报错;

环境因子的分辨率要统一,是选择10min 、5min 、2.5min、30s,这是个问题,并且可能要用到重采样

另外在maxent模型调优和后续图片的精美绘制时会耗费时间

最后,总之感觉有太多意外。。。。

十、 基于rbcL序列的系统发育和单倍型分布分析

。。。。。。。。。。

十一、后续补充与问题解决


总结

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

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

相关文章

使用耳机壳UV树脂制作私模定制耳塞有什么优点和缺点呢?

使用耳机壳UV树脂制作私模定制耳塞具有以下优点&#xff1a; 个性化定制&#xff1a;UV树脂可以根据用户的耳型进行个性化定制&#xff0c;使耳塞与用户的耳朵形状完美契合&#xff0c;提高舒适度和佩戴稳定性。高强度和耐磨性&#xff1a;UV树脂具有高强度和耐磨性&#xff0…

Spring Native 解放 JVM

一、Spring Native 是什么 Spring Native可以通过GraalVM将Spring应用程序编译成原生镜像&#xff0c;提供了一种新的方式来部署Spring应用。与Java虚拟机相比&#xff0c;原生镜像可以在许多场景下降低工作负载&#xff0c;包括微服务&#xff0c;函数式服务&#xff0c;非常…

C语言printf函数详解..

1.printf函数解析 前面我们有讲过printf函数的格式为&#xff1a; printf(“占位1 占位2 占位3……”, 替代1, 替代2, 替代3……); 今天我们进一步深入的解析一下这个函数 2.printf函数的特点 1.printf函数是一个变参函数(即参数的数量和类型都不确定) 2.printf函数的第一个…

Linux笔记之xhost +和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解

Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解 ——2024-02-11 code review! 文章目录 Linux笔记之xhost 和docker的关系以及GDK_SCALE和GDK_DPI_SCALE详解xhost 的作用xhost 与 Docker 的关系 -e GDK_SCALE 和 -e GDK_DPI_SCALE详解GDK_SCALEGDK_DPI_SC…

Java集合 LinkedList

目录 LinkedList实例 LinkedList LinkedList是Java中的一个重要的数据结构&#xff0c;它实现了List接口&#xff0c;提供了链表数据结构的实现。LinkedList类中包含了各种常用的链表操作&#xff0c;如添加、删除、查找等。 LinkedList的特点是元素可以动态地添加到链表的任…

【转载】原生社区交友婚恋视频即时通讯双端APP源码 ONE兔2.0版

原生社区交友婚恋视频即时通讯双端APP源码下载ONE兔2.0版 包含后端、H5源码源码&#xff0c;Android源码&#xff0c;IOS源码

恒创科技:怎么看云主机的性价比

随着云计算技术的不断发展&#xff0c;云主机已经成为越来越多企业和个人用户的首选计算资源。然而&#xff0c;在选择云主机时&#xff0c;性价比是一个非常重要的考虑因素。那么&#xff0c;怎么看云主机的性价比呢&#xff1f; 通常来说&#xff0c;云主机的成本主要包括硬…

【调试】pstore原理和使用方法总结

什么是pstore pstore最初是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。不过在当前内核版本中&#xff0c;其已经支持了更多的功能&#xff0c;如保存console日志、ftrace消息和用户空间日志。同时&#xff0c;它还支持将这些消息保存在不同的存储…

模拟发送 Ctrl+Alt+Del 快捷键

目录 前言 一、在 XP 系统上模拟 SAS 二、在不低于 Vista 的系统上模拟 SAS 2.1 一些细节 2.2 实现原理和应用 三、完整实现代码和测试 3.1 客户端控制台程序 3.2 服务程序 3.3 编译&测试程序 四、总结&更新 参考文献 前言 对于开启了安全登陆的窗口工作站…

FFmpeg中的Color颜色参数解析、转码和HDR

前言 视频中帧的颜色信息非常重要&#xff0c;表示着编码时用到的标准&#xff0c;意味着解码时也要对应上&#xff0c;或者要使用正确的转换函数&#xff0c;否则就会带来色差问题。 关于FFmpeg中的颜色参数&#xff0c;有下边几个重要的结构体&#xff1a; 颜色参数相关的结…

基于SSM的图书馆预约占座系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书馆预约占座系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

seatunnel数据集成(四)转换器使用

seatunnel数据集成&#xff08;一&#xff09;简介与安装seatunnel数据集成&#xff08;二&#xff09;数据同步seatunnel数据集成&#xff08;三&#xff09;多表同步seatunnel数据集成&#xff08;四&#xff09;连接器使用 seatunnel除了丰富的连接器类型&#xff0c;其转换…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅草莓照片)可以使用 多种方式来表示&#xff0c;如每个像素强度值的向量&#xff0c;或者更抽象地表示成一系列边、特定形状的区域等。 深度学习的最主要特征是使用神经网络作为计算模型。神经网络模型 …

python+flask+django医院预约挂号病历分时段管理系统snsj0

技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django/flask Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm . 第一&#xff0c;研究分析python技术&#xff0c…

《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P9 访问 Steam&#xff08;Acessing Steam&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

使用UMAP降维可视化RAG嵌入

大型语言模型&#xff08;LLMs&#xff09;如 GPT-4 已经展示了出色的文本理解和生成能力。但它们在处理领域特定信息方面面临挑战&#xff0c;比如当查询超出训练数据范围时&#xff0c;它们会产生错误的答案。LLMs 的推理过程也缺乏透明度&#xff0c;使用户难以理解达成结论…

Win10截图的四种方式

截图不一定要依靠通讯软件&#xff0c;现在系统自己就带有这些功能。 1.Win Shift S组合键&#xff1a;选择微信截图&#xff0c;部分截图&#xff0c;随心所欲&#xff1b; 2.Win W组合键&#xff1a;呼出屏幕右侧的工作区&#xff0c;选择屏幕草图&#xff0c;支持裁剪、编辑…

flask+python高校学生综合测评管理系统 phl8b

系统包括管理员、教师和学生三个角色&#xff1b; 。通过研究&#xff0c;以MySQL为后端数据库&#xff0c;以python为前端技术&#xff0c;以pycharm为开发平台&#xff0c;采用vue架构&#xff0c;建立一个提供个人中心、学生管理、教师管理、课程类型管理、课程信息管理、学…

网络安全工程师技能手册(附学习路线图)

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 安全是互联网公司的生命&#xff0c;也是每位网民的基本需求。现在越来越多的人对网络安全感兴趣&#xff0c;愿意投奔到网络安全事业之中&#xff0c;这是一个很好的现象。 很多对网络安全感…

线程池7个参数描述

所谓的线程池的 7 大参数是指&#xff0c;在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数&#xff0c;如以下源码所示&#xff1a; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable&…