Representación de Isótopos Estables de Muestras de Aguas Subterráneas con Python Pandas - Tutorial

StableIsotopeRepresentationfromGroundwaterSampleswithPythonPandas.png

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')
output_9_0.png

Datos de entrada

Puedes descargar los datos de entrada de este tutorial en este enlace.

Smiley face

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

Posted on March 21, 2019 and filed under TutorialModflow, TutorialPython.