Python 广义加法模型在xarray中的应用

Python 广义加法模型在xarray中的应用,python,netcdf,gam,xarray,facebook-prophet,Python,Netcdf,Gam,Xarray,Facebook Prophet,我有一个netCDF文件,我已经用xarray读过了。数组包含时间、纬度、经度和一个数据变量(即索引值) #读取netCDF文件 将xr.open_mfdataset('wet_tropics.nc')设置为湿: 印刷品(湿) 出[]: 尺寸:(时间:1437,x:24,y:20) 协调: *y(y)浮动64-1.878e+06-1.878e+06-1.878e+06-1.878e+06。。。 *x(x)浮动64 1.468e+061.468e+061.468e+061.468e+061.468

我有一个netCDF文件,我已经用xarray读过了。数组包含时间、纬度、经度和一个数据变量(即索引值)

#读取netCDF文件
将xr.open_mfdataset('wet_tropics.nc')设置为湿:
印刷品(湿)
出[]:
尺寸:(时间:1437,x:24,y:20)
协调:
*y(y)浮动64-1.878e+06-1.878e+06-1.878e+06-1.878e+06。。。
*x(x)浮动64 1.468e+061.468e+061.468e+061.468e+061.468e+06。。。
*时间对象“2013-03-29T00:22:28.500000000”。。。
数据变量:
索引_值(时间,y,x)float64 dask.array
到目前为止,一切顺利。 现在我需要对数组中的每个网格单元应用一个广义相加模型。我想使用的模型来自Facebook Prophet(),我之前已经成功地将其应用于一系列数据。例如:

cns_ap['y']=cns_ap['av_index']#Prophet要求列名使用特定的名称'y'和'ds'
cns_ap['ds']=cns_ap['Date']
cns_ap['cap']=1
m1=预言者(每周季节性=假,#禁用每周季节性
daily_季节性=False,#禁用daily_季节性
growth='logistic',#logistic,因为指数有一个最大值
年度季节性=4,#傅里叶变换.int介于1-10之间
转换点(之前的刻度=0.5)。拟合(cns\U ap)
future1=m1.制定未来数据框架(周期=60,#5年预测
freq='M',#每月预测
包括_history=True)#使模型适合所有历史数据
future1['cap']=1#将cap设置为最大索引值
预测1=m1。预测(未来1)
#m1.绘图组件(预测1,绘图cap=假);
#m1.图(预测1,图_cap=False,ylabel='CNS index',xlabel='Year');
问题是现在我必须 1) 迭代netCDF文件的每个单元格, 2) 获取该单元格随时间变化的所有值, 3) 应用GAM(使用FBP),然后导出并打印结果

问题:您对如何在光栅中循环,始终获取每个像素的索引值,以便我可以运行GAM有什么想法吗? 我认为嵌套for循环是可行的,尽管我不知道如何制作一个遍历每个单元格的循环


非常感谢您的帮助

您是否可以使用xarray中的
to_pandas
方法,然后按x和y分组以在唯一像素上运行模型?或者,我认为您必须在xarray中使用
apply_func
方法。我做了一些类似的事情,但是你的模型有点复杂,因为它为每个像素返回一个时间序列。谢谢Shawn!我将尝试使用xarray。应用_ufunc并让您知道。正如您所提到的,GAM带来了很多挑战,因为它每像素提供2个输出。我正在考虑将它们作为单独的变量存储在同一个xarray中,或者将它们导出为netCDF文件以供以后使用。要使用
To_pandas
方法,我仍然需要迭代每个像素来对它们进行分组,对吗?今天我看到了:我们通常使用
numpy.ndindex
来迭代xarrays,您需要防止它在时间维度上迭代,比如:
for(x,y)in np.ndex((wet.size['x',wet.size])['y']):wet.index_values.isel(x=x,y=y)
您还可以执行类似的操作:
flat=wet.index_values.rename({'time':'ds'}).stack(point=('x','y')。范围内i的重命名('y')(flat.size['point]]):df=flat.isel(point=1).to_dataframe()m.fit(df)
亲爱的Nicolas,请参阅我关于如何在Xarray上使用FProphet的另一篇文章。它在这里[。