import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import welly
import lasio
from pathlib import Path
import warnings
warnings.filterwarnings('ignore')
file_input = Path("Data/VOLVE-PETROPHYSICAL_INTERPRETATION/15_9-F-1 B/WLC_PETRO_COMPUTED_INPUT_1.LAS")
file_output = Path("Data/VOLVE-PETROPHYSICAL_INTERPRETATION/15_9-F-1 B/WLC_PETRO_COMPUTED_OUTPUT_1.LAS")
log_input = welly.Well.from_las(file_input)
log_output = welly.Well.from_las(file_output)
log_input
log_output
log_input.data
log_output.data
# Dataframe form the input well log
df_input = log_input.df()
df_input
# Dataframe for the output well log
df_output = log_output.df()
df_output
df_input.info()
<class 'pandas.core.frame.DataFrame'>
Float64Index: 33191 entries, 145.9 to 3464.8999999969815
Data columns (total 22 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ABDCQF01 3225 non-null float64
1 ABDCQF02 3225 non-null float64
2 ABDCQF03 3225 non-null float64
3 ABDCQF04 3225 non-null float64
4 BS 33191 non-null float64
5 CALI 3518 non-null float64
6 DRHO 3525 non-null float64
7 DT 4261 non-null float64
8 DTS 3806 non-null float64
9 GR 32494 non-null float64
10 NBGRCFM 13186 non-null float64
11 NPHI 3412 non-null float64
12 PEF 3440 non-null float64
13 RACEHM 8536 non-null float64
14 RACELM 8536 non-null float64
15 RD 31904 non-null float64
16 RHOB 3440 non-null float64
17 RM 31904 non-null float64
18 ROP 32382 non-null float64
19 RPCEHM 8536 non-null float64
20 RPCELM 8536 non-null float64
21 RT 8536 non-null float64
dtypes: float64(22)
memory usage: 5.8 MB
df_output.info()
<class 'pandas.core.frame.DataFrame'>
Float64Index: 2610 entries, 3204.0 to 3464.8999999997627
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 BVW 2104 non-null float64
1 CARB_FLAG 2520 non-null float64
2 COAL_FLAG 2610 non-null float64
3 KLOGH 2104 non-null float64
4 PHIF 2104 non-null float64
5 SAND_FLAG 2105 non-null float64
6 SW 2104 non-null float64
7 VCARB 2104 non-null float64
8 VSH 2533 non-null float64
dtypes: float64(9)
memory usage: 203.9 KB
df_input.isnull().sum()
df_output.isnull().sum()
log_input.plot()
df_input['VSH'] = (df_input['GR'].max() - df_input['GR']) / (df_input['GR'].max() - df_input['GR'].min())
df_input.head()
log_input.data['VSH'] = welly.Curve(df_input['VSH'])
curves = ['GR', 'NPHI', 'VSH']
log_input.plot(tracks=curves)
df_output.columns
curves = ['KLOGH', 'PHIF', 'SW', 'VSH']
log_output.plot(tracks=curves)
# Curves to plot
curves = ['KLOGH', 'PHIF', 'SW', 'VSH']
# set size of the plot
fig, axes = plt.subplots(1, len(curves), figsize=(20, 10))
# Iterate through list curves
for ind, curve in enumerate(curves):
segment = log_output.data[curve].to_basis(start=3200, stop=3400)
segment.plot(ax=axes[ind])
axes[ind].set_title(curve)
axes[0].set_ylabel('Depth (m)', fontsize=12)
fig.suptitle("Well logs volve field", fontsize=20)
fig.tight_layout()
# Create function to automate well logs plot
def well_logs(log, curves, start, stop):
# set size of the plot
fig, axes = plt.subplots(1, len(curves), figsize=(20, 10))
# Iterate through list curves
for ind, curve in enumerate(curves):
segment = log.data[curve].to_basis(start=start, stop=stop)
segment.plot(ax=axes[ind])
axes[ind].set_title(curve)
axes[0].set_ylabel('Depth (m)', fontsize=12)
fig.suptitle("Well logs volve field", fontsize=20)
fig.tight_layout()
df_output.columns
# Curves to plot
curves = ['KLOGH', 'PHIF', 'SAND_FLAG', 'SW', 'VSH']
well_logs(log_output, curves, 3230, 3400)
well_logs(log_output, curves, 3200, 3450)