Rapport financier

2022-06-05

Tenir un livre de comptes[1] c'est bien, s'en servir c'est mieux. Cet aspect n'est apparemment pas pris en charge par ledger qui se contente d'organiser les données sans jamais faire un seul calcul. Soit, c'est un choix honorable et très UNIX dans l'idée. Un peu de documentation à ce sujet n'aurait pas été de trop, mais comme on dit : on est jamais mieux servi que par soi-même.

Format de données

Par défaut ledger propose des rapports condensés : `bal` et `reg` génèrent respectivement une vue d'ensemble des mouvements par type de dépense, et une vue en liste de chaque mouvement. Chacune pouvant être modifiée par des arguments. La commande `csv` peut également être utilisée pour générer un rapport au format éponyme.

L'argument --monthly permet notamment de regrouper les entrées par mois.

Format graphique

La documentation officielle présente un exemple de rapport à l'aide de gnuplot[2] proposant de nombreuses personnalisations[3]. Le défaut à cette méthode est l'usage de gnuplot que, n'étant pas libre, je ne souhaite pas utiliser[4].

GNU graph serait une alternative possible, mais n'étant familier ni avec le programme, ni l'opération en elle-même, je commencerai avec R qui prend en charge la manipulation de données, et dispose de paquets dédiés à ledger[5].

Dans un contexte encore plus avancé, d'autres ont mis en place des interfaces de suivi complètes[6] pouvant théoriquement être consultables à distance. Ce sont des solutions dynamiques qui ne m'intéressent que peu : j'utilise et surveille seul mon budget.

Format textuel

Plutôt que de générer un graphique à analyser visuellement, et surtout faute de logiciel qui me convienne vraiment — R étant une dépendance assez lourde pour qui n'en a pas utilité –, il peut être pertinent de se contenter de seulement calculer les indicateurs[7] qui m'intéressent :




Dans l'idée, chaque donnée calculée existerait sous la forme d'une paire date et nombre, ce qui se prêterait aisément à un format graphique.

Au risque de perdre de l'information (Ce qui est en soi un exercice intéressant puisque mettant à l'épreuve les limites des indicateurs statistiques usuels), alors je vais chercher à calculer sur la sortie de ledger les différents quartiles par catégorie, ainsi que l'écart-type[8]. Ces indicateurs traduisent de manière relativement exhaustive un jeu de données, sans en décrire la tendance (Qui de toute manière devrait être relativement nulle dans mon objectif de stabilité. Par curiosité cela pourrait néanmoins être analysé via méthode graphique ou une régression).

Mon salaire et certains frais étant mensualisés, c'est la résolution à laquelle je m'applique pour l'analyse. Mais il serait tout à fait possible de le faire par semaine ou par jour, en quel cas une simplification par ondelettes ou Fourier pourrait être intéressante.

Je n'ai pas trouvé de code sous Bash répondant à mon besoin. Ce qui ne m'a pas empêché de monter une ébauche que j'ai abandonnée par flemme de construire des fonctions statistiques basiques.

$ ledger -f annee.ledger csv -M
"AAAA/MM/JJ","","- AA-MMM-JJ","categorie","devise","montant","",""
$ cut -d ',' -f 1,4,6
"AAAA/MM/JJ","categorie","montant"
; Je préfère ne pas avoir à utiliser d'argument, le temps de traitement est relativement similaire entre les deux méthodes
; sed -r 's/|^"....\/(..)\/.."/\1/g'
$ sed 's/^"....\///g'
MM/JJ","categorie","montant"
$ sed 's/\/.."//g
MM,"categorie","montant"'
$ sed 's/"//g'
MM,categorie,montant

https://github.com/TatyanaV/-Bourne-shell-script-to-compute-statistics

rows=`wc -l $filename|cut -d' ' -f1`
q2=`echo "($rows+1)/2"|bc`
q1=`echo "$q2 / 2"|bc`
q3=`echo "$q1 * 3"|bc
`

echo "Q1="`head -$q1 $filename|tail -1`
echo "Q2="`head -$q2 $filename|tail -1`
echo "Q3="`head -$q3 $filename|tail -1`

for i in categorie
	for j in mois
	calcul Q0-4
	calcul σ
https://nickcanzoneri.com/bash/command-line/data/2018/03/20/data-analysis-first-aid.html
https://www.jessesadler.com/post/excel-vs-r/

Plutôt que Bash, je me suis orienté encore une fois vers mon langage de cœur, R, qui possédait déjà quelques travaux[9]. J'aurais pu simplement les exécuter… s'ils fonctionnaient. Leur complexité et mon absence de motivation auront eu raison de moi ; J'ai fait mon propre code, moche, ultraspécifique à mon usage, mais qui a le mérite de fonctionner à partir de la fonction d'export mensualisé de ledger[10].

Références

[1] Comptabilité en Texte Brut, LeJun 2022

[2] Visualizing with Gnuplot, ledger 2022

[3] Report Scripts for Ledger CLI with Gnuplot, Sundialdreams 2016

[4] Visualisation de données, LeJun 2023

[5] ledger, Davis 2021

[6] Program your Finances: Command-line Accounting , Keen 2011

[7] Indicateurs, LeJun 2023

[8] Variance, LeJun 2023

[9] ledger-plots, Sovetkin 2018

[10] ledger-R-report, LeJun 2024


Source