French Urban Population growth between 2010 and 2014

Studying French population using PostGIS

Nicolas

3 minute read

French Urban Population growth between 2010 and 2014 map

Hi all !

Sorry this map is in French but it was a school assessment, so… French it is.

Disclaimer: You might encounter a lot of french words and links to french webpages. You are warned.

The main goal was to work wih PostgreSQL and PostGIS on census data. Franc had around 36 000 communes which is the smallest administrative unit. Since it is too small to represent on a map, we worked on the Unités Urbaines1. This urban unities are defined by a more than 200 meters of continuous developed area.

Working with PostgreSQL and Postgis

We previsouly built tables with 2010 and 2014 census population and urban units.

There was several steps:

  • define the center of each urban unit from
/*
-- carte des unités urbaines
- faire varier la taille du point selon la pop
- colorer le point selon le taux d'accroissement de la pop
- affecter le point au centroide de la commune centrale

-- étapes
1. construire un dataset communal tel que:
   code_uu, code_commune, pop14, pop10
2. aggréger le résultat précédent au niveau de l'unité urbaine
3. calculer le taux d'accroissement
4. récupérer la commune centrale des UU
5. mise en classe de la pop de l'unité urbaine
6. rapprocher les noms de UU (faire une jointure)
7. importer/lier les données géométriques de l'IGN
8. affecter un centroide tel que srid=4356

-- notions abordées:
-> jointures
-> agrégats

*/

-- 1. construire un dataset communal tel que:
--  code_uu, code_commune, pop14, pop10
WITH a AS (
SELECT 
  a.codgeo
, a.uu2010
, b.pmun10
, c.pmun14
FROM insee.commune as a
LEFT JOIN insee.commune_population_2010 b
  on a.codgeo = b.com
LEFT JOIN insee.commune_population_2014 AS c
  on a.codgeo = c.com

-- LEFT : on garde les références de la table de gauche mais 
-- ne récupère que les valeurs de la table de droite qui matchent.

-- 2. aggréger le résultat précédent au niveau de l'unité urbaine
-- agrégation: synthétisation du jeu de données / réduction selon
)

, b AS (
SELECT 
  uu2010
, sum(pmun10) as pop10
, sum(pmun14) as POP14
FROM a
GROUP BY uu2010 -- GROUP BY mot clé de l'agrégation
ORDER BY uu2010 -- par défaut ascendant
)
, c as (
-- 3. calculer le taux d'accroissement
SELECT
  uu2010
, pop10
, pop14
, round(((pop14::numeric - pop10)/pop10),2) as txAccroissement -- (T1 - T0)/T0::numeric
FROM b
)
, d as (
--4. récupérer la commune centrale des UU
SELECT DISTINCT ON (uu2010) uu2010, codgeo as centre
FROM insee.uu_composition
WHERE statut_2014  in ('I',  'C') 
)
SELECT
-- labels, mise en classe pop14
c.*, u.libuu2010, d.centre
, CASE
   WHEN pop14 <= 9999 THEN 1
   WHEN pop14 BETWEEN 10000 AND 49999 THEN 2
   WHEN pop14 BETWEEN 50000 AND 99999 THEN 3
   WHEN pop14 BETWEEN 100000 AND 199999 THEN 4
   WHEN pop14 BETWEEN 200000 AND 499999 THEN 5
   WHEN pop14 BETWEEN 500000 AND 999999 THEN 6
   WHEN pop14 BETWEEN 1000000 AND 1999999 THEN 7
   WHEN pop14 >= 2000000 THEN 8
   ELSE NULL -- ne pas affecter de tranches dans le monde rural
   END AS tranche_population
FROM c 
LEFT JOIN d 
  ON c.uu2010 = d.uu2010
LEFT JOIN insee.uu AS u 
  ON c.uu2010 = u.uu2010
ORDER BY c.uu2010
;

Map design

Map defaults