Codea Blog  

Blog Details

Análisis de series temporales geológicas utilizando Python


SERIES TEMPORALES.


 

Series temporales se refiere a una secuencia de datos, observaciones o valores que se miden en momentos específicos y se ordenan en función del tiempo. En el contexto de la geología, el análisis de series temporales es fundamental para comprender y estudiar fenómenos como los cambios en los niveles de aguas y las variaciones en la elevación del terreno, lo que podría ayudar en la gestión de recursos hidricos, evaluacion de riesgos naturales y la comprensión de procesos geológicos. Estos datos  pueden proporcionar información valiosa sobre el comportamiento geológico de los sistemas naturales a lo largo del tiempo y permitir la identificación de patrones estacionales y tendencias.

 


PYTHON Y EL ANALISIS DE SERIES DE TIEMPO.


 

Existen varias bibliotecas de Python ampliamente utilizadas para el análisis de series temporales. Algunas de las bibliotecas más relevantes incluyen Pandas, Matplotlib, Seaborn, SciPy o StatsModels entre muchas otras.

Pandas es una biblioteca de manipulación y análisis de datos que proporciona estructuras de datos flexibles y eficientes para trabajar con series temporales. Las robustas y flexibles estructuras de datos en Pandas fueron originalmente ideadas para el analisis de series temporales financieras, pero gracias a su versatilidad pueden ser aplicadas a series temporales en cualquier dominio, incluyendo negocios, ciencia, ingeniería, salud pública y muchos otros. Con esta herramienta se pueden organizar, transformar, analizar y visualizar datos en cualquier nivel de granularidad (examinar los detalles durante períodos específicos de interés y extrapolarlos para explorar variaciones en diferentes escalas de tiempo, como agregaciones mensuales o anuales, patrones recurrentes, y tendencias a largo plazo), mientras que Matplotlib y Seaborn son bibliotecas de visualización que permiten crear gráficos y visualizaciones informativas y atractivas de los datos.

También existen bibliotecas especializadas en el análisis de datos espaciales, como GeoPandas que facilitan el análisis de series temporales geológicas en el contexto de datos geoespaciales o SKLearn, SKForecast y SciPy que proveen de herramientas de analisis predictivo o forecasting y procesamiento de datos mediante funciones estadísticas o transformaciones.

En resumen, Python ofrece una poderosa combinación de herramientas y bibliotecas para el análisis de series temporales.

 


PREPARACION Y PROCESAMIENTO DE DATOS DE SERIES DE TIEMPO EN PYTHON.


 

La importación y limpieza de datos es un paso crucial en el análisis de series temporales geológicas utilizando Python. Para esto, Pandas permite importar datos de diferentes formatos, como archivos CSV o Excel, y realizar operaciones de limpieza, como eliminar filas o columnas con datos faltantes o atípicos. Además, Pandas ofrece funcionalidades para indexar los datos por timestamp, lo que facilita su manejo y análisis en el contexto de series temporales.

Una de las ventajas de indexar los datos por timestamp es el manejo de datos y la filtracion por fechas especificas, mes, año, dia, hora, incluso filtracion por dias hábiles o festivos y también es posible manejar valores atípicos utilizando técnicas de detección de valores extremos e interpolación de datos. Estas técnicas ayudan a garantizar la calidad de los datos y a evitar que los valores atípicos distorsionen el análisis de la serie.

En este ejemplo, usaremos una base de datos de niveles de agua en dos puntos costeros de Argentina, uno en el puerto de San Fernando y el otro ubicado en Buenos Aires. Al cargar los datos podemos ver que existen 3 columnas, una llamada Time con datos de año, mes dia y hora de la medición, y dos columnas con la medición del nivel de agua en cada punto.

 

[Figura 1] 

 

De maqui podemos notar que la base de datos cuenta con 35065 filas con un identificador que va de 0 a 35064. Esto hace que sea dificil la navegación a través de los datos si se quiere analizar fechas u horas especificas y aquí es donde viene la opcion de indexado por Timestamp.

 

[Figura 2] 

 

En la imagen anterior podemos ver que la columna que iba de 0 a 35064 ya no esta, ya que ha sido reemplazada por la columna Time gracias al comando " index_col=['Time'] ", lo que nos permite filtrar los datos de manera fácil y rapida entre fechas u horas como se muestra a continuación.

[Figura 3]                                                                        [Figura 4]

       
A la izquierda (imagen 3) el dataframe filtrado entre las 9am y las 18pm del dia 18 de diciembre,
mientras que a la derecha (imagen 4) el dataframe filtrado por todo el mes de diciembre.

 


VISUALIZACION E INTERPRETACION DE LAS SERIES DE DATOS.


 

Una vez que los datos han sido explorados y preparados, es posible realizar visualizaciones de la serie temporal y analizar las tendencias de acuerdo a la base de datos completa, o porciones/periodos de interés. Esto se logra mediante el uso de bibliotecas como matplotlib y seaborn, que permiten la visualización de los datos en gráficos claros y comprensibles. La visualizacion de los datos ayuda a identificar los componentes de tendencia y estacionalidad, lo que proporciona información valiosa para comprender los patrones en el tiempo a escalas variables (anual, mensual, trimestral, etc.).

[Figura 5] 

Imagen: podemos notar una estacionalidad bastante marcada en los datos,
con 2 picos por dia, correspondientes con los ciclos de pleamar y bajamar cada aproximadamente 12 horas.

 

Podemos aplicar un filtro Hodrick-Prescott para separar la tendencia, asi podemos visualizar mejor la componente de tendencia de la serie y notamos que auque tiene una ciclicidad muy marcada en el dia a dia, tiene grandes anormalidades que escapan de la estacionalidad de la serie durante varios dias, anormalidaddes que se pueden explicar por fenomenos meteorológicos de alta influencia como ciclones.

 

[Figura 6] 


Componente tendencial de Hodrick-Prescott.

 

Para eliminar o suavizar los "ruidos" generados por estas alteraciones y analizar las tendencias en tramos de tiempo mas espaciados se pueden usar medias deslizantes. La media deslizante promedia las variaciones en las frecuencias mas altas que el tamaño de la ventana, mientras que tambien promedia cualquier estacionalidad en escalas de tiempo igual al tamaño de la ventana. Esto permite estudiar variaciones de baja frecuencia en los datos.

[Figura 7]

Comparación de tendencias H-P y Medias Deslizantes.

 

 

Además del análisis exploratorio y la visualización de datos, las bibliotecas de Python también ofrecen técnicas de pronóstico y modelado predictivo para las series de tiempo geológico. Estas técnicas permiten realizar predicciones sobre el comportamiento futuro de los datos, lo que puede ser útil en la toma de decisiones y la planificación . Al utilizar algoritmos de aprendizaje automático y modelos de regresión como los proporcionados dentro de las librerías de Scikit-learn, es posible entrenar y evaluar modelos para predecir cambios en el nivel del agua, cambios en la elevación del suelo y otros fenómenos geológicos.

 

 


REFERENCIAS


 

1.- Lopez, Raul. (26 Sept. 2016). Series de tiempo con Python. RELOPEZBRIEGA.
relopezbriega.github.io/blog/2016/09/26/series-de-tiempo-con-python/

2.- Filtro de Hodrick-Prescott. (s.f.). Wikipedia
es.wikipedia.org/wiki/Filtro_de_Hodrick-Prescott

3.- Series Temporales. (s.f.). Curso de Python de la UNSAM.
programacionpython.ecyt.unsam.edu.ar/material/08_Fechas_Carpetas_y_Pandas/06_Series_Temporales/#vientos-y-ondas-de-tormenta-en-el-rio-de-la-plata

4.- Amat, Joaquín. Escobar, Javier. (Julio 2023). SKForecast: Forecasting series temporales con Python y Scikit-Learn. Cienciadedatos.
cienciadedatos.net/documentos/py27-forecasting-series-temporales-python-scikitlearn.html

5.- Análisis de Series Temporales con la librería Pandas. (s.f.) UniPython.
unipython.com/analisis-de-series-temporales-con-la-libreria-pandas/

 

Comentarios

Registrate o Inicia Sesión para comentar y obtener Cursos de pago gratis

function loadurl(){ var val1 = document.getElementById("valor3").value; console.log(val1); if(val1){ window.location = "/comunidad/blog/filtrar/"+val1+"/"} }