海洋数据处理软件 -海洋数据统计

[复制链接]
2 `6 U, D- ]7 L5 J- k+ b# B3 L

气象海洋领域,常常会涉及到大规模的数据处理,比如高时空分辨率的模式数据、雷达数据和卫星数据等。

8 n) ^% `( c; G; e
{ Y$ l4 d. y( Y: }+ _( }6 B

大部分情况,我们一般只会涉及小规模数据处理,对计算效率并不会太过追求。但是当数据量变大时,低效的数据处理所耗费的时间非常明显,因此高效的数据处理方式尤为重要。

# p" g) r( Q6 t5 i3 o : O# [9 `9 d z8 t9 \

本篇以拟合一个高维数据的正太分布参数为例,介绍如何使用xarray+dask加速数据处理。

/ @1 y1 H8 {0 `0 J n6 } " R' Q. `* L. d7 E: M

数据维度X[time, lev, lat, lon],需要对三维空间每一点,沿着时间维度做正太分布拟合(正太分布拟合只是作为例子,这里可以定义你需要的操作函数)。

8 ~/ w4 e8 C) @$ ~3 J) L* |: `

其中几个关键点解释一下:

! C$ |1 I9 |" D' q ?6 L

(1)首先定义拟合正太分布的函数

5 r* _8 R" z: M( z
def norm_fit(data):5 u: `$ \6 F, f$ R( f8 G2 p# U2 g0 \ loc, scale = st.norm.fit(data)3 X( }: _9 v7 v+ x& v+ c: i return np.array([loc, scale])
7 h. Q8 i$ m( K: H# M1 v1 {

这里需要注意的是,拟合的函数,输出参数,需要打包为一个数组。并且它的维度需要和后面aplly_ufun定义的输出维度一致。

, a. j; z2 n3 b9 h( L: j

(2)xarray分块

1 Q! C9 a2 \0 t& P3 v: s5 p
x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"]) ! c& \1 d+ N3 n$ c# o1 T x = x.chunk({"lev":5, "lat":100,"lon":100})
: l# i9 w# b; T; _+ |# W" V8 Z

xarray结合dask可以将一个大型数组分成一个个数据块(chunk),需要注意的是我们需要沿着时间维操作,拟合需要整个时间维度的数据,因此时间维time不能分块,只能对其他维度分块。

$ N. M5 K: R1 f. ^- `) {

(3)xarray.apply_ufunc函数

8 J& {' x0 p1 P, J
result = xr.apply_ufunc(norm_fit, ; L' q' a- l7 Z4 H. z6 q7 ^0 E0 e x,- e: _( [- T+ Y input_core_dims=[["time"]], ' b# W% Y7 ~' x ]- ? output_core_dims=[["paras"]], 8 d; K& ]2 M; h+ n0 y dask="parallelized", s3 D3 o* W% J o7 F3 J& b output_dtypes=[np.float],; v, s. u* T+ |* s" Y dask_gufunc_kwargs={output_sizes:{"paras":2}} % _+ `- a( j8 ?- F )
$ E0 ?+ s, R' l% j

apply_ufunc函数具体可以参考官网教程,这里只说使用时遇到的困难,即如何定义输出维度:输出维度是用output_core_dim定义的,将输出的拟合参数(期望和标准差)定义为paras维度,维度的大小为2,通过output_sizes参数设置。这样我们输入[time, lev, lat, lon]的数据,在每个空间点对时间维度拟合之后,输出的数据为[lev, lat, lon, paras]。(PS: 这里感谢深雨露大佬的指点)

3 r5 d) k+ l2 m6 {0 F& e, S& P2 v+ Y! S$ y0 u

以下是全部代码:

- u( y6 T! H+ p7 {# T- o E3 a
from scipy import stats as st 7 X5 r0 p) u& A $ U% l, l2 I5 f7 T }, s import xarray as xr. C5 j+ ~ J6 u import dask 3 U v4 P) A0 [0 t. Z import numpy as np9 e+ y4 \9 U& I+ j7 [% y from dask.diagnostics import ProgressBar- A6 N1 [) t8 Q C + e \/ |, Y9 Q9 b" J def norm_fit(data): : C* ]- I% b% v# O loc, scale = st.norm.fit(data)* U1 a( @* b9 I return np.array([loc, scale])! [" `( d$ Z C$ U: }" X, G8 C* O . A; l% M5 b8 Z- _5 T) B rs = np.random.RandomState(0) ) z. g$ E5 l" c2 J/ L, G x = xr.DataArray(rs.randn(500, 20, 1500, 1500), dims=["time", "lev", "lat","lon"])6 H; B+ e3 v8 m, \% o3 b x = x.chunk({"lev":5, "lat":100,"lon":100})/ ?! r0 C+ G* o& p7 k, m 5 d0 a# }, r8 [% ?1 ? N2 V. ?2 f #使用apply_ufunc计算,并用dask的并行计算 7 M1 ?( B/ S2 A& b7 h2 Y/ O result = xr.apply_ufunc(norm_fit,8 ~: E: E3 ~& i: M, C0 { x, C7 k# c, k2 n# d- z$ \$ w, B. L input_core_dims=[["time"]],3 l9 {& t' D# n8 }- z output_core_dims=[["paras"]],2 [, y1 Z1 M& p& v+ p dask="parallelized", 3 l0 i4 v! u! k# L9 w6 w$ {: P7 P! S, k output_dtypes=[np.float], ; |' t8 C! y: G dask_gufunc_kwargs={output_sizes:{"paras":2}} ! `9 v" e' K0 I' F2 J& r ) ' F8 G! ]7 _2 q- O0 J; g8 d2 T4 i# m$ [1 ]! v& i _9 v1 l #compute进行真实的计算并显示进度 % `" I j# R+ s2 x/ l9 n, P: M with ProgressBar():9 ^/ W9 Z" P0 S result = results.compute() Z( O; | p9 v $ N: d5 i; z: r( V4 G4 Z #结果冲命名保存到nc文件0 t8 R; Z. `4 i$ |# N+ a1 ~ result = result.rename("norm_paras") 9 n! \% D; B" J F3 M% S% m7 m result = result.to_netcdf("norm_fit_paras.nc",compute=False); ~9 i# L4 u8 X E. N+ C/ { with ProgressBar(): 6 d5 m3 m: @9 V' {9 C6 W result.compute()
7 m' U" J- |$ }. G$ a4 |

转自:气海同途

, \ t) ~1 W0 S: q1 M+ }

关注【Ai尚研修科研技术平台】公众号,查看更多课程安排及免费数据资料

' `. E. ]/ y: J ( f ~5 [" Q( |2 t

推荐:

0 q" A/ N$ x; p9 p9 D$ [

1、Python语言在地球科学领域中的应用实践技术应用

+ c: I) ?. U. m! G k% u

2、【夏令营】针对课题组人员AI培养计划:“开启AI科研之路”

3 }3 i5 U/ _* n, g- ^1 K

3、Python在气象与海洋中的实践技术应用精品课程

5 W' T3 ]$ U. {. L

4、Python在WRF模型自动化运行及前后处理中的实践技术应用

# b7 @! T3 z$ I( f( S

5、全套Python机器学习核心技术与案例分析实践应用视频

) p' p/ A& g) S1 H0 `

6、全套区域高精度地学模拟-WRF气象建模、多案例应用与精美制图精品课程

$ |6 i! x' ~; ^, P0 N

7、WRF DA资料同化系统理论、运行与与变分、混合同化新方法技术应用视频教程

. N- j; p y4 X0 d # L8 t9 i; I/ n' H1 Y & I& [9 k0 n6 M: b6 r, f4 x5 [ }% l1 p0 E4 ^# d; r& `; E , ?$ ]! A: v3 g8 ^. x
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
庄家真牛牛杂火锅
活跃在7 天前
快速回复 返回顶部 返回列表