前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >地理空间数据的时间序列分析

地理空间数据的时间序列分析

作者头像
磐创AI
发布2024-04-28 15:09:01
860
发布2024-04-28 15:09:01
举报
地理空间数据的时间序列分析允许我们分析和了解一个地方的事件和属性随时间的变化。其应用范围广泛,尤其在社会、人口、环境和气象/气候研究中应用广泛。

例如,在环境科学中,时间序列分析有助于分析一个地区的土地覆盖/土地利用随时间的变化及其潜在驱动因素。它在气象研究中也很有用,可以帮助我们理解天气模式的时空变化(我将很快使用降雨数据演示一个这样的案例研究)。社会和经济科学在理解时间和空间现象的动态方面也极大受益,例如人口、经济和政治模式。

空间数据的表示具有很强的力量。然而,对于一个没有接受地理信息科学培训的数据科学家/分析师来说,分析地理空间数据并提取有趣的见解可能是一项具有挑战性的任务。幸运的是,有工具可以简化这个过程,这正是在本文中尝试的内容。

在本文中,将经历一系列过程,从下载光栅数据开始,然后将数据转换为pandas数据框,并为传统的时间序列分析任务进行设置。

案例研究:日本北海道的日降雨模式

数据来源

在这个案例研究中,我使用了日本北海道2020年1月1日至12月31日期间的降雨空间分布数据,涵盖了一年的366天。我从NASA/USAID合作伙伴关系的开放式空间数据平台ClimateServe下载了数据。任何有互联网访问权限的人都可以轻松下载这些数据。

以下是我本地目录中一些光栅图像的快照:

设置

首先,设置了一个文件夹,用于存储光栅数据集,以便以后可以循环遍历它们。

代码语言:javascript
复制
# specify folder path for raster dataset
tsFolderPath = './data/hokkaido/'

接下来,导入了一些库,其中大多数对数据科学家来说应该是熟悉的。为了处理光栅数据,我使用了rasterio库。

代码语言:javascript
复制
# import libraries
import os
import rasterio 
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
可视化数据

让我们看看光栅图像在绘图中的样子。将首先使用rasterio加载一个随机图像,然后使用matplotlib功能绘制它。

代码语言:javascript
复制
# load in raster data
rf = rasterio.open('./data/hokkaido/20201101.tif')

fig, ax = plt.subplots(figsize=(15,5))

_ = ax.imshow(rf.read()[0], cmap = 'inferno')
fig.colorbar(_, ax=ax)
plt.axis('off')
plt.title('Daily rainfall Jan-Dec 2020, Hokkaido, Japan');

如你所见,这个图像是像素的组合,每个像素的值表示该特定位置的降雨量。较亮的像素具有较高的降雨值。在下一节中,我将提取这些值并将它们转换为pandas数据框。

从光栅文件中提取数据

现在进入关键步骤——提取每个366个光栅图像的像素值。这个过程很简单:我们将循环遍历每个图像,读取像素值并将它们存储在一个列表中。

我们将另外在另一个列表中跟踪日期信息。我们从哪里获取日期信息?如果你仔细查看文件名,你会注意到它们是按照每个相应的日期命名的。

代码语言:javascript
复制
# create empty lists to store data
date = []
rainfall_mm = []

# loop through each raster
for file in os.listdir(tsFolderPath):

    # read the files
    rf = rasterio.open(tsFolderPath + file)

    # convert raster data to an array
    array = rf.read(1)

    # store data in the list
    date.append(file[:-4])
    rainfall_mm.append(array[array>=0].mean())

请注意,由于图像分辨率低(即像素尺寸大),循环遍历366个光栅图像并不需要很长时间。然而,对于高分辨率数据集,这可能需要大量计算资源。

因此,我们刚刚创建了两个列表,一个存储文件名中的日期,另一个存储降雨数据。以下是这两个列表的前五个项目:

代码语言:javascript
复制
print(date[:5])
print(rainfall_mm[:5])


>> ['20200904', '20200910', '20200723', '20200509', '20200521']
>> [4.4631577, 6.95278, 3.4205956, 1.7203209, 0.45923564]

接下来,我们将这些列表转换为pandas数据框的格式。从这里开始,我们将采取额外的步骤将数据框转换为时间序列对象。

转换为时间序列数据框

在pandas中,将列表转换为数据框格式是一项简单的任务:

代码语言:javascript
复制
# convert lists to a dataframe
df = pd.DataFrame(zip(date, rainfall_mm), columns = ['date', 'rainfall_mm']) 
df.head()

现在我们有了一个pandas数据框,但请注意,“日期”列中的值是字符串,pandas尚不知道它代表日期。因此,我们需要稍微调整一下:

代码语言:javascript
复制
# Convert dataframe to datetime object
df['date'] = pd.to_datetime(df['date'])
df.head()
代码语言:javascript
复制
df['date'].info()

现在数据框是一个日期时间对象。

将日期列设置为索引也是一个好主意。这有助于按不同日期和日期范围切片和过滤数据,并使绘图任务变得容易。我们首先将日期排序到正确的顺序,然后将该列设置为索引。

代码语言:javascript
复制
df = df.sort_values('date')
df.set_index('date', inplace=True)

好了,所有处理都已完成。你现在可以根据需要使用这个时间序列数据。我只是绘制数据以查看其外观。

代码语言:javascript
复制
# plot
df.plot(figsize=(12,3), grid =True);

漂亮的图表!

最后

从地理空间时间序列数据中提取有趣且可操作的见解可以非常强大,因为它同时展示了数据的空间和时间维度。然而,对于没有地理空间信息培训的数据科学家来说,这可能是一项令人望而却步的任务。

在本文中,通过一个案例研究演示了如何以最少的努力轻松完成这项艰巨任务

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-27,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 案例研究:日本北海道的日降雨模式
    • 数据来源
      • 设置
        • 可视化数据
          • 从光栅文件中提取数据
            • 转换为时间序列数据框
            • 最后
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档

            http://www.vxiaotou.com