👉博__主👈:米碼收割機
👉技__能👈:C++/Python語言
👉專__注👈:專注主流機器人、人工智能等相關領域的開發、測試技術。
【python】python油田數據分析與可視化(源碼+數據集)【獨一無二】
目錄
- 【python】python油田數據分析與可視化(源碼+數據集)【獨一無二】
- 一、設計要求
- 二、設計思路
- **油田數據分析與可視化——設計思路**
- **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. 代碼結構分析
整個代碼可以分為以下幾個主要步驟:
- 數據讀取
- 數據預處理
- 數據可視化
- 數據導出(可選)
第一步:數據讀取
該部分的主要任務是加載不同油田的CSV數據文件,使用 pandas 讀取數據集,并存入 DataFrame 進行后續處理。
1.1 讀取各油田數據
數據主要分為以下幾類:
- JL油田:
JL油田-近期產量數據.csv
(包含日產油量、日產水量、日產氣量)JL油田-井位井別.csv
(包含井的坐標、采油井/注水井類別)JL油田-注水數據.csv
(包含日注水量)
- ML油田:
ML油田-井位井別.csv
(井位信息)ML油田-注水數據.csv
(僅有注水量,無產油產水數據)
- WL油田:
WL油田-近期產量數據.csv
WL油田-井位井別.csv
WL油田-注水數據.csv
實現方式:
df_jl_prod = pd.read_csv("JL油田-近期產量數據.csv")
# 代碼略....
第二步:數據預處理
數據預處理的核心目標是確保數據格式一致,填充缺失值,并計算衍生變量。例如:
- 轉換日期格式
- 計算總產液量
- 計算各井的平均日產液量/注水量
- 合并不同數據表
2.1 轉換日期格式
確保 日期
字段是 datetime 格式,以便后續時間序列分析:
df_jl_prod['日期'] = pd.to_datetime(df_jl_prod['日期'])
df_jl_inj['日期'] = pd.to_datetime(df_jl_inj['日期'])
2.2 計算總產液量
df_jl_prod['產液量'] = df_jl_prod['日產油量'] + df_jl_prod['日產水量']
此計算反映了井的 總液體產出(油 + 水),用于衡量單井或油田的生產能力。
2.3 計算各井的平均日產液量/注水量
對于采油井,計算 平均日產液量:
jl_prod_group = df_jl_prod.groupby('井名', as_index=False)['產液量'].mean()
jl_prod_group.rename(columns={'產液量': '平均日產液量'}, inplace=True)
對于注水井,計算 平均日注水量:
jl_inj_group = df_jl_inj.groupby('井名', as_index=False)['日注水量'].mean()
jl_inj_group.rename(columns={'日注水量': '平均日注水量'}, inplace=True)
2.4 合并井位信息
將井位數據與計算出的 日產液量/注水量 進行合并,確保繪制散點圖時每個井的數值信息完整:
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]
第三步:數據可視化
數據可視化分為以下幾類:
-
井位分布散點圖
-
產量變化趨勢折線圖
-
產量對比條形圖
-
產量構成餅圖
-
單井日產量分布直方圖
3.1 井位分布散點圖
以散點圖展示井的地理位置,顏色區分 采油井/注水井,點的大小表示產量或注水量:
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 產量變化趨勢折線圖
繪制 不同油田的日產油、日產水、日產氣、日注水量隨時間變化:
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 產量對比條形圖
繪制 不同油田的總產量:
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 產量構成餅圖
展示 不同油田的產油/產水/產氣比例:
plt.pie(jl_values, labels=jl_labels, autopct='%1.1f%%', startangle=140)
3.5 單井日產量分布直方圖
展示 單井日產油量/日注水量的分布:
plt.hist(df_jl_prod['日產油量'], bins=10, color='orange', alpha=0.7, edgecolor='black')
第四步:數據導出
最終結果可保存為 Excel:
df_jl_prod.to_excel("油田數據匯總.xlsx", sheet_name="JL產量數據", index=False)
該代碼實現了 油田數據分析與可視化,涵蓋 數據清洗、統計計算、圖表展示,有助于油田生產管理和決策支持。