Journal Communes de France finissant par "ville"

Posté par . Licence CC by-sa
36
4
jan.
2013

Sommaire

Une connaissance me faisait récemment remarquer qu’une très grande partie des communes françaises dont le nom finit par "ville" se situe en Normandie (départements 14-Calvados, 27-Eure, 50-Manche, 61-Orne et 76-Seine-Maritime).
Je décide donc de prendre la liste des communes françaises, de dénombrer celles finissant par "ville" et d’afficher tout ça sur une jolie carte.

Récupérer les données

La liste des communes est disponible sur le site de l’INSEE. Il s’agit des données issues du recensement de la population en 2009 indexées sur les limites territoriales au 1er janvier 2011.
Un petit script pour le gros du boulot :

for i in $(seq 10 95); do wget "http://www.insee.fr/fr/ppp/bases-de-donnees/recensement/populations-legales/pages2011/xls/dep$i.xls"; done

On récupère à la main les départements 1 à 9 ; 2A et 2B ; et 971 à 974. dep20.xls correspond à une erreur 404 sur le site de l’INSEE. On transforme tout ça en csv grâce au petit utilitaire xls2csv issu du paquet catdoc de votre distribution favorite :

for file in $(ls *.xls); do xls2csv $file > $file.csv; done

On nettoie tout ça pour ne conserver que les parties contenant effectivement la liste des communes :

for file in $(ls *.csv); do ./fr-ville-split.sh $file; done

fr-ville-split.sh contient le code suivant :

#!/bin/bash
FILE=$1
# Line numbers at which to cut depXX.csv
LINE_ABOVE=$(grep -n "\"Code région\",\"Nom de la région\",\"Code département\",\"Code arrondissement\",\"Code canton\",\"Code commune\"" $FILE | cut -d : -f 1)
LINE_BELOW=$(echo "$(grep -n "\"Code région\",\"Nom de la région\",\"Code département\",\"Code arrondissement\",\"Code commune\",\"Nom de la commune\",\"Code canton\",\"Nom du canton\",\"Population municipale\",\"Population comptée à part\",\"Population totale\"," $FILE | cut -d : -f 1) - 8" | bc)
# Splits file at specified line numbers, part of interest will be in file $1_split_01
csplit -s --prefix=$1_split_ $FILE $LINE_ABOVE $LINE_BELOW

Le script n’a pas fonctionné pour les départements d’Outre-mer, leur structure doit être différente, tant pis pour eux… Nous avons maintenant la liste des communes par département dans des fichiers séparés.

Exploitation des données

Dans chaque fichier, les noms de communes sont entre guillemets, nous allons donc chercher la chaîne ville\" et compter le nombre d’occurrence par fichier :

for file in $(ls *split_01); do ./fr-ville-comptage.sh $file; done

./fr-ville-comptage.sh contient :

#!/bin/bash
FILE=$1
DEP=$(echo $1 | cut -c 4-5)
VILLES=$(grep -n "ville\"" $1 | wc -l) # le nombre de commune se finissant par ville
COMMUNES=$(echo $(wc -l $1 | cut -d " " -f 1)-1 | bc) # le nombre totale de commune
PC=$(echo $VILLES/$COMMUNES*100 | bc -l) # pourcentage de commune finissant par ville
echo -e "$DEP $VILLES $COMMUNES $PC"

Et voilà ! Ce dernier script nous sort la jolie liste suivante :

01 1 419 .23866348448687350800
02 11 816 1.34803921568627450900
03 0 320 0
04 0 200 0
05 0 177 0
06 0 163 0
07 1 339 .29498525073746312600
08 11 463 2.37580993520518358500
09 0 332 0
10 12 433 2.77136258660508083100
11 5 438 1.14155251141552511400
12 3 304 .98684210526315789400
13 0 134 0
14 69 706 9.77337110481586402200
15 0 260 0
16 17 404 4.20792079207920792000
17 2 472 .42372881355932203300
18 0 290 0
19 1 286 .34965034965034965000
21 4 706 .56657223796033994300
22 0 373 0
23 3 260 1.15384615384615384600
24 1 557 .17953321364452423600
25 2 594 .33670033670033670000
26 1 369 .27100271002710027100
27 96 675 14.22222222222222222200
28 51 403 12.65508684863523573200
29 0 283 0
2A 0 124 0
2B 0 236 0
30 0 353 0
31 17 589 2.88624787775891341200
32 2 463 .43196544276457883300
33 0 542 0
34 0 343 0
35 1 353 .28328611898016997100
36 1 247 .40485829959514170000
37 0 277 0
38 3 533 .56285178236397748500
39 2 544 .36764705882352941100
40 0 331 0
41 6 291 2.06185567010309278300
42 0 327 0
43 0 260 0
44 1 221 .45248868778280542900
45 19 334 5.68862275449101796400
46 0 340 0
47 3 319 .94043887147335423100
48 0 185 0
49 1 363 .27548209366391184500
50 116 601 19.30116472545757071500
51 16 620 2.58064516129032258000
52 24 433 5.54272517321016166200
53 0 261 0
54 90 594 15.15151515151515151500
55 40 500 8.00000000000000000000
56 0 261 0
57 30 730 4.10958904109589041000
58 0 312 0
59 6 650 .92307692307692307600
60 24 693 3.46320346320346320300
61 10 505 1.98019801980198019800
62 21 895 2.34636871508379888200
63 1 470 .21276595744680851000
64 0 547 0
65 0 474 0
66 0 226 0
67 0 527 0
68 0 377 0
69 2 301 .66445182724252491600
70 0 545 0
71 1 573 .17452006980802792300
72 0 375 0
73 5 305 1.63934426229508196700
74 1 294 .34013605442176870700
76 169 745 22.68456375838926174400
77 14 514 2.72373540856031128400
78 23 262 8.77862595419847328200
79 1 305 .32786885245901639300
80 35 782 4.47570332480818414300
81 2 323 .61919504643962848200
82 7 195 3.58974358974358974300
83 0 153 0
84 0 151 0
85 0 282 0
86 0 281 0
87 0 201 0
88 45 515 8.73786407766990291200
89 0 455 0
90 0 102 0
91 18 196 9.18367346938775510200
92 1 36 2.77777777777777777700
93 1 40 2.50000000000000000000
94 1 47 2.12765957446808510600
95 17 185 9.18918918918918918900

Notez l’absence de Paris qui sera rajouté à la main très rapidement.

De manière synthétique, la Normandie compte 3232 communes au sein desquelles 460 se terminent par "ville" (soit 14,2 %). Au niveau national, 1068 communes sur 36591 finissent par "ville" (soit moins de 3 %).

Affichage des données

En utilisant les cartes fournies par Wikipédia ici et , voici la tant attendue carte :
Pourcentage de communes se finissant par "ville" par département

Éditée via Inkscape, celle-ci représente le nombre relatif de communes se finissant par "ville" pour chaque département.
Une petite archive contenant les données, les scripts et la carte : fr-ville.7z (1,5 Mio)

À noter qu’un certain Damouns avait déjà affiché les communes se finissant par "ville" d’après des données INSEE de 2006 :
Communes of France ending with -ville.svg

Il est laissé au lecteur le soin d’expliquer les différences observées.

Voilà, une longue soirée d’hiver bien occupée =)
PS : vous remarquerez l’élégance rare des mes scripts…

  • # UNIX MASTER RACE

    Posté par . Évalué à  10 .

    PS : vous remarquerez l’élégance rare des mes scripts…

    Boah tant que ça fait le boulot…

    On récupère à la main les départements 1 à 9 ; 2A et 2B ; et 971 à 974.

    tu peux tout récupérer d'un coup en faisant (note le -w 01 après le seq):

    for i in $(seq -w 01 95) 2A 2B 971 972 973 974; do ...
    
    

    Aussi:

    for file in $(ls *.xls); do ...
    
    

    Le $(ls …) est inutile.

    for file in *.xls; do ...
    
    

    La raison est que l'expansion des noms de fichiers (qui transforme *.xls en liste de fichiers) est effectuée par bash, pas ls. Ça permet d'en profiter partout dans bash plutôt que de devoir le réimplémenter dans chaque application.

    Bien vu pour csplit je ne connaissais pas.

    • [^] # Re: UNIX MASTER RACE

      Posté par . Évalué à  4 .

      En bash, puisque c'est quand même le shell par défaut sur la plupart des systêmes Linux, il existe une forme de boucle 'for' ressemblant a celle du C. Il existe aussi une commande builtin printf également inspirée du C et qui s'avère très pratique pour créer des chaines avec un format précis:

      for ((i=1;i<95;i++)) ; do printf "%02d " $i ; done

      • [^] # Re: UNIX MASTER RACE

        Posté par . Évalué à  3 .

        Oui mais là c'est pas pratique à utiliser.

        Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

      • [^] # Re: UNIX MASTER RACE

        Posté par . Évalué à  8 .

        $ echo {01..12}
        01 02 03 04 05 06 07 08 09 10 11 12
        
        
    • [^] # Re: UNIX MASTER RACE

      Posté par . Évalué à  10 .

      On récupère à la main les départements 1 à 9 ; 2A et 2B ; et 971 à 974.

      tu peux tout récupérer d'un coup en faisant (note le -w 01 après le seq):

      for i in $(seq -w 01 95) 2A 2B 971 972 973 974; do ...
      

      Ou avec curl :

      curl -O "http://www.insee.fr/fr/ppp/bases-de-donnees/recensement/populations-legales/pages2011/xls/dep[01-95].xls"
      curl -O "http://www.insee.fr/fr/ppp/bases-de-donnees/recensement/populations-legales/pages2011/xls/dep{2A,2B,971,972,973,974}.xls"
      
      

      Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

    • [^] # Re: UNIX MASTER RACE

      Posté par . Évalué à  1 .

      Merci pour seq -w et pour les $(ls …)

      Et merci aux autres pour les variantes, autres outils etc. :)

  • # l'est ou la nimage ?

    Posté par (page perso) . Évalué à  6 .

    elle est ou la nimage ?

  • # Boup

    Posté par . Évalué à  5 . Dernière modification : le 04/01/13 à 09:28

    Dans mon département (37) on a pas de commune qui finisse par -ville, par contre on en a pas mal qui commencent par ville- (ma préférée étant Villeperdue) je suppose que c'est équivalent dans le sens.

    Dans les communes au nom rigolo j'aime bien Toutlemonde :)

    • [^] # Re: Boup

      Posté par . Évalué à  3 .

      J'ai un petit faible également pour "Toutlemonde". C'est assez marrant quand on suit les panneaux de direction.
      Mais je préfère franchement "Toute direction" ->[]

  • # Toponymie normande

    Posté par . Évalué à  6 .

  • # moi aussi j'aime les cartes

    Posté par (page perso) . Évalué à  1 .

    Ça me rappelle une émission de radio où un homme racontait qu'il faisait des randonnées en allant d'"Enfer" à "Paradis" en passant par "Joie" (je ne suis plus très sûre des noms des village, mais c'était l'idée).

  • # Influence germanique

    Posté par . Évalué à  5 .

    L'explication est la suivante. "Ville" se retrouve plutôt à la fin du nom des agglomérations dans les régions ayant subie l'influence de langues germaniques (Normandie, Lorraine…) sur la langue romane, car dans ces langues l'adjectif est placé avant le nom. Dans celles ayant conservé une forte influence latine, l'adjectif est après (Franceville / Villefranche).

    Enfin dans d'autres régions, le mot ville n'existe pas car on y parlait (et on y parle encore) d'autres langues : Breton, Basque…

  • # Bug ?

    Posté par (page perso) . Évalué à  4 . Dernière modification : le 04/01/13 à 13:42

    Quand tu comptes les villes, tu fais:

    VILLES=$(grep -n "ville\"" $1 | wc -l) # le nombre de commune se finissant par ville
    
    

    Or ton grep est sensible à la casse. Du coup, tu rates les noms de villes comme Combs-la-Ville (77). Est-ce volontaire ou pas ?

    • [^] # Re: Bug ?

      Posté par . Évalué à  3 .

      Ça me fait penser que ça peut se simplifier comme ça :

      VILLES=$(grep -cF "ville\"" "$1") # le nombre de commune se finissant par ville (et avec un -i pour être insensible à la casse
      
      

      Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

    • [^] # Re: Bug ?

      Posté par . Évalué à  1 . Dernière modification : le 04/01/13 à 14:27

      Ce n'est pas volontaire mais réflexion faite je ne cherchais effectivement que les "ville" et pas les "-Ville". Donc bien faire attention à la casse, merci.
      Ne pas être sensible à la casse ajoute 52 communes ; des départements précédemment à 0 commune passe à 1 commune (départements 42, 48, 53, 58 et 57), 2 communes (départements 21, 83 et 89) et 4 communes (département 70).

  • # Allez en prison, ne passez pas par la case départ

    Posté par . Évalué à  10 .

    Espèce de délinquant ! C'est complétement illégal ce que tu fais, tout les noms se terminant par « ville » appartiennent à Zynga, et tu es en train de voler le fruit de leur travail sans aucune vergogne. Un tel mépris du droit d'auteur me révolte.

    http://www.zdnet.fr/actualites/pyramid-ville-zynga-attaque-kobojo-en-justice-39771545.htm

  • # Logiciel SIG

    Posté par . Évalué à  4 .

    Si tu aimes analyser des données géographique et produire des cartes, tu devrais utiliser un logiciel SIG comme Quantum GIS. Dessiner à la main sur Inkscape, cela fonctionne dans ce cas, mais c'est vite limité. Quantum GIS te permettrait par exemple de comparer avec la carte de Damouns plus facilement.

    Comme exemple d'utilisation, on peut rappeler la récente carte des pains au chocolat/chocolatine: http://blog.adrienvh.fr/2012/10/16/cartographie-des-resultats-de-chocolatine-ou-pain-au-chocolat/

    • [^] # Re: Logiciel SIG

      Posté par . Évalué à  1 .

      Merci, je ne connaissais pas.
      À voir si ça peut m'aider. J'ai envie d'essayer de réaliser une carte isochrone à partir des durées de trajets fournies par la SNCF.

  • # Code officiel géographique

    Posté par (page perso) . Évalué à  2 .

    Le site de l'Insee n'est pas toujours rangé comme on l'attend, mais pour récupérer les communes il est plus simple de regarder du côté du code officiel géographique. En prime, tu as la région de la commune ce qui permet de répondre à ta question plus rapidement.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.