Closed mucahitzor closed 9 months ago
Bu entegrasyonu SDI
fonksiyonunu kaybetmemek için SDI
fonksiyonu üzerinde yapmadım. SDI
fonksiyonunu SDI_MODIFIED
adlı bir fonksiyon olarak kopyaladım ve onun içerisinde distance calculatinı koydum. Doğru çalıştığını teyit etmek için 1. yöntemde önce distanceları igraph objesini SDI
fonksiyonuna koymadan hesaplıyorum, edge olarak kaydediyorum, SDI
fonksiyonuna verince ig objesini elde ettiğim sonuç ile ig nesnesini (distance içermeyen) SDI_MODIFIED
fonksiyonuna direkt koyduğum sonuç eşleşiyor.
Bu fonksiyon üzerinde testler yapacağım.
devtools::load_all()
require(igraph)
require(dplyr)
iedges <- TurkiyeMigration.flows
ivertices <- TurkiyeMigration.nodes
# convert to igraph object
ig <- graph_from_data_frame(iedges, directed = T, vertices = ivertices)
ig1 <- graph_from_data_frame(iedges, directed = T, vertices = ivertices)
# 1.yöntem: SDI a gelmeden önce hesaplama
E(ig)$distance <- dist_calc(ig)
SDI(ig)
# 2. yöntem: SDI fonksiyonu içerisinde hesaplama
SDI_MODIFIED(ig1, distance.calculation = 'Haversine')
??
SDI
fonksiyon içerisinde hesapladığımızda kullanıcı yapacağı hesaplamaların hepsini SDI
fonksiyonu içerisinde yapması gerekiyor. Yani kullanıcı g
nesnesini direkt olarak weightedNetworkSDI
, unweightedNetworkSDI
, weightedAllVerticesSDI(g, mode=mode)
, unweightedAllVerticesSDI(g, mode=mode)
gibi fonksiyonların içerisine sağladığında g
nesnesi distance içermediği için 0 olarak hesaplıyor veya NULL alıyor. Yani kullanıcı bu fonksiyonları tekil olarak kullanamıyor. Bu fonksiyonları kullanabilmek için SDI
fonksiyonu içerisinde argümanları kullanmak durumunda kalıyor. SDI
fonksiyonunda kullanılmayan fonksiyonlarımız da var, bu durumda onlarda distance olmayacağı için aynı problem geçerli.Bunun yerine load_SDI_data
fonksiyonuna eklersek distance calculationı bu sorun ortadan kalkıyor.
Ya da SDI fonksiyonu içerisinde kullanılan fonksiyonları kullancıya tekil olarak kullanıma sunmayacağız. Sadece SDI içerisinden hesaplama yapmak durumunda kalacak. ancak bu durumda SDI fonksiyonu içerisinde hesaplanmayan weigtedSingleVertexSDI
ve unweightedSingleVertexSDI
fonksiyonları için içeride tekrar distance hesaplamanması gerekiyor. Bunları da SDI fonksiyonu içerisine bir argümanla yedirebiliriz.
devtools::load_all()
require(igraph)
require(dplyr)
iedges <- TurkiyeMigration.flows
ivertices <- TurkiyeMigration.nodes
names(ivertices)
# convert to igraph object
ig <- graph_from_data_frame(iedges, directed = T, vertices = ivertices)
ig1 <- graph_from_data_frame(iedges, directed = T, vertices = ivertices)
# 1.yöntem: SDI a gelmeden önce hesaplama
E(ig)$distance <- dist_calc(ig)
SDI(ig, level = 'vertex', variant = 'unweighted')
# 2. yöntem: SDI fonksiyonu içerisinde hesaplama
SDI_MODIFIED(ig1, distance.calculation = 'Haversine', level = 'vertex', variant = 'unweighted')
unweightedAllVerticesSDI(ig)
unweightedAllVerticesSDI(ig1) # yanlış hesap
load_SDI_data(flows.file.path, nodes.file.path, directed=TRUE)
fonksiyonundan sağlancak igraph objesinde nodeslardan gelecek objede konum bilgileri
hesaplaması yapılacak şekilde düzenlenecek ( SDI fonsksiyonunda)