2009-09-17 11 views
26

Ho alcuni dati demografici e firmografici statunitensi.
Desidero stampare aree zipcode in uno stato o in una regione più piccola (ad esempio città). Ogni area verrebbe annotata per colore e/o testo specifico per quell'area. L'output sarebbe simile a http://maps.huge.info/ ma a) con testo annotato; b) output pdf; c) scriptable in R o Python.Mappa dei colori con i codici di avviamento postale in R o Python

C'è qualche pacchetto e codice che mi permette di fare questo?

risposta

36

Io parto dal presupposto che si desidera mappe statiche.

alt text http://files.eduardoleoni.com/mapUS.png

1) Ottenere gli shapefile delle zip confini e state confini a census.gov:

2) utilizzare la funzione plot.heat ho postato in questo SO question.

Per esempio (presuppone che gli shapefile Maryland nella mappa sottodirectory):

library(maptools) 
##substitute your shapefiles here 
state.map <- readShapeSpatial("maps/st24_d00.shp") 
zip.map <- readShapeSpatial("maps/zt24_d00.shp") 
## this is the variable we will be plotting 
[email protected]$noise <- rnorm(nrow([email protected])) 
## put the lab point x y locations of the zip codes in the data frame for easy retrieval 
labelpos <- data.frame(do.call(rbind, lapply([email protected], function(x) [email protected]))) 
names(labelpos) <- c("x","y")       
[email protected] <- data.frame([email protected], labelpos) 
## plot it 
png(file="map.png") 
## plot colors 
plot.heat(zip.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf)) 
## plot text 
with([email protected][sample(1:nrow([email protected]), 10),] , text(x,y,NAME)) 
dev.off() 
+8

I collegamenti per modellare i file su www.census.gov sono interrotti ... mi ci è voluto un po 'per trovarli. Prova questo URL: http://www.census.gov/cgi-bin/geo/shapefiles2010/main. Quindi utilizzare il menu a discesa per selezionare "Aree di tabulazione del codice postale" e "Stati (e equivalente)". –

+0

Ti spiace spiegare come posso mappare i valori da un file csv che ha una colonna di codice di avviamento postale e alcune altre colonne di dati per usarlo (scusa se la risposta è ovvia, ma non so davvero R)? In particolare, ho difficoltà a capire cosa dovrei mettere per '[email protected]$noise <- rnorm (nrow ([email protected])) '' labelpos <- data.frame (do.call (rbind, lapply ([email protected], function (x) x @ labpt))) 'e '[email protected] <- data.frame ([email protected], labelpos)' – soandos

0

A seconda dell'applicazione, un lungo giro potrebbe essere quella di usare qualcosa di simile:

http://googlemapsmania.blogspot.com/2006/07/new-google-maps-us-zip-code-mashups.html

Per mappare i dati. Se quello non era esattamente quello che volevi, puoi ottenere gli shapefile di codice postale grezzi da census.gov e farlo manualmente, il che è piuttosto doloroso.

Inoltre, se non lo avete visto, questo è un modo pulito per interagire con i dati simili, e potrebbe offrire alcune indicazioni:

http://benfry.com/zipdecode/

+0

bello, ma questi sono visualizzazioni di posizioni/limiti di codici postali. Sto cercando un modo flessibile in R o Python per generare mappe con regioni di zip personalizzate o con annotazioni testuali. – gappy

0

Partenza questo eccellente strumento di visualizzazione on-line da parte di IBM http://manyeyes.alphaworks.ibm.com/manyeyes/

EDIT FYI, ManyEyes utilizza il Prefuse visualization toolkit per alcuni dei suoi vale a dire. Anche se si tratta di un framework basato su Java, forniscono anche uno strumento Flash/ActionScript per il web.

+0

è bello. Ha alcune cose in comune con http://gapminder.org –

+0

Non è la stessa cosa che Hans Rosling ha presentato su TED qualche anno fa – Amro

+0

bello, ma molti non risponde alla mia domanda. Penso che sia molto diverso da gapminder. Wattenberg è un tipo di visualizzazione, Rosling è uno scienziato sociale e il diverso approccio mostra. – gappy

3

Qualcuno potrebbe avere qualcosa di più diretto per te, ma ho trovato i 'Data Mashups in R' di O'Reilly molto interessanti ... in parte, è una mappatura spaziale delle aste di pignoramento a domicilio.

http://oreilly.com/catalog/9780596804770/

+0

Inoltre, nessun DRM e solo $ 5 ... difficile da battere quell'affare! – Stedy

1

C'è una serie ricca e sofisticata di pacchetti in R per tracciare, fare analisi, e altre funzioni relative al GIS. Un punto per iniziare è la visualizzazione dell'attività CRAN su Spatial Data: Questo è un mondo complesso e talvolta arcano, e richiede un po 'di lavoro per capire.

Se siete alla ricerca di un libero, applicazione di mapping molto funzionale, mi permetto di suggerire:

MapWindow (mapwindow.com)

+0

Non riuscivo a trovare nulla in quella visualizzazione CRAN che mi avrebbe aiutato a visualizzare le statistiche del codice postale su una mappa. Il più vicino che ho avuto è stato il pacchetto muRL. – gappy

1

Daniel Levine at TechCrunch Trends ha fatto belle cose con il pacchetto maps in R. Ha codice disponibile anche sul suo sito.

Il suggerimento di Paul di esaminare Elaborazione - che Ben Fry usava per fare zipdecode - è anche buono, se sei pronto per imparare una nuova lingua (simile a Java).

+0

Nota: le mappe Trends sono a livello di codice di avviamento postale. –

+0

grazie Matt, sì, le mappe delle tendenze sono a livello di codice di avviamento postale, ma invece di ombreggiare le aree zipcode, ho effettivamente mappato i codici di avviamento postale a lat/long coords. Chiunque è il benvenuto nel codice però. – Dan

9

Ci sono molti modi per farlo in R (vedere spatial view); molti di questi depend on the "maps" package.

+1

Sembra che questi esempi siano nella contea, non nel codice postale, livello –

2

In Python, è possibile utilizzare shapefile dal censimento degli Stati Uniti insieme al pacchetto basemap. Ecco un esempio di filling in states in base alla popolazione.