#!/bin/bash # # Description : # # Ce script sert à exploiter les données sur la fiscalité des communes à partir # du fichier CSV téléchargeable sur le site nosdonnees.fr. On ne conserve que # les données des communes de la collectivité Ardennes Rives de Meuse. # # Outils requis : # # Paquets Debian : wget, csvtool, gnuplot-nox # # Paramétrage des chemins CSVP="./csv" GPP="./gnuplot" # --- ne pas modifier ci-dessous --- # Données des communes COMMUNES=( "anchamps" "aubrives" "charnois" "chooz" "fepin" "foisches" "fromelennes" "fumay" "givet" "ham-sur-meuse" "hargnies" "haybes" "hierges" "landrichamps" "montigny-sur-meuse" "rancennes" "revin" "vireux-molhain" "vireux-wallerand" ) # pas de lettres accentuées pour les communes dans le csv # CSV CSV_URL='http://www.nosfinanceslocales.fr/static/data/city_all.csv' CSV_TOUT="${CSVP}/city_all.csv" CSV_CCARM="${CSVP}/ccarm.csv" NB_ANNEES=16 function telecharger_csv() { echo "Téléchargement du CSV depuis le site du gouvernement." mkdir -p "$CSVP" wget -c "$CSV_URL" -P "$CSVP" } function alleger_csv() { if [ ! -f "$CSV_CCARM" ]; then echo "Création du CSV pour la CCARM." head -n 1 "$CSV_TOUT" > "$CSV_CCARM" # On utilisera autre chose que du shell si on veut vraiment traiter du # CSV. Hargnies existe dans le 08 et dans le 59. Par chance, 08 est un # bon discriminant pour ce CSV. csv_ardennes=$(mktemp) grep ',08' "$CSV_TOUT" > "$csv_ardennes" for commune in "${COMMUNES[@]}" do grep -i ",${commune}," "$csv_ardennes" >> "$CSV_CCARM" || echo "La commune $commune n'a pas été trouvée." done echo "OK." else echo "Le fichier $CSV_CCARM existe déjà." fi } function afficher_entetes() { # ne fonctionne pas, voir: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=814358 #csvtool call afficher_entetes "$CSV_CCARM" i=0 csvtool head 1 "$CSV_CCARM" -u ' ' | while read label do i=$(( "$i+1" )) echo "[$i]: $label" done } function produire_script_gnuplot() { nomgraph="$1" titregraph="$2" # Copié et adapté depuis http://gnuplot.sourceforge.net/demo_5.2/histograms.1.gnu cat << EOF set terminal pngcairo background rgbcolor "#ffffff" enhanced font "arial,10" fontscale 1.0 size 1000, 1000 set output '${GPP}/${nomgraph}.png' set key fixed right top vertical Right noreverse noenhanced autotitle nobox set datafile missing '-' set style data linespoints set xtics border in scale 1,0.5 nomirror rotate by -45 autojustify set xtics norangelimit set xtics () set title "${titregraph}" DEBUG_TERM_HTIC = 119 DEBUG_TERM_VTIC = 119 plot '${GPP}/${nomgraph}.dat' using 2:xtic(1) title columnheader(2), for [i=3:20] '' using i title columnheader(i) EOF } function produire_dat_premiere_ligne() { # 1ère ligne du fichier .dat : entêtes avec les noms de communes echo -en "Année\t" for c in "${COMMUNES[@]}" do echo -en "$c\t" done echo -en '\n' } function produire_dat_premiere_colonne() { csvtool drop 1 "$CSV_CCARM" | csvtool take "$NB_ANNEES" - |csvtool col 1 - > "${GPP}/coldate.csv" } function produire_dat() { cols="$1" nomentetecourt="$2" i=0 dattmpd="$(mktemp -d)" listedats="" while [ "$i" -lt "${#COMMUNES[@]}" ] do ligne=$(( i*NB_ANNEES+1 )) csvtool drop "$ligne" "$CSV_CCARM" | csvtool take "$NB_ANNEES" - | csvtool col "$cols" - > "${dattmpd}/${nomentetecourt}.${i}" listedats="$listedats ${dattmpd}/${nomentetecourt}.${i}" i=$(( $i+1 )) done csvtool paste "${GPP}/coldate.csv" $listedats -u TAB > "${GPP}/${nomentetecourt}.all" } function produire_graphique() { col="$1" nomentetelong=$(csvtool head 1 "$CSV_CCARM" | csvtool col "$col" - | tr -d \") nomentetecourt="$(echo $nomentetelong | tr -d ' ' | tr -d \' | tr -d '"' |tr -d '/' | tr -d '=' | tr -d '(' | tr -d ')' )" echo "Production du graphique ${nomentetelong}." produire_dat "$col" "$nomentetecourt" produire_script_gnuplot "$nomentetecourt" "$nomentetelong" > "${GPP}/${nomentetecourt}.gnu" cat "${GPP}/entetes.csv" "${GPP}/${nomentetecourt}.all" > ${GPP}/${nomentetecourt}.dat rm "${GPP}/${nomentetecourt}.all" gnuplot "${GPP}/${nomentetecourt}.gnu" } function produire_graphiques() { produire_dat_premiere_ligne > "${GPP}/entetes.csv" produire_dat_premiere_colonne # ici, on indique la colonne qui nous intéresse pour chaque graphique créé #produire_graphique 4 #produire_graphique 37 #produire_graphique 71 #produire_graphique 74 chiffres="4 5 7 8 9 10 11 12 14 16 18 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 68 69 70 71 72 73 74" elimines="1 2 3 6 13 15 17 19 65 67" #max=74 for i in $chiffres do produire_graphique "$i" done } function usage() { scriptname="$(basename $0)" echo "---Usage---" echo "" echo "Télécharger le CSV contenant toutes les données des communes :" echo " $ $scriptname csv1" echo "" echo "Réduire le CSV aux communes de la CCARM" echo " $ $scriptname csv2" echo "" echo "Afficher les numéros des entêtes du CSV :" echo " $ $scriptname entetes" echo "" echo "Produire tous les graphiques :" echo " $ $scriptname graphiques" echo "" echo "Afficher les colonnes correspondantes :" echo " $ $scriptname col x,y-z" } function demarrage() { if [ $# -gt 0 ]; then action="$1" shift 1 fi case "$action" in "csv1") telecharger_csv ;; "csv2") alleger_csv ;; "entetes") afficher_entetes ;; "gnup") produire_script_gnuplot ;; "graphiques") produire_graphiques ;; "dat") produire_dat "$@" ;; "col") csvtool -u TAB col 1,3,"$1" "$CSV_CCARM" ;; *) usage ;; esac } demarrage "$@"