Çalışma kapsamında ağırlıklı olarak leaflet, leaflet.extras, leaflet.extras2 ve mapview paketleri kullanılarak harita üzerinde etiketleme çalışmaları ile farklı formatta kaydetme çalışmaları yapılmıştır. Çalışmada R Markdown üzerinde R programlama dili kullanılmıştır.
Yüklenen Kütüphaneler
Aşağıdaki R kod bloğunun çalıştırılmasından sonra kütüphanelerin yüklenip yüklenmediğine dair aşağıdaki gibi mantıksal vektör sonuçları gelecektir. Eğer mantıksal vektör sonuçlarının hepsi TRUE ise kütüphanelerin tamamı yüklenmiştir. Kolaylık sağlaması açısından aşağıdaki kütüphanelerin yüklenmesini gösterir tabloyu da elde etmek ve daha kolay okumanız için aşağıdaki kod bloğu içerisinde kısa bir kod yazdım. Bu kod çalıştırıldığında aşağıdaki tabloda görüleceği üzere bütün kütüphaneler yüklenmiştir. Eğer ilgili kütüphane yüklenmemiş olursa Paket Kurulumu Gerekli ifadesi tablo satırında yazacaktır. Satırda yazan bu uyarı metnine göre paketi ya kurar yada yüklersiniz. Bir paketin kurulması ile yüklenmesinin aynı şey olmadığını burada ifade etmek gerekir konuyu yabancı olanlar için. Paket kurulumu ilk defa yapılan bir işlem iken, paketin yüklenmesi zaten kurulan bir paketin yüklenmesi yani çalışır duruma getirilmesidir. İlk defa bir paket kurulumu gerçekleştiriliyorsa install.packages() fonksiyonunu, zaten bir paket kurulumu gerçekleştirilmiş ise ilgili paketin veya kütüphanenin yüklenmesi veya okunması için library() veya require() fonksiyonlarını kullanıyoruz. Aşağıda yazılan kod bloğunda c() vektörü içerisine yüklenecek paket veya kütüphane adını yazıyoruz.
kütüphane<-c("dplyr","tibble","tidyr","ggplot2","readr","RColorBrewer","crosstalk","leaflet","DT", "htmlwidgets","kableExtra","readr", "leaflet.extras", "sf", "plotly", "leafpop", "downloadthis", "tidygeocoder", "leaflet.extras2")
yükle<-sapply(kütüphane, require, character.only = TRUE, warn.conflicts = FALSE)
#Kütüphane yüklenme durumunu gösteren tablo
tablo=suppressWarnings(yükle, classes = "warning")
isim=names(tablo)
deger=as_tibble(tablo)
data.frame(sıra=1:length(isim), kütüphane=isim, yuklenme_durumu=deger$value) %>% mutate(yuklenme_durumu=if_else(yuklenme_durumu==TRUE, "Yuklendi", "Paket Kurulumu Gerekli")) %>% kbl(caption = "Kütüphane Yüklenme Bilgisi") %>% kable_classic_2(full_width = F, html_font="arial")
Yukarıdaki kod bloğunun çalıştırılmasından sonra kütüphane yüklenme bilgisi aşağıdaki tabloda verilmiştir.
Veri Setinin Oluşturulması
Bu kısımda sentetik veri seti üretilerek bu veri seti üzerinde haritalama çalışmaları yapılmıştır.
deneme <- data.frame(
Firma = rep(c("Ulusoy", "Metro", "Süzer", "Kanberoğlu"),3),
Adres = rep(c("Ankara","İstanbul","Artvin","Rize"), 3),
Tur=rep(c("A","B"),6),
Ciro =rep(c(10000, 12500,30000,40000, 60000,80000),2)) %>%
tidygeocoder::geocode(address = Adres, method = "osm", verbose = TRUE)
deneme
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen veri seti aşağıdaki tabloda verilmiştir. Kod bloğunda tidygeocoder::geocode() fonksiyonunun kullanılmasının nedeni illere göre enlem (lat) ve boylam (long) bilgisinin alınarak veri setine iki ayrı değişken olarak eklenmek istenmesidir. Doğal olarak enlem ve boylam bilgisi olmadan harita oluşturamıyoruz.
Haritanın Oluşturulması
leaflet(deneme) %>%
addTiles(group = "OpenStreetMap") %>%
addPulseMarkers(lng =~long, lat=~lat, icon = makePulseIcon(), label=paste(deneme$Firma,"firmasının cirosu:", deneme$Ciro), labelOptions = labelOptions(noHide = F, direction = 'top', style = list(
"color" = "green",
"font-family" = "calibri",
"font-style" = "bold",
"box-shadow" = "3px 3px rgba(0,0,0,0.25)",
"font-size" = "15px",
"border-color" = "rgba(0,0,0,0.5)"
))) %>%
addMiniMap() %>%
addSearchOSM() %>%
addReverseSearchOSM() %>%
addResetMapButton() %>%
addSearchGoogle()
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen harita aşağıda verilmiştir. R Studio üzerinde çalıştırıldığında harita üzerinde bulunan kırmızı işaretleyiciler yanıp sönmektedir. Bunun için addPulseMarkers() fonksiyonu kullanılmıştır. Ayrıca il üzerine tıklandığında açılan bir etiket tanımlanmıştır. Bu etiket atama işlemi ise label=paste(deneme$Firma,”firmasının cirosu:”, deneme$Ciro) fonksiyonu ile yapılmıştır. Yani kırmızı kutu üzerine işaretleyiciler üzerine tıklandığında Firma adı ile birlikte cirosu görünecektir. addMiniMap() fonskiyonu ile de harita üzerinde mini bir harita oluşturulmuştur.
Haritada il üzerine tıklandığında açılan bir etiket aşağıdaki gibi olacaktır. Eğer etiketleri harita üzerinde sabitlemek istiyorsak labelOptions = labelOptions(noHide = T) fonksiyonunu yazmamız yeterlidir.
Belirli Bir Bölgenin Kare İçine Alınarak İşaretlenmesi I
Yukarıda yapılan işlemlerden farklı olarak faydalı olabilir düşüncesiyle harita üzerinde belirli koordinatlara sahip bir bölgenin kare içerisine alınması işlemini de göstermek istiyorum. Bu uygulama için Türkiye örneği üzerinden gidelim.
leaflet() %>% addTiles() %>%
addRectangles(
lng1=25, lat1=35,
lng2=45, lat2=43,
fillColor = "transparent", color="red", label="TÜRKİYE'NİN YAKLAŞIK KOORDİNATLARI", labelOptions = labelOptions(noHide = T, direction = 'top')
)
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Türkiye haritası kare içerisine alınmış bir şekilde aşağıda verilmiştir. Kare içerisine alınma işlemi addRectangles() fonksiyonu ile yapılmaktadır. Burada enlem ve boylamlar sırasıyla kuzey ve güney, ve aynı zamanda doğu ve batı şeklinde belirlenmelidir.
Belirli Bir Bölgenin Kare İçine Alınarak İşaretlenmesi II
Bu kısımda bir öncekinden farklı olarak kare içerisine alınmış bölgenin etiketi stilize edilmiştir. Bu amaçla aşağıda da görüleceği üzere addRectangles() fonskiyonu içerisinde tanımlanmış labelOptions parametresi içerisinde tanımlanmış style alt parametrisi kullanılmıştır.
leaflet() %>% addTiles() %>%
addRectangles(
lng1=25, lat1=35,
lng2=45, lat2=43,
fillColor = "transparent", color="red", label="YENİ STİLDE TÜRKİYE'NİN YAKLAŞIK KOORDİNATLARI", labelOptions = labelOptions(noHide = T, direction = 'top', style = list(
"color" = "black",
"font-family" = "Cursive",
"font-style" = "Lucida Handwritingl",
"box-shadow" = "3px 3px rgba(0,0,0,0.25)",
"font-size" = "14px",
"border-color" = "rgba(0,0,0,0.5)",
"padding" = "4px",
"background-color"= "rgba(255, 255, 255, 2)",
"font-weight" = "bold"
)))
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Türkiye haritası kare içerisine alınmış bir şekilde yeni etiket tasarımı ile aşağıda verilmiştir.
Haritanın PNG ve JPEG Formatlarında Kaydedilmesi
Harita üzerinde yaptığımız işlemlerden sonra eğer haritayı kaydetmek istiyorsak önümüze farklı formatta seçenekler çıkmaktadır. Bu formatlar, html, png, pdf ve jpeg formatları olabilmektedir. Farklı formatlarda haritanın kaydedilmesi için bu kısımda mapview paketi kullanılmıştır. Aşağıdaki çalışmada bir önceki çalışmada elde edilmiş harita png formatında kaydedilmiştir. Bu kaydetme işleminde kullanılan fonksiyon mapshot() olup, bu fonksiyon içerisinde diğer formatlar da tanımlanabilmektedir.
library(mapview)
leaflet() %>%
addTiles() %>%
addRectangles(
lng1=25, lat1=35,
lng2=45, lat2=43,
fillColor = "transparent", color="red", label="YENİ STİLDE TÜRKİYE'NİN YAKLAŞIK KOORDİNATLARI", labelOptions = labelOptions(noHide = T, direction = 'top', style = list(
"color" = "black",
"font-family" = "Cursive",
"font-style" = "Lucida Handwritingl",
"box-shadow" = "3px 3px rgba(0,0,0,0.25)",
"font-size" = "14px",
"border-color" = "rgba(0,0,0,0.5)",
"padding" = "4px",
"background-color"= "rgba(255, 255, 255, 2)",
"font-weight" = "bold"
))) %>%
mapshot(file = "Turkiye.png")
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Türkiye haritası kare içerisine alınmış bir şekilde png formatında aşağıda verilmiştir.
Bir diğer çalışmamızda ise çalışmamızın başında oluşturduğumuz haritayı jpeg formatında kaydedelim.
leaflet(deneme) %>%
addTiles(group = "OpenStreetMap") %>%
addPulseMarkers(lng =~long, lat=~lat, icon = makePulseIcon(), label=paste(deneme$Firma,"firmasının cirosu:", deneme$Ciro), labelOptions = labelOptions(noHide = F, direction = 'top', style = list(
"color" = "green",
"font-family" = "calibri",
"font-style" = "bold",
"box-shadow" = "3px 3px rgba(0,0,0,0.25)",
"font-size" = "15px",
"border-color" = "rgba(0,0,0,0.5)"
))) %>%
mapshot(file = "Turkiyeciro.jpeg")
Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen haritamız jpeg formatında aşağıda verilmiştir.
Sonuç
Verinin harita üzerinde görselleştirilmesine yönelik yaptığım çalışmalardan biri olan bu R Markdown çalışmasının özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunacağı düşünülmektedir.
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Saygılarımla…
Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
Note: It can not be cited or copied without referencing.
Yararlanılan Kaynaklar
- https://rstudio.github.io/crosstalk/
- https://emilyriederer.github.io/demo-crosstalk/tutorial/tutorial-rmd.html
- https://www.jla-data.net/eng/leaflet-markers-in-r/
- https://rstudio.github.io/leaflet/popups.html
- https://rstudio.github.io/crosstalk/using.html
- https://emilyriederer.github.io/demo-crosstalk/tutorial/tutorial-rmd.html
- https://plotly-r.com/client-side-linking.html
- https://nicar.r-journalism.com/docs/crosstalk-flexdashboard-leaflet-datatable/
- https://rstudio-pubs-static.s3.amazonaws.com/367074_7396dc3734544b0f94e04b8801b24664.html
- https://rstudio.github.io/crosstalk/using.html
11.https://rpubs.com/tevfik1461/deprem
12.https://cran.r-project.org/web/packages/crosstalk/crosstalk.pdf
13.https://cran.r-project.org/web/packages/leaflet.extras2/leaflet.extras2.pdf
14.https://mrjoh3.github.io/2018/07/25/filtering-spatial-data/
15.https://rdrr.io/cran/leaflet/man/makeAwesomeIcon.html
16.https://rstudio.github.io/leaflet/popups.html
17.https://github.com/r-spatial/leafpop
18. Crostalk ve Leaflet Paketleriyle Türkiye Depremlerinin Analizi, https://rpubs.com/tevfik1461/harita
20. RStudio Cloud: https://login.rstudio.cloud/
21. The R Project for Statistical Computing. https://www.r-project.org/
22. Mapview paketi, https://cran.r-project.org/web/packages/mapview/index.html