Построение тематических карт в R с использованием шейп-файлов и файлов данных из разных источников

Учитывая шейп-файл, как мне сформировать и использовать файл данных, чтобы иметь возможность строить тематические карты с использованием идентификаторов, которые соответствуют областям формы в шейп-файле?

#Download English Government Office Network Regions (GOR) from:
#http://www.sharegeo.ac.uk/handle/10672/50
tmp_dir = tempdir()
url_data = "http://www.sharegeo.ac.uk/download/10672/50/English%20Government%20Office%20Network%20Regions%20(GOR).zip"
zip_file = sprintf("%s/shpfile.zip", tmp_dir)
download.file(url_data, zip_file)
unzip(zip_file, exdir = tmp_dir)

library(maptools)

#Load in the data file (could this be done from the downloaded zip file directly?
gor=readShapeSpatial(sprintf('%s/Regions.shp', tmp_dir))

#I can plot the shapefile okay...
plot(gor)

#and I can use these commands to get a feel for the data...
summary(gor)
attributes(gor@data)
gor@data$NAME
#[1] North East               North West              
#[3] Greater London Authority West Midlands           
#[5] Yorkshire and The Humber South West              
#[7] East Midlands            South East              
#[9] East of England         
#9 Levels: East Midlands East of England ... Yorkshire and The Humber

#download data from http://www.justice.gov.uk/downloads/publications/statistics-and-data/courts-and-sentencing/csq-q3-2011-insolvency-tables.csv
#insolvency<- read.csv("~/Downloads/csq-q3-2011-insolvency-tables.csv")
insolvency=read.csv("http://www.justice.gov.uk/downloads/publications/statistics-and-data/courts-and-sentencing/csq-q3-2011-insolvency-tables.csv")
insolvencygor.2011Q3=subset(insolvency,Time.Period=='2011 Q3' & Geography.Type=='Government office region')
#tidy the data
require(gdata)
insolvencygor.2011Q3=drop.levels(insolvencygor.2011Q3)

names(insolvencygor.2011Q3)
#[1] "Time.Period"                 "Geography"                  
#[3] "Geography.Type"              "Company.Winding.up.Petition"
#[5] "Creditors.Petition"          "Debtors.Petition"  

levels(insolvencygor.2011Q3$Geography)
#[1] "East"                     "East Midlands"           
#[3] "London"                   "North East"              
#[5] "North West"               "South East"              
#[7] "South West"               "Wales"                   
#[9] "West Midlands"            "Yorkshire and the Humber"

#So what next?   

Достигнув этого, как мне сделать следующий шаг в создании тематической / хороплетной карты, которая окрашивает каждый регион, например, в соответствии со значением Debtors.Petition?

(Я также только что заметил возможную ошибку - есть несоответствие в уровнях GOR капитализации: "Йоркшир и Хамбер" и "Йоркшир и Хамбер")


person psychemedia    schedule 12.01.2012    source источник
comment
Похоже, это сообщение SO (первое в Связанном списке в правая боковая панель) может помочь вам до конца.   -  person Josh O'Brien    schedule 13.01.2012
comment
Я видел это, но пару раз пропустил исправление ... Так что мне нужно сделать что-то вроде: gor @ data = merge (insolvencygor.2011Q3, gor @ data, by.x = 'Geography', by. .y = 'NAME') plot (gor, col = levels (gor@data$Creditors.Petition)), хотя и с правильным отображением цветов и правильными картами названий регионов (я заметил, что это несоответствие не только Йоркам и Хамберсайду ... )   -  person psychemedia    schedule 13.01.2012
comment
Не могли бы вы сократить свой набор данных до небольшого примера, который иллюстрирует вашу проблему? Вы можете сохранить их с помощью команды save и загрузить их либо в SO, либо на сервер и разместить ссылку здесь. Это значительно упростит сокращение большого количества имеющегося у вас кода.   -  person Paul Hiemstra    schedule 13.01.2012
comment
Я не знаю, как уменьшить шейп-файл ... Я начинаю с позиции: а) хочу создать тематические карты, б) зная, что шейп-файлы существуют для создания контуров на картах, и в) ошибся, вот и все. ... Может быть, также стоит сказать, что причина, по которой я использую R в этом случае, заключается в том, что мне кажется, что R может обрабатывать шейп-файлы ...   -  person psychemedia    schedule 13.01.2012
comment
Существуют и другие инструменты, которые могут довольно легко обрабатывать шейп-файлы, например QGis или GVSig, обе программы ГИС с открытым исходным кодом.   -  person Paul Hiemstra    schedule 13.01.2012


Ответы (1)


Я не видел леса за деревьями, чтобы ответить на свой вопрос, вот один способ (код, следующий из кода в вопросе):

#Convert factors to numeric [ http://stackoverflow.com/questions/4798343/convert-factor-to-integer ]
#There's probably a much better formulaic way of doing this/automating this?
insolvencygor.2011Q3$Creditors.Petition=as.numeric(levels(insolvencygor.2011Q3$Creditors.Petition))[insolvencygor.2011Q3$Creditors.Petition]
insolvencygor.2011Q3$Company.Winding.up.Petition=as.numeric(levels(insolvencygor.2011Q3$Company.Winding.up.Petition))[insolvencygor.2011Q3$Company.Winding.up.Petition]
insolvencygor.2011Q3$Debtors.Petition=as.numeric(levels(insolvencygor.2011Q3$Debtors.Petition))[insolvencygor.2011Q3$Debtors.Petition]

#Tweak the levels so they match exactly (really should do this via a lookup table of some sort?)
i2=insolvencygor.2011Q3
i2c=c('East of England','East Midlands','Greater London Authority','North East','North West','South East','South West','Wales','West Midlands','Yorkshire and The Humber')
i2$Geography=factor(i2$Geography,labels=i2c)

#Merge the data with the shapefile
gor@data=merge(gor@data,i2,by.x='NAME',by.y='Geography')

#Plot the data using a greyscale
plot(gor,col=gray(gor@data$Creditors.Petition/max(gor@data$Creditors.Petition)))

Таким образом, этот подход объединяет числовые данные в шейп-файл, а затем строит его напрямую.

Тем не менее, не было бы более чистым способом хранить файл данных и шейп-файл отдельно? (Я все еще не знаю, как это сделать?)

person psychemedia    schedule 13.01.2012
comment
Я не думаю, что это было бы чище, и вам нужно объединить «нормальные» и пространственные данные, чтобы построить график. - person Paul Hiemstra; 13.01.2012
comment
И я разделяю ваше мнение, что код может быть короче и точнее, но без воспроизводимого примера его сложно продемонстрировать. - person Paul Hiemstra; 13.01.2012
comment
Воспроизводимый в каком смысле? Добавление приведенного выше кода ответа к коду в вопросе создает тематическую карту, хотя, по общему признанию, шаги загрузки требуются как ручное вмешательство, а не обрабатываются сценарием. - person psychemedia; 13.01.2012
comment
Я имею в виду невоспроизводимый, потому что я не могу вставить его в R и получить то, что у вас есть. Просто постарайтесь сделать так, чтобы людям было как можно проще участвовать. - person Paul Hiemstra; 13.01.2012
comment
Хорошо, точка принята - но, как указано в комментариях к вопросу, я не знаю, как загрузить файл формы из zip-файла, в который он включен на веб-сайте shapegeo? ;-) - person psychemedia; 13.01.2012
comment
Я отредактировал код R, чтобы загрузка и извлечение выполнялись автоматически. Он ждет одобрения, и я думаю, вы могли бы это сделать. - person Paul Hiemstra; 13.01.2012