原油数据处理:1.聚类、盐含量测定与近红外光谱快速评估

一、原油种类的聚类分析

在塔里木盆地塔河油田的原油处理过程中,需要对原油进行地球化学特征研究,以了解其成因和特征。根据地球化学手段的综合研究结果,塔河油田奥陶系原油属于海相沉积环境,成熟度较高,正构烷烃分布较完整,具有UCM(Unresolved Complex Mixture)鼓包现象,25-降藿烷普遍存在,伽马蜡烷含量较低,C29藿烷丰度高,规则甾烷(αββ构型)丰度高于ααα构型。这些特征表明塔河油田的原油经历了较强的微生物降解作用,并存在至少两个期次的原油充注。

我们不妨假设将塔河油田原油划分为三类I类原油具有多期充注特征,但主要表现出早期生物降解原油的特征,早期生物降解原油的贡献高于后期充注正常原油的贡献;II类原油可能经历过强烈的微生物降解,部分样品正构烷烃缺失,UCM鼓包明显;III类原油受热成熟度影响较大,正构烷烃热裂解导致低碳数正构烷烃相对富集,代表混合原油但正常原油的贡献较大。

首先,我们生成三个特征('三环萜烷/五环萜烷'、'Ts/17αC30藿烷'、'重排甾烷/规则甾烷')的随机数值作为原油样本数据,生成了100个样本。接着,通过导入的sklearn.cluster库中的KMeans类,创建了一个KMeans对象,并设定聚类数目为3。然后,调用fit方法对样本数据进行聚类分析。

完整代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.cluster import KMeans
from matplotlib.font_manager import FontProperties

# 设置字体
font = FontProperties(fname=r'C:\Users\Lenovo\PycharmProjects\allModels0119\Draw\wordcloud\fonts\msyh.ttc', size=12)

# 模拟原油样本数据
data = {
    '三环萜烷/五环萜烷': np.random.uniform(0.5, 7.82, size=100),
    'Ts/17αC30藿烷': np.random.uniform(0.33, 2.01, size=100),
    '重排甾烷/规则甾烷': np.random.uniform(0.25, 2.11, size=100)
}

df = pd.DataFrame(data)

# 使用KMeans算法进行聚类分析
kmeans = KMeans(n_clusters=3)
kmeans.fit(df)

# 获取聚类结果
labels = kmeans.labels_

# 将聚类结果添加到数据框中
df['label'] = labels

# 绘制三维散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

scatter = ax.scatter(df['三环萜烷/五环萜烷'], df['Ts/17αC30藿烷'], df['重排甾烷/规则甾烷'], c=df['label'])

# 添加图例,并设置中文显示
handles, labels = scatter.legend_elements()
plt.legend(handles, labels, loc='best', prop=font)

ax.set_xlabel('三环萜烷/五环萜烷', fontproperties=font)
ax.set_ylabel('Ts/17αC30藿烷', fontproperties=font)
ax.set_zlabel('重排甾烷/规则甾烷', fontproperties=font)

plt.show()

记得把字体地址改为你的电脑上字体所在地址,或者直接注释掉,用英文图例

运行结果如下:

二、基于X射线荧光光谱的盐含量测定

        原油中的无机盐含量对设备腐蚀、管线结垢堵塞、加热设备效率以及最终产品质量等方面有影响。为了分析原油中的盐含量,目前常用的方法有电量法、电位滴定法和电导法等。然而,这些方法存在一些问题,如对仪器和环境要求高、操作复杂等。因此,为了解决这些问题,提出了一种新的方法,即单波长色散X射线荧光光谱法。该方法通过将原油中的无机盐萃取至乙醇水溶液中,然后利用已做好的标准曲线来快速测定无机氯含量,从而计算出原油中的盐含量。这种方法具有准确性高、重复性好、分析速度快、仪器维护简单等优点,可以作为传统方法的替代方法。

当X射线与原子相互作用时,会发生散射和荧光现象。在荧光现象中,X射线会激发原子中的电子,使其跃迁到更高能级,然后再从高能级跃迁回到较低能级时放出能量。这些放出的能量形成了荧光光谱,可以用来分析样品中的元素。盐类元素在荧光光谱中具有特定的特征峰,不同元素对应着不同的特征峰。通过测量荧光光谱中这些特征峰的强度和位置,可以确定样品中各种元素的含量。对于原油中的盐含量分析,主要关注氯元素。实验中,使用X射线源发出的X射线经入射光单色器衍射形成一束能够激发氯元素K层电子的单色激发光束。将这束光照射到原油样品上,样品中的氯元素会发出特定波长为0.473nm的Ka特征X射线荧光。这个波长的X射线荧光由一固定通道单色器收集并聚集到探测器上,从而得到原油样品的X射线荧光强度(计数/s)。通过使用事先制备好的标准溶液进行校准,可以将样品X射线荧光强度转换为样品中氯的含量(以毫克/千克计)。根据氯的含量,可以计算出相应的氯化钠含量(以毫克/千克计)。

在实验中,需要制备标准溶液,选择干燥的NaCl作为溶质,用超纯水溶解。通过称取适量的NaCl溶解后,稀释并混合均匀,以制备出所需浓度的标准溶液。

完整代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 生成原油样品的荧光光谱数据
def generate_fluorescence_spectrum():
    # 生成荧光光谱的波长范围和强度
    wavelength = np.linspace(0.4, 1.0, 100)  # 波长范围0.4到1.0
    intensity = np.random.rand(100)  # 荧光强度随机生成

    return wavelength, intensity

# 计算样品中的盐含量
def calculate_salt_content(fl_spectrum):
    # 假设荧光光谱中的特征峰对应盐类元素的含量
    salt_peak_intensity = np.max(fl_spectrum[1])  # 荧光光谱的最大强度
    salt_content = salt_peak_intensity * 10  # 假设强度和盐含量的线性关系

    return salt_content

# 生成标准溶液的荧光光谱数据
def generate_standard_fluorescence_spectrum(salt_content):
    # 假设标准溶液的荧光光谱与盐含量成正比
    intensity = salt_content * np.random.rand(100)  # 荧光强度与盐含量成正比
    # 假设标准溶液的波长范围与原油样品相同
    wavelength = np.linspace(0.4, 1.0, 100)  # 波长范围0.4到1.0

    return wavelength, intensity

# 校准曲线拟合
def calibrate_curve(standard_spectrum):
    # 假设标准曲线是线性拟合
    salt_content = np.linspace(0, 100, 100)  # 盐含量范围0到100
    calibration_curve = np.polyfit(standard_spectrum[1], salt_content, 1)  # 线性拟合

    return calibration_curve

# 生成测试样品的荧光光谱数据
sample_fl_spectrum = generate_fluorescence_spectrum()
sample_salt_content = calculate_salt_content(sample_fl_spectrum)

# 生成标准溶液的荧光光谱数据
standard_fl_spectrum = generate_standard_fluorescence_spectrum(sample_salt_content)

# 校准曲线拟合
calibration_curve = calibrate_curve(standard_fl_spectrum)

# 转换测试样品的盐含量
sample_salt_content_converted = np.polyval(calibration_curve, sample_fl_spectrum[1])

# 绘制荧光光谱图
plt.figure(figsize=(8, 6))
plt.plot(sample_fl_spectrum[0], sample_fl_spectrum[1], label='Sample Fluorescence Spectrum')
plt.plot(standard_fl_spectrum[0], standard_fl_spectrum[1], label='Standard Fluorescence Spectrum')
plt.xlabel('Wavelength')
plt.ylabel('Intensity')
plt.title('Fluorescence Spectrum Comparison')
plt.legend()
plt.show()

# 打印样品盐含量和转换后的盐含量
print("测试样品的盐含量:", sample_salt_content)
print("转换后的盐含量:", sample_salt_content_converted)

运行结果:

三、近红外光谱数据库快速评估

        为了解决近红外光谱数据库快速评估的问题,提高识别速度和准确性,研究人员通过将主成分分析和移动窗口相关系数技术相结合,构建了一个小数据库来快速识别与待测原油最相似的样本。针对原油性质的微小变化和采集差异引起的识别问题,他们采用蒙特卡罗方法生成了虚拟原油样本,并通过主成分分析来确定与待测原油一致的样本。通过这种方式,他们能够快速获得准确的评价数据,从而提高了近红外光谱原油识别的效率和准确性。

        完整代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 模拟近红外光谱数据库
database_spectrum = np.random.rand(100, 1000)

# 生成待测原油光谱
unknown_spectrum = np.random.rand(1, 1000)

# 主成分分析压缩数据库光谱
compressed_database = np.dot(database_spectrum, np.transpose(database_spectrum))
compressed_unknown_spectrum = np.dot(unknown_spectrum, np.transpose(database_spectrum))

# 寻找与待测原油最相似的4个样本
distances = np.linalg.norm(compressed_database - compressed_unknown_spectrum, axis=1)
top_4_indices = np.argsort(distances)[:4]

# 移动窗口相关系数法在小库中识别与待测原油一致的库光谱
similar_spectra = database_spectrum[top_4_indices]

# 蒙特卡罗方法生成更多的虚拟原油样本
D = 1000
virtual_samples = []
for i in range(D):
    random_index = np.random.choice(top_4_indices)
    virtual_samples.append(np.random.normal(database_spectrum[random_index], scale=0.1, size=(1000,)))

# 主成分分析取前两个主成分作图
virtual_samples = np.array(virtual_samples)
virtual_samples_compressed = np.dot(virtual_samples, np.transpose(database_spectrum))
pc1 = virtual_samples_compressed[:, 0]
pc2 = virtual_samples_compressed[:, 1]

# 图像绘制
fig, (ax1, ax2) = plt.subplots(2, 1)

# 绘制蒙特卡罗模拟结果
ax1.scatter(pc1, pc2)
ax1.set_xlabel('PC1')
ax1.set_ylabel('PC2')
ax1.set_title('Monte Carlo Simulation')

# 绘制主成分分析结果
pc1 = compressed_database[:, 0]
pc2 = compressed_database[:, 1]
ax2.scatter(pc1, pc2)
ax2.set_xlabel('PC1')
ax2.set_ylabel('PC2')
ax2.set_title('Principal Component Analysis')

plt.tight_layout()
plt.show()

        运行结果如下:

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

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

相关文章

1+x中级题目练习复盘(一)

1、MOD(m,n) 返回m除以n的余数 2、物理备份可以分为冷备份和热备份。冷备份又称脱机备份,是指在关闭数据库后进行的备份;而热备份也称为联机备份,是在数据库运行的同时进行备份,但热备份存在着难以维护等风险。 3、删除表使用…

算法---双指针

双指针 常见的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 1.对撞指针:⼀般用于顺序结构中,也称左右指针。 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间…

Python中的泛型编程

目录 1. 前言1.1 函数模板1.2 类模板1.3 Python中的泛型 2. TypeVar2.1 函数模板与类模板2.2 构造函数2.3 约束2.4 协变与逆变 Ref 1. 前言 泛型编程的引入主要是为了解决代码重用的问题。在没有泛型的情况下,如果你想要实现一个功能(比如排序或查找&am…

韦根协议刷卡原理及代码实现

一、韦根协议原理 韦根接口在门禁行业广泛使用,是一个门禁行业的通信标准,通过两条数据线 DATA0(D0)和 DATA1 (D1)发送数据。目前用的最多的是韦根 34 和韦根 26,二者数据格式相同,…

(C语言)字符分类函数

目录 字符分类函数 1. iscntrl 2. isspace 3. isdigit 4. isxdigit 5. islower 6. isupper 7. isalpha 8. isalnum 9. ispunct 10. isgraph 11. isprint 字符分类函数 C语言中有一系列的函数是专门做字符分类的 ,也就是一个字符是属于什么类型的字符的。…

二维码门楼牌管理系统技术服务:构建智慧城市新标准

文章目录 前言一、二维码门楼牌管理系统的诞生背景二、标准地址编码的定义与作用三、二维码门楼牌管理系统的核心技术四、二维码门楼牌管理系统的应用优势五、二维码门楼牌管理系统在智慧城市建设中的作用六、结论与展望 前言 随着城市化的快速发展,传统的门楼牌管…

通过一篇文章带你玩转git和GitHub

Git和Github的基本用法 前言一、Git和Github的基本用法背景下载安装安装 git for windows安装 tortoise gitgit安装过程中的一些选项 tortoise git汉化教程下载tortoise git汉化安装包安装tortoise git汉化安装包 三、使用 Github 创建项目注册账号创建项目下载项目到本地 四、…

GitHub会员充值

GitHub是一个基于Web的代码托管平台,为开发者提供了协作、版本控制和代码管理的工具。它允许个人和团队共同协作开发软件项目,并提供了许多功能,使得代码的管理和维护更加容易 版本控制系统: GitHub使用Git作为其版本控制系统。Gi…

两天学会微服务网关Gateway-Gateway过滤器

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

python界面开发 - messagebox 提示框

文章目录 1. messagebox1.1. 示例 2. Tkinter 开发3. python图形界面开发3.1. Python图形界面开发——Tkinter3.2. Python图形界面开发——PyQt3.3. Python图形界面开发——wxPython3.4. Python图形界面开发—— PyGTK:基于GTK3.5. Python图形界面开发—— Kivy3.6.…

【ElasticSearch】es索引、映射、文档基本操作复杂查询

各位小伙伴们大家好,欢迎来到这个小扎扎的ElasticSearch专栏,本篇博客由B战尚硅谷的ElasticSearch视频总结而来,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 🌆 内容速览 1 es数据格…

金现代产品方案部部长王宁,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(LowCode低码时代、RPA中国、AIGC开放社区)主办。大会旨在聚合每一位产业成员的力量,深入探索低…

AD1102 小封装的3.7V锂电池转干电池使用的充放电管理芯片 替代传统干电池、镍氢电池

AD1102是一款锂电池充放电管理专用芯片。充电工作时,可以为 3.7V锂电池进行充电,电流最高可配置 1A。放电工作时,采用开关频率1MHz同步降压转换器进行放电,放电电流可以达到 3A。内部集成欠压保护、短路保护、过温保 护功能。 …

算法学习06:数组模拟:单/双链表,栈和队列,单调栈/队列

算法学习06:数组模拟:单/双链表,栈和队列,单调栈/队列 文章目录 算法学习06:数组模拟:单/双链表,栈和队列,单调栈/队列前言一、链表1.单链表2.双链表 二、栈和队列1.普通栈、队列2.单…

LeetCode Python - 42.接雨水

目录 题目答案运行结果 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组…

Maven基础简介

作者简介: zoro-1,目前大二,正在学习Java,数据结构,spring等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Maven简介 Maven是什么 Maven…

人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用, 一般是作为k-means前不知道要指定k为何值的时候&#…

Java的Writer类详解

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

【xv6操作系统】Lec06 Isolation system call entry/exit

6.1 Trap机制 每当 1.程序执行系统调用 2.程序出现了类似page fault、运算时除以0的错误 3.一个设备触发了中断使得当前程序运行需要响应内核设备驱动 都会发生用户空间和内核空间的切换,通常被称为trap。trap机制要尽可能的简单。 Shell可能会执行系统调用&a…