nmc_met_io/examples/retrieve_micaps_server.ipynb

339 lines
366 KiB
Plaintext
Raw Normal View History

2020-02-17 13:29:11 +00:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name=\"top\"></a>\n",
"<div style=\"width:1000 px\">\n",
"\n",
"<div style=\"float:right; width:68 px; height:68px;\">\n",
"<img src=\"./images/nmc_logo.png\" alt=\"NMC Logo\" style=\"height: 68px;\">\n",
2020-02-17 13:29:11 +00:00
"</div>\n",
" \n",
"<h1>MICAPS Cassandra Server 分布式数据库数据读取</h1>\n",
"\n",
"<div style=\"clear:both\"></div>\n",
"</div>\n",
"\n",
"<hr style=\"height:2px;\">\n",
"\n",
"<div style=\"float:right; width:350 px\"><img src=\"./images/micaps_data_server.png\" alt=\"NumPy Logo\" style=\"height: 300px;\"></div>\n",
2020-02-17 13:29:11 +00:00
"\n",
"MICAPS分布式数据环境BDIPS提供WEBService API方式来检索海量气象数据信息. [nmc_met_io](https://github.com/nmcdev/nmc_met_io)程序库的[retrieve_micaps_server](https://github.com/nmcdev/nmc_met_io/blob/master/nmc_met_io/retrieve_micaps_server.py)模块, 基于WEBService API接口实现了Python语言对BDIPS数据的检索和读取.\n",
"\n",
"### retrieve_micaps_server模块主要功能:\n",
"* 使用WEBService API接口, 无需额外的MICAPS Cassandra Server读取程序库;\n",
"* 引入的本地文件缓存技术, 加快数据的快速读取;\n",
"* 支持模式数据标量场, 矢量场及集合成员数据的读取; \n",
"* 支持模式单点时间序列, 单点廓线及廓线时序的读取;\n",
"* 支持站点, 探空观测数据的读取;\n",
"* 支持awx格式的静止气象卫星等经纬度数据读取;\n",
"* 支持LATLON格式的雷达拼图数据读取;\n",
"* 统一的返回数据类型, 格点数据返回为[xarray](http://xarray.pydata.org/en/stable/)类型, 站点数据返回为[pandas.DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)类型.\n",
"\n",
"### 参考网站\n",
"* https://github.com/nmcdev/nmc_met_io\n",
"* http://www.micaps.cn/MifunForum/topic/list?fId=7\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 安装和配置nmc_met_io程序库\n",
"\n",
"建议安装[Anaconda](https://www.anaconda.com/distribution/)的Python环境. [nmc_met_io](https://github.com/nmcdev/nmc_met_io)为开源程序库, 放置在GitHub网站上, 目前尚不支持[Pypi](https://pypi.org/)和[conda](https://conda-forge.org/)安装. 安装命令如下:\n",
"> pip install git+git://github.com/nmcdev/nmc_met_io.git\n",
"\n",
"该安装过程会自动安装numpy, scipy, tqdm, ...等支持库.\n",
"\n",
"MICAPS分布式服务器的网络地址和端口在配置文件*config.ini*中设置. *config.ini*文件放置在系统用户目录下:\n",
"* Windows, \"C:/Users/用户名/.nmcdev/\"\n",
"* Linux, \"/home/用户名/.nmcdev/\"\n",
"\n",
"*config.ini*遵循Python的[配置文件](https://docs.python.org/3/library/configparser.html)格式:\n",
"```Python\n",
"[MICAPS]\n",
"GDS_IP = xx.xx.xx.xx\n",
"GDS_PORT = xxxx\n",
"# Cached file directory, if not set,\n",
"# /home/user/.nmcdev/cache will be used.\n",
"# CACHE_DIR = ~ \n",
"```\n",
"文件中`GDS_IP`为服务器地址, `GDS_PORT`为端口, 把`CACHE_DIR`的注释#去掉, 可以指定缓存文件地址(默认缓存地址为\".nmcdev/cache/\").\n",
"\n",
"---"
]
},
{
"cell_type": "code",
"execution_count": 1,
2020-02-17 13:29:11 +00:00
"metadata": {},
"outputs": [],
"source": [
"# set up things\n",
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
2020-02-17 13:29:11 +00:00
"metadata": {},
"outputs": [],
"source": [
"# load necessary libraries\n",
"# you should install cartopy with 'conda install -c conda-forge cartopy'\n",
"import xarray as xr\n",
"import numpy as np\n",
"import cartopy.crs as ccrs\n",
"import matplotlib.pyplot as plt\n",
"from nmc_met_io.retrieve_micaps_server import get_model_grid, get_model_grids"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 数值模式预报数据读取\n",
"<div style=\"float:right; width:350 px\"><img src=\"./images/micaps_retrieve_UI.png\" alt=\"image\" style=\"height: 250px;\"></div>\n",
2020-02-17 13:29:11 +00:00
"\n",
"模块`retrieve_micaps_server`提供读取数值模式网格预报数据的函数:\n",
" * `get_model_grid`: 读取单个时次标量, 矢量或集合成员的2D平面预报数据;\n",
" * `get_model_grids`: 读取多个时次标量, 矢量或集合成员的2D平面预报数据;\n",
" * `get_model_points`: 获取指定经纬度点的模式预报数据;\n",
" * `get_model_3D_grid`: 获得单个时次标量, 矢量或集合成员的[lev, lat, lon]3D预报数据;\n",
" * `get_model_3D_grids`: 获得多个时次标量, 矢量或集合成员的[lev, lat, lon]3D预报数据;\n",
" * `get_model_profiles`: 获得制定经纬度单点的模块廓线预报数据.\n",
"\n",
"每个函数都有固定的参数`directory`和`filename`(或`filenames`), 如\n",
"```Python\n",
"# MICAPS分布式服务器上的数据地址, 可通过MICAPS4的数据源检索界面查找,\n",
"# 如右图, 找到数据存放的目录, 鼠标右键点击\"保存路径到剪切板\", 粘贴去掉\"mdfs:///\"\n",
"directory = 'ECMWF_HR/TMP/850'\n",
"# 指定具体的数据文件, 一般格式为\"起报时间.预报时效\", 若不指定, 则自动获得目录下最新数据的文件名\n",
"filename = '18021708.024'\n",
"# 调用函数读取数据\n",
"data = get_model_grid(directory, filename=filename)\n",
"```\n",
"\n",
"### 读取单个时次模式标量预报数据"
]
},
{
"cell_type": "code",
"execution_count": 3,
2020-02-17 13:29:11 +00:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<xarray.Dataset>\n",
"Dimensions: (lat: 281, level: 1, lon: 361, time: 1)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 2020-02-17T08:00:00\n",
" * level (level) float32 850.0\n",
" * lat (lat) float64 60.0 59.75 59.5 ... -9.5 -9.75 -10.0\n",
" * lon (lon) float64 60.0 60.25 60.5 ... 149.5 149.8 150.0\n",
" forecast_reference_time datetime64[ns] 2020-02-16T08:00:00\n",
" forecast_period (time) float64 24.0\n",
"Data variables:\n",
" data (time, level, lat, lon) float32 -7.594082 ... 18.874668\n",
"Attributes:\n",
" Conventions: CF-1.6\n",
" Origin: MICAPS Cassandra Server\n"
]
}
],
"source": [
"directory = 'ECMWF_HR/TMP/850'\n",
"filename = '20021608.024'\n",
"data = get_model_grid(directory, filename=filename, cache=False)\n",
"if data is not None:\n",
" print(data)\n",
"else:\n",
" print(\"Retrieve failed.\")"
]
},
{
"attachments": {
"xarray_dataset.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAACDgAAAJzCAYAAADgRTHdAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE\nAP8A/wD/oL2nkwAAAAlwSFlzAAABLAAAASwAc4jpUgAAgABJREFUeNrt/X2M5dd933nefn4gu8ki\nLTbZkiiqSOqBokSKpVikRUm0psTIDEVLVtqORMmRZalle5SVLFnpSGM7geMY7bFG9kS2krbgCEFk\nG8N/PBOMICAdr5HAgL1ALxwEyGSNRSfYnVljdrHohb1YZIGdmbv1a1e1rq7uw+/hnPM759yXgTeY\nNEWyPreqq6vr++p7J9PpdCJJkiRJkiRJkiRJkpRzHgRJkiRJkiRJkiRJkgQ4SJIkSZIkSZIkSZIk\nAQ6SJEmSJEmSJEmSJAlwkCRJkiRJkiRJkiRJAhwkSZIkSZIkSZIkSZIAB0mSJEmSJEmSJEmSBDhI\nkiRJkiRJkiRJkiQBDpIkSZIkSZIkSZIkCXDwIEiSJEmSJEmSJEmSJMBBkiRJkiRJkiRJkiQJcJAk\nSZIkSZIkSZIkSYCDJEmSJEna+7/tvS7PtLvJb4eNkiRJkiQJcJAkSZIkKc+j++5e05kub/LbYaMk\nSZIkSQIcJKn7Nzv9aS752JMkSYCDx1qSJEmSJAEOkuTILPnYkyRJpQGH3L526fL2AA6SJEmSJAlw\nkOTILPnYkyRJgAPgIEnK/dfcyzP5vXe/x3B70x7HTdwsSRLgIEmOzJKPPUmS5GsXX0tJjsAOkDaP\n+5hBbpXATJslSRLgIMknLt8YlY89SZIkwEFSkUdgR1dHV8DBx53NkiQJcJDkG7XD/l2zbUV4e3fm\n/hvbMf6ZvpsjvX9iP6ad3v4Fj2fTTu3flO/zfk7x/pMkSYAD4CABDo6uPn4Bh3w+7mr5NdrPNUmS\nAAdJyuk3KBf3urrftbnfrFyb+XtXW/5m56W5f8f8v+9ih7ft6kw7Mz/ePO3k9SX/javzB/bmkLz/\nz9xY8XZdWPO2XJ55Wy7P/HjzdJhXVmy+0ufgP8JjemH+MV3zNl1Z8XhO9//elTWv/9zrY28fVczu\n6LL/cpuP6RCPU4z3nySpyG8EJ8GPOYC7BfBxp7bHPPSxolQsuv81cAp8u5XqfSrlegTu8vPb0dXR\n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\nP53k5ZmnNt1U4BDl/SdJ
}
},
2020-02-17 13:29:11 +00:00
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
" <b>返回xarray数据结构</b>:\n",
" <ul>\n",
" <li>返回的数据类型为[xarray](http://xarray.pydata.org/en/stable/)的Dataset结构数据(如下图所示).</li>\n",
" <li>xarray为在numpy数组基础上增加维度, 坐标和属性信息, 其数据模型来自于netCDF文件结构.</li>\n",
" <li>xarray提供直观,简介且可靠的格点数据操作功能, 已成为地球环境科学的标准数据处理程序库, 与很多现有的开源软件兼容.</li>\n",
" <li><em>get_model_grid</em>根据读取数据类型返回不同维度的Dataset数据. 如上对于高空数据, 返回数据的维度分别为(time, level, lat, lon).</li>\n",
" <li>在坐标Coordinate信息中, 除了数组维度的信息, 还给出起报时间forecast_reference_time和预报时效forecast_period</li>\n",
" </ul>\n",
"</div>\n",
"\n",
"<img src=\"./images/xarray_dataset.png\" width=\"600\">"
2020-02-17 13:29:11 +00:00
]
},
{
"cell_type": "code",
"execution_count": 4,
2020-02-17 13:29:11 +00:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mSignature:\u001b[0m\n",
"\u001b[0mget_model_grid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mdirectory\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mfilename\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0msuffix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'*.024'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mvarname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'data'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mvarattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'units'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mscale_off\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mlevattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'long_name'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'pressure_level'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'units'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'hPa'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'_CoordinateAxisType'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'Pressure'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n",
"\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mDocstring:\u001b[0m\n",
"Retrieve numeric model grid forecast from MICAPS cassandra service.\n",
"Support ensemble member forecast.\n",
"\n",
":param directory: the data directory on the service\n",
":param filename: the data filename, if none, will be the latest file.\n",
":param suffix: the filename filter pattern which will be used to\n",
" find the specified file.\n",
":param varname: set variable name.\n",
":param varattrs: set variable attributes, dictionary type.\n",
":param scale_off: [scale, offset], return values = values*scale + offset.\n",
":param levattrs: set level coordinate attributes, diectionary type.\n",
":param cache: cache retrieved data to local directory, default is True.\n",
":return: data, xarray type\n",
"\n",
":Examples:\n",
">>> data = get_model_grid(\"ECMWF_HR/TMP/850\")\n",
">>> data_ens = get_model_grid(\"ECMWF_ENSEMBLE/RAW/HGT/500\", filename='18021708.024')\n",
">>> data_ens = get_model_grid('ECMWF_ENSEMBLE/RAW/TMP_2M', '19083008.024')\n",
"\u001b[0;31mFile:\u001b[0m /media/kan-dai/work01/DK_WORK_CODE/repository/nmc_met_io/nmc_met_io/retrieve_micaps_server.py\n",
"\u001b[0;31mType:\u001b[0m function\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 使用?可以获得函数的帮助信息.\n",
"?get_model_grid"
]
},
{
"cell_type": "code",
"execution_count": 5,
2020-02-17 13:29:11 +00:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<xarray.DataArray 'TEM' (time: 1, level: 1, lat: 281, lon: 361)>\n",
"array([[[[ -7.594082, -7.906582, -8.578457, ..., -14.937832,\n",
" -14.781582, -14.750332],\n",
" [ -7.187832, -7.734707, -8.578457, ..., -14.594082,\n",
" -14.515957, -14.594082],\n",
" [ -6.922207, -7.797207, -8.781582, ..., -14.640957,\n",
" -14.687832, -14.797207],\n",
" ...,\n",
" [ 18.343418, 18.499668, 18.718418, ..., 19.296543,\n",
" 18.984043, 19.124668],\n",
" [ 18.343418, 18.484043, 18.609043, ..., 19.593418,\n",
" 19.155918, 19.093418],\n",
" [ 18.312168, 18.484043, 18.515293, ..., 19.452793,\n",
" 19.265293, 18.874668]]]], dtype=float32)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 2020-02-17T08:00:00\n",
" * level (level) float32 850.0\n",
" * lat (lat) float64 60.0 59.75 59.5 ... -9.5 -9.75 -10.0\n",
" * lon (lon) float64 60.0 60.25 60.5 ... 149.5 149.8 150.0\n",
" forecast_reference_time datetime64[ns] 2020-02-16T08:00:00\n",
" forecast_period (time) float64 24.0\n",
"Attributes:\n",
" long_name: temperature\n",
" units: degree\n"
]
}
],
"source": [
"# 可以指定数据的变量名称, 变量属性等信息\n",
"data = get_model_grid(directory, filename=filename, varname='TEM', varattrs={'long_name':'temperature', 'units':'degree'}, cache=False)\n",
"if data is not None:\n",
" print(data.TEM)\n",
"else:\n",
" print(\"Retrieve failed.\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
2020-02-17 13:29:11 +00:00
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x576 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 绘制图像\n",
"fig = plt.figure(figsize=(12,8))\n",
"ax = plt.axes(projection=ccrs.LambertConformal(central_longitude=120))\n",
"data.TEM.plot(ax=ax, transform=ccrs.PlateCarree(), cbar_kwargs={'shrink': 0.8})\n",
"ax.coastlines()\n",
"ax.gridlines()\n",
"ax.set_extent([80,130,15,54], crs=ccrs.PlateCarree())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}