Uso de Matplotlib y Pandas para crear un histograma
En el análisis de datos geológicos, comprender la distribución de la porosidad de un yacimiento puede ser fundamental para la evaluación de su potencial productivo. La permeabilidad, que mide la capacidad del yacimiento para almacenar fluidos, puede variar significativamente, lo que hace útil una representación para visualizar su distribución.
En este tutorial, utilizaremos Python y la biblioteca Matplotlib para generar un histograma que nos permita visualizar la distribución de la porosidad de muestras de núcleos de un conjunto de datos. Matplotlib es una biblioteca de trazado extensamente utilizada en Python, que ofrece gran flexibilidad para crear visualizaciones de datos.
Paso 1: Instalación de Matplotlib Si aún no has instalado Matplotlib, puedes hacerlo ejecutando el siguiente comando en tu terminal o en tu Jupyter Notebook:
pip install matplotlib
Paso 2: Cargar los Datos Primero, necesitamos cargar los datos del archivo RT_md.csv. Asegúrate de que este archivo esté en la misma carpeta que tu script de Python o notebook, o proporciona la ruta completa al archivo.
import pandas as pd
= pd.read_csv('RT_md.csv')
data
print(data.head())
WELL MD POROSITY PERMEABILITY PTS RT
0 WELL_1 4038.350098 0.201 1973.9240 34.969780 MEGA
1 WELL_1 4038.850098 0.203 1158.9270 25.350609 MEGA
2 WELL_1 4039.350098 0.207 1935.1169 33.696552 MEGA
3 WELL_1 4039.850098 0.206 1003.6810 23.001544 MEGA
4 WELL_1 4040.350098 0.190 901.4980 23.156673 MEGA
Paso 3: Creación del Histograma Ahora que tenemos los datos cargados en un DataFrame de pandas, podemos proceder a generar el histograma de la columna POROSITY
import matplotlib.pyplot as plt
# Generar el histograma
=(10, 6)) plt.figure(figsize
'POROSITY'], bins=20, color='skyblue', edgecolor='black');
plt.hist(data[
# Configuración del gráfico
(array([ 3., 6., 1., 1., 5., 7., 3., 7., 6., 12., 12., 23., 33.,
62., 80., 78., 62., 3., 0., 2.]), array([0.017 , 0.03025, 0.0435 , 0.05675, 0.07 , 0.08325, 0.0965 ,
0.10975, 0.123 , 0.13625, 0.1495 , 0.16275, 0.176 , 0.18925,
0.2025 , 0.21575, 0.229 , 0.24225, 0.2555 , 0.26875, 0.282 ]), <BarContainer object of 20 artists>)
'Distribución de la Permeabilidad');
plt.title('Porosidad (fracción)');
plt.xlabel('Frecuencia');
plt.ylabel(
True, which="both", ls="--", color='0.9');
plt.grid(; plt.show()
Matplotlib permite una amplia gama de personalizaciones. Por ejemplo, puedes cambiar el número de bins para modificar la granularidad del histograma, ajustar los colores y estilos de línea, o añadir anotaciones al gráfico.
La visualización de datos por categorías es una práctica común en la exploración de datos, ya que proporciona insights sobre cómo las características de interés se distribuyen a través de diferentes grupos. En este caso, utilizaremos la columna WELL del dataset Core_data.csv para colorear el histograma de permeabilidad, permitiéndonos observar las diferencias en la distribución de la porosidad entre los diferentes pozos.
Primero, asegurémonos de que los datos están cargados y de que hemos identificado los pozos únicos presentes en el dataset.
Para cada pozo en nuestros datos, generaremos un conjunto de barras en el histograma, utilizando un color diferente para cada uno. Para mantener la claridad visual, también incluiremos una leyenda que indique qué color corresponde a cada pozo.
= data['WELL'].unique()
wells
=(12, 8));
plt.figure(figsize
= ['blue', 'green', 'red', 'purple', 'orange', 'brown'] # Asumiendo un máximo de 6 pozos para simplificar
colors for i, well in enumerate(wells):
= data[data['WELL'] == well];
subset 'POROSITY'], bins=50, color=colors[i], alpha=0.5, edgecolor='black', label=f'Pozo {well}');
plt.hist(subset[
'Distribución de la Permeabilidad por Pozo');
plt.title('Porosidad (fracción)');
plt.xlabel('Frecuencia');
plt.ylabel(;
plt.legend()
True, which="both", ls="--", color='0.9');
plt.grid(; plt.show()
Consideraciones Adicionales
Colores y Transparencia: Seleccionar una paleta de colores distinta y ajustar la transparencia (alpha) puede ayudar a manejar gráficos con muchas categorías o con superposiciones significativas.
Este enfoque nos permite visualizar y comparar fácilmente la distribución de la porosidad entre diferentes pozos, identificando patrones o diferencias clave que podrían ser relevantes para análisis geológicos o de producción más detallados.
Otra opción para la generación de un histograma coloreado por una variable es la función plot.hist() de pandas, el cual junto con la función pivot() se define que genera un histograma de la porosidad coloreado por pozo. Esta es una opción baste ágil para esto.
# pivot and plot
=(12, 8)) plt.figure(figsize
="WELL", values="POROSITY").plot.hist(bins=100, alpha=0.5);
data.pivot(columns
plt.show()
import seaborn as sns
= plt.subplots(figsize=(10, 10))
fig, ax =data, x='POROSITY', hue='WELL', stat='count', edgecolor=None);
sns.histplot(data'Porosidad') ax.set_title(
Podemos observar que con pandas y seaborn creamos un histograma coloreado por una variable con muy pocas líneas de código al comparar con Matplotlib.