【python】python油田数据分析与可视化(源码+数据集)【独一无二】

news/2025/2/2 9:29:03/

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


pythonpython_11">【pythonpython油田数据分析与可视化(源码+数据集)【独一无二】


目录

  • pythonpython油田数据分析与可视化(源码+数据集)【独一无二】
  • 一、设计要求
  • 二、设计思路
      • **油田数据分析与可视化——设计思路**
        • **1. 项目背景**
        • **2. 代码结构分析**
    • **第一步:数据读取**
      • **1.1 读取各油田数据**
    • **第二步:数据预处理**
      • **2.1 转换日期格式**
      • **2.2 计算总产液量**
      • **2.3 计算各井的平均日产液量/注水量**
      • **2.4 合并井位信息**
    • **第三步:数据可视化**
      • **3.1 井位分布散点图**
      • **3.2 产量变化趋势折线图**
      • **3.3 产量对比条形图**
      • **3.4 产量构成饼图**
      • **3.5 单井日产量分布直方图**
    • **第四步:数据导出**


一、设计要求

本项目旨在开发一个 油田数据分析与可视化系统,实现 数据读取、清洗、统计分析、可视化展示数据导出 功能。系统支持读取 产量、井位、注水 数据,进行格式标准化、缺失值处理及衍生变量计算,并通过 井位分布图、趋势折线图、对比条形图、饼图、直方图 展示数据分析结果。同时,支持数据导出为 Excel,提高数据管理和决策效率。采用 Python(pandas、matplotlib、numpy) 开发,优化大规模数据处理,确保计算高效、可视化直观,并具备未来扩展为 Web 平台或 AI 预测系统的潜力。

在这里插入图片描述

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

在这里插入图片描述


二、设计思路

油田数据分析与可视化——设计思路

1. 项目背景

本项目的目标是对油田数据进行清洗、分析,并以可视化方式呈现油井的分布情况、产量变化趋势及统计特征。数据源主要包括不同油田的 产量数据井位数据注水数据,最终通过 Matplotlib 进行可视化展示。

2. 代码结构分析

整个代码可以分为以下几个主要步骤:

  1. 数据读取
  2. 数据预处理
  3. 数据可视化
  4. 数据导出(可选)

在这里插入图片描述

第一步:数据读取

该部分的主要任务是加载不同油田的CSV数据文件,使用 pandas 读取数据集,并存入 DataFrame 进行后续处理。

1.1 读取各油田数据

数据主要分为以下几类:

  • JL油田
    • JL油田-近期产量数据.csv(包含日产油量、日产水量、日产气量)
    • JL油田-井位井别.csv(包含井的坐标、采油井/注水井类别)
    • JL油田-注水数据.csv(包含日注水量)
  • ML油田
    • ML油田-井位井别.csv(井位信息)
    • ML油田-注水数据.csv(仅有注水量,无产油产水数据)
  • WL油田
    • WL油田-近期产量数据.csv
    • WL油田-井位井别.csv
    • WL油田-注水数据.csv

实现方式

python">df_jl_prod = pd.read_csv("JL油田-近期产量数据.csv")  
# 代码略....

第二步:数据预处理

数据预处理的核心目标是确保数据格式一致,填充缺失值,并计算衍生变量。例如:

  1. 转换日期格式
  2. 计算总产液量
  3. 计算各井的平均日产液量/注水量
  4. 合并不同数据表

2.1 转换日期格式

确保 日期 字段是 datetime 格式,以便后续时间序列分析:

python">df_jl_prod['日期'] = pd.to_datetime(df_jl_prod['日期'])
df_jl_inj['日期'] = pd.to_datetime(df_jl_inj['日期'])

2.2 计算总产液量

python">df_jl_prod['产液量'] = df_jl_prod['日产油量'] + df_jl_prod['日产水量']

此计算反映了井的 总液体产出(油 + 水),用于衡量单井或油田的生产能力。

2.3 计算各井的平均日产液量/注水量

对于采油井,计算 平均日产液量

python">jl_prod_group = df_jl_prod.groupby('井名', as_index=False)['产液量'].mean()
jl_prod_group.rename(columns={'产液量': '平均日产液量'}, inplace=True)

对于注水井,计算 平均日注水量

python">jl_inj_group = df_jl_inj.groupby('井名', as_index=False)['日注水量'].mean()
jl_inj_group.rename(columns={'日注水量': '平均日注水量'}, inplace=True)

在这里插入图片描述

2.4 合并井位信息

将井位数据与计算出的 日产液量/注水量 进行合并,确保绘制散点图时每个井的数值信息完整:

python">df_jl_loc['平均日产液量/注水量'] = 0.0
for i in range(len(df_jl_loc)):well = df_jl_loc.loc[i, '井名']cate = df_jl_loc.loc[i, '注采类别:1采油井;0注水井']if cate == 1:  # 代码略....else:  val = jl_inj_group[jl_inj_group['井名'] == well]['平均日注水量']if not val.empty:df_jl_loc.loc[i, '平均日产液量/注水量'] = val.values[0]

第三步:数据可视化

数据可视化分为以下几类:

  1. 井位分布散点图

  2. 产量变化趋势折线图

  3. 产量对比条形图

  4. 产量构成饼图

  5. 单井日产量分布直方图


3.1 井位分布散点图

以散点图展示井的地理位置,颜色区分 采油井/注水井,点的大小表示产量或注水量:

python">plt.scatter(df_jl_loc['X'], df_jl_loc['Y'], s=df_jl_loc['平均日产液量/注水量'] * 50, c=df_jl_loc['注采类别:1采油井;0注水井'], cmap='coolwarm', alpha=0.6)

在这里插入图片描述

3.2 产量变化趋势折线图

绘制 不同油田的日产油、日产水、日产气、日注水量随时间变化

python">plt.plot(jl_daily['日期'], jl_daily['日产油量'], marker='o', label='日产油量')
plt.plot(jl_daily['日期'], jl_daily['日产水量'], marker='s', label='日产水量')
plt.plot(jl_daily['日期'], jl_daily['日产气量'], marker='^', label='日产气量')
plt.plot(jl_daily['日期'], jl_daily['日注水量'], marker='d', label='日注水量')

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

3.3 产量对比条形图

绘制 不同油田的总产量

python">plt.bar(x - 1.5*width, oil_data, width, label='总产油量')
plt.bar(x - 0.5*width, water_data, width, label='总产水量')
plt.bar(x + 0.5*width, gas_data, width, label='总产气量')
plt.bar(x + 1.5*width, inj_data, width, label='总注水量')

在这里插入图片描述

3.4 产量构成饼图

展示 不同油田的产油/产水/产气比例

python">plt.pie(jl_values, labels=jl_labels, autopct='%1.1f%%', startangle=140)

在这里插入图片描述

3.5 单井日产量分布直方图

展示 单井日产油量/日注水量的分布

python">plt.hist(df_jl_prod['日产油量'], bins=10, color='orange', alpha=0.7, edgecolor='black')

在这里插入图片描述


第四步:数据导出

最终结果可保存为 Excel:

python">df_jl_prod.to_excel("油田数据汇总.xlsx", sheet_name="JL产量数据", index=False)

该代码实现了 油田数据分析与可视化,涵盖 数据清洗、统计计算、图表展示,有助于油田生产管理和决策支持。
在这里插入图片描述


http://www.ppmy.cn/news/1568661.html

相关文章

学术总结Ai Agent中firecrawl(大模型爬虫平台)的超简单的docker安装方式教程

之前开源了学术总结ai agent,但是对非计算机专业来说,门槛有点高,再加上docker hub镜像被屏蔽,更是不容易上手啊。也有考虑用dify或者扣子去复刻一个,但是从专业用户的角度出发通过界面来拖拽配置实在是不高效&#xf…

ZZNUOJ(C/C++)基础练习1041——1050(详解版)

1041 : 数列求和2 题目描述 输入一个整数n&#xff0c;输出数列1-1/31/5-……前n项的和。 输入 输入只有一个整数n。 输出 结果保留2为小数,单独占一行。 样例输入 3 样例输出 0.87注意sum 1相当于sumsum1 注意sum * 1相当于sumsum*1 C语言版 #include<stdio.h> // 包含…

OpenCV:特征检测总结

目录 一、什么是特征检测&#xff1f; 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT&#xff08;尺度不变特征变换&#xff09; 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…

从零开始构建一个JAVA项目

本篇文章将从结构框架入手&#xff0c;系统介绍一个完整Java程序的结构步骤&#xff0c;不涉及JAVA基础代码学习。 在本文章中先简单介绍Maven、Spring、MyBatis三种Java类型。 一、分类介绍 首先我们先来了解Java程序的类型&#xff0c;不同类型结构略有区别。Java程序的类型…

arkui-x 页面封装为自定义组件,巧用controller

鸿蒙开发中&#xff0c;有时会需要将某些页面封装为自定义组件&#xff0c;方便复用。 页面的入口为&#xff1a; Entry Componentstruct XXX { 。。。。。。 自定义组件的入口为&#xff1a; Component export struct XXXX { 。。。。。。 但是页面与自定义组件在生命周期…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

Python NumPy(6):修改数组形状、翻转数组、修改数组维度

1 修改数组形状 函数描述reshape不改变数据的条件下修改形状flat数组元素迭代器flatten返回一份数组拷贝&#xff0c;对拷贝所做的修改不会影响原始数组ravel返回展开数组 1.1 numpy.reshape numpy.reshape 函数可以在不改变数据的条件下修改形状&#xff0c;格式如下&#x…

【C++】string类使用详解

目录 &#x1f495;1.string类 &#x1f495;3. String基本功能&#xff08;1&#xff09;&#xff08;2&#xff09;讲解 &#x1f495;4.sting类基本功能&#xff08;3&#xff09; 讲解 &#x1f495;5.string类基本功能&#xff08;4&#xff09; (拷贝构造函数) &#x1…