讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python中基于多变量百分比相似性对化学数据进行严格分组

千墨酱_1762

千墨酱_1762

发布时间:2026-05-13 16:08:03

|

807人浏览过

|

来源于php中文网

原创

如何在Python中基于多变量百分比相似性对化学数据进行严格分组

本文介绍一种适用于地球化学、环境科学等领域的精确分组方法:通过自定义百分比差异距离矩阵,结合dbscan聚类,实现“所有变量同时满足±10%容差”条件的严格化学相似性分组。

本文介绍一种适用于地球化学、环境科学等领域的精确分组方法:通过自定义百分比差异距离矩阵,结合dbscan聚类,实现“所有变量同时满足±10%容差”条件的严格化学相似性分组。

在多元素化学数据分析(如岩石、土壤、水体样品)中,研究者常需识别“成分高度一致”的样本群——即每个元素浓度均落在彼此±10%(或指定阈值)范围内。这与常规聚类(如K-means、层次聚类)有本质区别:后者基于欧氏距离或相关性,反映整体分布趋势;而本需求要求逐变量硬约束——只要任一元素偏差超限,两样本即不可归为同一组。

例如,给定4个含Al、Na、K、Si的样品:

Al Na K Si
Sample1 1.00 2.00 3.00 4.00
Sample2 1.50 2.50 3.50 4.50
Sample3 1.05 2.10 3.10 1.00
Sample4 0.95 1.90 3.10 3.80

按±10%规则:

  • Sample1 与 Sample4:各元素相对偏差为 |1.00−0.95|/1.00=5%, |2.00−1.90|/2.00=5%, |3.00−3.10|/3.10≈3.2%, |4.00−3.80|/4.00=5% → 全部 ≤10% → 可成组
  • Sample1 与 Sample3:前三者偏差均≤5%,但 Si 偏差为 |4.00−1.00|/4.00=75% → 超限 → 不可成组
  • Sample2 无任何样本满足全变量±10% → 孤立点

要实现该逻辑,核心是构建最大百分比差异距离矩阵(Max Percent Difference Matrix):对任意样本对 (i,j),计算所有变量中最大的相对偏差(取绝对值后除以较大值,规避除零),该值即为二者“距离”。此距离非度量空间标准距离(不满足三角不等式),但完全契合业务语义。

立即学习“Python免费学习笔记(深入)”;

Galileo python sdk
Galileo python sdk

Galileo AI 平台 Python SDK 完整参考,用于评估、监控和保护 GenAI 应用,适用于构建 Python 应用。

下载

以下是完整、可运行的Python实现(兼容 pandas ≥2.0, scikit-learn ≥1.3):

import pandas as pd
import numpy as np
from sklearn.cluster import DBSCAN
from itertools import combinations

# 示例数据(替换为您的2000×16化学数据)
df = pd.DataFrame({
    'Al': [1.00, 1.50, 1.05, 0.95],
    'Na': [2.00, 2.50, 2.10, 1.90],
    'K':  [3.00, 3.50, 3.10, 3.10],
    'Si': [4.00, 4.50, 1.00, 3.80]
}, index=['Sample1', 'Sample2', 'Sample3', 'Sample4'])

def max_pct_difference(row1, row2):
    """计算两行间各变量最大相对偏差(%),返回小数形式(如10% → 0.1)"""
    diffs = []
    for v1, v2 in zip(row1, row2):
        if v1 == 0 and v2 == 0:
            continue  # 两者均为0,视为完全一致
        elif v1 == 0 or v2 == 0:
            diffs.append(1.0)  # 一者为0,另一者非0 → 100%差异
        else:
            diffs.append(abs(v1 - v2) / max(abs(v1), abs(v2)))
    return max(diffs) if diffs else 0.0

# 构建对称距离矩阵(n×n)
n = len(df)
dist_matrix = np.zeros((n, n))
samples = df.index.tolist()

for i in range(n):
    for j in range(i + 1, n):
        d = max_pct_difference(df.iloc[i], df.iloc[j])
        dist_matrix[i, j] = d
        dist_matrix[j, i] = d  # 对称

# 应用DBSCAN:eps=0.1 即10%阈值;min_samples=2 要求至少2个样本才成簇
clustering = DBSCAN(eps=0.1, min_samples=2, metric='precomputed')
labels = clustering.fit_predict(dist_matrix)

# 添加分组结果到原DataFrame
df['Group'] = labels
print(df)

输出:

          Al   Na    K   Si  Group
Sample1  1.0  2.0  3.0  4.0      0
Sample2  1.5  2.5  3.5  4.5     -1
Sample3  1.05 2.1  3.1  1.0     -1
Sample4  0.95 1.9  3.1  3.8      0

✅ 关键说明与注意事项:

  • Group = -1 表示噪声点(未被任何簇接纳),即无其他样本与其满足全变量±10%条件;
  • DBSCAN在此处的作用是传递闭包:若 A↔B 且 B↔C 均≤10%,则 A,B,C 同属一组(即使 A↔C >10%)。若您需要严格两两满足(即组内任意两样本均≤10%),应改用连通分量算法(如 networkx.connected_components)处理阈值二值化图;
  • 大数据优化建议:对 n=2000 样本,距离矩阵需约 2000²/2 ≈ 2M 次比较,在现代CPU上耗时通常<1秒;若变量达16维且需更高精度,可向量化 max_pct_difference 或使用 scipy.spatial.distance.pdist 自定义度量;
  • 稳健性增强:实际化学数据常含检测限(<DL)或异常值,建议预处理——对<DL值赋为 DL/2,对离群值采用IQR过滤,再标准化(如Z-score)可提升稳定性(但注意:百分比差异本身已具备尺度不变性,标准化非必需)。

此方法将领域知识(百分比容差)精准编码进距离定义,再借力成熟聚类框架完成分组,兼顾可解释性与工程可行性,特别适合GIS空间分析前的化学同质性预筛选。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1711

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4304

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1689

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

25137

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3067

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3087

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1163

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn