Fracture_Webapp / ui /PageComponents.py
Sonnt's picture
Upload 44 files
052f08d
import pandas as pd
import streamlit as st
from mLogsFunctions.fx import *
from mLogsFunctions import *
def subtab21(df, well_names):
col1, col2 = st.columns([1,8])
if "method_eda" not in st.session_state:
st.session_state.method_eda:str = "Single Well"
st.session_state.well_eda:str = well_names[0]
with col1:
st.radio("",
key="method_eda",
options=["All Wells", "Single Well"])
st.radio("WELL",
key="well_eda",
options=well_names)
with col2:
st.write('Data Description:')
if st.session_state.method_eda == "All Wells":
st.dataframe(df.describe(),width=1400, height=300)
elif st.session_state.method_eda == "Single Well":
df_single_w = df[df.WELL == st.session_state.well_eda]
st.dataframe(df_single_w.describe(),width=1400, height=300)
else:
pass
def subtab22(df,):
def missing_count(df):
missing = df.isnull().sum()*100/df.isnull().sum().sum()
missing = missing[missing >= 0].reset_index()
missing.columns = ['Columns', 'Count missing (%)']
return missing
mt1, mt2, mt3 = st.columns(3)
with mt1:
st.caption("Missing data rate of whole wells")
st.write(missing_bar(missing_count(df), "ALL WELLS"))
for i, w in enumerate(df.WELL.unique()):
if i%3 == 0:
st.caption(f"Missing data rate of {w}")
st.write(missing_bar(missing_count(well_filter(df, w)), f"WELL {w}"))
with mt2:
for i, w in enumerate(df.WELL.unique()):
if i%3 == 1:
st.caption(f"Missing data rate of {w}")
st.write(missing_bar(missing_count(well_filter(df, w)), f"WELL {w}"))
with mt3:
for i, w in enumerate(df.WELL.unique()):
if i%3 == 2:
st.caption(f"Missing data rate of {w}")
st.write(missing_bar(missing_count(well_filter(df, w)), f"WELL {w}"))
def subtab23(df, curves):
mb1, mb2, mb3 = st.columns(3)
for i, c in enumerate(curves):
if i%3 == 0:
with mb1:
st.caption(f"Distribution of {c}")
st.write(missing_box(df, c))
if i%3 == 1:
with mb2:
st.caption(f"Distribution of {c}")
st.write(missing_box(df, c))
if i%3 == 2:
with mb3:
st.caption(f"Distribution of {c}")
st.write(missing_box(df, c))
def subtab24(df, curves):
#Histogram Line----------------------------------------------------------------
h1, h2, h3 = st.columns(3)
for i, c in enumerate(curves):
if i%3 == 0:
with h1:
hist_line_plot(df,c)
if i%3 == 1:
with h2:
hist_line_plot(df,c)
if i%3 == 2:
with h3:
hist_line_plot(df,c)
def subtab25(df, curves):
#CrossPlot----------------------------------------------------------------
pair_curv = [(a, b) for idx, a in enumerate(curves) for b in curves[idx + 1:]]
cp0, cp1, cp2, cp3, cp4 = st.columns(5)
for i, c in enumerate(pair_curv):
if i%5 == 0:
with cp0:
crossplot(df, pair_curv[i][0], pair_curv[i][1])
if i%5 == 1:
with cp1:
crossplot(df, pair_curv[i][0], pair_curv[i][1])
if i%5 == 2:
with cp2:
crossplot(df, pair_curv[i][0], pair_curv[i][1])
if i%5 == 3:
with cp3:
crossplot(df, pair_curv[i][0], pair_curv[i][1])
if i%5 == 4:
with cp4:
crossplot(df, pair_curv[i][0], pair_curv[i][1])
def subtab26(df, curves):
#Pairpot----------------------------------------------------------------
_p1, _p2, _p3 = st.columns([2,2,2])
if "pair_opt" not in st.session_state:
st.session_state.pair_opt:str = "ALL WELLS"
st.session_state.color_pair:str = "WELL"
st.session_state.well_pair:str = list(df.WELL.unique())[0]
with _p1:
pair_opt_ = st.radio("Displayed objects", key="pair_opt", options=["ALL WELLS", "SINGLE WELL"], horizontal=True)
with _p2:
well_pair_ = st.selectbox("WELL", key="well_pair", options=list(df.WELL.unique()))
with _p3:
colorp_ = st.selectbox("COLOR", key="color_pair", options=columns_list(df))
if pair_opt_ == "ALL WELLS":
st.write(pairplot(df, curves, curves, colorp_))
elif pair_opt_ == "SINGLE WELL":
st.write(pairplot(df[df["WELL"]==well_pair_], curves, curves, colorp_))
else:
st.write("Undefined Error!")
def scatterPoint3D(df,):
#3D Plotly----------------------------------------------------------------
wells_ = list(df.WELL.unique())
curvs_ = columns_list(df, no_well=True)
colors_ = columns_list(df)
sizes_ = ["WELL", "FRACTURE_INTENSITY", "DEPTH", None]
symbols_ = ["WELL", "FRACTURE_INTENSITY", None]
if "well_3d" not in st.session_state:
st.session_state.w_opt:str = "ALL WELLS"
st.session_state.well_3d:str = wells_[0]
st.session_state.x_3d:str = curvs_[0]
st.session_state.y_3d:str = curvs_[0]
st.session_state.z_3d:str = curvs_[0]
st.session_state.color_3d:str = "WELL"
st.session_state.size_3d:str = "DEPTH"
st.session_state.symbol_3d:str = "WELL"
p1_, p2_ = st.columns([1,7])
with p1_:
w_opt = st.radio("DisplayType", key="w_opt", options=["ALL WELLS", "SINGLE WELL"])
well_ = st.selectbox("WELL", key="well_3d", options=wells_)
x_ = st.selectbox("X", key="x_3d", options=curvs_)
y_ = st.selectbox("Y", key="y_3d", options=curvs_)
z_ = st.selectbox("Z", key="z_3d", options=curvs_)
color_ = st.selectbox("COLOR", key="color_3d", options=colors_)
size_ = st.selectbox("SIZE", key="size_3d", options=sizes_)
symbol_ = st.selectbox("SYMBOL", key="symbol_3d", options=symbols_)
with p2_:
log_x, log_y, log_z = [False, False, False]
if x_ in ["LLD", "LLS"]:
log_x = True
if y_ in ["LLD", "LLS"]:
log_y = True
if z_ in ["LLD", "LLS"]:
log_z = True
if w_opt == "ALL WELLS":
plotly_3d(df, x_, y_, z_, color_, size_, symbol_, log_x, log_y, log_z)
else:
df_3d_plt = df[df["WELL"]==well_]
plotly_3d(df_3d_plt, x_, y_, z_, color_, size_, symbol_, log_x, log_y, log_z)
def stViewCurves(df):
_w = st.selectbox(label='Select WELL', options=list(df.WELL.unique()), key='w_plot')
if st.session_state.w_plot is not None:
df_plot = df[df['WELL']== _w]
_c = st.multiselect("Select curves for plotting:", key="curv_plt", options=columns_list(df, no_depth=True, no_well=True))
if len(_c) != 0:
view_curves(df_plot, curves=_c)