El análisis de isotopos estables es una herramienta muy poderosa para la evaluación del origen y la dinámica del agua subterránea especialmente cuando los puntos de observación y los periodos de muestreo son limitados. La representación de isotopos se puede hacer con cualquier hoja de cálculo de software como Excel, pero el flujo de trabajo es deficiente especialmente cuando se representa los puntos, líneas de tendencia, etiquetas y leyendas.
Este tutorial muestra el procedimiento completo para representar los isotopos estables de muestras de aguas subterráneas de un sitio en remediación en Nuevo México, Estados Unidos. Los códigos son realizados con Python 3 y otros paquetes que vienen instalados por defecto con Anaconda. El código para la representación de la Línea Meteórica Global del Agua esta tambíén incluido asi como las opciones para guardar/descargar las figuras.
Tutorial
Código en Python
Este es el código Python para este tutorial:
Importar las librerias requeridas
Para este tutorial nostros usaremos la libreria Matplotlib que es un visualizador muy popular y tambíen se va usar algunos paquetes que vienen ya instalados en Anaconda para Windows.
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
Leer el archivo Excel y Crear un Pandas Dataframe
Una poderosa forma de tratar con datos tabulares es usando Pandas Dataframe. En esta parte nosotros abriremos un archivo Excel y crearemos un Dataframe con un indice definido.
homestakeDf = pd.read_excel('../Xls/USGS_Stable_Isotopes.xlsx','Isotopes')
homestakeDf.loc[:,['Delta_2H_(permil)','Delta_18O_(permil)','Station_Name']].head()
| Delta2H(permil) | Delta18O(permil) | Station_Name | |
|---|---|---|---|
| 0 | -83.95 | -10.81 | CW28 |
| 1 | -78.85 | -10.16 | CW45 |
| 2 | -81.66 | -10.72 | CW18 |
| 3 | -74.31 | -9.57 | CW15 |
| 4 | -68.28 | -8.36 | CW37 |
homestakeDf.set_index(['Station_Name'], inplace=True)
homestakeDf.loc[:,['Delta_2H_(permil)','Delta_18O_(permil)']].head()
| Delta2H(permil) | Delta18O(permil) | |
|---|---|---|
| Station_Name | ||
| CW28 | -83.95 | -10.81 |
| CW45 | -78.85 | -10.16 |
| CW18 | -81.66 | -10.72 |
| CW15 | -74.31 | -9.57 |
| CW37 | -68.28 | -8.36 |
Crear un Arreglo para definir la Línea Meteorica Global del Agua (GMWL en sus siglas en Inglés)
Para comparar los resultados isotopicos con la precipitación global GMWL nosotros necesitamos crear una arreglo que representa los puntos sobre la línea, pero primero necesitamos definir estadisticas básicas acerca de la distribución de deltas del Oxigeno 18.
#homestakeDf['Delta_2H_(permil)'][:5]
homestakeDf['Delta_18O_(permil)'].describe()
count 23.000000
mean -9.459130
std 0.956874
min -10.810000
25% -10.340000
50% -9.170000
75% -8.775000
max -7.370000
Name: Delta_18O_(permil), dtype: float64#create array and equation application
delta18O = np.linspace(-11,-7,num=50)
delta2H = delta18O*8.13+10.8
delta2H
array([-78.63 , -77.96632653, -77.30265306, -76.63897959,
-75.97530612, -75.31163265, -74.64795918, -73.98428571,
-73.32061224, -72.65693878, -71.99326531, -71.32959184,
-70.66591837, -70.0022449 , -69.33857143, -68.67489796,
-68.01122449, -67.34755102, -66.68387755, -66.02020408,
-65.35653061, -64.69285714, -64.02918367, -63.3655102 ,
-62.70183673, -62.03816327, -61.3744898 , -60.71081633,
-60.04714286, -59.38346939, -58.71979592, -58.05612245,
-57.39244898, -56.72877551, -56.06510204, -55.40142857,
-54.7377551 , -54.07408163, -53.41040816, -52.74673469,
-52.08306122, -51.41938776, -50.75571429, -50.09204082,
-49.42836735, -48.76469388, -48.10102041, -47.43734694,
-46.77367347, -46.11 ])Representacion de Isotopos
Nostros hicimos una representación de la dispersión de la muestras con colores únicos y una leyenda. La GMWL fue mostrada como una línea sólida.
fig, ax1 = plt.subplots(figsize=(12,8))
for index, row in homestakeDf.iterrows():
#print(row['Nombre'],row['Time'])
ax1.scatter(row['Delta_18O_(permil)'],row['Delta_2H_(permil)'],marker='o',label=index)
ax1.annotate(index, (row['Delta_18O_(permil)']+0.05,row['Delta_2H_(permil)']+0.05))
ax1.plot(delta18O,delta2H,label='GMWL')
ax1.set_xlabel('δ18O 0/00 VSMOW')
ax1.set_ylabel('δ2H 0/00 VSMOW')
plt.legend()
plt.savefig('../Output/IsotopesFull.pdf')
plt.savefig('../Output/IsotopesFull.jpg')
Datos de entrada
Puedes descargar los datos de entrada de este tutorial en este enlace.

FloPy es la librerìa de Python que construye y ejecuta modelos MODFLOW; esta librería se ha mejorado para proporcionar un soporte completo de MODFLOW 6 y la mayor parte de su desarrollo está relacionado con la funcionalidad de MODFLOW 6, herramientas para usar datos espaciales vectoriales, rasters y funcionalidades comunes de ploteo y exportación.
Python es un lenguaje de programación sencillo y potente; su simplicidad es notable en comparación con otros lenguajes de programación y su potencia se basa en la cantidad de herramientas disponibles para las diferentes áreas de estudio.
Hemos desarrollado un programa completo en modelamiento de aguas subterráneas con MODFLOW y FloPy que abarca desde los temas esenciales en Python hasta casos aplicados de modelamiento regional e intrusión marina. El programa está diseñado para brindarle al estudiante un enfoque metodológico para aprender FloPy basado en una serie de ejemplos aplicados junto con las opiniones/experiencias del profesor y la revisión del software.