You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按多条件对数据分箱以构建Bray-Curtis相似性矩阵

实现方案

以下提供生态数据分析领域常用的两种代码实现方式,均可直接得到符合Bray-Curtis相似性矩阵计算要求的计数表:

Python 实现(依赖pandas、numpy)

1. 深度分箱处理

import pandas as pd
import numpy as np

# 定义10个深度分箱的边界与标签
bin_edges = np.arange(0, 3300, 300)
bin_labels = [f"{i*300}-{(i+1)*300}m" for i in range(10)]

# 读取原始观测数据
raw_df = pd.read_csv("你的原始数据文件路径.csv")
# 新增深度分箱列,include_lowest参数保证深度为0、3000的边界值不会被漏算
raw_df["depth_bin"] = pd.cut(
    raw_df["深度"],
    bins=bin_edges,
    labels=bin_labels,
    include_lowest=True
)

2. 生成taxa计数宽表

根据你的分析需求选择样本聚合维度:

  • 按「区域+深度分箱+生境特征」为唯一样本:
# 按分组统计每个taxa的总个体数
count_df = raw_df.groupby(
    ["所属区域", "depth_bin", "生境特征", "taxa"]
)["个体数量"].sum().reset_index()

# 转成宽表,未观测到的taxa计数填0
output_df = count_df.pivot_table(
    index=["所属区域", "depth_bin", "生境特征"],
    columns="taxa",
    values="个体数量",
    fill_value=0
).reset_index()
  • 若不需要区分生境,仅按「区域+深度分箱」为样本,删除上述代码中分组参数里的生境特征即可。

3. 导出结果

output_df.to_csv("taxa_count_braycurtis.csv", index=False, encoding="utf-8-sig")

导出的表格前3列为样本属性,后续每列对应一个taxa,单元格为对应个体计数,可直接输入至vegan、scikit-bio等库计算Bray-Curtis矩阵。


R 实现(依赖dplyr、tidyr)

library(dplyr)
library(tidyr)

# 读取数据
raw_df <- read.csv("你的原始数据文件路径.csv", stringsAsFactors = FALSE)

# 深度分箱
bin_edges <- seq(0, 3300, 300)
bin_labels <- paste0(seq(0, 2700, 300), "-", seq(300, 3000, 300), "m")
raw_df$depth_bin <- cut(
    raw_df$深度,
    breaks = bin_edges,
    labels = bin_labels,
    include.lowest = TRUE
)

# 生成计数宽表并导出
output_df <- raw_df %>%
  group_by(所属区域, depth_bin, 生境特征, taxa) %>%
  summarise(个体数量 = sum(个体数量), .groups = "drop") %>%
  pivot_wider(names_from = taxa, values_from = 个体数量, values_fill = 0)

write.csv(output_df, "taxa_count_braycurtis.csv", row.names = FALSE, fileEncoding = "utf-8")

注意事项

  • 若原始数据中存在超过3000米的深度记录,可先过滤后再做分箱,或扩展bin_edges的上限值
  • 若深度记录用负数表示水深,将bin_edges调整为seq(-3000, 300, 300)即可匹配分箱逻辑

内容的提问来源于stack exchange,提问作者Gina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:54:03