-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata_assimilation_models.py
68 lines (55 loc) · 2.21 KB
/
data_assimilation_models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import numpy as np
import pandas as pd
import xarray as xr
from data_models import DataWrf
from data_utils import get_nearest_curvilinear_grid, timeit
from pynoply_stats import load_datasets
class DataAssimilator:
def __init__(self, method, ds, pq):
self.method = method
self.ds = ds
self.pq = pq
def fit(self, points_source):
self.df_source_list = get_nearest_curvilinear_grid(self.ds, points_source)
self.df_train = pd.concat(self.df_source_list, ignore_index=True)[['Date', 'lat', 'lon', self.pq]]
print('df_source_list len:', len(self.df_train))
def transform(self, predict_points_source):
# to do
pass
def __repr__(self):
return 'DataAssimilator method {}; dims: {}; vars: {}'.format(
self.method,
' '.join(list(self.ds.dims)),
' '.join(list(self.ds.variables))
)
@timeit
def main():
city_name = 'msc'
expr, idir_nc, obs_data_rp5, obs_data_cws = load_datasets(city_name)
wrf_data = DataWrf(expr, idir_nc)
# era_data = DataEra(exp, idir_era_nc)
print(wrf_data)
print()
print(obs_data_rp5)
df_wrf_rp5_list = wrf_data.get_obs_points('rp5')
df_wrf_cws_list = wrf_data.get_obs_points('cws')
print('wrf rp5 list:', len(df_wrf_rp5_list), len(obs_data_rp5.dfs))
print('wrf cws list:', len(df_wrf_cws_list), len(obs_data_cws.dfs))
method = 'krig'
n = 100
xlong_flatten = wrf_data.ds.XLONG.values.flatten()
xlat_flatten = wrf_data.ds.XLAT.values.flatten()
dates_flatten = wrf_data.ds.XTIME.values.flatten()
print('xlong xlat dates shapes:', xlong_flatten.shape, xlat_flatten.shape, dates_flatten.shape)
lats_regular = np.linspace(xlat_flatten.min(), xlat_flatten.max(), n)
lons_regular = np.linspace(xlong_flatten.min(), xlong_flatten.max(), n)
dates_regular = dates_flatten
da = DataAssimilator(method, wrf_data.ds)
print(da)
_id_lat_lon_list_cws = obs_data_cws.df_info[['_id', 'lat', 'lon']].values.tolist()
_id_lat_lon_list_rp5 = obs_data_rp5.df_info[['_id', 'lat', 'lon']].values.tolist()
da.fit(_id_lat_lon_list_rp5)
ds_res = da.transform(df_wrf_cws_list)
print(ds_res)
if __name__ == '__main__':
main()