通过一个完整的代码示例,展示如何利用 Meteostat 库中的 Stations 类来加载、筛选和提取中国的气象站数据。
- 根据国家代码筛选中国气象站
- 根据距离筛选某一城市附近的气象站
- 筛选指定日期具备日数据的站点
- 随机抽取部分站点数据进行查看
1. 初始化与加载数据
首先,通过创建 Stations 类的实例,会自动加载全球气象站数据。为了演示,我们主要关注中国的站点数据,因此后续将利用 region()
方法进行过滤。
from meteostat import Stations
from datetime import datetime
# 初始化 Stations 类,加载所有站点数据
stations = Stations()
在实例化之后,Stations 类会自动调用内部的加载函数,将数据读取并缓存到本地,以提高后续查询的速度。
2. 筛选中国站点数据
利用 region()
方法,我们可以根据国家代码筛选出中国的气象站数据。中国的国家代码为 "CN"
。
# 根据国家代码筛选出中国的气象站
cn_stations = stations.region(country="CN")
print("中国站点数量:", cn_stations.count())
这样就可以获得所有属于中国的气象站,并使用 count()
方法来查看筛选后的站点数量。
3. 按地理位置筛选指定城市附近的站点
假设我们需要查询北京周边(例如半径 50 公里范围内)的气象站,可以使用 nearby()
方法。北京的经纬度大致为:纬度 39.9042, 经度 116.4074。
# 根据距离筛选北京附近 50 公里内的站点
beijing_stations = stations.nearby(lat=39.9042, lon=116.4074, radius=50)
print("北京附近站点数量:", beijing_stations.count())
该方法内部会计算每个站点到指定经纬度的距离,并返回距离在设定半径内的站点,同时按照距离从近到远进行排序。
4. 根据数据可用性筛选具备日数据的站点
有时我们还需要筛选在某个特定日期具备日观测数据的站点。通过 inventory()
方法,可以确保返回的站点在指定日期有有效的日数据记录。比如,我们希望筛选出在 2020 年 1 月 1 日具备日数据的站点:
# 筛选在2020年1月1日具备日数据的站点
date = datetime(2020, 1, 1)
daily_stations = stations.inventory(freq="daily", required=date)
print("2020年1月1日具备日数据的站点数量:", daily_stations.count())
这里,inventory(freq="daily", required=date)
方法会检查各站点在 daily_start
和 daily_end
字段中是否涵盖指定日期。
5. 抽取部分数据进行查看
有时我们并不需要所有数据,而是希望随机抽取几条记录进行快速查看。通过 fetch()
方法的 limit
和 sample
参数,可以方便地获取一部分数据。
# 从中国站点中随机抽取5个样本进行展示
sample_cn_stations = cn_stations.fetch(limit=5, sample=True)
print("抽样的中国站点数据:")
print(sample_cn_stations)
如果希望抽取固定前几条记录,则可以设置 sample=False
或仅使用 limit
参数。
通过以上示例,展示了利用 Stations 类实现对中国气象站数据的以下操作:
- 数据加载:实例化 Stations 类后,数据会自动加载和缓存。
- 国家筛选:利用
region(country="CN")
筛选出中国的所有气象站。 - 距离筛选:通过
nearby()
方法,获取北京周边一定半径范围内的站点。 - 数据可用性:使用
inventory()
方法筛选在特定日期具备日数据记录的站点。 - 数据抽取:使用
fetch()
方法获取部分数据进行快速查看。