Vairāk

Liela GRIB2 failu komplekta konvertēšana izklājlapas formātā

Liela GRIB2 failu komplekta konvertēšana izklājlapas formātā


Man ir liels komplekts.pgrbf.grb2failus, kas lejupielādēti no Klimata prognozēšanas centra, un man ir jāveic statistikas analīze, salīdzinot tos ar datiem, kas tika iegūti lokāli .csv formātā. Es neesmu ļoti labi iepazinies ar GRIB2 formātu, tāpēc neesmu īsti pārliecināts, kā vislabāk rīkoties.

Mana MPK datu kopa sastāvēja no ~ 250 atsevišķiem failiem, tāpēc es mēģinu kaut ko skriptēt, lai tos visus viegli apstrādātu. (Mani .csv dati tika ņemti katru stundu, un MPK dati ir ik pēc sešām stundām, tāpēc man galu galā būs jānoņem lielākā daļa manu datu, jāsalīdzina ar attiecīgajiem MPK datiem un pēc tam jāveic analīzes. MPK datu apkopošana vienā tāpēc liels izvades fails būtu lielisks.) Es mēģināju izmantot wgrib2 zemāk redzamajā kodā, taču tas katram failam atgriež "FATAL ERROR: 40. iepakojuma veids netiek atbalstīts" (skripts ir uzrakstīts pareizi; darbojas manuāliwgrib2 -csv izvadeatgriež to pašu kļūdu).

#!/bin/bash FILES = GRIBFiles/* CNT = 0 f failā $ FILES do filename = "$ {f ##*/}" wgrib2 GRIBFiles/"$ filename" -csv GRIBFiles/CSVFiles/$ CNT.csv let " CNT ++ "darīts

Es arī izmēģinu pygribu, bet teikšu godīgi: es īsti nesaprotu, kas notiek dokumentācijā, tāpēc nezinu, kā iegūt datus lietojamākā formātā.

Statistiskās analīzes veikšanai es izmantošu dažādus Python moduļus, tāpēc, kamēr datu konvertēšanas formāts ir vispārējai lietošanai (Excel, CSV utt.), Es varēšu ar tiem manipulēt statistikas vajadzībām.


"FATAL ERROR: 40. iepakojuma veids netiek atbalstīts"

wgrib2 tika apkopots bez atbalsta jpeg2000 saspiešanai (40. iepakojums). Jūs mēģinājāt nolasīt grib ierakstu, kas tika saspiests ar jpeg2000.


Ir ziņots par kļūdu Fedora 20, un tiek pārbaudīts atjauninājums. Fedora versija tika nejauši apkopota bez jpeg2000 atbalsta.

Ja OP izmanto Fedora versiju, OP var pazemināt versiju, kā ieteikts iepriekšējā plakātā, vai izveidot wgrib2.

http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/compile_questions.html


Šis izcilais piemērs, izmantojot utilītu WGrib, parādīs, kā to izdarīt. (Skatīt pirmo atbildi).

Tas arī sniedz informāciju par to, kā izmantot GDal, lai pārvērstu arī Tiff formātā.


Es arī saskāros ar tādu pašu kļūdu. Esmu pārliecināts, ka komandrinda ir pareiza, jo es to izmantoju pirms dažām nedēļām, un tā strādāja. Es domāju, ka jaunajam laidienam (vismaz Fedora20 x86_64) ir dažas problēmas. Es novērsu problēmu, lejupielādējot vecāku versiju "1.9.8-2.fc20.x86_64.rpm" no šīs saites: http://www.rpmfind.net/linux/rpm2html/search.php?query=wgrib2


GRIB un NetCDF pārvēršana manā datu bāzē

Esmu lejupielādējis "Augstas izšķirtspējas sākotnējo apstākļu" klimata prognozes datus par vienu dienu, tas bija paplašinājumā .tar.gz, tāpēc es to ieguvu savā vietējā direktorijā un saņemu failus, piemēram, pievienotajā attēlā. Es domāju, ka faili bez paplašinājuma ir GRIB dati (jo pirmais vārds tajos ir "GRIB"). Tāpēc es vēlos iegūt datus no lielajiem failiem (GRIB un NetCDF formāti, kas satur tādus klimata datus kā temperatūra un amp spiediens režģī), bet tie ir bināri. Vai varat ieteikt kādu vienkāršu veidu, kā iegūt datus no šiem failiem? Es nevaru iegūt nekādu informāciju par viņu datu kopu apstrādi viņu vietnē.

Pārvērst šos failus uz .csv būtu jauki, bet es nevaru atrast programmu GRIB failu konvertēšanai.


GRIB2 laika apstākļu datu apstrāde saules paneļu lietojumprogrammām (Shapefile)

Sarakstījis
Eliots Voblers
Tehnisko risinājumu inženieris

Šī apmācība aptver, kā strādāt ar Spire Weather globālajiem prognožu datiem GRIB2 formātā, izmantojot Python.

Šī apmācība izmanto Shapefile ievadi.

Pārskats

Šī apmācība aptver, kā strādāt ar Spire Weather ’s globālajiem prognožu datiem GRIB2 formātā, izmantojot Python.

Ja jūs nekad iepriekš neesat strādājis ar GRIB2 datiem, ieteicams sākt ar darba sākšanas pamācību, jo šajā pašreizējā būs apskatītas nedaudz sarežģītākas tēmas.

Konkrēti, šī apmācība parāda, kā iegūt ienākošo īsviļņu saules starojumu sarežģīta daudzstūra robežās (piemēram, valsts un robeža).

Šīs apmācības beigās jūs zināt, kā:

  1. Ielādējiet failus, kas satur GRIB2 ziņojumus Python programmā
  2. Pārbaudiet GRIB2 datus, lai saprastu, kuri laika apstākļu mainīgie ir iekļauti
  3. Filtrējiet GRIB2 datus uz interesējošo laika apstākļu mainīgo (t.i., ienākošo īsviļņu starojumu)
  4. Izveidojiet mazākus datu uzkrājumus (piemēram, katru stundu) no prognozētās kopējās uzkrātās vērtības, diferencējot
    kopsummas no blakus esošajiem piegādes laikiem (sīkāku informāciju skatiet šeit)
  5. Apgrieziet GRIB2 datus apgabalā, ko nosaka Esri Shapefile ievade
  6. Pārveidojiet pārveidotos GRIB2 datus CSV izvades failā turpmākai analīzei un vizualizācijai

Datu lejupielāde

Pirmais solis ir datu lejupielāde no Spire Weather ’s failu API.

Šī apmācība paredz, ka GRIB2 ziņojumos būs iekļauti NWP dati no Spire ’s atjaunojamās enerģijas datu paketes.

Lai iegūtu informāciju par Spire Weather ’s File API galapunktu izmantošanu, lūdzu, skatiet API dokumentāciju un bieži uzdotos jautājumus.

Bieži uzdotie jautājumi ietver arī detalizētus piemērus par to, kā vienlaikus lejupielādēt vairākus prognožu failus, izmantojot cURL.

Šīs apmācības nolūkos tiek pieņemts, ka GRIB2 dati jau ir veiksmīgi lejupielādēti, ja ne šeit iegūstat paraugu.

Izpratne par failu nosaukumiem

Visiem failiem, kas lejupielādēti no Spire Weather ’s API produktiem, ir viena un tā pati failu nosaukumu konvencija.

Aplūkojot faila nosaukumu, mēs varam noteikt:

  • prognozes publicēšanas datums un laiks
  • datums un laiks, uz kuru prognozētie dati ir derīgi
  • globālās prognozes datu horizontālā izšķirtspēja
  • failā iekļautie laika apstākļu mainīgie (skatiet pilnu Spire Weather ’s komerciālo datu saišu sarakstu)

Lai iegūtu sīkāku informāciju par iepriekš minēto, lūdzu, skatiet mūsu FAQ.

Python prasības

Šai apmācībai ir nepieciešamas šādas Python paketes.

Lai gan conda lietošana nav stingri nepieciešama, tā ir oficiāli ieteicamā metode PyNIO instalēšanai (skatiet saiti zemāk).

Kad conda vide ir izveidota un aktivizēta, var tieši palaist šādas komandas:

Datu pārbaude

Pēc datu lejupielādes un Python vides iestatīšanas ar nepieciešamajām pakotnēm nākamais solis ir datu satura pārbaude, lai noteiktu, kuri laika apstākļu mainīgie ir pieejami. Datu pārbaudi var veikt tikai ar PyNIO, taču šajā apmācībā mēs tā vietā izmantosim PyNIO kā dzinēju xarray un ielādēsim datus xarray datu kopā transformācijai. Ņemiet vērā, ka PyNIO nepārprotama importēšana nav nepieciešama, ja vien tā ir pareizi instalēta aktīvajā Python vidē.

Vispirms importējiet xarray pakotni:

Pēc tam atveriet GRIB2 datus ar xarray, izmantojot PyNIO kā dzinēju (ņemiet vērā, ka GRIB2 datiem jābūt no Spire ’s Atjaunojamā enerģija datu komplekts):

ds = xr.open_dataset ("path_to_renewable_energy_file.grib2", dzinējs = "pynio")

Visbeidzot, katram mainīgajam izdrukājiet uzmeklēšanas atslēgu, cilvēkam lasāmo nosaukumu un mērvienības:

Iepriekš minētajam rezultātam vajadzētu izskatīties apmēram šādi, sniedzot skaidru pārskatu par pieejamajiem datu laukiem:

Šī apmācība aptver, kā strādāt ar lejupvērstiem īsviļņu starojuma plūsmām. Ņemiet vērā, ka mainīgā nosaukumam DSWRF_P8_L1_GLL0_acc ir piedēklis _acc, bet pārējiem mainīgajiem nav. Šis sufikss norāda, ka ienākošo īsviļņu starojuma vērtības uzkrāt prognozes laikā. Plašāku informāciju par uzkrātajiem datu laukiem varat lasīt mūsu bieži uzdotajos jautājumos, un šajā apmācībā mēs apskatīsim, kā ar tiem rīkoties vēlāk.

Datu apstrāde

Tagad, kad mēs zinām, kādi laika apstākļu mainīgie un vertikālie līmeņi ir iekļauti GRIB2 datos, mēs varam sākt apstrādāt savu xarray datu kopu.

Xarray datu filtrēšana uz noteiktu mainīgo

Izmantojot xarray, datu kopas satura filtrēšana līdz vienam interesējošam mainīgajam ir ļoti vienkārša:

Ieteicams veikt šo darbību pirms xarray datu kopas pārveidošanas par pandas DataFrame (nevis datu filtra filtrēšanu vēlāk), jo tas samazina konvertējamo datu lielumu un tādējādi samazina kopējo izpildlaiku.

Xarray datu pārvēršana pandās. DataFrame

Lai pārvērstu filtrēto xarray datu kopu pandas DataFrame, vienkārši izpildiet tālāk norādītās darbības.

Esri Shapefile ielāde ar GDAL Python pakotni

Lai gan pakotne, kuru mēs instalējām ar conda, tika nosaukta par gdal, mēs to importējam Python kā osgeo. Šis ir saīsinājums no atvērtā pirmkoda ģeotelpiskā fonda, ar kuru GDAL/OGR (bezmaksas un atvērtā pirmkoda programmatūra) ir licencēta.

Shapefile formāts, ko sākotnēji izstrādāja Esri, ir kopīgs standarts ģeogrāfiskās informācijas sistēmu pasaulē. Tas definē ģeogrāfiski norādīto objektu ģeometriju un atribūtus trīs vai vairākos failos ar konkrētiem failu paplašinājumiem. Trīs obligātie failu paplašinājumi ir .shp, .shx un .dbf —, un visi šie saistītie komponentu faili tiks saglabāti vienā failu direktorijā. Daudzus Shapefiles failus var bez maksas lejupielādēt tiešsaistē (piemēram, valstu robežas, ekskluzīvas ekonomiskās zonas utt.), Un pielāgotas formas var izveidot arī dažādos bezmaksas programmatūras rīkos. Šajā piemērā mēs izmantojam Itālijas valsti kā mūsu sarežģīto daudzstūri, taču tas tikpat viegli varētu būt teritorija, kas ieskauj lidostu vai kādu citu mazu reģionu.

Atverot Shapefile ar GDAL, mums jānorāda tikai uz failu ar paplašinājumu .shp. Tomēr ir nepieciešams, lai pārējie komponentu faili atrastos tajā pašā direktorijā. Ja mēs atveram failu ar nosaukumu italy.shp, tajā pašā direktorijā jābūt vismaz failiem ar nosaukumu italy.shx un italy.dbf.

Kad esam definējuši draiveri un ceļu uz mūsu Shapefile daudzstūri, mēs varam to ielādēt mūsu skriptā šādi:

Ierobežošanas lodziņa iegūšana, kurā ir Shapefile apgabals

Visbeidzot, mēs apgriezīsim datus uz precīzu apgabalu, ko definējis Shapefile, taču tas ir skaitļošanas ziņā dārgs process, tāpēc vislabāk vispirms ierobežot datu lielumu. Teorētiski mēs varētu izlaist apgriešanas posmu līdz vienkāršai kastītei, taču praksē ir vērts to darīt, lai samazinātu kopējo darbības laiku.

GDAL ļauj viegli aprēķināt rupjo ierobežojošo lodziņu, kurā ir sarežģīta Shapefile zona:

Koordinātu vērtībām pēc tam var piekļūt atsevišķi no iegūtā masīva:

Ģeotelpisko koordinātu secība ir izplatīts neskaidrību avots, tāpēc ņemiet vērā, ka funkcija GDAL ’s GetExtent atgriež masīvu, kurā garuma vērtības ir pirms platuma vērtības.

Pandu apgriešana. DataFrame ģeotelpiskās robežas lodziņā

Tagad, kad filtrētie dati tiek pārvērsti pandas DataFrame un mums ir robežas, kas ietver mūsu interesējošo jomu, mēs varam apgriezt datus vienkāršā lodziņā.

Pirmais solis šajā procesā ir izpakot platuma un garuma vērtības no DataFrame ’s indeksa, kuram var piekļūt, izmantojot indeksa nosaukumus lat_0 un lon_0:

Lai gan platuma vērtības jau ir standarta diapazonā no -90 pazemināties līdz +90 grādi, garuma vērtības ir diapazonā no 0 uz +360.

Lai atvieglotu darbu ar datiem, mēs pārvēršam garuma vērtības standarta diapazonā -180 grādiem līdz +180 grādi:

Tā kā platuma un garuma dati tagad ir vēlamajos vērtību diapazonos, mēs tos varam saglabāt kā jaunas kolonnas esošajā DataFrame:

Pēc tam mēs izmantojam iepriekšējās sadaļas ierobežojošo lodziņu vērtības (bbox masīva sastāvdaļas), lai izveidotu DataFrame filtra izteiksmes:

Visbeidzot, mēs izmantojam filtrus esošajam DataFrame:

Iegūtais DataFrame ir apgriezts līdz lodziņa robežām, kurā ir sarežģīts Shapefile apgabals.

Pandu apgriešana. DataFrame līdz Shapefile apgabala precīzām robežām

Lai apgrieztu DataFrame līdz sarežģītās Shapefile apgabala robežām, mums būs jāpārbauda katrs mūsu datu koordinātu pāris. Līdzīgi kā iepriekšējā sadaļā, kurā mēs mainījām katru garuma vērtību, mēs veiksim šo darbību ar kartes izteiksmi.

Lai katru koordinātu pāri nodotu kartes funkcijai, mēs izveidojam jaunu DataFrame kolonnu ar nosaukumu punkts, kur katra vērtība ir karte, kas satur gan platumu, gan garumu:

Pēc tam mēs varam nodot katru koordinātu pāra kartītes vērtību kartes funkcijā kopā ar iepriekš ielādēto Shapefile apgabalu un apstrādāt tos funkcijā ar nosaukumu check_point_in_area, ko mēs definēsim tālāk. Funkcija check_point_in_area atgriezīs True vai False, lai norādītu, vai norādītais koordinātu pāris atrodas apgabala iekšpusē vai nē. Tā rezultātā mēs iegūsim jaunu DataFrame sleju ar Būla vērtībām, ko sauc par inArea:

Kad kolonna inArea ir aizpildīta, mēs veicam vienkāršu filtru, lai noņemtu rindas, kurās inArea vērtība ir False. Tādējādi tiek efektīvi noņemti dati par visām punktu atrašanās vietām, kas nav Shapefile ’s apgabalā:

Protams, iepriekš minētā panākumi ir atkarīgi no loģikas funkcijā check_point_in_area, ko mēs vēl neesam ieviesuši. Tā kā Shapefile apgabals tika ielādēts ar GDAL, mēs varam izmantot GDAL ģeometrijas metodi ar nosaukumu Satur, lai ātri pārbaudītu, vai apgabals satur noteiktu punktu. Lai to izdarītu, koordinātu pāris vispirms GDAL jāpārvērš wkbPoint ģeometrijā:

Visi Shapefiles sastāv no viena vai vairākiem līdzekļiem, tāpēc, lai nodrošinātu, ka mūsu kods ir stabils, mums būs jāpārbauda katra komponenta funkcija atsevišķi. Funkcijas var izgūt pēc to skaitliskā indeksa ar apgabalu.GetFeature (i), un kopējo funkciju skaitu var izgūt ar area.GetFeatureCount (). Izmantojot šīs divas funkcijas ar iepriekš minēto metodi Satur, mēs varam atkārtot katru funkciju un pārbaudīt, vai tajā ir punktu ģeometrija:

Saliekot gabalus kopā, šeit ir tas, ko mēs iegūstam, lai pabeigtu funkciju check_point_in_area:

Kā redzat, vienīgais mainīgais, ko atgriež funkcija check_point_in_area, ir Būla vērtība, kas norāda, vai norādītais punkts atrodas apgabalā vai nē. Pēc tam šīs Būla vērtības aizpilda jauno kolonnu inArea DataFrame. Tas ļauj mums lietot filtru no augšas un iegūt precīzi vēlamos datus, kurus mēs vēlamies:

Prognozes laika parsēšana no faila nosaukuma

Katrs atsevišķs fails satur globālos laika prognozes datus par to pašu laika periodu.

Izmantojot mūsu zināšanas no Faila nosaukumu izpratne šīs apmācības sadaļu un pieņemot, ka faila nosaukuma arguments ir paredzētajā formātā, mēs varam uzrakstīt funkciju, lai parsētu derīgo prognozes laiku no faila nosaukuma:

Pēc tam mēs varam izveidot jaunu DataFrame kolonnu uz laiku, kas saglabā šo vērtību kā virkni katrā rindā:

Lai gan var šķist nevajadzīgi katrā rindā saglabāt to pašu precīzu laika zīmoga vērtību, tas ir svarīgs solis, ja vēlamies galu galā savienot savu DataFrame ar citu laiku prognozes datiem (parādīts tālāk Vairāku datu failu apstrāde).

Galīgā DataFrame filtrēšana

Veiciet mūsu DataFrame gala filtru, lai izvadē atlasītu tikai tās kolonnas, kuras mēs vēlamies, kur mainīgais ir virkne, piemēram, "DSWRF_P8_L1_GLL0_acc":

Uzkrāto datu lauku apstrāde

Šajā posmā dati par vienu prognozes izpildes laiku ir apgriezti interesējošā apgabalā un filtrēti tikai attiecīgajos laukos, tādējādi samazinot mūsu DataFrame kopējo izmēru. Tagad mēs varam atrast atšķirību starp to un iepriekšējo izpildes laika datu vērtībām un#8212, faktiski mainoties no prognozētās kopējās vērtības uz mazākām (piemēram, stundas vai 6 stundu) datu uzkrājumiem. Tomēr, pirms to darīt, mēs dublējam uzkrāto DataFrame, jo mums ir nepieciešama kopija, lai ņemtu vērā atšķirību no nākamā prognozētā izpildes laika.

Tiklīdz mums ir uzkrāto datu kopija, mēs varam atņemt iepriekšējos izpildes laika ’s uzkrātos datus no pašreizējiem sagatavošanās laika datiem un#8217:

Ja GRIB2 dati, kurus mēs apstrādājam, ir stundu izpildes laika intervālos (no Spire ’s tuvā diapazona prognozes), tad jaunajā df DataFrame tagad ir apkopotas vērtības tikai 1 stundu intervālam, nevis visai prognozei līdz šim laikam laiks. Tāpat, ja GRIB2 dati, ko mēs apstrādājam, ir 6 stundu izpildes laika intervālos (no Spire ’s vidēja diapazona prognozes), tad df DataFrame tagad satur uzkrātās vērtības tikai 6 stundu intervālam. Lai labāk izprastu, kā tas izskatās no datu viedokļa, mēs iesakām pārbaudīt vienkāršās vizualizācijas mūsu FAQ.

Visbeidzot, ir svarīgi iestatīt iepriekšējo_dokumentu uz pašreizējo izpildes laiku un#8217s uzkrātajiem datiem, lai mēs varētu atkārtot iepriekš minēto procesu nākamajam prognozes izpildes laikam:

Kad visi gabali ir apkopoti operatīvā Python skriptā, šim procesam vajadzētu notikt cilpas iekšpusē, kas atkārtojas katrā paredzamajā interesējošajā izpildes laikā. Pilns kods šīs apmācības apakšā ir ieviests šādā veidā, un attiecīgā cilpa atrodas faila beigās.

Datu saglabāšana CSV izvades failā

Saglabājiet apstrādāto DataFrame izvades CSV failā:

Parametra index = False iestatīšana nodrošina, ka DataFrame indeksa slejas netiek iekļautas izvadē. Tādā veidā mēs izslēdzam vērtības lat_0 un lon_0, jo mums jau ir kolonnas par platumu un pārveidoto garumu.

Lūdzu, ņemiet vērā, ka, pārveidojot no GRIB2 uz CSV, var rasties ļoti lieli failu izmēri, it īpaši, ja dati nav ievērojami apgriezti vai filtrēti.

Vairāku datu failu apstrāde

Bieži vien ir vēlams apstrādāt vairākus datu failus vienlaikus, lai rezultātus apvienotu vienā vienotā CSV izvades failā.

Piemēram, teiksim ’s, ka mēs tikko izmantojām Spire Weather API, lai vietējā direktorijā ar nosaukumu prognozes_dati/ lejupielādētu pilnu GRIB2 prognožu vērtību. Pēc tam mēs varam izlasīt šos failu nosaukumus sarakstā un kārtot tos alfabētiskā secībā:

No šejienes mēs varam atkārtot failu nosaukumus un nodot katru no tiem funkcijai, kas veic darbības, kas aprakstītas sadaļā Datu apstrāde šīs apmācības sadaļu.

Kad visi mūsu galīgie DataFrames ir gatavi, mēs varam izmantot pandas, lai tos savienotu kopā (kur final_dataframes ir DataFrames saraksts):

Mēs iegūstam kombinētu DataFrame ar nosaukumu output_df, ko mēs varam saglabāt izvades CSV failā, kā to darījām iepriekš:

Pilnīgs kods

Zemāk ir redzams Python skripts, kurā tiek izmantotas šajā apmācībā aprakstītās metodes, kā arī iekļauti paskaidrojoši komentāri.

Skripts ietver trīs argumentus:

Interesētais NWP datu mainīgais

Vietējais direktorijs, kurā tiek glabāti GRIB2 dati

Piemēram, skriptu var palaist šādi:

Šeit ir pilns kods:

Noslēguma piezīmes

Izmantojot CSV datu izvadi no mūsu galīgā skripta, mēs tagad varam viegli vizualizēt apstrādātos datus bezmaksas rīkā, piemēram, kepler.gl. Mēs varam arī iestatīt brīdinājumu sliekšņus, ģenerēt statistiku vai saplūst ar citām datu kopām.

Spire Weather piedāvā arī iepriekš izveidotas vizualizācijas, izmantojot Web Map Service (WMS) API, par kuru varat lasīt vairāk šeit.

Papildu koda paraugus skatiet Spire Weather ’s publiskajā GitHub krātuvē.

Vai vēlaties rezervēt konsultāciju?

Uzziniet vairāk par mūsu Weather API un to, kā Spire Weather var palīdzēt iespējot datu priekšrocības.


Skatīt arī

Piespiest addfile lai izmantotu kubisko interpolāciju ikreiz, kad GRIB failā tiek atrasti dati par atšķaidītu (gandrīz regulāru) režģi, iestatiet AtšķaidītsGridInterpolation opciju pirms faila atvēršanas: 2. piemērs

Veidojot NetCDF failu, varat likt tam rakstīt efektīvāk un potenciāli daudz ātrāk, definējot visas dimensijas, mainīgos un atribūtus failā, pirms rakstāt vērtības.

Vispirms iestatiet Definēt režīmu opciju uz True pēc tam, kad atverat izveidojamo NetCDF failu, kas norāda NCL, ka plānojat definēt lietas pirms jebkādu vērtību ierakstīšanas.

Pēc tam jūs varat iestatīt Definēt režīmu atgriezieties pie False, kad esat pabeidzis visu definēt un esat gatavs rakstīt savas datu vērtības:

Lai iegūtu detalizētāku piemēru NetCDF faila rakstīšanai, izmantojot šo efektīvo metodi, skatiet 2. metodi lapā Izvade uz NetCDF.

Iestatiet bināro datu lasīšanas funkcijas, lai sagaidītu failus, kas rakstīti ar mazo endianu baitu secību, un bināro datu rakstīšanas procedūras, lai iegūtu lielus endianus, neatkarīgi no sistēmas, kurā darbojas NCL. Izveidojiet lielapjoma failu no maza endiāna faila, kurā ir peldoši dati. 4. piemērs

Lai ierakstītu lielus mainīgos (> 2 GB) NetCDF failā, jums jāiestata NetCDF Formāts iespēja uz Lielais fails vai NetCDF4Classic pirms atverat failu izveidei: vai

Varētu jautāt: "Kāpēc NCL nevar iestatīt šo opciju iekšēji, kad tiek prasīts rakstīt lielu mainīgo?" Atbilde ir tāda, ka NetCDF bibliotēka pieprasa, lai šis lēmums būtu jāpieņem, kad fails pirmo reizi tiek izveidots, pirms rodas zināšanas par rakstāmo mainīgo lielumu. Iespējams, ka galu galā lielo failu formāts būs noklusējuma NetCDF formāts, taču līdz šim Unidata ieteikums ir saglabāt saderību atpakaļ, ja iespējams, lietojumprogrammām, kas spēj apstrādāt tikai sākotnējo NetCDF mazo failu formātu.

Lai izveidotu NetCDF-4 failu ar NetCDF-4 funkcijām, iestatiet NetCDF Formāts iespēja uz NetCDF4 pirms atverat failu izveidei:

Iestatot šo opciju, izveidotais NetCDF fails būs NetCDF-4 fails, kas faktiski ir HDF-5 zem pārsega. Izmantojot šo opciju, nav nekādu lieluma ierobežojumu gan failiem, gan mainīgajiem, un jūs varat rakstīt jaunus datu veidus (virkne, vlen, salikts, enum, necaurspīdīgs) un izmantot jaunas funkcijas, piemēram, saspiešanu un sadalīšanu.

Lai piespiestu GRIB failus, kuriem ir viens laika posms, noteikt skaidru “laika” dimensiju, iestatiet SingleElementDimensions opciju pirms faila atvēršanas: ir daudz iespēju. Lūdzu, izlasiet aprakstu iepriekš.


Kā konvertēt ASCII vai teksta datus uz netCDF?

Viens veids, kā konvertēt datus teksta formā uz netCDF, ir izmantot ncgen rīks, kas ir daļa no netCDF programmatūras izplatīšanas. Izmantojot ncgen šim nolūkam ir divpakāpju process:

  1. Konvertējiet teksta datus failā CDL formā, izmantojot teksta redaktoru vai teksta manipulācijas rīkus
  2. Pārveidojiet CDL attēlojumu uz netCDF, izmantojot ncgen rīks ar opciju "-o" vai "-b"

Papildinformāciju skatiet ncgen dokumentācijā.

Ja esat instalējis NCAR komandvalodas (NCL) programmatūru, šeit un šeit ir pieejamas un aprakstītas funkcijas ASCII un tabulu lasīšanai NCL un datu ierakstīšanai netCDF failos.

Piekļūstot MATLAB, jūs varat izveidot shēmu vēlamajam netCDF failam, izmantojot ncwriteschema, lasīt datus, izmantojot textcan, un ierakstīt datus netCDF failā, izmantojot ncwrite.

Kas jauns jaunākajā netCDF laidienā?

Ir pieejamas jaunākā netCDF laidiena laidieni, kuros aprakstītas jaunas funkcijas un novērstas kļūdas kopš iepriekšējā laidiena.


GRIB2 laika apstākļu datu apstrāde jūras vajadzībām (Shapefile)

Sarakstījis
Eliots Voblers
Tehnisko risinājumu inženieris

Šī apmācība aptver, kā strādāt ar Spire Weather globālajiem prognožu datiem GRIB2 formātā, izmantojot Python.

Šajā apmācībā tiek izmantota Shapefile ievade.

Pārskats

Šī apmācība aptver, kā strādāt ar Spire Weather ’s globālajiem prognožu datiem GRIB2 formātā, izmantojot Python.

Ja jūs nekad iepriekš neesat strādājis ar GRIB2 datiem, ieteicams sākt ar pamata apmācību, jo šajā pašreizējā būs apskatītas nedaudz sarežģītākas tēmas.

Konkrētāk, šī apmācība parāda, kā iegūt ievērojamu viļņu augstumu (kombinētus viļņa un vēja viļņus) sarežģīta daudzstūra robežās (piemēram, valsts ekskluzīvā ekonomiskā zona). Ņemiet vērā, ka Spire Weather piedāvā arī atsevišķu Maritime-Wave paketi, kas ietver atšķirīgas viļņu un vēja viļņu vērtības, nevis apvieno tās kā standarta jūras paketi.

Šīs apmācības beigās jūs zināt, kā:

  1. Ielādējiet failus, kas satur GRIB2 ziņojumus Python programmā
  2. Pārbaudiet GRIB2 datus, lai saprastu, kuri laika apstākļu mainīgie ir iekļauti
  3. Apgrieziet GRIB2 datus apgabalā, ko nosaka Esri Shapefile ievade
  4. Pārveidojiet pārveidotos GRIB2 datus CSV izvades failā turpmākai analīzei un vizualizācijai

Datu lejupielāde

Pirmais solis ir datu lejupielāde no Spire Weather ’s failu API.

Šī apmācība paredz, ka GRIB2 ziņojumos būs iekļauti NWP dati no Spire ’s Maritime datu paketes.

Lai iegūtu informāciju par Spire Weather ’s File API galapunktu izmantošanu, lūdzu, skatiet API dokumentāciju un bieži uzdotos jautājumus.

FAQ ir arī detalizēti piemēri par to, kā vienlaikus lejupielādēt vairākus prognozes failus, izmantojot cURL.

Šīs apmācības nolūkos tiek pieņemts, ka GRIB2 dati jau ir veiksmīgi lejupielādēti, ja nē, šeit varat iegūt globālu laika prognozes paraugu.

Izpratne par failu nosaukumiem

Visiem failiem, kas lejupielādēti no Spire Weather ’s API produktiem, ir viena un tā pati failu nosaukumu konvencija.

Aplūkojot faila nosaukumu, mēs varam noteikt:

  • prognozes publicēšanas datums un laiks
  • datumu un laiku, uz kuru prognozētie dati ir derīgi
  • globālās prognozes datu horizontālā izšķirtspēja
  • failā iekļautie laika apstākļu mainīgie (skatiet pilnu Spire Weather ’s komerciālo datu saišu sarakstu)

Lai iegūtu sīkāku informāciju par iepriekš minēto, lūdzu, skatiet mūsu FAQ.

Python prasības

Šai apmācībai ir nepieciešamas šādas Python paketes.

Lai gan conda lietošana nav stingri nepieciešama, tā ir oficiāli ieteicamā metode PyNIO instalēšanai (skatiet saiti zemāk).

Kad conda vide ir izveidota un aktivizēta, var tieši palaist šādas komandas:

Datu pārbaude

Pēc datu lejupielādes un Python vides iestatīšanas ar nepieciešamajām pakotnēm nākamais solis ir datu satura pārbaude, lai noteiktu, kuri laika apstākļu mainīgie ir pieejami. Datu pārbaudi var veikt tikai ar PyNIO, taču šajā apmācībā mēs tā vietā izmantosim PyNIO kā dzinēju xarray un ielādēsim datus xarray datu kopā transformācijai. Ņemiet vērā, ka PyNIO nepārprotama importēšana nav nepieciešama, ja vien tā ir pareizi instalēta aktīvajā Python vidē.

Vispirms importējiet xarray pakotni:

Pēc tam atveriet GRIB2 datus ar xarray, izmantojot PyNIO kā dzinēju (ņemiet vērā, ka GRIB2 datiem jābūt no Spire ’s Jūrniecība datu komplekts):

ds = xr.open_dataset ("path_to_maritime_file.grib2", dzinējs = "pynio")

Visbeidzot, katram mainīgajam izdrukājiet uzmeklēšanas atslēgu, cilvēkam lasāmo nosaukumu un mērvienības:

Iepriekš minētajam rezultātam vajadzētu izskatīties apmēram šādi, sniedzot skaidru pārskatu par pieejamajiem datu laukiem:

Lai iegūtu sīkāku informāciju, var pārbaudīt arī katra mainīgā metadatus: print (ds ["HTSGW_P0_L101_GLL0"])

Datu apstrāde

Tagad, kad mēs zinām, kuri laika apstākļu mainīgie ir iekļauti GRIB2 datos, mēs varam sākt apstrādāt savu xarray datu kopu.

Xarray datu filtrēšana uz noteiktu mainīgo

Izmantojot xarray, datu kopas un#8217 satura filtrēšana uz vienu interesējošo mainīgo ir ļoti vienkārša:

Vairāku mainīgo izvēle ir iespējama arī, ievadot virkņu masīvu: ds = ds.get ([var1, var2])

Ieteicams veikt šo darbību pirms tam pārvēršot xarray datu kopu pandas DataFrame (nevis vēlāk filtrējot DataFrame), jo tas samazina konvertējamo datu lielumu un tādējādi samazina kopējo izpildlaiku.

Xarray datu pārvēršana pandās. DataFrame

Lai pārvērstu filtrēto xarray datu kopu pandas DataFrame, vienkārši izpildiet tālāk norādītās darbības.

Esri Shapefile ielāde ar GDAL Python pakotni

Lai gan pakotne, kuru mēs instalējām ar conda, tika nosaukta par gdal, mēs to importējam Python kā osgeo. Šis ir saīsinājums no atvērtā pirmkoda ģeotelpiskā fonda, ar kuru GDAL/OGR (bezmaksas un atvērtā pirmkoda programmatūra) ir licencēta.

Shapefile formāts, ko sākotnēji izstrādāja Esri, ir kopīgs standarts ģeogrāfiskās informācijas sistēmu pasaulē. Tas definē ģeogrāfiski norādīto objektu ģeometriju un atribūtus trīs vai vairākos failos ar konkrētiem failu paplašinājumiem. Trīs obligātie failu paplašinājumi ir .shp, .shx un .dbf —, un visi šie saistītie komponentu faili tiks saglabāti vienā failu direktorijā. Daudzus Shapefiles failus var bez maksas lejupielādēt tiešsaistē (piemēram, valstu robežas, ekskluzīvas ekonomiskās zonas utt.), Un pielāgotas formas var izveidot arī dažādos bezmaksas programmatūras rīkos. Šajā piemērā mēs izmantojam Austrālijas EEZ kā mūsu sarežģīto daudzstūri, taču tas tikpat viegli varētu būt jebkurš cits ģeogrāfiskais apgabals.

Atverot Shapefile ar GDAL, mums jānorāda tikai uz failu ar paplašinājumu .shp. Tomēr ir nepieciešams, lai pārējie komponentu faili atrastos tajā pašā direktorijā. Ja mēs atveram failu ar nosaukumu eez.sh p, tajā pašā direktorijā jābūt vismaz failiem ar nosaukumu eez.shx un eez.dbf.

Kad esam definējuši draiveri un ceļu uz mūsu Shapefile daudzstūri, mēs varam to ielādēt mūsu skriptā šādi:

Ierobežošanas lodziņa iegūšana, kurā ir Shapefile apgabals

Visbeidzot, mēs apcirpsim datus precīzi Shapefile definētajā apgabalā, taču tas ir skaitļošanas ziņā dārgs process, tāpēc vislabāk vispirms ierobežot datu lielumu. Teorētiski mēs varētu izlaist apgriešanas posmu līdz vienkāršai kastītei, taču praksē ir vērts to darīt, lai samazinātu kopējo darbības laiku.

GDAL ļauj viegli aprēķināt rupjo ierobežojošo lodziņu, kurā ir sarežģīta Shapefile zona:

Koordinātu vērtībām pēc tam var piekļūt atsevišķi no iegūtā masīva:

Ģeotelpisko koordinātu secība ir izplatīts neskaidrību avots, tāpēc ņemiet vērā, ka funkcija GDAL ’s GetExtent atgriež masīvu, kurā garuma vērtības ir pirms platuma vērtības.

Pandu apgriešana. DataFrame ģeotelpiskās robežas lodziņā

Tagad, kad filtrētie dati tiek pārvērsti pandas DataFrame un mums ir robežas, kas ietver mūsu interesējošo jomu, mēs varam apgriezt datus vienkāršā lodziņā.

Pirmais solis šajā procesā ir izpakot platuma un garuma vērtības no DataFrame ’s indeksa, kuram var piekļūt, izmantojot indeksa nosaukumus lat_0 un lon_0:

Lai gan platuma vērtības jau ir standarta diapazonā no -90 pazemināties līdz +90 grādi, garuma vērtības ir diapazonā no 0 uz +360.

Lai atvieglotu darbu ar datiem, mēs pārvēršam garuma vērtības standarta diapazonā -180 grādi līdz +180 grādi:

Tā kā platuma un garuma dati tagad ir vēlamajos vērtību diapazonos, mēs tos varam saglabāt kā jaunas kolonnas esošajā DataFrame:

Pēc tam mēs izmantojam iepriekšējās sadaļas ierobežojošo lodziņu vērtības (bbox masīva sastāvdaļas), lai izveidotu DataFrame filtra izteiksmes:

Visbeidzot, mēs izmantojam filtrus esošajam DataFrame:

Iegūtais DataFrame ir apgriezts līdz lodziņa robežām, kurā ir sarežģīts Shapefile apgabals.

Pandu apgriešana. DataFrame līdz Shapefile apgabala precīzām robežām

Lai apgrieztu DataFrame līdz sarežģītās Shapefile apgabala robežām, mums būs jāpārbauda katrs mūsu datu koordinātu pāris. Līdzīgi kā iepriekšējā sadaļā, kurā mēs mainījām katru garuma vērtību, mēs veiksim šo darbību ar kartes izteiksmi.

Lai katru koordinātu pāri nodotu kartes funkcijai, mēs izveidojam jaunu DataFrame kolonnu ar nosaukumu punkts, kur katra vērtība ir karte, kas satur gan platumu, gan garumu:

We can then pass each coordinate pair tuple value into the map function, along with the previously loaded Shapefile area , and process them in a function called check_point_in_area which we will define below. The check_point_in_area function will return either True or False to indicate whether the provided coordinate pair is inside of the area or not. As a result, we will end up with a new DataFrame column of boolean values called inArea :

Once the inArea column is populated, we perform a simple filter to remove rows where the inArea value is False . This effectively removes data for all point locations that are not within the Shapefile’s area:

Of course, the success of the above is dependent upon the logic inside of the check_point_in_area function, which we have not yet implemented. Since the Shapefile area was loaded with GDAL, we can leverage a GDAL geometry method called Contains to quickly check if the area contains a specific point. In order to do this, the coordinate pair must first be converted into a wkbPoint geometry in GDAL:

All Shapefiles are composed of one or more feature, so to ensure our code is robust we will need to check each component feature individually. Features can be retrieved by their numerical index with area.GetFeature(i) , and the total number of features can be retrieved with area.GetFeatureCount() . Using these two functions with the Contains method mentioned above, we can iterate through each feature and check if it contains the point geometry:

Putting the pieces together, here is what we get for our final check_point_in_area function:

As you can see, the only variable returned by the check_point_in_area function is a boolean value indicating whether the specified point is in the area or not. These boolean values then populate the new inArea DataFrame column. This allows us to apply the filter from above and end up with the precisely cropped data we want:

Parsing the forecast time from the filename

Each individual file contains global weather forecast data for the same point in time.

Using our knowledge from the Understanding Filenames section of this tutorial, and assuming that the filename argument is in the expected format, we can write a function to parse the valid forecast time from the filename:

Then, we can create a new DataFrame column for time which stores this value as a string in every row:

Although it may seem unnecessary to store the same exact timestamp value in every row, this is an important step if we want to eventually concatenate our DataFrame with forecast data for other times (demonstrated below in Processing Multiple Data Files).

Saving the data to a CSV output file

Perform a final filter on our DataFrame to select only the columns that we want in our output, where variable is a string like "HTSGW_P0_L101_GLL0" :

Save the processed DataFrame to an output CSV file:

Setting the index=False parameter ensures that the DataFrame index columns are not included in the output. This way, we exclude the lat_0 and lon_0 values since we already have columns for latitude and remapped longitude .

Please note that converting from GRIB2 to CSV can result in very large file sizes, especially if the data is not significantly cropped or filtered.

Processing Multiple Data Files

It is often desirable to process multiple data files at once, in order to combine the results into a single unified CSV output file.

For example, let’s say that we have just used the Spire Weather API to download a full forecast’s worth of GRIB2 data into a local directory called forecast_data/ . We can then read those filenames into a list and sort them alphabetically for good measure:

From here, we can iterate through the filenames and pass each one into a function that performs the steps outlined in the Processing the Data section of this tutorial.

Once all of our final DataFrames are ready, we can use pandas to concatenate them together like so (where final_dataframes is a list of DataFrames):

We end up with a combined DataFrame called output_df which we can save to an output CSV file like we did before:

Complete Code

Below is an operational Python script which uses the techniques described in this tutorial and also includes explanatory in-line comments.

The script takes three arguments:

  1. The weather data variable of interest
  2. The local directory where the Maritime Weather GRIB2 data is stored
  3. The local directory where the Shapefile components are stored

For example, the script can be run like this:

Final Notes

Using the CSV data output from our final script, we can now easily visualize the processed data in a free tool such as kepler.gl. We can also set thresholds for alerts, generate statistics, or fuse with other datasets.

Spire Weather also offers pre-created visualizations for the Maritime bundle through the Web Map Service (WMS) API, which you can read more about here.

For additional code samples, check out Spire Weather’s public GitHub repository.

Would you like to book a consultation?

Learn more about our Weather APIs and how Maritime Weather can help you enable the data advantage.


Digital Posters

Digital posters include both posters created digitally and scanned images of analog posters. Posters are generally large in format and usually printed and displayed for advertising and publicizing purposes.

General requirements for digital posters include the following:

  • Agencies must digitize to standards appropriate for the accurate preservation of the information of the image. When converting analog or film based material (microfilm, microfiche, slides, etc.), agencies must digitize to standards appropriate for the accurate preservation of the original image. Examples of appropriate methods and formats are available on NARA’s Digitization Services Products and Services page
  • Bitonal (1-bit black and white) images must be scanned at 300-600 ppi. Scanning at 600 ppi is recommended. This is appropriate for documents that consist exclusively of clean printed type possessing high inherent contrast (e.g., laser printed or typeset on a white background)
  • Gray scale (8-bit) must be scanned at 300-400 ppi. Scanning at 400 ppi is recommended.
    This is appropriate for textual documents of poor legibility because of low inherent contrast, staining or fading (e.g., carbon copies, thermofax, documents with handwritten annotations or other markings), or that contain halftone illustrations or photographs and
  • Color (24-bit RGB [Red, Green, Blue]) must be scanned at 300-400 ppi. Scanning at 400 ppi is recommended. Color mode (if technically available) is appropriate for text containing color information important to interpretation or content.

Preferred Formats

Preferred Formats Format Versions Format Specifications
Tagged Image File Format (TIFF) 4, 5 & 6 TIFF Revision 6.0 Final — June 3, 1992 Adobe Systems Incorporated:
( http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf)
Jpeg2000 (JP2) Part 1 (JP2) ISO/IEC 15444-1:2004 Information technology – JPEG 2000 image coding system: Core coding system:
( http://www.iso.org/iso/catalogue_detail.htm?csnumber=37674)
Pārnēsājamā tīkla grafika (PNG) 1.2 tableISO/IEC 15948:2004 Information technology -- Computer graphics and image processing -- Portable Network Graphics (PNG): Functional specification: ( http://www.iso.org/iso/iso_catalogue/catalogue_tc/
catalogue_detail.htm?csnumber=29581)
Portable Document Format/Archival (PDF/A) PDF/A-1 ISO 19005-1:2005 Electronic document file format for long-term preservation – Part 1: Use of PDF 1.4 (PDF/A-1): ( http://www.iso.org/iso/catalogue_detail?csnumber=38920)

Acceptable Formats

Acceptable Formats Format Versions Format Specifications
JPEG File Interchange Format (JFIF) with
Joint Photographic Experts Group (JPEG) compression
1.02 ISO/IEC 10918-5 Information technology – Digital Compression and coding of continuous-tone still images: JPEG Interchange File Format:
( http://www.iso.org/iso/home/store/
catalogue_tc/catalogue_detail.htm?csnumber=54989)


Scripting Wget in a Time Loop

This is a technique best used to obtain large numbers of whole files quickly. The method works with datasets that are accessible via HTTPS or FTP. The process involves setting up a script that will loop through a range of dates, creating a URL with the date variables, then calling the 'wget' command with this URL.

URL and Filename Conventions

NCEI Model servers use standardized filenames and directory structures to make it easy to process model data. Sometimes these name conventions are defined by NCEI, other times, they are based on the filenames provided by the data provider. The formats in the following filename convention sections use italics for variables in the filenames. Dates use Y, M, and D to specify year, month, and date.

NOMADS Convention

The format for most NCEI model WAF URLs is:

The format of a NOMADS model file is:
MODELNAME_GRID_NUM_YYYYMMDD_CYCLE_hr00.grb

An example URL following this convention is:

SERVER varies depending on the dataset. See model Data Products and click on HTTPS links to determine this. Models, including NOMADS related ones, will have a base URL from the overall NCEI Web Accessible Folder (WAF), which is www.ncei.noaa.gov/data/. The models that were served through the nomads.ncdc.noaa.gov have been transitioned to the www.ncei.noaa.gov.

You will need to loop the YYYYMM and YYYYMMDD variables. You can use this using various iteration structures such as nested for, nested foreach, while loops, and others in any scripting language. This guide will not attempt to explain exactly how to script this. Different models may follow different conventions concerning date-stamped subdirectories. Models longer time steps between files may only need to be in YYYYMM directories, or even YYYY, for example.

MODEL is the top-level directory for the corresponding model system. This is not equal to MODELNAME and GRID_NUM. For example, MODEL "eta" can contain files early-eta_211* and meso-eta_218*. To determine the appropriate MODELNAME and GRID_NUM, see the NOMADS data products pages.

Models served from the www.ncei.noaa.gov/data/ HTTP file server will have their date-stamped subdirectories in a subdirectory called 'access'. Archive units for the model may also be available under an 'archive' subdirectory for bulk-downloads of files.

There may be subdirectories under the one defined by MODEL, if there are different variations of the model. For example, the URL for the North American Multi-Model Ensemble (NMME) will have subdirectories for source NMME derived from the NCAR Community Climate System Model Version 4 (CCSM4) will be in time-stamped subdirectories of the URL https://www.ncei.noaa.gov/data/north-american-multi-model-ensemble/access/ccsm4/

CYCLE_hr may require another nested loop if the model is run more than once a day.

To avoid overwriting output, [Local output file] should contain the YYYYMMDD and CYCLE_hr variables.

NCEI WMO-header Format for National Digital Forecast Database (NDFD) and National Digital Guidance Database (NDGD)

Some National Weather Service (NWS) files are delivered with a WMO header at the beginning. In the case of NDFD and NDGD, this WMO header is used to generate the filename. Directory structures for NDFD and NDGD are YYMM/YYMMDD

T1 and T2 are the WMO type code. They usually define the type of data. For NDFD or NGDG, T1 is usually Y,Z, or L, which designate that these are GRIB files of NDFD or NDGD.

A1 un A.2 usually define geographic area, or sometimes level. For NDFD, A1 is a single-letter code defining a geographic area from an NDFD-specific table. In NDFD and NDGD, A2 is often a value that specifies that the forecast time is in the GRIB file itself.

ii is a number that can define forecast time, level, or other numeric information depending on file type. For NDFD and NDGD, this is usually a set number, since the forecast time and level are in the GRIB header.

CCCC is the Center Code, which defines which organization or model produced the file. A list of these is published at the NWS Center Identifiers List. The interpretation of the WMO header defined by T1T2A1A2ii depends on the value of CCCC. The following list shows Center Codes used by NDFD:

  • KWBN: Basic NDFD
  • KWNC: Climate Prediction Center
  • KNHC: National Hurricane Center
  • KWNS: Storm Prediction Center

While NDFD uses the WMO Header convention, it does not use the standard WMO tables it uses its own set of tables. Information about interpreting the NDFD WMO headers, consult the 'NDFD Spreadsheet' on the NDFD Information page.

The final 14 digits of the filename are the timestamp of when the file was produced. In the case of NDFD, this will not match the reference time, which is on the hour or half hour it will be the exact time the file was produced, which is usually a few minutes before the reference time. Because the times are not predictable, a script that loops over time will need to use a directory listing to compose its URLs.

Other Filename Conventions

While many model files that NCEI started serving due to the NOMADS project follow the filename conventions shown here, other models will follow different conventions. In nearly all cases, the filenames will have time information embedded in them.

For more information about wget, consult the GNU Wget Manual.

Wget Usage (System/Shell Command)

A simple use of the 'wget' command, with optional parts shown in brackets, is:
wget -O [Local output file] $URL

If all the data you need in the same HTTPS or FTP directory, then you may use a single wget command rather than writing a script. The general syntax is below.

wget -r -e robots=off [-lX] --no-parent -A[FILETYPE] -nd https://[SERVER NAME]/[PATH]

the -r option allows recursion, which permits the download of files in subdirectories

[SERVER NAME] and [PATH] define the URL to the desired directory.

[lX] Defines the directory level depth "X" you want Wget to scan. Example: [-l1]

The -A[FILETYPE] is optional, if omitted, Wget will attempt to download everything in the directory. If you use, for example, [-A.grb], then just the files ending with .grb will be downloaded.

The -e option tells wget to ignore robots.txt


OGR - Open Geospatial Consortium's Simple Features formats (Shapefile, MapInfo, GMT, TIGER)

Sākot ar version 1.4.0 or later PyNIO optionally provides access to the GDAL/OGR library in order to read various OGR file formats. OGR is an implementation of the Open Geospatial Consortium's "Simple Features" API. The specific formats supported in PyNIO are ESRI Shapefiles, MapInfo and GMT formats, and classic TIGER format.

Data in these formats are generally comprised of a set of files that together encode the geometry, non-spatial attributes, cartographic projection, indices, etc.. Although these formats are identified to PyNIO by the suffix of a specific file in the set, it is important that the complete set of files is available. For example, the suffix for Shapefiles is .shp however a Shapefile properly consists of four or more commonly-named files with .dbf, .shx, .prj suffixes, in addition to the .shp file.

To the user, OGR data is viewed as a set of Iespējas that consist of geometry and other non-spatial fields. The non-spatial data in a given OGR file is mapped directly to a PyNIO variable. Non-spatial fields exist in a 1:1 relationship with features, so that the data for the ith feature is found at the ith elements of the PyNIO variable.

ģeometrija for a feature can be complex however a feature might be comprised of one or more line segmenti, which in turn may represent polylines or polygons, etc. Because the relationship of geometry to features is not a simple 1:1 correspondence, the following convention has been adopted to encode geometry into specific PyNIO variables.

  • geometry[i, 0] = index into the segments variable of the first segment for the ith feature
  • geometry[i, 1] = the number of segments belonging to the ith feature
  • segments[j, 0] = index into x , y , z arrays of the first point of the jth segment
  • segments[j, 1] = number of points making up the jth segment

The coordinates of geometry are stored in the x , y , and optional z variables. These are one-dimensional arrays that contain partially ordered lists of coordinates that make up the individual segments.

Several global attributes are defined for convenience. The attribute layer_name contains the name of the features, as extracted from the OGR file. The attribute geometry_type denotes whether the feature-geometry is comprised of points, polylines, or polygons. The remaining attributes are intended as symbolic indices into the second index of the geometry and segments variables, and should be used in preference to hard coding indices these are: geom_segIndex (=0), geom_numSegs (=1), segs_xyzIndex (=0), and segs_numPnts (=1). OGR file-variables do not contain coordinate variables or variable attributes, as the GDAL/OGR implementation does not expose information that could be used as such.

Zināmās problēmas

  • Incomplete mapping of database types. For shapefiles in particular, certain types in the associated .dbf database have not yet been mapped to a suitable NumPy type, e.g., timestamps, binary data, variable-length data, etc. In the present implementation, non-spatial fields of these types are disregarded and no corresponding PyNIO variable is created.

Any opinions, findings and conclusions or recommendations expressed in this material do not necessarily reflect the views of the National Science Foundation.


Your spreadsheet is in a locale that currently uses the dd/mm/yyyy data format. The data has apparently been imported while the spreadsheet was set to a locale with another date format, which has caused the data to not get converted but stored as text strings instead.

When your csv data is in a date format that differs from that of the spreadsheet, it will not be detected as dates, or worse, will get detected incorrectly, with days and months getting swapped.

To fix the problem, set File > Spreadsheet settings > Locale to a locale whose date format matches that of the data, then change the locale to your real locale.

Your sample spreadsheet already has data that consists of text strings that look like dates. You can convert them to numeric dates with this formula in cell C3 :

Format the result column as Format > Number > Date.

Note that while this formula works with the sample data you show in the spreadsheet, it will give correct results with data that has been incorrectly converted to dates. It happens to work here because all the dates from row 17 down have a number that is greater than 12 in the first position. This number cannot be a month, and the data has apparently been imported with the US locale which has caused the data to not get converted but stored as text strings instead.

See this answer for an explanation of how date and time values work in spreadsheets.


Easy. Uzstādīt imagemagick:

It is smart and goes by your file extension.

Now, for doing batch conversions, we shall use a loop.

cd into the directory where your tif files are.

Also, once you convert all of the files and verify the new jpg's integrity, just run rm *.tif in that directory to delete all your old .tif files. Be careful with asterisks though, don't add a space after the * , or you will delete all your files in the directory.

Tip: If you have a folder with subfolders that holds these images. You could use this for loop to find all .TIF files within that folder: