生态位模拟——草稿笔记

文章目录

  • 前言
  • 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序列的系统发育和单倍型分布分析

。。。。。。。。。。

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


总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贵金属交易包括哪些?香港有哪些贵金属交易平台?

随着金融市场的不断发展&#xff0c;贵金属交易作为一种投资方式&#xff0c;越来越受到投资者的关注。贵金属交易不仅具有投资价值&#xff0c;还能够为投资者提供规避风险和保值的工具。本文将介绍贵金属交易的种类和香港的贵金属交易平台。 一、贵金属交易的种类 贵金属交…

UE4运用C++和框架开发坦克大战教程笔记(十九)(第58~60集)完结

UE4运用C和框架开发坦克大战教程笔记&#xff08;十九&#xff09;&#xff08;第58~60集&#xff09;完结 58. 弹窗显示与隐藏59. UI 面板销毁60. 框架完成与总结 58. 弹窗显示与隐藏 这节课我们先来补全 TransferMask() 里对于 Overlay 布局类型面板的遮罩转移逻辑&#xff…

Vuex介绍和使用

1. 什么是Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它解决了在大型 Vue.js 应用程序中共享和管理状态的问题&#xff0c;使得状态管理变得更加简单、可预测和可维护。 在 Vue.js 应用中&#xff0c;组件之间的通信可以通过 props 和事件进行&#xff0c…

从github上拉取项目到pycharm中

有两种方法&#xff0c;方法一较为简单&#xff0c;方法二用到了git bash&#xff0c;推荐方法一 目录 有两种方法&#xff0c;方法一较为简单&#xff0c;方法二用到了git bash&#xff0c;推荐方法一方法一&#xff1a;方法二&#xff1a; 方法一&#xff1a; 在github上复制…

SpringCloud-微服务项目架构

在当今软件开发领域&#xff0c;微服务架构正成为构建灵活、可伸缩、独立部署的应用的首选&#xff0c;微服务架构作为一种灵活而强大的设计模式&#xff0c;通过将系统拆分为独立的、自治的服务&#xff0c;使得应用更容易维护、扩展和升级。本文将探讨微服务项目架构的关键特…

WordPress函数wptexturize的介绍及用法示例,字符串替换为HTML实体

在查看WordPress你好多莉插件时发现代码中使用了wptexturize()函数用来随机输出一句歌词&#xff0c;下面boke112百科就跟大家一起来学习一下WordPress函数wptexturize的介绍及用法示例。 WordPress函数wptexturize介绍 wptexturize( string $text, bool $reset false ): st…

质数基础筛法

文章目录 埃氏筛线性筛 埃氏筛 埃氏筛是一种筛素数的方法&#xff0c;埃氏筛的思想很重要&#xff0c;主要是时间复杂度 朴素的埃氏筛的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn) 这个复杂度是调和级数 vector<int>p; int vis[N];void solve() {rep(i,2,n){if(…

爪哇部落算法组2024新生赛热身赛题解

第一题&#xff08;签到&#xff09;&#xff1a; 1、题意&#xff1a; 2、题解: 我们观察到happynewyear的长度是12个字符&#xff0c;我们直接从前往后遍历0到n - 12的位置&#xff08;这里索引从0开始&#xff09;&#xff0c;使用C的substr()函数找到以i开头的长度为12的字…

形态学算法应用之连通分量提取的python实现——图像处理

原理 连通分量提取是图像处理和计算机视觉中的一项基本任务&#xff0c;旨在识别图像中所有连通区域&#xff0c;并将它们作为独立对象处理。在二值图像中&#xff0c;连通分量通常指的是所有连接在一起的前景像素集合。这里的“连接”可以根据四连通或八连通的邻接关系来定义…

基于华为云欧拉操作系统(HCE OS)容器化部署传统应用(Redis+Postgresql+Git+SpringBoot+Nginx)

写在前面 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理认证地址&#xff1a;https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1博文内容涉及一个传统 Springboot 应用HCE部署&#x…

云安全的基本概念(基本目标与指导方针)

目录 一、云安全概念概述 1.1 概述 二、云安全的基本目标 2.1 安全策略开发模型 2.1.1 信息安全三元组 2.1.1.1 保密性(Confidentiality) 2.1.1.2 完整性(Integrity) 2.1.1.3 可用性(Availability) 2.1.2 信息安全三元组的局限性 2.2 其他信息安全属性 2.2.1 真实性 …

《山雨欲来-知道创宇 2023 年度 APT 威胁分析总结报告》

下载链接: https://pan.baidu.com/s/1eaIOyTk12d9mcuqDGzMYYQ?pwdzdcy 提取码: zdcy

HttpClient | 支持 HTTP 协议的客户端编程工具包

目录 1、简介 2、应用场景 3、导入 4、API 5、示例 5.1、GET请求 5.2、POST请求 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初…

[晓理紫]CCF系列会议截稿时间订阅

CCF系列会议截稿时间订阅 关注{晓理紫|小李子}&#xff0c;每日更新最新CCF系列会议信息&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持&#xff01;&#xff01; 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新CCF…

MATLAB知识点:逻辑运算函数

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.4 逻辑运算 3.4.4.1 逻辑运算函数 在上…

Java基础常见面试题总结-集合(一)

常见的集合有哪些&#xff1f; Java集合类主要由两个接口Collection和Map派生出来的&#xff0c;Collection有三个子接口&#xff1a;List、Set、Queue。 Java集合框架图如下&#xff1a; List代表了有序可重复集合&#xff0c;可直接根据元素的索引来访问&#xff1b;Set代表…

寒假作业-day7

1>现有文件test.c\test1.c\main.c , 请编写Makefile. 代码&#xff1a; CCgcc EXEstr OBJS$(patsubst %.c,%.o,$(wildcard *.c)) CFLAGS-c -oall:$(EXE)$(EXE):$(OBJS)$(CC) $^ -o $%.o:%.c$(CC) $(CFLAGS) $ $^head.o:head.hclean:rm $(OBJS) $(EXE) 2>C编程实现&…

Uniapp(uni-app)学习与快速上手教程

Uniapp&#xff08;uni-app&#xff09;学习与快速上手教程 1. 简介 Uniapp是一个跨平台的前端框架&#xff0c;允许您使用Vue.js语法开发小程序、H5、安卓和iOS应用。下面是快速上手的步骤。 2. 创建项目 2.1 可视化界面创建 1、打开 HBuilderX&#xff0c;这是一款专为uni…

docker 基于容器创建本地web容器化镜像

一、docker 基于容器创建本地web容器化镜像 1、启动指定buysbox 镜像 docker run --name b1 -it busybox:latest 2、创建目录&#xff0c;并创建html mkdir -p /data/html vi index.html 内容自定义例如&#xff1a;<h1>welcome to busybox<h1> 3、新增窗口&am…

基于麻雀优化算法优化XGBoost参数的优化控制策略

目录 一、背景 二、算法流程图 三、附录 一、背景 为提高极端梯度提升&#xff08;Extreme Gradient Boosting, XGBoost&#xff09;集成算法在时间预测、信贷风险预测、工件参数预测、故障诊断预测等方面中的准确性&#xff0c;研究者提出了一种改进的麻雀算法&#xff08;…