Statystyki strefowe (Zonal statistics) w R

Statystyki strefowe to pomocne narzędzie pozwalające na wyznaczenie dowolnej statystyki z pikseli rastra pokrywających się np. z poligonem z warstwy wektorowej. Najczęściej w oprogramowaniu GIS mamy domyślnie do wyboru kilkanaście statystyk np. maksymalna, średnia, minimalna wartość itp. A co w przypadku gdy chcemy obliczyć statystykę wymyśloną przez nas. W oprogramowaniu GIS nie jest to niemożliwe, ale wymaga sporo pracy, np. z wykorzystaniem Modelera. Na szczęście mamy R-a, gdzie można to zrobić w jednej funkcji:) Zacznijmy jednak od prostych rzeczy. Inicjujemy bibliotekę raster w której znajduje się funkcja extract, służąca do ekstrakcji wartości pikseli rastra leżących w danym wektorze:

Inicjujemy bibliotekę rgdal, którą wykorzystamy do wczytania danych wektorowych:

Wczytujemy plik rastrowy oraz plik z warstwą wektorową np. z darmowych warstw udostępnianych przez CODGiK (w moim przypadku NMT i warstwa powiatów województwa mazowieckiego):

Wczytane warstwy wyglądają następująco:

 

Używając funkcji extract z biblioteki raster możemy wyciągnąć wartości pikseli NMT znajdujących się wewnątrz np. dwóch pierwszych powiatów:

Utworzona zmienna h jest listą, zawierającą w poszczególnych elementach wartości wysokości dla konkretnego powiatu. Wartości te wywołujemy używając:

W przypadku, gdy dla konkretnego powiatu chcemy policzyć np. średnią wartość wysokości musimy dodać do funkcji extract atrybut fun = mean:

Wywołując w konsoli zmienną h_mean widzimy, że jest to już macierz wartości:

Jako atrybut fun do funkcji extract możemy wstawić dowolną funkcję utworzoną przez nas. Pamiętamy, że dla każdego z powiatów otrzymujemy wektor wartości i będziemy go musieli przetwarzać. Zdefiniujmy funkcję tworzącą statystykę, która będzie nam zwracała procent pikseli o wartościach większych od średniej wysokości w powiecie. Najpierw utworzymy funkcję nasza_funkcja zawierającą tylko jedną zmienną lokalną x będąco naszym zbiorem wartości pikseli oraz argument logiczny na.rm odpowiedzialny za usuwanie wartości NA:

Dodajmy do funkcji zmienną zawierającą wartość średnią

Policzmy ile jest wszystkich pikseli:

i policzmy ile jest tych większych od avg:

policzmy procent:

Funkcja będzie zwracała procent:

Zamykamy definicję funkcji:

Nasza funkcja ostatecznie powinna wyglądać następująco:

W celu wyznaczenia wartości procentów wstawiamy ją do funkcji extract do atrybutu fun:

W wyniku otrzymujemy macierz zawierającą procenty ze zdefiniowanej przez nas funkcji:

Funkcję extract możemy modyfikować w zależności jakie dane chcemy uzyskać. Polecam zajrzeć do dokumentacji technicznej tej funkcji, lub do pomocy:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Translate using Google Translate»
Social media & sharing icons powered by UltimatelySocial

Podoba Ci się nasza strona? Odwiedź nasz profil