28 Coğrafi Bilgi Sistemleri (CBS) Temelleri
28.1 Genel Bakış
Verilerinizin uzamsal yönleri, salgının durumuna ilişkin pek çok içgörü sağlayabilir ve aşağıdaki gibi soruları yanıtlayabilir:
- Mevcut hastalık noktaları nerede?
- Kümelenme noktaları zaman içinde nasıl değişti?
- Sağlık tesislerine ulaşım nasıl? Herhangi bir iyileştirme gerekli mi?
Bu CBS sayfasının mevcut odak noktası, salgın yanıtında uygulamalı epidemiyologların ihtiyaçlarını ele almaktır. tmap ve ggplot2 paketlerini kullanarak temel mekansal veri görselleştirme yöntemlerini keşfedeceğiz. Ayrıca sf paketi ile bazı temel uzamsal veri yönetimi ve sorgulama yöntemlerini de inceleyeceğiz. Son olarak, spdep paketini kullanarak uzamsal ilişkiler, uzamsal otokorelasyon ve uzamsal regresyon gibi mekansal istatistik kavramlarına kısaca değineceğiz.
28.2 Anahtar terimler
Aşağıda bazı temel terminolojiyi tanıtıyoruz. CBS ve mekansal analize kapsamlı bir giriş için, Referanslar bölümünde listelenen daha uzun öğreticilerden veya kurslardan birini incelemenizi öneririz.
Coğrafi Bilgi Sistemi (CBS) - CBS, mekansal verileri toplamak, yönetmek, analiz etmek ve görselleştirmek için bir çerçeve veya ortamdır.
CBS yazılımı
Bazı popüler CBS yazılımları, harita geliştirme ve mekansal analiz için işaretle ve tıkla etkileşimine izin verir. Bu araçlar, kod öğrenmeye gerek olmaması ve simgeleri ve özellikleri bir haritaya manuel olarak seçme ve yerleştirme kolaylığı gibi avantajlarla birlikte gelir. İşte iki popüler olan:
ArcGIS - ESRI şirketi tarafından geliştirilen, çok popüler ancak oldukça pahalı olan ticari bir CBS yazılımı
QGIS - ArcGIS’in yapabileceği hemen hemen her şeyi yapabilen ücretsiz bir açık kaynaklı CBS yazılımı. QGIS’i buradan indirebilirsiniz
R’ı bir CBS olarak kullanmak, “işaretle ve tıkla” yerine bir “komut satırı arayüzüne” sahip olduğundan (istenen sonucu elde etmek için kodlamanız gerekir) ilk başta daha korkutucu görünebilir. Ancak, tekrar tekrar haritalar üretmeniz veya tekrarlanabilir bir analiz oluşturmanız gerekiyorsa bu büyük bir avantajdır.
Mekansal veri
CBS’de kullanılan iki temel konumsal veri biçimi vektör ve hücresel(raster) veridir:
Vektör Verileri - CBS’de kullanılan en yaygın konumsal veri biçimi olan vektör verileri, köşelerin ve yolların geometrik özelliklerinden oluşur. Vektör uzamsal verileri ayrıca yaygın olarak kullanılan üç türe ayrılabilir:
Noktalar - Bir nokta, bir koordinat sistemindeki belirli bir konumu temsil eden bir koordinat çiftinden (x,y) oluşur. Noktalar, uzamsal verilerin en temel biçimidir ve bir durumu (yani hasta evi) veya bir konumu (yani hastaneyi) bir harita üzerinde belirtmek için kullanılabilir.
Çizgiler - Çizgi, birbirine bağlı iki noktadan oluşur. Çizgilerin bir uzunluğu vardır ve yollar veya nehirler gibi şeyleri belirtmek için kullanılabilir.
Çokgenler - Çokgen, noktalarla birbirine bağlanan en az üç doğru parçasından oluşur. Çokgen özellikleri bir uzunluğa (yani alanın çevresi) ve ayrıca bir alan ölçümüne sahiptir. Çokgenler bir alanı (yani bir köyü) veya bir yapıyı (yani bir hastanenin gerçek alanını) belirtmek için kullanılabilir.
Hücresel Veri - Uzamsal veriler için alternatif bir format olan hücresel veriler, her hücrenin yükseklik, sıcaklık, eğim, orman örtüsü vb. gibi bilgileri içeren bir hücre matrisidir (örneğin pikseller). Bunlar genellikle hava fotoğrafları, uydu görüntüler, vb. Rasterler (yani hücresel haritalar), vektör verilerinin altında “temel haritalar” olarak da kullanılabilir.
Uzamsal verileri görselleştirme
Bir harita üzerinde uzamsal verileri görsel olarak temsil etmek için, CBS yazılımı, farklı özelliklerin birbiriyle ilişkili olarak nerede olması gerektiği hakkında yeterli bilgi sağlamanızı gerektirir. Çoğu kullanım durumu için geçerli olan vektör verilerini kullanıyorsanız, bu bilgiler genellikle bir şekil dosyasında depolanır:
Shapefiles - Shapefile, çizgilerden, noktalardan veya çokgenlerden oluşan “vektör” uzamsal verileri depolamak için yaygın bir veri biçimidir. Tek bir şekil dosyası aslında en az üç dosyadan oluşan bir koleksiyondur - .shp, .shx ve .dbf. Şekil dosyasının okunabilmesi için tüm bu alt bileşen dosyalarının belirli bir dizinde (klasörde) bulunması gerekir. Bu ilişkili dosyalar, e-posta yoluyla gönderilmek veya bir web sitesinden indirilmek üzere bir ZIP klasörüne sıkıştırılabilir.
Şekil dosyası, özelliklerin kendileri ve bunların Dünya yüzeyinde nereye yerleştirileceği hakkında bilgi içerecektir. Bu önemlidir, çünkü Dünya bir küre iken, haritalar tipik olarak iki boyutludur; uzamsal verilerin nasıl “düzleştirileceğine” ilişkin seçimler, ortaya çıkan haritanın görünümü ve yorumlanması üzerinde büyük bir etkiye sahip olabilir.
Koordinat Referans Sistemleri (CRS) - CRS, Dünya yüzeyindeki coğrafi özellikleri konumlandırmak için kullanılan koordinat tabanlı bir sistemdir. Birkaç temel bileşeni vardır:
Koordinat Sistemi - Birçok farklı koordinat sistemi vardır, bu nedenle koordinatlarınızın hangi sistemden olduğunu bildiğinizden emin olun. Enlem/boylam dereceleri yaygındır, ancak UTM koordinatlarını da görebilirsiniz.
Birimler - Koordinat sisteminiz için birimlerin ne olduğunu öğrenin (ör. ondalık dereceler, metreler)
Datum - Dünya’nın belirli bir modellenmiş versiyonu. Bunlar yıllar içinde revize edilmiştir, bu nedenle harita katmanlarınızın aynı veriyi kullandığından emin olun. Özellikle herhangi bir konum verisi elde edilirken yatay ve düşey konumunu tanımlamak için başlangıç alınan bir referans yüzeyi gereklidir. Yer’in şeklini ve boyutunu tanımlayan bu yüzeye Datum adı verilmektedir.
Projeksiyon - Gerçekten yuvarlak olan dünyayı düz bir yüzeye (harita) yansıtmak için kullanılan matematiksel denklem.
Aşağıda gösterilen haritalama araçlarını kullanmadan uzamsal verileri özetleyebileceğinizi unutmayın. Bazen coğrafyaya göre (ör. ilçe, ülke vb.) basit bir tablo yeterlidir!
28.3 CBS’yi kullanmaya başlama
Bir harita yapmak için sahip olmanız ve düşünmeniz gereken birkaç önemli öğe var. Bunlar şunları içerir:
Bir veri kümesi – bu, uzamsal bir veri biçiminde olabilir (yukarıda belirtildiği gibi şekil dosyaları gibi) veya uzamsal bir biçimde olmayabilir (örneğin sadece bir csv olarak).
-
Veri kümeniz uzamsal biçimde değilse ayrıca bir referans veri kümesine ihtiyacınız olacaktır. Referans verileri, verilerin uzamsal temsilinden ve belirli özelliklerin konum ve adres bilgilerini içeren materyali içeren ilgili niteliklerden oluşur.
Önceden tanımlanmış coğrafi sınırlarla (örneğin, idari bölgeler) çalışıyorsanız, referans şekil dosyaları genellikle bir devlet kurumundan veya veri paylaşım kuruluşundan ücretsiz olarak indirilebilir. Şüpheye düştüğünüzde, Google “[bölgeler] şekil dosyası” başlamak için iyi bir yerdir.
Adres bilginiz varsa ancak enlem ve boylam yoksa, kayıtlarınız için uzamsal referans verilerini almak için bir coğrafi kodlama motoru kullanmanız gerekebilir.
Veri kümelerinizdeki bilgileri hedef kitlenize nasıl sunmak istediğiniz hakkında fikriniz olmalı. Birçok farklı harita türü vardır ve ihtiyaçlarınıza en uygun harita türünü düşünmek önemlidir.
Verilerinizi görselleştirmek için harita türleri
Choropleth haritası - coğrafi bölgeleri bir öznitelik değerine göre temsil etmek için renklerin, gölgelerin veya desenlerin kullanıldığı bir tür tematik haritadır. Örneğin, daha büyük bir değer, daha küçük bir değerden daha koyu bir renkle gösterilebilir. Bu harita türü, bir değişkeni ve onun tanımlanmış bölgeler veya jeopolitik alanlar arasında nasıl değiştiğini görselleştirirken özellikle kullanışlıdır.
Vaka yoğunluğu ısı haritası - renklerin bir değerin yoğunluğunu temsil etmek için kullanıldığı, ancak verileri gruplamak için tanımlanmış bölgeleri veya jeopolitik sınırları kullanmadığı bir tür tematik haritadır. Bu harita türü tipik olarak “sıcak noktaları” veya yüksek yoğunluklu veya nokta yoğunluğuna sahip alanları göstermek için kullanılır.
Nokta yoğunluğu haritası - verilerinizdeki öznitelik değerlerini temsil etmek için noktaları kullanan tematik bir harita türüdür. Bu tür harita en iyi, verilerinizin dağılımını görselleştirmek ve kümeleri görsel olarak taramak için kullanılır.
Oransal semboller haritası (dereceli semboller haritası) - bir choropleth haritasına benzer bir tematik harita, ancak bir özelliğin değerini belirtmek için renk kullanmak yerine, değere göre bir sembol (genellikle bir daire) kullanır. Örneğin, daha büyük bir değer, daha küçük bir değerden daha büyük bir sembolle gösterilebilir. Bu harita türü en iyi, coğrafi bölgelerdeki verilerinizin boyutunu veya miktarını görselleştirmek istediğinizde kullanılır.
Karmaşık coğrafi kalıpları göstermek için birkaç farklı görselleştirme türünü de birleştirebilirsiniz. Örneğin aşağıdaki haritadaki vakalar (noktalar) en yakın sağlık kuruluşuna göre renklendirilmiştir (bkz. lejand). Büyük kırmızı daireler, belirli bir yarıçaptaki sağlık tesisi hizmet alanlarını ve herhangi bir hizmet alanı dışında kalan parlak kırmızı vaka noktalarını gösterir:
Not: Bu CBS sayfasının birincil odak noktası, saha salgın yanıtı bağlamına dayanmaktadır. Bu nedenle sayfanın içeriği, temel uzamsal veri manipülasyonlarını, görselleştirmeleri ve analizleri kapsayacaktır.
28.4 Hazırlık
Paketleri yükleyin
Bu kod parçası, analizler için gereken paketlerin yüklenmesini gösterir. Bu el kitabında, gerekirse paketi kuran ve kullanım için yükleyen pacman’dan p_load()
vurgusunu yapıyoruz. R tabanından library()
ile kurulu paketleri de yükleyebilirsiniz. R paketleri hakkında daha fazla bilgi için [R basics] sayfasına bakabilirsiniz.
::p_load(
pacman# verileri içe aktarmak için
rio, # dosyaları bulmak için
here, # verileri temizlemek, işlemek ve çizmek için (ggplot2 paketini içerir)
tidyverse, # Basit Özellik formatı kullanarak uzamsal verileri yönetmek için
sf, # basit haritalar üretmek için hem etkileşimli hem de statik haritalar için çalışır
tmap, # sütun adlarını temizlemek için
janitor, # ggplot haritasına OSM altlık haritası eklemek için
OpenStreetMap, # mekansal istatistik
spdep )
CRAN “Uzamsal Görev Görünümü”nde uzamsal verilerle ilgilenen tüm R paketlerinin bir özetini görebilirsiniz.
Örnek vaka verileri
Gösteri amacıyla, simüle edilmiş Ebola salgını “satır listesi” veri çerçevesinden rastgele 1000 vakalık bir örneklemle çalışacağız (hesaplamalı olarak, daha az vakayla çalışmak bu el kitabında daha kolaydır). Takip etmek isterseniz, “clean” dosyasını indirmek için tıklayın. (.rds dosyası olarak).
Vakaların rastgele bir örneğini aldığımız için, kodları kendi başınıza çalıştırdığınızda sonuçlarınız burada gösterilenden biraz farklı görünebilir.
rio paketinden import()
fonksiyonuyla verileri içe aktarın (.xlsx, .csv, .rds gibi birçok dosya türünü işler - ayrıntılar için [İçe aktarma ve dışa aktarma] sayfasına bakın).
# temizlenmiş vaka satır listesini içe aktarmak
<- import("linelist_cleaned.rds") linelist
Daha sonra R tabanından sample()
kullanarak 1000 satırlık rastgele bir örnek seçiyoruz.
# satır listesindeki satır sayısından 1000 rastgele satır numarası üretmek
<- sample(nrow(linelist), 1000)
sample_rows
# yalnızca örnek satırları ve tüm sütunları tutmak için alt küme satır listesi üretmek
<- linelist[sample_rows,] linelist
Şimdi sınıf veri çerçevesi olan bu ’linelist’i “sf” (uzaysal özellikler) sınıfının bir nesnesine dönüştürmek istiyoruz. Satır listesinin, her vakanın ikametgahının enlem ve boylamını temsil eden iki sütun “boy” ve “en” olduğu göz önüne alındığında, bu kolay olacaktır.
sf (uzaysal özellikler) paketini ve onun ‘st_as_sf()’ fonksiyonunu ‘linelist_sf’ dediğimiz yeni nesneyi yaratmak için kullanırız. Bu yeni nesne, esasen satır listesiyle aynı görünüyor, ancak “boy” ve “enlem” sütunları koordinat sütunları olarak belirlenmiş ve noktalar görüntülendiğinde bir koordinat referans sistemi (CRS) atanmıştır. 4326, koordinatlarımızı, GPS koordinatları için standart olan World Geodetic System 1984 (WGS84) temelinde tanımlar.
# sf nesnesi oluşturmk
<- linelist %>%
linelist_sf ::st_as_sf(coords = c("lon", "lat"), crs = 4326) sf
Orijinal “satır listesi” veri çerçevesi bu şekilde görünür. Bu gösterimde, yalnızca “date_onset” ve “geometry” (yukarıdaki boylam ve enlem alanlarından oluşturulan ve veri çerçevesindeki son sütun olan) sütununu kullanacağız.
::datatable(head(linelist_sf, 10), rownames = FALSE, options = list(pageLength = 5, scrollX=T), class = 'white-space: nowrap' ) DT
Yönetici sınır şekil dosyaları
Sierra Leone: Yönetici sınır şekil dosyaları
Sierra Leone için tüm idari sınırları önceden İnsani Veri Değişimi’nden (HDX) web sitesi burada indirdik. ). Alternatif olarak, bu el kitabı için bunları ve diğer tüm örnek verileri [El kitabını ve verileri indir] sayfasında açıklandığı gibi R paketimiz aracılığıyla indirebilirsiniz.
Şimdi Admin Level 3 şekil dosyasını R’a kaydetmek için aşağıdakileri yapacağız:
- Şekil dosyasını içe aktarın
- Sütun adlarını temizleyin
- Yalnızca ilgi alanlarını korumak için satırları filtreleyin
Bir şekil dosyasını içe aktarmak için sf’den read_sf()
fonksiyonunu kullanırız. Dosya yolu here()
ile sağlanır. - bizim durumumuzda dosya, “data”, “gis” ve “shp” alt klasörlerinde “sle_adm3.shp” dosya adıyla R projemizin içindedir (daha fazla bilgi için [İçe aktarma ve dışa aktarma] ve [R projeleri] sayfalarına bakabilirsiniz). Kendi dosya yolunuzu sağlamanız gerekecek.
Daha sonra, şekil dosyasının sütun adlarını standartlaştırmak için janitor paketinden clean_names()
kullanıyoruz. Ayrıca sadece “Western Area Urban” veya “Western Area Rural” admin2name ile satırları tutmak için filter()
kullanırız.
# ADM3 seviyesi temizlik
<- sle_adm3_raw %>%
sle_adm3 ::clean_names() %>% # sütun isimlerini standardize etmek
janitorfilter(admin2name %in% c("Western Area Urban", "Western Area Rural")) # belirli alanları tutmak için filtrelemek
Aşağıda, içe aktarma ve temizleme işleminden sonra şekil dosyasının nasıl göründüğünü görebilirsiniz. sağa doğru kaydırın yönetici düzeyi 0 (ülke), yönetici düzeyi 1, yönetici düzeyi 2 ve son olarak yönetici düzeyi 3 olan sütunların nasıl olduğunu görmek için her düzeyin bir karakter adı ve benzersiz bir “pcode” tanımlayıcısı vardır. Pcode, artan her yönetici düzeyiyle birlikte genişler; SL (Sierra Leone) -> SL04 (Batı) -> SL0410 (Batı Bölgesi Kırsal) -> SL040101 (Koya Kırsal).
Nüfus verileri
Sierra Leone: ADM3’e göre nüfus
Bu veriler tekrar HDX’ten (bağlantı buradan) veya [bu sayfada] açıklandığı gibi epirhandbook R paketimizden indirilebilir. [El kitabını ve verileri indirin]. .csv dosyasını yüklemek için import()
kullanıyoruz. Ayrıca, sütun adı sözdizimini standartlaştırmak için içe aktarılan dosyayı clean_names()
öğesine iletiyoruz.
# ADM3'e göre nüfus
<- import(here("data", "gis", "population", "sle_admpop_adm3_2020.csv")) %>%
sle_adm3_pop clean_names()
Popülasyon dosyası böyle görünüyor. Her yetki alanında “erkek” nüfus, “kadın” nüfus, “toplam” nüfus ve yaş grubuna göre nüfus dökümü sütunlarının nasıl olduğunu görmek için sağa kaydırın.
Sağlık Tesisleri
Sierra Leone: OpenStreetMap’ten alınan sağlık tesisi verileri
Yine sağlık tesislerinin konumlarını HDX buradan veya [el kitabını ve verileri indir] sayfasındaki talimatlar aracılığıyla indirdik.
Tesis noktaları şekil dosyasını read_sf()
ile içe aktarıyoruz, sütun adlarını tekrar temizliyoruz ve ardından yalnızca “hastane”, “klinik” veya “doktorlar” olarak etiketlenmiş noktaları tutmak için filtreliyoruz.
# OSM sağlık tesisi şekil dosyası
<- sf::read_sf(here("data", "gis", "shp", "sle_hf.shp")) %>%
sle_hf clean_names() %>%
filter(amenity %in% c("hospital", "clinic", "doctors"))
İşte ortaya çıkan veri çerçevesi - tesis adını ve “geometri” koordinatlarını görmek için sağa kaydırın.
28.5 Koordinatları grafikleştirme
Bu durumda X-Y koordinatlarını (boylam/enlem, noktalar) çizmenin en kolay yolu, bunları doğrudan hazırlık bölümünde oluşturduğumuz linelist_sf
nesnesinden nokta olarak çizmektir.
tmap paketi, hem statik (“çizim” modu) hem de etkileşimli (“görünüm” modu) için yalnızca birkaç satır kodla basit eşleme yetenekleri sunar. tmap sözdizimi ggplot2’ninkine benzerdir, öyle ki komutlar `+’ ile birbirine eklenir. Bu gösterimde daha fazla ayrıntı okuyabilirsiniz.
- tmap modunu ayarlayın. Bu durumda statik çıktılar üreten “plot” modunu kullanacağız.
tmap_mode("plot") # "görünüm" veya "grafik"i seçin
Aşağıda, noktalar tek başına çizilir.tm_shape()``,
linelist_sfnesneleri ile sağlanır. Daha sonra boyut ve rengi belirterek
tm_dots()` aracılığıyla noktalar ekliyoruz. “linelist_sf” bir sf nesnesi olduğundan, enlem/boylam koordinatlarını ve koordinat referans sistemini (CRS) içeren iki sütunu zaten belirledik:
# noktalar sadece vakalar
tm_shape(linelist_sf) + tm_dots(size=0.08, col='blue')
Yalnız, puanlar bize fazla bir şey söylemez. Dolayısıyla idari sınırları da haritalandırmalıyız:
Yine tm_shape()
kullanıyoruz (bkz. [dokümantasyon] https://www.rdocumentation.org/packages/tmap/versions/3.3/topics/tm_shape)) ancak vaka noktaları şekil dosyası sağlamak yerine, idari sınır şekil dosyası (çokgenler) sağlıyoruz.
bbox =
değişkeniyle (bbox “sınırlayıcı kutu” anlamına gelir) koordinat sınırlarını belirleyebiliriz. Önce harita gösterimini bbox
olmadan ve sonra onunla birlikte gösteriyoruz.
# Çokgenler sadece idari sınırlar
tm_shape(sle_adm3) + # yönetici sınırları şekil dosyası
tm_polygons(col = "#F7F7F7")+ # çokgenleri açık gri olarak göster
tm_borders(col = "#000000", # renk ve çizgi ağırlığı ile sınırları göster
lwd = 2) +
tm_text("admin3name") # her çokgen için görüntülenecek sütun metni
# Yukarıdakiyle aynı, ancak sınırlayıcı kutudan yakınlaştırma ile
tm_shape(sle_adm3,
bbox = c(-13.3, 8.43, # corner
-13.2, 8.5)) + # corner
tm_polygons(col = "#F7F7F7") +
tm_borders(col = "#000000", lwd = 2) +
tm_text("admin3name")
Ve şimdi hem noktalar hem de çokgenler birlikte:
# Hepsi birlikte
tm_shape(sle_adm3, bbox = c(-13.3, 8.43, -13.2, 8.5)) +
tm_polygons(col = "#F7F7F7") +
tm_borders(col = "#000000", lwd = 2) +
tm_text("admin3name")+
tm_shape(linelist_sf) +
tm_dots(size=0.08, col='blue', alpha = 0.5) +
tm_layout(title = "Distribution of Ebola cases") # haritaya isim vermek
R’daki eşleme seçeneklerinin iyi bir karşılaştırmasını okumak için bu blog gönderisine bakabilirsiniz.
28.6 Mekansal birleşimler
Verileri bir veri kümesinden diğerine birleştirmeye aşina olabilirsiniz. Bu el kitabının [Birleştirme verileri] sayfasında çeşitli yöntemler tartışılmaktadır. Bir uzamsal birleşim benzer bir amaca hizmet eder, ancak uzamsal ilişkilerden yararlanır. Gözlemleri doğru bir şekilde eşleştirmek için sütunlardaki ortak değerlere güvenmek yerine, bir özelliğin bir diğerinin içinde olması veya bir diğerine en yakın komşu olması veya belirli bir yarıçapın tampon içinde olması gibi uzamsal ilişkilerini kullanabilirsiniz.
sf paketi, uzamsal birleşimler için çeşitli yöntemler sunar. Bu başvuruda st_join yöntemi ve uzamsal birleştirme türleri hakkında daha fazla belgeye bakabilirsiniz.
Çokgendeki noktalar
Mekansal olarak vakalara idari birimler atama
İşte ilginç bir muamma: vakaların satır listesi, vakaların idari birimleri hakkında herhangi bir bilgi içermiyor. İlk veri toplama aşamasında bu tür bilgileri toplamak ideal olsa da, uzamsal ilişkilerine dayalı olarak bireysel vakalara idari birimler de atayabiliriz (yani nokta bir çokgenle kesişir).
Aşağıda, durum konumlarımızı (noktaları) ADM3 sınırları (poligonlar) ile uzamsal olarak keseceğiz:
- Satır listesi(puan) ile başlayın
- Sınırlara uzamsal birleştirme, birleştirme türünü “st_intersects” olarak ayarlayın
- Yeni yönetim sınırı sütunlarından yalnızca belirli bir kısmını tutmak için
select()
kullanın
<- linelist_sf %>%
linelist_adm
# idari sınır dosyasını uzamsal kesişime dayalı olarak satır listesine ekleyin
::st_join(sle_adm3, join = st_intersects) sf
’sle_adms’deki tüm sütunlar satır listesine eklendi! Artık her vaka, içinde bulunduğu idari seviyeleri detaylandıran sütunlara sahiptir. Bu örnekte, yeni sütunlardan yalnızca ikisini (yönetici düzeyi 3) tutmak istiyoruz, bu nedenle eski sütun adlarını ve yalnızca iki ek ilgiyi “select()” yapıyoruz:
<- linelist_sf %>%
linelist_adm
# idari sınır dosyasını uzamsal kesişime dayalı olarak satır listesine ekleyin
::st_join(sle_adm3, join = st_intersects) %>%
sf
# Eski sütun adlarını ve ilgilendiğiniz iki yeni yönetici adlarını saklayın
select(names(linelist_sf), admin3name, admin3pcod)
Aşağıda, yalnızca görüntüleme amacıyla, noktanın çokgen şekilleriyle uzamsal olarak kesiştiği yere bağlı olarak ilk on vakayı ve bunların admin seviyesi 3 (ADM3) yargı yetkilerini görebilirsiniz.
# Şimdi her bir vakaya eklenmiş ADM3 adlarını göreceksiniz.
%>% select(case_id, admin3name, admin3pcod) linelist_adm
Simple feature collection with 1000 features and 3 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -13.27101 ymin: 8.448085 xmax: -13.20725 ymax: 8.490662
Geodetic CRS: WGS 84
First 10 features:
case_id admin3name admin3pcod geometry
1823 7a14dd Mountain Rural SL040102 POINT (-13.21995 8.448376)
2407 80fdfb Mountain Rural SL040102 POINT (-13.21994 8.477752)
4553 801839 East III SL040205 POINT (-13.20911 8.481916)
5296 08877f West II SL040207 POINT (-13.25233 8.472419)
3335 3c86fe West II SL040207 POINT (-13.22427 8.461701)
545 160b12 Central II SL040202 POINT (-13.23829 8.489217)
3046 73be6b East II SL040204 POINT (-13.21209 8.478791)
5499 2a61fd East III SL040205 POINT (-13.20923 8.463647)
5721 eb460a West II SL040207 POINT (-13.25167 8.474329)
5821 c49942 East I SL040203 POINT (-13.21732 8.489863)
Şimdi durumlarımızı idari birime göre tanımlayabiliriz - uzaysal birleşmeden önce yapamadığımız bir şey!
# İdari birime göre vaka sayılarını içeren yeni veri çerçevesi yapın
<- linelist_adm %>% # yeni yönetici sütunlarına sahip satır listesiyle başlayın
case_adm3 as_tibble() %>% # daha iyi görüntü için tibble'a dönüştürün
group_by(admin3pcod, admin3name) %>% # admin birimine göre gruplandır, hem ada hem de pkoda göre
summarise(cases = n()) %>% # satırları özetle ve say
arrange(desc(cases)) # azalan sırada düzenle
case_adm3
# A tibble: 10 × 3
# Groups: admin3pcod [10]
admin3pcod admin3name cases
<chr> <chr> <int>
1 SL040102 Mountain Rural 268
2 SL040208 West III 223
3 SL040207 West II 172
4 SL040204 East II 121
5 SL040203 East I 65
6 SL040201 Central I 59
7 SL040206 West I 42
8 SL040205 East III 24
9 SL040202 Central II 23
10 <NA> <NA> 3
Ayrıca idari birime göre vaka sayımlarının bir çubuk grafiğini de oluşturabiliriz.
Bu örnekte, ggplot()‘a ’linelist_adm’ ile başlıyoruz, böylece çubukları frekansa göre sıralayan ‘fct_infreq()’ gibi faktör fonksiyonlarını uygulayabiliriz (ipuçları için [Faktörler] sayfasına bakınız).
ggplot(
data = linelist_adm, # yönetici birimi bilgilerini içeren satır listesiyle başlayın
mapping = aes(
x = fct_rev(fct_infreq(admin3name))))+ # x ekseni, frekansa göre sıralanmış (tersine çevrilmiş) yönetici birimleridir
geom_bar()+ # çubuk oluştur, yükseklik satır sayısıdır
coord_flip()+ # adm birimlerinin daha kolay okunması için X ve Y eksenlerini çevirin
theme_classic()+ # arka planı basitleştirir
labs( # başlık ve etiket
x = "Admin level 3",
y = "Number of cases",
title = "Number of cases, by adminstative unit",
caption = "As determined by a spatial join, from 1000 randomly sampled cases from linelist"
)
En yakın komşu
En yakın sağlık kuruluşunu / toplanma alanını bulma
Hastalık sıcak noktaları ile ilgili olarak sağlık tesislerinin nerede olduğunu bilmek faydalı olabilir.
Bireysel vakalara en yakın sağlık tesisini görselleştirmek için st_join()
fonksiyonundan (sf paketi) st_nearest_feature birleştirme yöntemini kullanabiliriz.
- Satır listesinin şekil dosyası
linelist_sf
ile başlıyoruz - Sağlık tesislerinin ve kliniklerin konumları olan
sle_hf
ile mekansal olarak birleştiriyoruz (puan)
# Her vakaya en yakın sağlık kuruluşu
<- linelist_sf %>% # satır listesini şekil dosyası ile başla
linelist_sf_hf st_join(sle_hf, join = st_nearest_feature) %>% # vaka verilerine en yakın klinikten alınan veriler
select(case_id, osm_id, name, amenity) %>% # sağlık tesisinin adı, türü ve geometrisi dahil olmak üzere ilgili sütunları tutmak
rename("nearest_clinic" = "name") # netlik için yeniden adlandırın
Aşağıda (ilk 50 satır) her vakanın artık en yakın klinik/hastaneye ait verileri olduğunu görebiliriz.
Vakaların yaklaşık %30’u için en yakın sağlık kuruluşunun “Den Clinic” olduğunu görebiliyoruz.
# Sağlık kuruluşuna göre vaka sayıları
<- linelist_sf_hf %>% # en yakın klinik verilerini içeren satır listesiyle başlayın
hf_catchment as.data.frame() %>% # şekil dosyasından veri çerçevesine dönüştür
count(nearest_clinic, # satırları "ad" ile sayın (kliniğin)
name = "case_n") %>% # yeni sayım sütununu "case_n" olarak ata
arrange(desc(case_n)) # azalan sırada düzenlemek
# konsola yazdırmak hf_catchment
nearest_clinic case_n
1 Den Clinic 360
2 Shriners Hospitals for Children 307
3 GINER HALL COMMUNITY HOSPITAL 192
4 panasonic 47
5 Princess Christian Maternity Hospital 38
6 ARAB EGYPT CLINIC 26
7 MABELL HEALTH CENTER 15
8 <NA> 15
Sonuçları görselleştirmek için tmap kullanabiliriz - bu sefer daha kolay görüntüleme için etkileşimli mod
tmap_mode("view") # tmap modunu etkileşimli olarak ayarla
# vakaları ve klinik noktaları çizin
tm_shape(linelist_sf_hf) + # vaka grafikleri
tm_dots(size=0.08, # en yakın klinik tarafından renklendirilen vakalar
col='nearest_clinic') +
tm_shape(sle_hf) + # klinik tesisleri büyük siyah noktalarla çizin
tm_dots(size=0.3, col='black', alpha = 0.4) +
tm_text("name") + # tesis adı ile üzerine bindirme
tm_view(set.view = c(-13.2284, 8.4699, 13), # yakınlaştırmayı ayarla (merkez kodları, yakınlaştırma)
set.zoom.limits = c(13,14))+
tm_layout(title = "Cases, colored by nearest clinic")
Tamponlar
Ayrıca en yakın sağlık kuruluşuna 2,5 km (~30 dakika) yürüme mesafesinde kaç vaka bulunduğunu da keşfedebiliriz.
Not: Daha doğru mesafe hesaplamaları için, sf nesnenizi UTM (düzlemsel bir yüzeye yansıtılan Dünya) gibi ilgili yerel harita projeksiyon sistemine yeniden yansıtmak daha iyidir. Bu örnekte, basit olması için Dünya Jeodezi Sistemi (WGS84) Coğrafi koordinat sistemine bağlı kalacağız (Dünya küresel / yuvarlak bir yüzeyde temsil edilir, bu nedenle birimler ondalık derece cinsindendir). Genel bir dönüşüm kullanacağız: 1 ondalık derece = ~111km.
Bu esri makalesinde harita projeksiyonları ve koordinat sistemleri hakkında daha fazla bilgi bulabilirsiniz. Bu blog harita projeksiyonu ve ilgi alanına ve haritanızın / analizinizin içeriğine bağlı olarak uygun bir projeksiyonun nasıl seçilebileceği gibi farklı türlerden bahsetmektedir.
İlkin, her sağlık tesisinin çevresinde ~2,5 km yarıçaplı dairesel bir tampon oluşturun. Bu, tmap’teki st_buffer()
fonksiyonuyla yapılır. Haritanın birimi enlem/boylam ondalık derece cinsinden olduğundan, “0,02” bu şekilde yorumlanır. Harita koordinat sisteminiz metre cinsinden ise sayının metre cinsinden verilmesi gerekir.
<- sle_hf %>%
sle_hf_2k st_buffer(dist=0.02) # ondalık derece, yaklaşık 2,5 km'ye eşittir
Aşağıda, tampon bölgeleri şu şekilde çiziyoruz:
tmap_mode("plot")
# Create circular buffers
tm_shape(sle_hf_2k) +
tm_borders(col = "black", lwd = 2)+
tm_shape(sle_hf) + # klinik tesislerini büyük kırmızı noktalarla çizin
tm_dots(size=0.3, col='black')
**İkinci olarak, bu arabellekleri ‘st_join()’ ve st_intersects* birleştirme türünü kullanarak durumlar (noktalar) ile kesiştiririz. Yani tamponlardan gelen veriler kesiştikleri noktalara birleştirilir.
# Vakaları arabelleklerle kesiştirin
<- linelist_sf_hf %>%
linelist_sf_hf_2k st_join(sle_hf_2k, join = st_intersects, left = TRUE) %>%
filter(osm_id.x==osm_id.y | is.na(osm_id.y)) %>%
select(case_id, osm_id.x, nearest_clinic, amenity.x, osm_id.y)
Şimdi sonuçları sayabiliriz: nrow(linelist_sf_hf_2k[is.na(linelist_sf_hf_2k$osm_id.y),])
1000 vakadan herhangi biri arabellekle kesişmedi (bu değer eksik) ve bu yüzden en yakın sağlık kuruluşundan 30 dakikadan fazla yürüyün.
# Sağlık tesisi tamponlarından herhangi biriyle kesişmeyen vakalar
%>%
linelist_sf_hf_2k filter(is.na(osm_id.y)) %>%
nrow()
[1] 1000
Sonuçları, herhangi bir arabellekle kesişmeyen vakaların kırmızı görüneceği şekilde görselleştirebiliriz.
tmap_mode("view")
# İlk önce vakaları puan olarak görüntüleyin
tm_shape(linelist_sf_hf) +
tm_dots(size=0.08, col='nearest_clinic') +
# klinik tesisleri büyük siyah noktalarla çizin
tm_shape(sle_hf) +
tm_dots(size=0.3, col='black')+
# Ardından sağlık tesisi arabelleklerini çoklu çizgilerle kaplayın
tm_shape(sle_hf_2k) +
tm_borders(col = "black", lwd = 2) +
# Herhangi bir sağlık tesisi tamponunun parçası olmayan vakaları vurgulayın
# kırmızı noktalarda
tm_shape(linelist_sf_hf_2k %>% filter(is.na(osm_id.y))) +
tm_dots(size=0.1, col='red') +
tm_view(set.view = c(-13.2284,8.4699, 13), set.zoom.limits = c(13,14))+
# Başlık ekleyin
tm_layout(title = "Cases by clinic catchment area")