ecmwf-opendata
هي حزمة لتبسيط تنزيل بيانات ECMWF المفتوحة. إنه ينفذ واجهة قائمة على الطلب إلى مجموعة البيانات باستخدام لغة MARS الخاصة بـ ECMWF لتحديد حقول الأرصاد الجوية ، على غرار حزمة بيثون ECMWF-API-Client الحالية.
مجموعة من أجهزة الكمبيوتر المحمولة Jupyter التي تستفيد من هذه الحزمة متاحة هنا.
يمكن تثبيت حزمة Python ecmwf-opendata
من PYPI مع:
$ pip install ecmwf-opendata
سيقوم المثال أدناه بتنزيل أحدث توقعات متوفرة لمدة 10 أيام للضغط المتوسط لمستوى سطح البحر ( msl
) إلى ملف محلي يسمى data.grib2
:
from ecmwf . opendata import Client
client = Client ()
client . retrieve (
step = 240 ,
type = "fc" ,
param = "msl" ,
target = "data.grib2" ,
)
❗ ملاحظة: تم تصميم هذه الحزمة للمستخدمين الذين يرغبون في تنزيل مجموعة فرعية من مجموعة البيانات بأكملها. إذا كنت تخطط لتنزيل نسبة مئوية كبيرة من كل ملف بيانات ، فقد يكون من المفيد تنزيل الملفات الكاملة وتصفية البيانات التي تريدها محليًا. راجع الوثائق على اتفاقية تسمية الملف لمزيد من المعلومات. بدلاً من ذلك ، يمكنك استخدام هذه الأداة لتنزيل الملفات بأكملها عن طريق تحديد
date
time
step
stream
type
فقط. يرجى العلم أن جميع البيانات ليوم كامل في حدود 726 GIB.
يأخذ مُنشئ كائن العميل الخيارات التالية:
client = Client (
source = "ecmwf" ,
model = "ifs" ,
resol = "0p25" ,
preserve_request_order = False ,
infer_stream_keyword = True ,
)
أين:
source
هو إما اسم الخادم للاتصال أو عنوان URL المؤهل بالكامل. القيم المحتملة هي ecmwf
للوصول إلى خوادم ECMWF ، أو azure
للوصول إلى البيانات المستضافة على Azure من Microsoft. الافتراضي هو ecmwf
.
model
هو اسم النموذج الذي أنتج البيانات. استخدم ifs
للنموذج القائم على الفيزياء و aifs
للنموذج القائم على البيانات. يرجى ملاحظة أن aifs
تجريبي حاليًا وينتج فقط مجموعة فرعية صغيرة من الحقول. الافتراضي هو ifs
.
resol
حل دقة البيانات. الافتراضي هو 0p25
لدقة 0.25 درجة ، وهو الدقة الوحيدة المتوفرة حاليًا.
preserve_request_order
. إذا تم تعيين هذه العلامة على True
، فسيحاول المكتبة كتابة البيانات التي تم استردادها في الملف الهدف بالترتيب المحدد بواسطة الطلب. على سبيل المثال ، إذا كان الطلب يحدد param=[2t,msl]
ستضمن المكتبة أن يكون الحقل 2t
أولاً في الملف الهدف ، بينما مع param=[msl,2t]
، سيكون الحقل msl
أولاً. يعمل هذا أيضًا عبر كلمات رئيسية مختلفة: ...,levelist=[500,100],param=[z,t],...
سوف ينتج إخراج مختلف إلى ...,param=[z,t],levelist=[500,100],...
إذا تم تعيين العلامة على False
، فسيقوم المكتبة بفرز الطلب لتقليل عدد طلبات HTTP التي تم إجراؤها على الخادم ، مما يؤدي إلى سرعات تنزيل أسرع. الافتراضي False
.
infer_stream_keyword
. تمثل الكلمة الرئيسية stream
نظام التنبؤ ECMWF الذي ينشئ البيانات. يتطلب وضعها بشكل صحيح معرفة كيفية تشغيل ECMWF لعملياتها. إذا تم ضبط هذا المنطق على True
، فستحاول المكتبة استنتاج القيمة الصحيحة للكلمة الرئيسية stream
بناءً على بقية الطلب. الافتراضي True
إذا كان النموذج هو ifs
.
️ ملاحظة: يوصى بعدم تعيين علامةpreserve_request_order
إلىTrue
عند تنزيل عدد كبير من الحقول لأن هذا سيضيف تحميلًا إضافيًا على الخوادم.
Client.retrieve()
تأخذ طريقة Client.retrieve()
الطلب كمدخلات وسوف تسترجع البيانات المقابلة من الخادم واكتبها في ملف هدف المستخدم.
الطلب هو قائمة بأزواج الكلمات الرئيسية/القيمة المستخدمة لتحديد البيانات المطلوبة. من الممكن تحديد قائمة القيم لكلمة رئيسية معينة.
يمكن تحديد الطلب إما كقاموس:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
request = {
"time" : 0 ,
"type" : "fc" ,
"step" : 24 ,
"param" : [ "2t" , "msl" ],
}
client . retrieve ( request , "data.grib2" )
# or:
client . retrieve (
request = request ,
target = "data.grib2" ,
)
أو مباشرة كوسائط إلى طريقة retrieve()
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
)
يتم استخدام الكلمة الرئيسية date
time
لتحديد تاريخ ووقت التشغيل المتوقع (انظر التاريخ والوقت أدناه). إذا لم يتم تحديد date
أو كل من date
time
، فستستفسر المكتبة من الخادم للحصول على أحدث بيانات مطابقة. يتم إرجاع date
time
التنبؤ الذي تم تنزيله بواسطة طريقة retrieve()
.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
)
print ( result . datetime )
قد طباعة 2022-01-23 00:00:00
.
Client.download()
تأخذ طريقة Client.download()
نفس المعلمات مثل طريقة Client.retrieve()
، ولكنها ستقوم بتنزيل ملفات البيانات بأكملها من الخادم ، مع تجاهل الكلمات الرئيسية مثل param
أو levelist
أو number
.
سيقوم المثال أدناه بتنزيل جميع الحقل من آخر خطوة 24 ، متجاهلة الكلمة الرئيسية param
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . download (
param = "msl" ,
type = "fc" ,
step = 24 ,
target = "data.grib2" ,
)
Client.latest()
Client.retrieve()
طريقة Client.latest()
.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
print ( client . latest (
type = "fc" ,
step = 24 ,
param = [ "2t" , "msl" ],
target = "data.grib2" ,
))
قد طباعة 2022-01-23 00:00:00
.
⏰ ملاحظة : تتوفر البيانات ما بين 7 و 9 ساعات بعد تاريخ البدء والوقت المتوقع ، اعتمادًا على نظام التنبؤ والخطوة الزمنية المحددة.
الكلمات الرئيسية المدعومة هي:
type
: نوع البيانات (إلزامي ، افتراضيات إلى fc
).stream
: نظام التنبؤ (اختياري إذا كان لا لبس فيه ، إلزامي خلاف ذلك). انظر infer_stream_keyword
أعلاه.date
: التاريخ الذي يبدأ فيه التوقع.time
: الوقت الذي تبدأ فيه التنبؤ.step
: الخطوة الزمنية المتوقعة في ساعات ، أو fcmonth
، الخطوة الزمنية في أشهر للتنبؤ الموسمي (إلزامي ، افتراضي إلى 0
و 1
، على التوالي).و (كل شيء اختياري ، مع عدم وجود افتراضات):
param
: معلمات الأرصاد الجوية ، مثل الرياح أو الضغط أو الرطوبة.levtype
: حدد بين معلمات المستوى الفردي والمعلمات على مستويات الضغط.levelist
: قائمة مستويات الضغط عندما تكون ذات صلة.number
: قائمة أرقام أعضاء الفرقة عندما تكون ذات صلة.يتم استخدام الكلمات الرئيسية في القائمة الأولى لتحديد الملف الذي يمكن الوصول إليه ، بينما يتم استخدام القائمة الثانية لتحديد أجزاء من الملفات التي يجب تنزيلها بالفعل. يمكن لبعض خوادم HTTP إرجاع أجزاء متعددة من ملف ، بينما يمكن للآخر فقط إرجاع جزء واحد من ملف. في الحالة الأخيرة ، يجوز للمكتبة تنفيذ العديد من طلبات HTTP إلى الخادم. إذا كنت ترغب في تنزيل الملفات الكاملة ، فوفر فقط كلمات رئيسية من القائمة الأولى.
تشير معلمات التاريخ والوقت إلى وقت بدء التنبؤ. يتم التعبير عن كل التاريخ والوقت في UTC.
هناك عدة طرق لتحديد التاريخ والوقت في الطلب.
يمكن تحديد التاريخ باستخدام السلاسل والأرقام و python datetime.datetime
أو datetime.date
كائنات:
...
date = '20220125' ,
time = 12 ,
...
date = '2022-01-25' ,
time = 12 ,
...
date = '2022-01-25 12:00:00' ,
...
date = 20220125 ,
time = 12 ,
...
date = datetime . datetime ( 2022 , 1 , 25 , 12 , 0 , 0 ),
...
date = datetime . date ( 2022 , 1 , 25 ),
time = 12 ,
...
يمكن أيضًا إعطاء التواريخ كرقم أقل من أو يساوي الصفر. في هذه الحالة ، يعادل تاريخ UTC الحالي ناقص العدد المعطى من الأيام:
...
date = 0 , # today
date = - 1 , # yesterday
date = - 2 , # the day before yesterday
...
يمكن إعطاء time
الكلمة الرئيسية كسلسلة أو عدد صحيح ، أو كائن Python datetime.time
. جميع قيم الوقت أدناه متكافئة:
...
time = 12 ,
...
time = 1200 ,
...
time = '12' ,
...
time = '1200' ,
...
time = datetime . time ( 12 ),
...
قائمة القيم الصالحة للوقت |
---|
0 و 6 و 12 و 18 |
إذا لم يتم تحديد time
، يتم استخراج الوقت من التاريخ.
...
date = '2022-01-25 12:00:00' ,
...
يعادل:
...
date = '2022-01-25' ,
time = 12 ,
...
إذا تم تحديد الكلمة الرئيسية time
، فسيتجاوز أي وقت في الطلب.
...
date = '2022-01-25 12:00:00' ,
time = 18 ,
...
يعادل:
...
date = '2022-01-25' ,
time = 18 ,
...
كما هو مذكور من قبل ، إذا لم يتم تحديد date
أو date
time
على حد سواء ، ستقوم المكتبة بالاستعلام عن الخادم للحصول على أحدث بيانات مطابقة. يتم إرجاع date
time
التنبؤ الذي تم تنزيله بواسطة طريقة retrieve()
:
مثال بدون الكلمة الرئيسية date
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
time = 12 ,
type = "fc" ,
param = "2t" ,
step = "24" ,
target = "data.grib2" ,
)
print ( result . datetime )
سيتم طباعة 2022-01-22 12:00:00
إذا تم تشغيله في صباح يوم 2022-01-23.
مثال بدون الكلمات الرئيسية date
time
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
result = client . retrieve (
type = "fc" ,
param = "2t" ,
step = "24" ,
target = "data.grib2" ,
)
print ( result . datetime )
سوف يطبع 2022-01-23 00:00:00
إذا تم تشغيله في صباح يوم 2022-01-23.
يدير ECMWF العديد من أنظمة التنبؤ:
تنتج كل من هذه التنبؤات أيضًا عدة أنواع من المنتجات ، والتي يشار إليها باستخدام stream
الكلمات الرئيسية type
.
قيم صالحة
type
هي:
هيرس:
fc
: توقعات.آخر:
cf
: توقعات التحكم.pf
: توقعات مضطربة.em
: فرقة يعني.es
: فرقة الانحراف المعياري.ep
: الاحتمالات.القيم الصالحة
stream
هي:
oper
: حقول الغلاف الجوي من HRES - 00 UTC و 12 UTC.wave
: حقول موجة المحيط من HRES - 00 UTC و 12 UTC.enfo
: حقول الغلاف الجوي من ENS.waef
: حقول موجة المحيط من ENS.scda
: حقول الغلاف الجوي من HRES - 06 UTC و 18 UTC.scwv
: حقول موجة المحيط من HRES - 06 UTC و 18 UTC.؟ ملاحظة : إذا تم تعيين علامة العميل
infer_stream_keyword
علىTrue
، فستستنتج المكتبة الدفق منtype
time
. في هذه الحالة ، تحتاج فقط إلى تحديدstream=wave
للوصول إلى منتجات موجة المحيط ، ولا توفر قيمةstream
في حالات أخرى.
لتحديد خطوة زمنية ، استخدم الكلمة الرئيسية step
:
...
step = 24 ,
...
step = [ 24 , 48 ],
...
نظام التنبؤ | وقت | قائمة الخطوات الزمنية |
---|---|---|
هيرس | 00 و 12 | 0 إلى 144 من 3 ، 144 إلى 240 في 6 |
آخر | 00 و 12 | 0 إلى 144 من 3 ، 144 إلى 360 في 6 |
هيرس | 06 و 18 | 0 إلى 90 من 3 |
آخر | 06 و 18 | 0 إلى 144 من 3 |
الاحتمالات - أحداث الطقس الفورية | 00 و 12 | 0 إلى 360 في 12 |
الاحتمالات - أحداث الطقس اليومية | 00 و 12 | 0-24 إلى 336-360 بحلول 12 |
؟ ملاحظة : عدم تحديد
step
سيعود جميع الخطوات الزمنية المتاحة.
لتحديد معلمة ، استخدم الكلمة الرئيسية param
:
...
param = "msl" ,
...
param = [ "2t" , "msl" ]
...
لمعلمات مستوى الضغط ، استخدم الكلمة الرئيسية levelist
:
...
param = "t" ,
levelist = 850 ,
...
param = [ "u" , "v" ],
levelist = [ 1000 , 850 , 500 ],
...
؟ ملاحظة : عدم تحديد
levelist
سيعود جميع المستويات المتاحة ، وعدم تحديدparam
سيعود جميع المعلمات المتاحة.
قائمة مستويات الضغط (HPA) |
---|
1000 ، 925 ، 850 ، 700 ، 500 ، 300 ، 250 ، 200 و 50 |
فيما يلي قائمة جميع المعلمات:
الحقول الجوية على مستويات الضغط
المعلمة | وصف | الوحدات |
---|---|---|
د | الاختلاف | S -1 |
GH | ارتفاع جغرافي | GPM |
س | رطوبة محددة | كجم كجم -1 |
ص | الرطوبة النسبية | ٪ |
ر | درجة حرارة | ك |
ش | مكون من الرياح | MS -1 |
الخامس | مكون V من الرياح | MS -1 |
فو | دوامة (قريب) | S -1 |
الحقول الجوية على مستوى واحد
المعلمة | وصف | الوحدات |
---|---|---|
10U | مكون الرياح 10 متر | MS -1 |
10 فولت | مكون الرياح 10 متر V | MS -1 |
2T | درجة حرارة 2 متر | ك |
MSL | يعني ضغط مستوى سطح البحر | السلطة الفلسطينية |
رو | الجريان السطحي | م |
SKT | درجة حرارة الجلد | ك |
sp | ضغط السطح | السلطة الفلسطينية |
شارع | درجة حرارة التربة | ك |
STL1 | مستوى درجة حرارة التربة 1 | ك |
TCWV | عمود إجمالي بخار الماء المتكامل | كجم م -2 |
TP | إجمالي هطول الأمطار | م |
حقول موجات المحيط
المعلمة | وصف | الوحدات |
---|---|---|
MP2 | يعني فترة موجة التعاقد صفر | ق |
MWD | يعني اتجاه الموجة | درجة صحيحة |
MWP | يعني فترة الموجة | ق |
pp1d | فترة الموجة الذروة | ق |
SWH | ارتفاع كبير من موجات الرياح المشتركة وتنتخم | م |
المتوسط والانحراف المعياري - مستويات الضغط
المعلمة | وصف | الوحدات | مستويات |
---|---|---|---|
GH | ارتفاع جغرافي | GPM | 300 ، 500 ، 1000 |
ر | درجة حرارة | ك | 250 ، 500 ، 850 |
WS | سرعة الرياح | MS -1 | 250 ، 850 |
متوسط الفرقة والانحراف المعياري - مستوى واحد
المعلمة | وصف | الوحدات |
---|---|---|
MSL | يعني ضغط مستوى سطح البحر | السلطة الفلسطينية |
أحداث الطقس الفورية - الحقول الجوية - 850 HPa
المعلمة | وصف | الوحدات |
---|---|---|
PTSA_GT_1P5STDEV | احتمال حدوث درجة حرارة الشذوذ الموحد أكبر من 1.5 الانحراف المعياري | ٪ |
PTSA_GT_1STDEV | احتمال حدوث درجة حرارة الشذوذ الموحد أكبر من 1 الانحراف المعياري | ٪ |
PTSA_GT_2STDEV | احتمال حدوث درجة حرارة الشذوذ الموحد أكبر من 2 الانحراف المعياري | ٪ |
PTSA_LT_1P5STDEV | احتمال حدوث درجة حرارة الشذوذ الموحد أقل من -1.5 الانحراف المعياري | ٪ |
PTSA_LT_1STDEV | احتمال حدوث درجة حرارة الشذوذ الموحد أقل من -1 الانحراف المعياري | ٪ |
PTSA_LT_2STDEV | احتمال حدوث درجة حرارة الشذوذ الموحد أقل من -2 الانحراف المعياري | ٪ |
أحداث الطقس اليومية - الحقول الجوية - مستوى واحد
المعلمة | وصف | الوحدات |
---|---|---|
10FGG10 | 10 أمتار عاصفة رياح لا تقل عن 10 م/ث على الأقل | ٪ |
10FGG15 | حملة رياح 10 أمتار لا تقل عن 15 م/ث على الأقل | ٪ |
10fgg25 | حملة رياح 10 أمتار لا تقل عن 25 م/ث على الأقل | ٪ |
TPG1 | إجمالي هطول الأمطار لا يقل عن 1 مم | ٪ |
TPG10 | إجمالي هطول الأمطار لا يقل عن 10 مم | ٪ |
TPG100 | إجمالي هطول الأمطار لا يقل عن 100 ملم | ٪ |
TPG20 | إجمالي هطول الأمطار لا يقل عن 20 ملم | ٪ |
TPG25 | إجمالي هطول الأمطار لا يقل عن 25 ملم | ٪ |
TPG5 | إجمالي هطول الأمطار لا يقل عن 5 مم | ٪ |
TPG50 | إجمالي هطول الأمطار لا يقل عن 50 ملم | ٪ |
أحداث الطقس الفورية - حقول موجات المحيط
المعلمة | وصف | الوحدات |
---|---|---|
SWHG2 | ارتفاع موجة كبير لا يقل عن 2 م | ٪ |
SWHG4 | ارتفاع موجة كبير لا يقل عن 4 أمتار | ٪ |
SWHG6 | ارتفاع موجة كبير لا يقل عن 6 أمتار | ٪ |
SWHG8 | ارتفاع موجة كبير لا يقل عن 8 م | ٪ |
يمكنك تحديد أعضاء فرديين من توقعات الفرقة استخدام number
الكلمة الرئيسية.
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = 1 ,
...
stream = "enfo" ,
step = 24 ,
param = "msl" ,
number = [ 1 , 10 , 20 ],
...
قائمة أرقام المجموعات |
---|
1 إلى 50 |
؟ ملاحظة : عدم تحديد
number
سيعود جميع أعضاء توقعات الفرقة.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "oper" ,
type = "fc" ,
step = 24 ,
param = "2t" ,
target = "data.grib2" ,
)
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "oper" ,
type = "tf" ,
step = 240 ,
target = "data.bufr" ,
)
...
step = 90 ,
...
❗ ملاحظة: تتوفر منتجات مسارات الإعصار الاستوائي فقط عندما تكون هناك أعاصير استوائية أو تنبؤها.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "pf" ,
param = "msl" ,
target = "data.grib2" ,
)
number
: number=1
.number=[num for num in range(1,51,2)]
.type="cf"
. يتم تحديد مسارات الإعصار الاستوائي بواسطة type="tf"
.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "tf" ,
step = 240 ,
target = "data.bufr" ,
)
step=240
مع step=144
. يتم تحديد متوسط الفرقة والانحراف المعياري بواسطة type="em"
:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "em" ,
step = 24 ,
target = "data.grib2" ,
)
و type="es"
، على التوالي:
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "es" ,
step = 24 ,
target = "data.grib2" ,
)
يتم تحديد منتجات احتمال الفرقة بواسطة type="ep"
. منتجات الاحتمالات متوفرة فقط time=00
time=12
.
يتوفر منتجان مختلفان.
تتوفر احتمال حدوث شذوذ موحدة لدرجة الحرارة عند مستوى ضغط ثابت قدره 850HPA عند خطوات تنبؤ 12 ساعة.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "ep" ,
step = [ i for i in range ( 12 , 361 , 12 )],
levelist = 850 ,
param = [
"ptsa_gt_1stdev" ,
"ptsa_gt_1p5stdev" ,
"ptsa_gt_2stdev" ,
"ptsa_lt_1stdev" ,
"ptsa_lt_1p5stdev" ,
"ptsa_lt_2stdev" ,
],
target = "data.grib2" ,
)
تتوفر احتمالات إجمالي هطول الأمطار والرياح التي تتجاوز العتبات المحددة في فترة 24 ساعة لنطاقات الخطوة 0-24 إلى 336-360 في 12. يتم تحديد هذه في طلب الاسترجاع باستخدام ، على سبيل المثال: step=["0-24", "12-36", "24-48"]
.
from ecmwf . opendata import Client
client = Client ( source = "ecmwf" )
steps = [ f" { 12 * i } - { 12 * i + 24 } " for i in range ( 29 )]
client . retrieve (
time = 0 ,
stream = "enfo" ,
type = "ep" ,
step = steps ,
param = [ "tpg1" , "tpg5" , "10fgg10" ],
target = "data.grib2" ,
)
عن طريق تنزيل البيانات من مجموعة بيانات البيانات المفتوحة ECMWF ، فإنك توافق على شروطها: Curnitive 4.0 International (CC by 4.0). إذا كنت لا توافق على مثل هذه الشروط ، فلا تقم بتنزيل البيانات. تفضل بزيارة هذه الصفحة لمزيد من المعلومات.
Apache License 2.0 في تطبيق هذا الترخيص ، لا تتنازل ECMWF عن امتيازات وحصانات الممنوحة لها بحكم وضعها كمنظمة حكومية دولية ولا تخضع لأي ولاية قضائية.