sábado, 5 de octubre de 2013

Hoy cambiamos tópico, veremos como se puede hacer mapas en R. Queremos tratar de presentar como una mapa el contenido del página de wikipedia https://en.wikipedia.org/wiki/List_of_countries_by_real_population_density_based_on_food_growing_capacity    un listado de países por su densidad de población real, es decir, no en su relación al area (que esta contando vinedos y olivares iguales como desiertos y montañas), pero en su relación a la capacidad de producir alimentos.   Saltamos sobre las problemas en como medir eso, y concentramos en su presentación.

Primero, como importar los datos de wikipedia en una hoja de cálculo, que podemos despues leer en R:
Abrir una cuenta en google docs, si no lo tienes, y abrir alla una nueva hoja de cálculo. En la celda A1 tienes que escribir:
=ImportHtml("https://en.wikipedia.org/wiki/List_of_countries_by_real_population_density_based_on_food_growing_capacity","table",5)
Los tres argumentos a la función ImportHtml es primero, el url que queremos importar, segundo, que queremos importar de alla una table, y tercero, que la tabla que nos interesa es el quinto en de esa página. Tenemos que experimentar un poco para encontrar que cinco es el número correcto.

Eso esta hecho, y la table que yo he importado así esta publicado ahora con la url:
https://docs.google.com/spreadsheet/pub?key=0AmA1eTG-BTE9dGI1N0IyVTVOZEk2Ri10N0xkbzFRS3c&single=true&gid=0&output=csv

(para obtener este enlace, hay que especificar que el formato publicado debe ser como csv, el default es como página web!)

que podemos usar ahora para importarlo en R, usando read.csv (o talves read.csv2).

En R:
> require(RCurl)
Loading required package: RCurl
Loading required package: bitops
Note: no visible binding for global variable '.Data' 
Note: no visible binding for global variable '.Data' 

> myURL <- getURL("https://docs.google.com/spreadsheet/pub?key=0AmA1eTG-BTE9dGI1N0IyVTVOZEk2Ri10N0xkbzFRS3c&single=true&gid=0&output=csv")
> DR <- read.csv(textConnection(myURL))
> dim(DR)
[1] 234   8
> summary(DR)
      Rank                       Country    Population..July.2005.est..
 -      :  1   Afghanistan           :  1   10006835:  1               
 1      :  1   Albania               :  1   10079380:  1               
 10     :  1   Algeria               :  1   10241138:  1               
 100    :  1   * American Samoa (US)*:  1   103176  :  1               
 101    :  1   Andorra               :  1   10364388:  1               
 102    :  1   Angola                :  1   1041806 :  1               
 (Other):228   (Other)               :228   (Other) :228               
 Land.Area..kmÂ.. X..of.arable.land..2005.est.. Arable.Land..kmÂ..
 102    :  2      0%     : 15                   0      : 15       
 0.44   :  1      20%    :  4                   20     :  8       
 10     :  1      1.64%  :  3                   10     :  6       
 10000  :  1      5.71%  :  3                   40     :  5       
 1001   :  1      10%    :  2                   30     :  3       
 100250 :  1      16.67% :  2                   53     :  3       
 (Other):227      (Other):205                   (Other):194       
 Population.Density..pop.per.kmÂ..
 3      :  9                      
 14     :  5                      
 12     :  3                      
 141    :  3                      
 15     :  3                      
 17     :  3                      
 (Other):208                      
 Real.Population.Density..pop.per.kmÂ..of.arable.land.
 -      : 15                                          
 381    :  3                                          
 1434   :  2                                          
 219    :  2                                          
 225    :  2                                          
 248    :  2                                          
 (Other):208                     
> colnames(DR)
[1] "Rank"                                                 
[2] "Country"                                              
[3] "Population..July.2005.est.."                          
[4] "Land.Area..kmÂ.."                                     
[5] "X..of.arable.land..2005.est.."                        
[6] "Arable.Land..kmÂ.."                                   
[7] "Population.Density..pop.per.kmÂ.."                    
[8] "Real.Population.Density..pop.per.kmÂ..of.arable.land."
Bién, antes del análisis talves debemos camiar algunos nombres!

(Encontramos un problema en trabajar de esta manera: Editar los datos en la hoja de google aparwece como dificil, porque todas las celdas estan como formulas, no como valores, y no encontré una manera de cambiar esto. Por esa razon, más abajo reimportamos los datos, primero exportando la hoja de google como una hoja excel, y editar eso en la maquina local).

Ahora, para dibujar una mapa mundi:
> require(maps)
Loading required package: maps
> require(mapdata)
Loading required package: mapdata
map("worldHires", xlim=c(-170, 180), ylim=c(-70, 70), col="grey90", fill=TRUE)





Ahora rellemos los datos, despues de bajar la hjoja electrónca a un fichero local, y editar un poco:
DR <- read.csv("wikip_listado_paises_dens_pob_real.csv",header=TRUE,  colClasses=c("numeric", "character", rep("numeric", 6)))
> colnames(DR) <- c("Rank", "Country", "Pop", "Area","X.Arable" , "Arable", "Pop.dens", "Real.Pop.dens")

Para hacer el mapa mundi temático usamos el paquete rworldmap:
> require(rworldmap)
Loading required package: rworldmap
### Welcome to rworldmap ###
For a short introduction type : vignette('rworldmap')


> spDR <- joinCountryData2Map(DR,  joinCode="NAME", nameJoinColumn="Country")
191 codes from your data successfully matched countries in the map
42 codes from your data failed to match with a country code in the map
53 codes from the map weren't represented in your data

mapCountryData(spDR, nameColumnToPlot="Real.Pop.dens", mapTitle="Real Population Density", catMethod="quantiles", colourPalette="heat") 



Y aqui se debe ver, que paises/regiones tiene realmente baja densidad de población; Norteamerica, argentina, Australia, Rusia, alto: grandes partes de asia. Grandes partes de Africa es intermedio: con excepción de pocos países, sobrepoblación no parece ser un problema de Africa.

No hay comentarios:

Publicar un comentario