John Snow 데이터 세트를지도 좌표로 변환하는 방법


14

R 용 HistData 패키지 ( https://r-forge.r-project.org/R/?group_id=574 )에는 1854 년 런던 콜레라 발생에 대한 John Snow의 맵과 관련된 데이터 세트가 있습니다. Walter Tobler의 감독하에 신중하게 디지털화되어 정통합니다. 이 데이터 세트에 대한 일부 세부 사항은 John Mackenzie ( http://www1.udel.edu/johnmack/frec480/cholera/cholera2.html)에 설명되어 있습니다.

불행히도, 사망, 펌프 및 거리의 좌표는 임의의 좌표계를 사용하지만 다른 GIS 응용 프로그램 또는 R의 매핑 소프트웨어 (공간 패키지, ggmap 등)에 적합한 좌표를 매핑하지 않습니다

에서 http://freakonometrics.hypotheses.org/19213 아서 CHARPENTIER은에서 존 스노 데이터의 버전 ggmap를 사용 http://www.rtwilson.com/downloads/SnowGIS_v2.zip . Cholera_Deaths.shp파일은, 그러나 만 489 명이 사망, 내가 기록하지 578을 나열합니다 HistData::Snow.deaths.

한 가지 아이디어는 (x, y) 좌표의 평균과 표준 편차 사이의 관계를 찾고 선형 적으로 스케일을 조정하는 것이지만 더 좋은 방법이 있습니까?

지금까지 시도한 내용은 다음과 같습니다.

> 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 파일을 읽으십시오

> 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
>

좋아, 그런 다음 D과 같은 평균과 표준 편차를 갖도록 크기 를 조정하려고 시도 XX하지만 여기서는 제대로 작동하지 않습니다. 열의 평균은 Dscaled다음과 동일해야합니다 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 
>

편집 : 이 문제 에서 R-Forge SnowMap(axis.labels=TRUE)의 개발 버전 HistData(rev 102)에서 새로운 기능으로 그려진 Snow 의지도를 보는 것이 도움이 될 수 있습니다 . 축 레이블에는 좌표계의 원점이 내 데이터 Snow.*데이터 세트 에있는 것처럼 왼쪽 하단에 표시됩니다 .

스노우 맵


방금 각 데이터 세트에서 펌프를 확장하려고했습니다. 좌표가 약 100 미터 인 도움말 (Snow.pumps)의 선은 믿지 않습니다. 약 54 스케일 (및 변환)은 셰이프 파일의 영국 그리드 좌표 (확실히있는 미터). 그럼에도 불구하고 점이 정확하게 겹치지 않고 다른 회전 / 비틀림이 명확하게 나타납니다. 펌프가 적기 때문에 각 데이터 세트에서 해당 펌프를 식별하고 해당 펌프에 대한 시프트 / 번역을 계산할 수 있습니다.
Spacedman

HistData / inst / doc / Snow_deaths-duplicates.html을보고 도움이되지 않았다고 가정합니다.
barrycarter

또한 Snow.*두 개의 펌프 또는 세 개의 위치로 정확도를 확인하기 위해 파일 의 좌표를 GIS 기반 맵 의 좌표로 선형 변환 할 수 있다는 점도 나에게 발생했습니다 . 불행히도 SnowGIS파일에 펌프에 대한 레이블이 없으며 시각적으로 비교할 수 있도록 플롯하는 방법에 대한 예를 보지 못했습니다.
user101089

1
제목을 읽은 후 잠시 동안 Westeros의 좌표를 매핑하려고한다고 생각했습니다 .
user35594

답변:


4

아마도 http://donboyes.com/2011/10/14/john-snow-and-serendipity 에서 shapefile을 평가하면 578 점이 있습니다.

HistData Snow Deaths를 Robin Wilson (@robintw) 버전과 관련시키려는 시도는 모양 파일이 단일 주소에서 여러 사망에 대한 단일 포인트 좌표를 포함하기 때문에 작동합니다. 지도 .

로빈의 버전에는 많은 점이 분명히 없습니다. 간략히 살펴보면, 몇 가지 외설적 인 단일 사망자가 빠져 있습니다. 또 다른 문제는 맵의 중앙에 더 가깝게 위치 할 때 (모두 Wikipedia 에서도 볼 수 있음) 가장자리가 제대로 일치하지 않아 여러 점이 모호해집니다.

다운로드에 제공된 맵 추출 :

여기에 이미지 설명을 입력하십시오

UCLA 버전 에서 추출 :

여기에 이미지 설명을 입력하십시오


큰! 구체적으로, .shp파일에 대한 링크 는 donboyes.com/download/snow_shp.zip
user101089

2

이 질문에 대한 답을 완성하기 위해 다음 코드는 원본 Tobler 파일 (in HistData)과 Don Boyes 가 제공 한 좌표의 선형 변환을 찾습니다 .

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]

그런 다음 X [, 1]의 D [, 1]과 X [, 2]의 D [, 2]를 상관시키고 회귀합니다. 선형 변환은 회귀 계수로 제공됩니다.

> 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  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.