Pytanie:
Skąd wziąć dane prognostyczne z modelu sondującego temperaturę?
James S
2019-12-03 08:14:31 UTC
view on stackexchange narkive permalink

Chcę poznać aktualny wskaźnik rezygnacji dla danego punktu w USA. Innymi słowy, chcę „na żywo” danych o temperaturze na różnych wysokościach. Na żywo jest elastyczne - generalnie jestem w porządku z prognozą, która jest ważna na bieżący moment. Skąd mogę pobrać te dane, najlepiej w formacie, który jest łatwy do przetworzenia w Pythonie?

Więcej szczegółów:

Obecnie używam wskaźnika Lapse Rate stały, aby spróbować oszacować temperaturę na różnych wysokościach, ale chciałby użyć czegoś bardziej wyrafinowanego. Jestem pilotem, więc początkowo myślałem o użyciu produktu Temps & Winds Aloft, a następnie o interpolacji między sporadycznymi witrynami, ale potem znalazłem modele na stronie NOAA. Ale:

  1. Nie wiem, który z nich jest najlepszy w moim przypadku użycia. Op40 wydaje się być dobrym domyślnym rozwiązaniem. Ale model HRRR wydaje się jeszcze lepszy, szczególnie ze względu na wyższą rozdzielczość.

  2. Nie jestem pewien, gdzie dane surowe w formacie, który mogę posługiwać się. Jeśli na przykład utworzę interaktywny wykres pochylenia dla Op40 w witrynie NOAA, mogę następnie kliknąć przycisk Pobierz tekst i uzyskać informacje, które mnie interesują:

enter image description here

Ale jeśli wybiorę tekst ASCII na pierwszej stronie, otrzymam Plik GSD, który nie wydaje się być zgodny z własnym formatem plików NOAA. Wygląda na to, że HRRR jest dostępny w formacie grib2 , który również nie wydaje się być tak prosty, jak lat / lon, altitude, temp . Wygląda na to, że te pliki zapewniają coś bardziej surowego, co następnie należy poddać symulacji, aby uzyskać tymczasową pracę? Znalazłem kilka bibliotek Pythona, ale przydałby mi się wskaźnik do podejścia, które muszę zastosować.

Dwa odpowiedzi:
Whir
2019-12-03 13:30:44 UTC
view on stackexchange narkive permalink

Plik GSD jest zwykłym plikiem tekstowym (ASCII), który można czytać niemal dowolnie. Ponieważ używasz Pythona, polecam przyjrzenie się Pandas, a zwłaszcza funkcjonalności pandas.read_csv.

Używam teraz tego adresu URL jako przykładu: https: // rucsoundings.noaa.gov/get_soundings.cgi?data_source=Op40&latest=latest&start_year=2019&start_month_name=Dec&start_mday=3&start_hour=7&start_min=0&n_hrs=1.0&fcst_len=shortest&airport=50%2C-90&text=Ascii%20text%20%28GSD%20format%29&hydrometeors=false&start = najnowsze

Z sondowań ruc, o których wspomniałeś. Tutaj właśnie wpisałem lat = 50 i lon = -90, żeby coś wybrać. Widzisz to w adresie URL w „airport =”. Możesz pobrać potrzebne dane za pomocą wget lub curl i umieścić w pliku o lepszej nazwie (sounding.txt) w ten sposób:

  wget „https://rucsoundings.noaa.gov/get_soundings.cgi?data_source=Op40&latest=latest&start_year=2019&start_month_name=Dec&start_mday=3&start_hour=7&start_min=0&n_hrs=1.0&fcst_len=shortest&airport=50%2C-90&text=Ascii%20text%20%28GSD % 20format% 29&hydrometeors = false&start = latest "-O sounding.txt  

Następnie możesz napisać mały program w Pythonie, aby pobrać potrzebne dane i odczytać je za pomocą pand.

Chcę również zauważyć, że jeśli zamierzasz używać grib2, będziesz mógł łatwo zmienić model, ponieważ grib2 jest standardowym formatem danych NWP. Będzie to trochę bardziej skomplikowane, ponieważ jest nieco trudniejsze do odczytania. grib2 to format binarny, który jest bardzo dobry do przechowywania dużych zbiorów danych. Jeśli chcesz przyjrzeć się temu dokładniej, odsyłam do kodów ekc od ECMWF.

Dzięki. Powinienem być bardziej dokładny. Moim problemem nie jest odczyt danych, ale ich interpretacja. Po pierwsze, definicja GSD mówi, że pierwsze 4 linie brzmiące to linie identyfikacyjne i informacyjne ", Jednak linia 4 pliku, który wysłałeś, wygląda na pierwszą linię danych, więc już się zastanawiam, czy patrzę na Właściwa rzecz. Jednak ogólnie nie widzę, jak uzyskać „(temp, wysokość)„ z tego pliku CSV. Brak nagłówka „temp”. Definicja sugeruje, że temperatura jest w kolumnie 4, ale te wartości mieszczą się w zakresie do <- 500, więc to chyba nie temp?
Rozumiem, źle zrozumiałem. Szybko przejrzałem kod źródłowy javascript, ale nie mogłem znaleźć sposobu na bezpośrednie uzyskanie surowych danych. Alternatywnie możesz rozważyć pobranie danych z innego źródła. Dwie alternatywy mogą być: [Uniwersytet Plymouth] (https://vortex.plymouth.edu/myo/fx/raobfx.html), który podaje dane NWP, oraz [Uniwersytet Wyoming] (http://weather.uwyo.edu/upperair /sounding.html), który daje prawdziwe obserwacje.
Jean-Marie Prival
2019-12-09 23:06:38 UTC
view on stackexchange narkive permalink

Z tego, co widzę, z jakiegoś powodu GSD podzielił kolumnę „t / td” na dwie oddzielne kolumny i pomnożył temperatury przez 10. Dlaczego? Może żeby pozbyć się przecinka dziesiętnego ... Więc kiedy zobaczysz wartość < -500, to w rzeczywistości < -50 ° C.

Comparison between GSD and 'get text'

Inne zmiany:
- Zmieniono ciśnienie i wysokość.
- Ciśnienie również zostało pomnożone przez 10, więc nie jest już w milibarach, ale w dziesiętnych ...
- Wysokość została przeliczona z stopy (wersja „pobierz tekst”) do metrów (GSD).

Podsumowując, oto wywnioskowane nagłówki kolumn dla GSD:
| 2 Ciśnienie (daPa) | 3 Wysokość (m) | 4 t (d ° C = decidegree Celsjusza) | 5 td (d ° C) |

Nie wiem, co zrobić z linią temperatury „99999”, która pojawiła się w GSD ...

Mam nadzieję możesz coś z tego zrobić!

Ciekawy! Nie zawracałem sobie głowy próbą „dekodowania” GSD i dopasowywania wartości. Jutro trochę się w to zagłębię, ale czuję, że masz to. FWIW: Tak, mnożenie przez 10 prawdopodobnie usunie liczbę dziesiętną - to o jeden znak mniej do wysłania / zapisania, a jeśli te dane są kompresowane bajtowo, użycie `int`s zamiast float zapobiega wielu problemom: https: / /www.belighted.com/blog/float-is-evil
Tak, wydaje mi się, że kodowanie danych liczbami całkowitymi ma sens, nawet jeśli oznacza to pracę z nietypowymi prefiksami jednostek ... Daj nam znać, jeśli uda Ci się dalej rozszyfrować plik!
@JamesS, aktualizacja w tej sprawie?
Przepraszam. Rozkojarzyłem się. Działa tak, jak znalazłeś. Zdałem sobie również sprawę, że linia 2 to data ważności od, a linia 4 zawiera szerokość / długość punktu siatki. Kolumny 6 i 7 zawierają informacje o wietrze. Złożyłem kod, aby to zdekodować: https://gist.github.com/jamesshannon/eae1bb995a906dcb1ba2ca8172a7c53e


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...