Our article Can historical demography benefit from the collaborative data of genealogy websites?, writen with Ewen Gallic, just appeared in Population,
Tag Archives: population
La démographie historique peut-elle tirer profit des données collaboratives des sites de généalogie ?
Notre article La démographie historique peut-elle tirer profit des données collaboratives des sites de généalogie ?, écrit avec Ewen Gallic, vient juste de paraître dans Population, la revue de l’INED. Les codes R sont toujours en ligne sur https://3wen.github.io/genealogie_fr/
French dataset: population and GPS coordinates
A short post today based on recent work by @3wen (Ewen Gallic, graduate Student in Rennes, spending a year in Montreal). Since we were working on a detailed French dataset (per commune), we needed a dataset containing a list allcommunes, with population and location. GPS coordinates were extracted from Google, using the following php file, inspired by http://www.andrew-kirkpatrick.com/ on Google geocoding api with php webpage. Population was interpolated from INSEE’s datasets, i.e. http://www.insee.fr/ (since data are over a 35 year period, from 1975 to 2010, changes have been taken into account as carefully are possible – e.g. merges and splits of cities – based on thatdescription). A spline model has been used for all cities (with three degrees of freedom, and null and negative interpolation became one, since we’ll be using loglinear models afterwards). Names are from that dataset, still on INSEE’s website, http://www.insee.fr/.
A zipped file can be downloaded here popfr19752010.zip, but it is also possible to use the code below (it is a 24Mo dataset). Since it was hard to find such a dataset online (different files can be found, but we found none with population and location), we have decided to upload that dataset. Please let us know if there are problems with those data…
> base=read.csv( + "http://freakonometrics.free.fr/popfr19752010.csv", + header=TRUE)
Using that code, it is possible to locate all the communes in France (metropolitan), for instance
> library(maps) > map("france") > points(base$long,base$lat,cex=.1,col="red",pch=19) > points(base$long,base$lat,cex=2*base$pop_2010/ + max(base$pop_2010),col="blue",pch=19)
![]() |
![]() |
Several additional lines of code on that dataset (and also others) will be uploaded, soon.
Cette oeuvre est mise à disposition sous licence Paternité – Partage à l’Identique 3.0 non transposé. Pour voir une copie de cette licence, visitez http://creativecommons.org/. Date : 24 mai 2012, par Ewen GALLIC. Sources : INSEE, API Google Maps v3 et GeoHack (coordonnées GPS), propres calculs (estimation de population à partir des données INSEE).
- reg : code region INSEE (character)
- dep : code departement INSEE (character, corse 201 et 202 au lieu de 2A et 2B)
- com : code commune INSEE (character)
- article : article du nom de la commune (character)
- com_nom : nom de la commune (character)
- long : longitude (numeric)
- lat : latitude (numeric)
- pop_i : estimation de la population à la date i (ramenée à 1 si <=0), i=1975,…,2010 (numeric)
Catastrophes naturelles et population mondiale
Pour reprendre une question posée au téléphone par François, et par Eric dans un commentaire (ici), il est possible de comparer l’évolution du nombre de catastrophes et de l’évolution de la population (mondiale). Pour les données de population on peut en trouver sur wikipedia (ici), sur le site des nations unies (là) après 1950, ou encore sur le site du census.gov (là). Ensuite on peut moyenner les doublons.
POP=read.table("http://freakonometrics.blog.free.fr/public/data/pop-mondial.txt", sep=";",header=TRUE) population=tapply(POP$POP,POP$YEAR,mean) years=as.numeric(names(population)) reg=lm(population~bs(years,3)) lines(years,predict(reg),col="red") plot(years,population) baseline=predict(reg,newdata=data.frame(years=1900:2010))
Revenons à nos catastrophes “naturelles“. Par exemple les tremblements de terre. La première piste (évoquée là) était de lisser cette série pour l’utiliser en baseline (multiplicatif). On retrouve ici une série qui oscille autour de 1.
earthquake=read.table("http://freakonometrics.blog.free.fr/public/data/DataSet.csv", sep=",",header=TRUE) flood=read.table("http://freakonometrics.blog.free.fr/public/data/DataSet_2_.csv", sep=",",header=TRUE) storm=read.table("http://freakonometrics.blog.free.fr/public/data/DataSet_3_.csv", sep=",",header=TRUE) library(splines) n=nrow(earthquake) earthquake=earthquake[-((n-3):n),] DATE=1900:2010 EARTHQUAKE=FLOOD=STORM=rep(0,length(DATE)) EARTHQUAKE[as.numeric(as.character(earthquake$Year))-1899]= as.numeric(as.character(earthquake$Number)) plot(DATE,EARTHQUAKE,type="b") reg=lm(EARTHQUAKE~bs(DATE,6)) lines(DATE,predict(reg),col="red") plot(DATE,EARTHQUAKE/predict(reg),type="b") abline(h=1,lty=2,col="blue")

Si on utilise cette fois la population mondiale comme baseline, on obtient
POP=read.table("http://freakonometrics.blog.free.fr/public/data/pop-mondial.txt", sep=";",header=TRUE) population=tapply(POP$POP,POP$YEAR,mean) years=as.numeric(names(population)) reg=lm(population~bs(years,3)) lines(years,predict(reg),col="red") plot(years,population) baseline=predict(reg,newdata= data.frame(years=1900:2010))/1000000 plot(DATE,EARTHQUAKE/baseline,type="b")
La série de points présente une jolie rupture. Afin de trouver la date optimale de rupture, utilisons un test basé sur le critère d’Akaike.
Y=EARTHQUAKE/baseline X=DATE DUMMY=1910:2000 VAIC=rep(NA,length(DUMMY)) for(x in DUMMY){ IX=(X>x) reg=lm(Y~1+IX) VAIC[x-1909]=AIC(reg) } plot(DUMMY,VAIC) k=which.min(VAIC) DUMMY[k]

Manifestement, il y a une rupture en 1975 (que je ne sais trop comment interpréter).

Si on regarde une autre série, comme celle des inondations.
n=nrow(flood) flood=flood[-((n-3):n),] DATE=1900:2010 FLOOD[as.numeric(as.character(flood$Year))-1899]= as.numeric(as.character(flood$Number)) plot(DATE,FLOOD,type="b") reg=lm(FLOOD~bs(DATE,6)) lines(DATE,predict(reg),col="red") population=tapply(POP$POP,POP$YEAR, mean) years=as.numeric(names(population)) reg=lm(population~bs(years,3)) baseline=predict(reg,newdata=data.frame(years=1900:2010)) plot(DATE,FLOOD/baseline,type="b")
On retrouve ici clairement le fait que la croissance de la population ne peut expliquer la croissance du nombre d’inondations.