أدوات تحويل البيانات
الأهداف التعليمية
بنهاية هذه الجلسة العملية، ستكون قادرًا على:
- الوصول إلى أدوات ecCodes من سطر الأوامر داخل حاوية
wis2box-api
- استخدام أداة
synop2bufr
لتحويل تقارير FM-12 SYNOP إلى BUFR من سطر الأوامر - تشغيل تحويل
synop2bufr
عبر تطبيقwis2box-webapp
- استخدام أداة
csv2bufr
لتحويل بيانات CSV إلى BUFR من سطر الأوامر
المقدمة
يجب أن تلتزم البيانات المنشورة على WIS2 بالمتطلبات والمعايير التي تحددها مجتمعات الخبراء في مجالات نظم الأرض المختلفة. لتسهيل عملية نشر البيانات للملاحظات السطحية البرية، يوفر wis2box
أدوات لتحويل البيانات إلى تنسيق BUFR. تتوفر هذه الأدوات عبر حاوية wis2box-api
ويمكن استخدامها من سطر الأوامر لاختبار عملية تحويل البيانات.
التحويلات الرئيسية التي يدعمها wis2box
حاليًا هي تحويل تقارير FM-12 SYNOP إلى BUFR وتحويل بيانات CSV إلى BUFR. يتم دعم بيانات FM-12 لأنها لا تزال تُستخدم على نطاق واسع ويتم تبادلها داخل مجتمع WMO، بينما يتم دعم بيانات CSV للسماح بربط البيانات التي تنتجها محطات الطقس الآلية بتنسيق BUFR.
حول FM-12 SYNOP
تُرسل تقارير الطقس السطحي من المحطات البرية تقليديًا كل ساعة أو في الساعات الرئيسية (00، 06، 12، و18 بالتوقيت العالمي) والساعات الوسيطة (03، 09، 15، 21 بالتوقيت العالمي). قبل الانتقال إلى BUFR، كانت هذه التقارير تُرمز باستخدام صيغة النص العادي FM-12 SYNOP. على الرغم من أن الانتقال إلى BUFR كان من المقرر أن يكتمل بحلول عام 2012، إلا أن عددًا كبيرًا من التقارير لا يزال يتم تبادلها بتنسيق FM-12 SYNOP القديم. يمكن العثور على مزيد من المعلومات حول تنسيق FM-12 SYNOP في دليل WMO للأكواد، المجلد I.1 (WMO-No. 306، المجلد I.1).
حول ecCodes
مكتبة ecCodes هي مجموعة من المكتبات البرمجية والأدوات المصممة لفك وترميز البيانات الأرصادية بتنسيقات GRIB وBUFR. تم تطويرها بواسطة المركز الأوروبي للتنبؤات الجوية متوسطة المدى (ECMWF). لمزيد من المعلومات، راجع وثائق ecCodes.
يتضمن برنامج wis2box
مكتبة ecCodes في الصورة الأساسية لحاوية wis2box-api
. يتيح ذلك للمستخدمين الوصول إلى أدوات سطر الأوامر والمكتبات من داخل الحاوية. تُستخدم مكتبة ecCodes داخل حزمة wis2box-stack
لفك وترميز رسائل BUFR.
حول csv2bufr وsynop2bufr
بالإضافة إلى ecCodes، يستخدم wis2box
الوحدات البرمجية التالية المكتوبة بلغة Python والتي تعمل مع ecCodes لتحويل البيانات إلى تنسيق BUFR:
- synop2bufr: لدعم تنسيق FM-12 SYNOP القديم الذي يُستخدم تقليديًا من قبل المراقبين اليدويين. تعتمد وحدة synop2bufr على بيانات وصفية إضافية للمحطات لترميز معلمات إضافية في ملف BUFR. راجع مستودع synop2bufr على GitHub
- csv2bufr: لتمكين تحويل بيانات CSV المستخرجة من محطات الطقس الآلية إلى تنسيق BUFR. تُستخدم وحدة csv2bufr لتحويل بيانات CSV إلى تنسيق BUFR باستخدام قالب ترسيم يحدد كيفية ربط بيانات CSV بتنسيق BUFR. راجع مستودع csv2bufr على GitHub
يمكن استخدام هذه الوحدات بشكل مستقل أو كجزء من حزمة wis2box-stack
.
التحضير
المتطلبات المسبقة
- تأكد من أن
wis2box
الخاص بك قد تم تكوينه وتشغيله - تأكد من أنك قد أعددت مجموعة بيانات وقمت بتكوين محطة واحدة على الأقل في
wis2box
- قم بالاتصال بوسيط MQTT الخاص بمثيل
wis2box
الخاص بك باستخدامMQTT Explorer
- افتح تطبيق
wis2box-webapp
(http://YOUR-HOST/wis2box-webapp
) وتأكد من تسجيل الدخول - افتح لوحة معلومات Grafana لمثيلك عن طريق الانتقال إلى
http://YOUR-HOST:3000
لاستخدام أدوات BUFR من سطر الأوامر، ستحتاج إلى تسجيل الدخول إلى حاوية wis2box-api
. ما لم يُذكر خلاف ذلك، يجب تشغيل جميع الأوامر على هذه الحاوية. ستحتاج أيضًا إلى فتح MQTT Explorer
والاتصال بالوسيط الخاص بك.
أولاً، قم بالاتصال بجهاز الطالب الافتراضي الخاص بك عبر عميل SSH الخاص بك وانسخ مواد التمرين إلى حاوية wis2box-api
:
docker cp ~/exercise-materials/data-conversion-exercises wis2box-api:/root
ثم قم بتسجيل الدخول إلى حاوية wis2box-api
وانتقل إلى الدليل حيث توجد مواد التمرين:
cd ~/wis2box
python3 wis2box-ctl.py login wis2box-api
cd /root/data-conversion-exercises
تأكد من أن الأدوات متوفرة، بدءًا من ecCodes:
bufr_dump -V
يجب أن تحصل على الاستجابة التالية:
ecCodes Version 2.36.0
بعد ذلك، تحقق من إصدار synop2bufr:
synop2bufr --version
يجب أن تحصل على الاستجابة التالية:
synop2bufr, version 0.7.0
ثم تحقق من csv2bufr:
csv2bufr --version
يجب أن تحصل على الاستجابة التالية:
csv2bufr, version 0.8.6
أدوات ecCodes من سطر الأوامر
تتضمن مكتبة ecCodes الموجودة في حاوية wis2box-api
عددًا من أدوات سطر الأوامر للعمل مع ملفات BUFR.
توضح التمارين التالية كيفية استخدام bufr_ls
وbufr_dump
لفحص محتوى ملف BUFR.
bufr_ls
في هذا التمرين الأول، ستستخدم أمر bufr_ls
لفحص رؤوس ملف BUFR وتحديد نوع محتوى الملف.
استخدم الأمر التالي لتشغيل bufr_ls
على الملف bufr-cli-ex1.bufr4
:
bufr_ls bufr-cli-ex1.bufr4
يجب أن ترى الإخراج التالي:
bufr-cli-ex1.bufr4
centre masterTablesVersionNumber localTablesVersionNumber typicalDate typicalTime numberOfSubsets
cnmc 29 0 20231002 000000 1
1 of 1 messages in bufr-cli-ex1.bufr4
1 of 1 total messages in 1 file
يمكن تمرير خيارات مختلفة إلى bufr_ls
لتغيير كل من التنسيق وحقول الرؤوس المطبوعة.
Question
ما هو الأمر الذي يمكن استخدامه لعرض الإخراج السابق بتنسيق JSON؟
يمكنك تشغيل الأمر bufr_ls
مع العلمة -h
لرؤية الخيارات المتاحة.
اضغط للكشف عن الإجابة
يمكنك تغيير تنسيق الإخراج إلى JSON باستخدام العلمة -j
، أي:
bufr_ls -j bufr-cli-ex1.bufr4
عند تشغيله، يجب أن يعطيك الإخراج التالي:
{ "messages" : [
{
"centre": "cnmc",
"masterTablesVersionNumber": 29,
"localTablesVersionNumber": 0,
"typicalDate": 20231002,
"typicalTime": "000000",
"numberOfSubsets": 1
}
]}
الإخراج المطبوع يمثل قيم بعض مفاتيح الرؤوس في ملف BUFR.
بمفرده، لا يوفر هذا الإخراج معلومات مفيدة جدًا، حيث يقدم معلومات محدودة فقط حول محتوى الملف.
عند فحص ملف BUFR، غالبًا ما نرغب في تحديد نوع البيانات الموجودة في الملف والتاريخ/الوقت النموذجي للبيانات في الملف. يمكن سرد هذه المعلومات باستخدام العلمة -p
لتحديد الرؤوس التي سيتم طباعتها. يمكن تضمين رؤوس متعددة باستخدام قائمة مفصولة بفواصل.
يمكنك استخدام الأمر التالي لسرد فئة البيانات، الفئة الفرعية، التاريخ النموذجي، والوقت النموذجي:
bufr_ls -p dataCategory,internationalDataSubCategory,typicalDate,typicalTime -j bufr-cli-ex1.bufr4
Question
قم بتنفيذ الأمر السابق وفسر الإخراج باستخدام جدول الأكواد المشترك C-13 لتحديد فئة البيانات والفئة الفرعية.
ما هو نوع البيانات (فئة البيانات والفئة الفرعية) الموجودة في الملف؟ وما هو التاريخ والوقت النموذجي للبيانات؟
اضغط للكشف عن الإجابة
{ "messages" : [
{
"dataCategory": 2,
"internationalDataSubCategory": 4,
"typicalDate": 20231002,
"typicalTime": "000000"
}
]}
من هذا، نرى أن:
- فئة البيانات هي 2، مما يشير إلى بيانات "الرصدات الرأسية (غير الساتلية)".
- الفئة الفرعية الدولية هي 4، مما يشير إلى بيانات "تقارير درجة الحرارة/الرطوبة/الرياح على المستويات العليا من محطات أرضية ثابتة (TEMP)".
- التاريخ والوقت النموذجيان هما 2023-10-02 و00:00:00z، على التوالي.
bufr_dump
يمكن استخدام الأمر bufr_dump
لعرض وفحص محتويات ملف BUFR، بما في ذلك البيانات نفسها.
حاول تشغيل الأمر bufr_dump
على ملف المثال الثاني bufr-cli-ex2.bufr4
:
bufr_dump bufr-cli-ex2.bufr4
ينتج عن ذلك JSON قد يكون من الصعب تحليله، جرب استخدام الخيار -p
لإخراج البيانات كنص عادي (بتنسيق key=value):
bufr_dump -p bufr-cli-ex2.bufr4
سترى عددًا كبيرًا من المفاتيح كإخراج، العديد منها مفقود. هذا أمر شائع مع البيانات الواقعية حيث لا يتم تعبئة جميع مفاتيح eccodes بالبيانات المبلغ عنها.
يمكنك استخدام الأمر grep
لتصفية الإخراج وعرض المفاتيح غير المفقودة فقط. على سبيل المثال، لعرض جميع المفاتيح غير المفقودة، يمكنك استخدام الأمر التالي:
bufr_dump -p bufr-cli-ex2.bufr4 | grep -v MISSING
Question
ما هو الضغط المعدل إلى مستوى سطح البحر الذي تم الإبلاغ عنه في ملف BUFR bufr-cli-ex2.bufr4
؟
Click to reveal answer
باستخدام الأمر التالي:
bufr_dump -p bufr-cli-ex2.bufr4 | grep -i 'pressureReducedToMeanSeaLevel'
سترى الإخراج التالي:
pressureReducedToMeanSeaLevel=105590
يشير هذا إلى أن الضغط المعدل إلى مستوى سطح البحر هو 105590 باسكال (1055.90 هكتوباسكال).
Question
ما هو معرف محطة WIGOS للمحطة التي أبلغت عن البيانات في ملف BUFR bufr-cli-ex2.bufr4
؟
Click to reveal answer
باستخدام الأمر التالي:
bufr_dump -p bufr-cli-ex2.bufr4 | grep -i 'wigos'
سترى الإخراج التالي:
wigosIdentifierSeries=0
wigosIssuerOfIdentifier=20000
wigosIssueNumber=0
wigosLocalIdentifierCharacter="99100"
يشير هذا إلى أن معرف محطة WIGOS هو 0-20000-0-99100
.
تحويل synop2bufr
بعد ذلك، دعونا نلقي نظرة على كيفية تحويل بيانات FM-12 SYNOP إلى تنسيق BUFR باستخدام الوحدة synop2bufr
. تُستخدم الوحدة synop2bufr
لتحويل بيانات FM-12 SYNOP إلى تنسيق BUFR. يتم تثبيت الوحدة في حاوية wis2box-api ويمكن استخدامها من سطر الأوامر كما يلي:
synop2bufr data transform \
--metadata <station-metadata.csv> \
--output-dir <output-directory-path> \
--year <year-of-observation> \
--month <month-of-observation> \
<input-fm12.txt>
يُستخدم الوسيط --metadata
لتحديد ملف بيانات المحطة الوصفية، الذي يوفر معلومات إضافية ليتم ترميزها في ملف BUFR. يُستخدم الوسيط --output-dir
لتحديد الدليل الذي سيتم كتابة ملفات BUFR المحولة فيه. تُستخدم الوسيطتان --year
و--month
لتحديد سنة وشهر الملاحظة.
تُستخدم وحدة synop2bufr
أيضًا في wis2box-webapp لتحويل بيانات FM-12 SYNOP إلى تنسيق BUFR باستخدام نموذج إدخال مستند إلى الويب.
ستوضح التمارين التالية كيفية عمل وحدة synop2bufr
وكيفية استخدامها لتحويل بيانات FM-12 SYNOP إلى تنسيق BUFR.
مراجعة رسالة SYNOP النموذجية
افحص ملف رسالة SYNOP النموذجية لهذا التمرين synop_message.txt
:
cd /root/data-conversion-exercises
more synop_message.txt
Question
كم عدد تقارير SYNOP الموجودة في هذا الملف؟
Click to reveal answer
يظهر الإخراج التالي:
AAXX 21121
15015 02999 02501 10103 21090 39765 42952 57020 60001=
15020 02997 23104 10130 21075 30177 40377 58020 60001 81041=
15090 02997 53102 10139 21075 30271 40364 58031 60001 82046=
هناك 3 تقارير SYNOP في الملف، تتوافق مع 3 محطات مختلفة (تم تحديدها بواسطة معرفات المحطات التقليدية المكونة من 5 أرقام: 15015، 15020، و15090). لاحظ أن نهاية كل تقرير يتم تمييزها بالحرف =
.
مراجعة قائمة المحطات
يتطلب الوسيط --metadata
ملف CSV باستخدام تنسيق محدد مسبقًا، يتم توفير مثال عملي في الملف station_list.csv
:
استخدم الأمر التالي لفحص محتويات ملف station_list.csv
:
more station_list.csv
Question
كم عدد المحطات المدرجة في قائمة المحطات؟ ما هي معرفات محطات WIGOS لهذه المحطات؟
Click to reveal answer
يظهر الإخراج التالي:
station_name,wigos_station_identifier,traditional_station_identifier,facility_type,latitude,longitude,elevation,barometer_height,territory_name,wmo_region
OCNA SUGATAG,0-20000-0-15015,15015,landFixed,47.7770616258,23.9404602638,503.0,504.0,ROU,europe
BOTOSANI,0-20000-0-15020,15020,landFixed,47.7356532437,26.6455501701,161.0,162.1,ROU,europe
يتوافق هذا مع بيانات المحطات الوصفية لمحطتين: معرفات محطات WIGOS هي 0-20000-0-15015
و0-20000-0-15020
.
تحويل SYNOP إلى BUFR
بعد ذلك، استخدم الأمر التالي لتحويل رسالة FM-12 SYNOP إلى تنسيق BUFR:
synop2bufr data transform --metadata station_list.csv --output-dir ./ --year 2024 --month 09 synop_message.txt
Question
كم عدد ملفات BUFR التي تم إنشاؤها؟ ماذا يعني تحذير الرسالة في الإخراج؟
Click to reveal answer
يظهر الإخراج التالي:
[WARNING] Station 15090 not found in station file
إذا قمت بفحص محتويات الدليل الخاص بك باستخدام الأمر ls -lh
، سترى أنه تم إنشاء ملفي BUFR جديدين: WIGOS_0-20000-0-15015_20240921T120000.bufr4
وWIGOS_0-20000-0-15020_20240921T120000.bufr4
.
تشير رسالة التحذير إلى أن المحطة ذات المعرف التقليدي 15090
لم يتم العثور عليها في ملف قائمة المحطات station_list.csv
. وهذا يعني أن تقرير SYNOP لهذه المحطة لم يتم تحويله إلى تنسيق BUFR.
Question
تحقق من محتوى ملف BUFR WIGOS_0-20000-0-15015_20240921T120000.bufr4
باستخدام الأمر bufr_dump
.
هل يمكنك التحقق من أن المعلومات المقدمة في ملف station_list.csv
موجودة في ملف BUFR؟
Click to reveal answer
يمكنك استخدام الأمر التالي للتحقق من محتوى ملف BUFR:
bufr_dump -p WIGOS_0-20000-0-15015_20240921T120000.bufr4 | grep -v MISSING
ستلاحظ الإخراج التالي:
wigosIdentifierSeries=0
wigosIssuerOfIdentifier=20000
wigosIssueNumber=0
wigosLocalIdentifierCharacter="15015"
blockNumber=15
stationNumber=15
stationOrSiteName="OCNA SUGATAG"
stationType=1
year=2024
month=9
day=21
hour=12
minute=0
latitude=47.7771
longitude=23.9405
heightOfStationGroundAboveMeanSeaLevel=503
heightOfBarometerAboveMeanSeaLevel=504
...
لاحظ أن هذا يتضمن البيانات المقدمة في ملف station_list.csv
.
نموذج SYNOP في wis2box-webapp
يُستخدم أيضًا وحدة synop2bufr
في wis2box-webapp
لتحويل بيانات FM-12 SYNOP إلى تنسيق BUFR باستخدام نموذج إدخال عبر الويب.
لاختبار ذلك، انتقل إلى http://YOUR-HOST/wis2box-webapp
وقم بتسجيل الدخول.
اختر SYNOP Form
من القائمة على اليسار، ثم انسخ والصق محتويات ملف synop_message.txt
:
AAXX 21121
15015 02999 02501 10103 21090 39765 42952 57020 60001=
15020 02997 23104 10130 21075 30177 40377 58020 60001 81041=
15090 02997 53102 10139 21075 30271 40364 58031 60001 82046=
في منطقة النص SYNOP message
:
Question
هل يمكنك إرسال النموذج؟ ما هي النتيجة؟
اضغط للكشف عن الإجابة
تحتاج إلى اختيار مجموعة بيانات وتوفير الرمز المميز لـ "processes/wis2box" الذي أنشأته في التمرين السابق لإرسال النموذج.
إذا قمت بتوفير رمز مميز غير صالح، سترى:
- النتيجة: غير مصرح بها، يرجى تقديم رمز "processes/wis2box" صالح.
إذا قمت بتوفير رمز مميز صالح، سترى "WARNINGS: 3". اضغط على "WARNINGS" لفتح القائمة المنسدلة التي ستعرض:
- المحطة 15015 غير موجودة في ملف المحطات.
- المحطة 15020 غير موجودة في ملف المحطات.
- المحطة 15090 غير موجودة في ملف المحطات.
لتحويل هذه البيانات إلى تنسيق BUFR، ستحتاج إلى تكوين المحطات المقابلة في wis2box
والتأكد من أن المحطات مرتبطة بالموضوع الخاص بمجموعة البيانات الخاصة بك.
Note
في التمرين الخاص بـ ingesting-data-for-publication، قمت بإدخال الملف "synop_202412030900.txt" وتم تحويله إلى تنسيق BUFR بواسطة وحدة synop2bufr
.
في سير العمل الآلي في wis2box
، يتم استخراج السنة والشهر تلقائيًا من اسم الملف واستخدامهما لملء الوسيطتين --year
و--month
المطلوبتين بواسطة synop2bufr
، بينما يتم استخراج بيانات المحطة تلقائيًا من تكوين المحطة في wis2box
.
تحويل csv2bufr
Note
تأكد من أنك لا تزال مسجلاً الدخول إلى حاوية wis2box-api
وفي الدليل /root/data-conversion-exercises
. إذا خرجت من الحاوية في التمرين السابق، يمكنك تسجيل الدخول مرة أخرى كما يلي:
cd ~/wis2box
python3 wis2box-ctl.py login wis2box-api
cd /root/data-conversion-exercises
الآن دعونا نلقي نظرة على كيفية تحويل بيانات CSV إلى تنسيق BUFR باستخدام وحدة csv2bufr
. الوحدة مثبتة في حاوية wis2box-api
ويمكن استخدامها من سطر الأوامر كما يلي:
csv2bufr data transform \
--bufr-template <bufr-mapping-template> \
<input-csv-file>
يُستخدم الوسيط --bufr-template
لتحديد ملف قالب تعيين BUFR، الذي يوفر التعيين بين بيانات CSV المدخلة وبيانات BUFR الناتجة، ويتم تحديده في ملف JSON. يتم تثبيت قوالب التعيين الافتراضية في الدليل /opt/csv2bufr/templates
في حاوية wis2box-api
.
مراجعة ملف CSV المثال
راجع محتوى ملف CSV المثال aws-example.csv
:
more aws-example.csv
Question
كم عدد الصفوف الموجودة في ملف CSV؟ ما هو معرف محطة WIGOS للمحطات التي تقدم تقارير في ملف CSV؟
اضغط للكشف عن الإجابة
يعرض الإخراج ما يلي:
wsi_series,wsi_issuer,wsi_issue_number,wsi_local,wmo_block_number,wmo_station_number,station_type,year,month,day,hour,minute,latitude,longitude,station_height_above_msl,barometer_height_above_msl,station_pressure,msl_pressure,geopotential_height,thermometer_height,air_temperature,dewpoint_temperature,relative_humidity,method_of_ground_state_measurement,ground_state,method_of_snow_depth_measurement,snow_depth,precipitation_intensity,anemometer_height,time_period_of_wind,wind_direction,wind_speed,maximum_wind_gust_direction_10_minutes,maximum_wind_gust_speed_10_minutes,maximum_wind_gust_direction_1_hour,maximum_wind_gust_speed_1_hour,maximum_wind_gust_direction_3_hours,maximum_wind_gust_speed_3_hours,rain_sensor_height,total_precipitation_1_hour,total_precipitation_3_hours,total_precipitation_6_hours,total_precipitation_12_hours,total_precipitation_24_hours
0,20000,0,60355,60,355,1,2024,3,31,1,0,47.77706163,23.94046026,503,504.43,100940,101040,1448,5,298.15,294.55,80,3,1,1,0,0.004,10,-10,30,3,30,5,40,9,20,11,2,4.7,5.3,7.9,9.5,11.4
0,20000,0,60355,60,355,1,2024,3,31,2,0,47.77706163,23.94046026,503,504.43,100940,101040,1448,5,25.,294.55,80,3,1,1,0,0.004,10,-10,30,3,30,5,40,9,20,11,2,4.7,5.3,7.9,9.5,11.4
0,20000,0,60355,60,355,1,2024,3,31,3,0,47.77706163,23.94046026,503,504.43,100940,101040,1448,5,298.15,294.55,80,3,1,1,0,0.004,10,-10,30,3,30,5,40,9,20,11,2,4.7,5.3,7.9,9.5,11.4
يحتوي الصف الأول من ملف CSV على رؤوس الأعمدة، التي تُستخدم لتحديد البيانات في كل عمود.
بعد صف الرؤوس، هناك 3 صفوف من البيانات، تمثل 3 ملاحظات جوية من نفس المحطة بمعرف محطة WIGOS 0-20000-0-60355
عند ثلاث طوابع زمنية مختلفة: 2024-03-31 01:00:00
، 2024-03-31 02:00:00
، و2024-03-31 03:00:00
.
مراجعة aws-template
تتضمن wis2box-api
مجموعة من قوالب تعيين BUFR المعرفة مسبقًا والمثبتة في الدليل /opt/csv2bufr/templates
.
تحقق من محتوى الدليل /opt/csv2bufr/templates
:
ls /opt/csv2bufr/templates
يجب أن ترى الإخراج التالي:
CampbellAfrica-v1-template.json aws-template.json daycli-template.json
دعونا نتحقق من محتوى ملف aws-template.json
:
cat /opt/csv2bufr/templates/aws-template.json
يعرض هذا ملف JSON كبيرًا، يوفر التعيين لـ 43 عمودًا في CSV.
Question
ما هو عمود CSV الذي يتم تعيينه إلى المفتاح airTemperature
في eccodes؟ ما هي القيم الدنيا والقصوى الصالحة لهذا المفتاح؟
اضغط للكشف عن الإجابة
باستخدام الأمر التالي لتصفية الإخراج:
cat /opt/csv2bufr/templates/aws-template.json | grep -i airTemperature
{"eccodes_key": "#1#airTemperature", "value": "data:air_temperature", "valid_min": "const:193.15", "valid_max": "const:333.15"},
القيمة التي سيتم ترميزها للمفتاح airTemperature
في eccodes سيتم أخذها من البيانات في عمود CSV: air_temperature.
القيم الدنيا والقصوى لهذا المفتاح هي 193.15
و333.15
على التوالي.
Question
ما هو عمود CSV الذي يتم تعيينه إلى المفتاح internationalDataSubCategory
في eccodes؟ ما هي قيمة هذا المفتاح؟
اضغط للكشف عن الإجابة
باستخدام الأمر التالي لتصفية الإخراج:
cat /opt/csv2bufr/templates/aws-template.json | grep -i internationalDataSubCategory
{"eccodes_key": "internationalDataSubCategory", "value": "const:2"},
لا يوجد عمود CSV مرتبط بالمفتاح internationalDataSubCategory
في eccodes، وبدلاً من ذلك يتم استخدام القيمة الثابتة 2 وسيتم ترميزها في جميع ملفات BUFR التي يتم إنتاجها باستخدام قالب التعيين هذا.
تحويل CSV إلى BUFR
دعونا نحاول تحويل الملف إلى صيغة BUFR باستخدام الأمر csv2bufr
:
cd /root/data-conversion-exercises
csv2bufr data transform --bufr-template aws-template ./aws-example.csv
Question
كم عدد ملفات BUFR التي تم إنشاؤها؟
اضغط للكشف عن الإجابة
تُظهر المخرجات ما يلي:
CLI: ... Transforming ./aws-example.csv to BUFR ...
CLI: ... Processing subsets:
CLI: ..... 384 bytes written to ./WIGOS_0-20000-0-60355_20240331T010000.bufr4
#1#airTemperature: Value (25.0) out of valid range (193.15 - 333.15).; Element set to missing
CLI: ..... 384 bytes written to ./WIGOS_0-20000-0-60355_20240331T020000.bufr4
CLI: ..... 384 bytes written to ./WIGOS_0-20000-0-60355_20240331T030000.bufr4
CLI: End of processing, exiting.
تشير المخرجات إلى أنه تم إنشاء 3 ملفات BUFR: WIGOS_0-20000-0-60355_20240331T010000.bufr4
، WIGOS_0-20000-0-60355_20240331T020000.bufr4
، وWIGOS_0-20000-0-60355_20240331T030000.bufr4
.
للتحقق من محتوى ملفات BUFR مع تجاهل القيم المفقودة، يمكنك استخدام الأمر التالي:
bufr_dump -p WIGOS_0-20000-0-60355_20240331T010000.bufr4 | grep -v MISSING
Question
ما هي قيمة المفتاح airTemperature
في ملف BUFR WIGOS_0-20000-0-60355_20240331T010000.bufr4
؟ وماذا عن ملف BUFR WIGOS_0-20000-0-60355_20240331T020000.bufr4
؟
اضغط للكشف عن الإجابة
لتصفية المخرجات، يمكنك استخدام الأمر التالي:
bufr_dump -p WIGOS_0-20000-0-60355_20240331T010000.bufr4 | grep -v MISSING | grep airTemperature
#1#airTemperature=298.15
بينما بالنسبة للملف الثاني:
bufr_dump -p WIGOS_0-20000-0-60355_20240331T020000.bufr4 | grep -v MISSING | grep airTemperature
لن تحصل على أي نتيجة، مما يشير إلى أن القيمة للمفتاح airTemperature
مفقودة في ملف BUFR WIGOS_0-20000-0-60355_20240331T020000.bufr4
. رفض csv2bufr
ترميز القيمة 25.0
من بيانات CSV لأنها تقع خارج النطاق الصالح بين 193.15
و333.15
كما هو محدد في قالب التعيين.
لاحظ أن تحويل CSV إلى BUFR باستخدام أحد قوالب التعيين المحددة مسبقًا له قيود:
- يجب أن يكون ملف CSV بالتنسيق المحدد في قالب التعيين، أي يجب أن تتطابق أسماء أعمدة CSV مع الأسماء المحددة في قالب التعيين.
- يمكنك فقط ترميز المفاتيح المحددة في قالب التعيين.
- عمليات التحقق من الجودة تقتصر على الفحوصات المحددة في قالب التعيين.
لمزيد من المعلومات حول كيفية إنشاء واستخدام قوالب BUFR مخصصة، راجع التمرين العملي التالي csv2bufr-templates.
الخلاصة
تهانينا!
في هذه الجلسة العملية، تعلمت:
- كيفية الوصول إلى أدوات سطر الأوامر ecCodes داخل حاوية wis2box-api
- كيفية استخدام
synop2bufr
لتحويل تقارير FM-12 SYNOP إلى BUFR من سطر الأوامر - كيفية استخدام نموذج SYNOP في wis2box-webapp لتحويل تقارير FM-12 SYNOP إلى BUFR
- كيفية استخدام
csv2bufr
لتحويل بيانات CSV إلى BUFR من سطر الأوامر