Foto de Katie Harp en UnsplashEl análisis de series de tiempo de datos geoespaciales nos permite analizar y comprender cómo los eventos y atributos de un lugar cambian con el tiempo. Sus casos de uso son muy variados, particularmente en estudios sociales, demográficos, ambientales y meteorológicos/climáticos. En las ciencias ambientales, por ejemplo, el análisis de series de tiempo ayuda a analizar cómo cambia la cobertura del suelo/el uso del suelo de un área con el tiempo y sus impulsores subyacentes. También es útil en estudios meteorológicos para comprender los cambios espacio-temporales en los patrones climáticos (en breve demostraré uno de esos casos de estudio utilizando datos de lluvia). Las ciencias sociales y económicas se benefician enormemente de dicho análisis para comprender la dinámica de los fenómenos temporales y espaciales, como los patrones demográficos, económicos y políticos. La representación espacial de los datos es bastante poderosa. Sin embargo, puede ser una tarea desafiante analizar datos geoespaciales y extraer información interesante, especialmente para un científico/analista de datos que no está capacitado en ciencias de la información geográfica. Afortunadamente, existen herramientas para simplificar este proceso, y eso es lo que intento en este artículo. Escribí mi artículo anterior sobre algunos de los conceptos básicos de la disputa de datos geoespaciales; no dude en consultarlo: En este artículo, pasaré por una serie de procesos, comenzando por descargar datos ráster, luego transferir datos a un marco de datos de pandas y configurar para tareas tradicionales de análisis de series de tiempo.
Para este estudio de caso, estoy usando la distribución espacial de las precipitaciones en la prefectura de Hokkaido, Japón, entre los períodos del 1 de enero al 31 de diciembre de 2020, lo que representa 366 días del año. Descargué datos de una plataforma de datos espaciales de acceso abierto ClimateServe, que es un producto de una asociación conjunta de NASA/USAID. Cualquier persona con acceso a Internet puede descargar fácilmente los datos. Los subí a GitHub junto con los códigos si quieres seguirlos. Aquí está la instantánea de algunas imágenes rasterizadas en mi directorio local:Instantánea de algunos de los archivos ráster en el directorio local (fuente: autor)
Primero, configuro una carpeta donde se almacena el conjunto de datos ráster para poder recorrerlos más adelante. # especifique la ruta de la carpeta para el conjunto de datos ráster
tsFolderPath = ‘./data/hokkaido/’A continuación, estoy importando algunas bibliotecas, la mayoría de las cuales serían familiares para los científicos de datos. Para trabajar con datos raster estoy usando la librería rasterio.# import library
importar sistema operativo
importar rasterio
importar matplotlib.pyplot como plt
importar numpy como np
importar pandas como pd
Veamos cómo se ven las imágenes rasterizadas en un gráfico. Primero cargaré una imagen aleatoria usando rasterio y luego la trazaré usando la funcionalidad matplotlib. # carga en datos rasterizados
rf = rasterio.open(‘./data/hokkaido/20201101.tif’)fig, axe = plt.subplots(figsize=(15,5))_ = axe.imshow(rf.read()[0]cmap = ‘infierno’)
fig.colorbar(_, ax=ax)
plt.axis(‘apagado’)
plt.title(‘Lluvia diaria de enero a diciembre de 2020, Hokkaido, Japón’);Distribución de la lluvia (en mm) en Hokkaido, Japón, el 1 de noviembre de 2020 (fuente: autor) Como puede ver, esta imagen es una combinación de píxeles, el valor de cada píxel representa la lluvia para esa ubicación en particular. Los píxeles más brillantes tienen un alto valor de lluvia. En la siguiente sección, extraeré esos valores y los transferiré a un marco de datos de pandas.
Ahora en el paso clave: extraer valores de píxeles para cada una de las 366 imágenes rasterizadas. El proceso es simple: recorreremos cada imagen, leeremos los valores de píxeles y los almacenaremos en una lista. Realizaremos un seguimiento de las fechas por separado en otra lista. ¿De dónde obtenemos la información de las fechas? Si observa más de cerca los nombres de los archivos, notará que tienen el nombre de cada día respectivo. # cree listas vacías para almacenar datos
fecha = []
lluvia_mm = []# recorrer cada ráster
para el archivo en os.listdir(tsFolderPath):# leer los archivos
rf = rasterio.open(tsFolderPath + archivo)# convertir datos ráster en una matriz
array = rf.read(1)# almacenar datos en la lista
fecha.agregar(archivo[:-4])
precipitaciones_mm.append(matriz[array>=0].mean()) Tenga en cuenta que no llevó mucho tiempo recorrer 366 rásteres debido a la baja resolución de la imagen (es decir, gran tamaño de píxel). Sin embargo, puede ser computacionalmente intensivo para conjuntos de datos de alta resolución. Así que acabamos de crear dos listas, una almacena las fechas de los nombres de los archivos y la otra tiene datos de lluvia. Aquí están los primeros cinco elementos de dos listas: imprimir (fecha[:5])
imprimir (lluvia_mm[:5])>> [‘20200904’, ‘20200910’, ‘20200723’, ‘20200509’, ‘20200521’]
>> [4.4631577, 6.95278, 3.4205956, 1.7203209, 0.45923564]A continuación, transfiera las listas a un marco de datos de pandas. A partir de aquí, daremos un paso más para convertir el marco de datos en un objeto de serie temporal.
Transferir listas a un formato de marco de datos es una tarea fácil en pandas: # convertir listas a un marco de datos
df = pd.DataFrame(zip(fecha, lluvia_mm), columnas = [‘date’, ‘rainfall_mm’])
df.cabeza()Primeras filas del marco de datos generado a partir de listas (fuente: autor) Ahora tenemos un marco de datos de pandas, pero observe que la columna ‘fecha’ contiene valores en cadenas, pandas aún no sabe que representa fechas. Por lo tanto, debemos modificarlo un poco: # Convertir el marco de datos en un objeto de fecha y hora
d.f.[‘date’] = pd.to_datetime(df[‘date’])
df.cabeza()La columna de fecha ahora se transforma en un objeto de fecha y hora (fuente: autor) df[‘date’].info()Esto confirma que la columna es un objeto de fecha y hora (fuente: autor) Ahora, el marco de datos es un objeto de fecha y hora. También es una buena idea establecer la columna de fecha como índice. Esto facilita el corte y filtrado de datos por diferentes fechas y rango de fechas y facilita las tareas de trazado. Primero ordenaremos las fechas en el orden correcto y luego estableceremos la columna como index.df = df.sort_values(‘date’)
df.set_index(‘date’, inplace=True)Bien, todo el procesamiento está listo. Ahora está listo para usar estos datos de series temporales como desee. Graficaré los datos para ver cómo se ven.# plot
df.plot(figsize=(12,3), grid =True);Gráfica de serie temporal de datos de lluvia en Hokkaido, Japón, entre enero y diciembre de 2020 (fuente: autor) ¡Hermosa gráfica! Escribí algunos artículos en el pasado sobre cómo analizar datos de series de tiempo, aquí hay uno: Extraer información interesante y procesable de datos de series de tiempo geoespaciales puede ser muy poderoso ya que muestra datos tanto en dimensiones espaciales como temporales. Sin embargo, para los científicos de datos sin formación en información geoespacial, esta puede ser una tarea abrumadora. En este artículo, demostré con un estudio de caso cómo esta difícil tarea se puede realizar fácilmente con un mínimo esfuerzo. Los datos y códigos están disponibles en mi GitHub si desea replicar este ejercicio o llevarlo al siguiente nivel. Gracias por leer. Siéntase libre de suscribirse para recibir notificaciones de mis próximos artículos en Medium o simplemente conéctese conmigo a través de LinkedIn o Gorjeo. ¡Hasta la próxima!
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…