John Snow veri kümelerini harita koordinatlarına dönüştürme


14

R için HistData paketinde ( https://r-forge.r-project.org/R/?group_id=574 ) John Snow'un 1854 Londra'daki kolera salgını haritasına ilişkin veri kümeleri var. Walter Tobler'in gözetiminde dikkatli bir şekilde dijitalleştirilen yetkili kişilerdir. Bu veri setleriyle ilgili bazı ayrıntılar http://www1.udel.edu/johnmack/frec480/cholera/cholera2.html adresinde John Mackenzie tarafından açıklanmaktadır .

Ne yazık ki, ölümlerin, pompaların ve sokakların koordinatları, diğer CBS uygulamaları veya haritalama yazılımı için uygun koordinatları R (mekansal paketler, ggmap, vb.) Değil, rastgele bir koordinat sistemi kullanır.

Gelen http://freakonometrics.hypotheses.org/19213 Arthur Charpentier John Snow verilerin bir sürümü ile ggmap kullanır http://www.rtwilson.com/downloads/SnowGIS_v2.zip . Ancak Cholera_Deaths.shpdosya, kaydettiğim 578'i değil, sadece 489 ölümü listeliyor HistData::Snow.deaths.

Bir fikir (x, y) koordinatlarının ve yeniden ölçeklendirmenin ortalamaları ve standart sapmaları arasındaki ilişkileri bulmaktır, ama belki daha iyi bir yol vardır?

İşte şimdiye kadar denedim

> data(Snow.deaths, package="HistData")
> D <- Snow.deaths[,2:3]
> colMeans(D)
       x        y 
13.03312 11.69721 
> var(D)
          x         y
x 3.8150987 0.3802654
y 0.3802654 2.7213828

Cholera_deaths dosyasını okuyun

> folder <- "C:/Dropbox/R/data/Snow/SnowGIS_v2/SnowGIS"
> library(maptools)
> deaths <- readShapePoints(file.path(folder, "Cholera_Deaths"))
> head(deaths@coords)
  coords.x1 coords.x2
0  529308.7  181031.4
1  529312.2  181025.2
2  529314.4  181020.3
3  529317.4  181014.3
4  529320.7  181007.9
5  529336.7  181006.0
> # deaths has only 250 observations; 489 deaths
> sum(deaths@data$Count)
[1] 489

 > # try to relate to Snow.deaths
> X <- deaths@coords
> colnames(X) <- c("x", "y")
> 
> XX <- data.frame(X, Freq=deaths@data$Count)
> XX <- vcdExtra::expand.dft(XX)
> 
> colMeans(XX)
       x        y 
529414.8 181031.9 
> var(XX)
          x        y
x 10813.816 1521.693
y  1521.693 6227.924
>

Tamam, o zaman Daynı araçlara ve standart sapmalara sahip olmak için yeniden ölçeklemeye çalışıyorum XX, ama burada bir şey düzgün çalışmıyor - sütun araçlarının Dscaledaşağıdakilere eşit olduğu ortaya çıktı XX:

> # scale D to have the same means and standard deviations as XX
> Dscaled <- scale(D, center=TRUE, scale=TRUE)
> Dscaled <- scale(Dscaled, center=colMeans(XX), scale=sqrt(diag(var(XX))))
> colMeans(Dscaled)
        x         y 
-5091.040 -2293.947 
>

DÜZENLEME: R-Forge üzerinde SnowMap(axis.labels=TRUE)şimdi HistData(rev 102) geliştirme sürümünde, Snow'un haritasını yeni işlev tarafından çizilmiş olarak görmek yararlı olabilir . Eksen etiketleri, veri Snow.*veri kümelerimdeki gibi sol alt köşedeki koordinat sisteminin kökenini gösterir .

SnowMap


Ben sadece eşleştirmek için her veri kümesinden pompaları ölçeklemeye çalışıyorum. Koordinatlar hakkındaki yardım hattının (Snow.pumps) 100 metre olduğuna inanmıyorum, çünkü yaklaşık 54'lük bir ölçek (ve bir çeviri) bunları şekil dosyasının İngiltere ızgara koordinatlarına (kesinlikle metre). O zaman bile noktalar tam olarak örtüşmüyor, başka bir dönme / eğim açıkça mevcut. Daha az pompa olduğundan, her veri setinde karşılık gelen pompaları tanımlamak ve bunlar için kaydırmayı / çevirmeyi hesaplamak mümkündür.
Spacedman

HistData / inst / doc / Snow_deaths-duplicates.html'ye baktığınızı ve yararsız bulduğunuzu varsayıyorum.
barrycarter

Aynı zamanda, Snow.*dosyalarımdaki koordinatların , doğruluğu kontrol etmek için iki pompanın veya üç pompanın konumlarıyla GIS tabanlı bir haritadakilere doğrusal dönüşümünü elde edebildiğim oldu . Ne yazık ki, SnowGISdosyalardaki pompalar için etiket yok ve bunları görsel olarak karşılaştırabilmem için nasıl çizileceğine dair bir örnek görmedim.
user101089

1
Başlığınızı okuduktan sonra bir saniye orada, Westeros'taki koordinatları haritalamak istediğinizi düşündüm .
user35594

Yanıtlar:


4

Belki de şekil dosyasını http://donboyes.com/2011/10/14/john-snow-and-serendipity adresinden değerlendirin .

HistData Kar Ölümlerini Robin Wilson'un (@robintw) sürümüyle ilişkilendirmeye çalışmanın şekil dosyası, sokaktaki sokaktan yığılmış birden çok nokta yerine tek bir adreste birden fazla ölüm için tek bir nokta koordinatı içerdiğini düşünmüyorum haritası .

Robin'in versiyonunda kesinlikle çok puan eksik. Hızlı bir bakışla, kaçırılan çok az sayıda tek ölüm var. Başka bir sorun, haritanın merkezine, bir araya getirildiğinde düzgün bir şekilde kenar eşleşmediği (Wikipedia haritasında da görülebilir ) ve bu, bir dizi noktayı gizliyor.

İndirilen haritanın özeti :

resim açıklamasını buraya girin

UCLA sürümünden ayıkla :

resim açıklamasını buraya girin


Harika! Somutluk için, .shpdosyaların bağlantısı donboyes.com/download/snow_shp.zip
user101089

2

Bu sorunun cevabını tamamlamak için aşağıdaki kod, orijinal Tobler dosyalarındaki (in HistData) koordinatların ve Don Boyes tarafından ispatlanan koordinatların doğrusal dönüşümünü bulur .

folder <- "C:/Dropbox/R/data/Snow/snow_shp"
library(maptools)
deaths <- readShapePoints(file.path(folder, "deaths_gcs"))
data(Snow.deaths, package="HistData")
X <- deaths@coords
D <- Snow.deaths[,2:3]

Daha sonra, X [, 1] ve D [, 2] 'de D [, 1]' i X [, 2] 'de ilişkilendirin ve gerileyin. Doğrusal dönüşüm regresyon katsayıları ile verilir.

> cor(D[,1], X[,1])
[1] 0.9999664
> cor(D[,2], X[,2])
[1] 0.9995559
> 
> # linear transformations to GIS coords
> lm(D[,1] ~ X[,1])

Call:
lm(formula = D[, 1] ~ X[, 1])

Coefficients:
(Intercept)       X[, 1]  
      185.4       1264.7  

> 
> lm(D[,2] ~ X[,2])

Call:
lm(formula = D[, 2] ~ X[, 2])

Coefficients:
(Intercept)       X[, 2]  
    -105441         2047  
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.