Gérer pour un geek: d'où obtenir les données?

image


Si vous décidez sérieusement de prendre en compte vos finances personnelles, alors l'une des premières difficultés pour vous est probablement la collecte de données. Dans les commentaires de l' article précédent , où j'ai tenté en vain de justifier le besoin même de gestion de l'argent, on a noté des personnes avec le plus haut niveau d'autodiscipline pour qui cette question n'est pas une question. Ils écrivent avec discipline leurs dépenses jour après jour dans leur téléphone portable pendant de nombreuses années. Personnellement, je peux dire par moi-même que je n'ai jamais réussi, et pour être honnête avec moi-même, je ne commencerai probablement jamais à réussir à l'avenir. Par conséquent, ce chemin n'est clairement pas pour moi. Mais j'ai trouvé une solution!


Heureusement, mon téléphone enregistre toutes mes dépenses sans ma participation. Pour chaque opération sur ma carte, je reçois une notification par SMS de la banque, qui contient la plupart des informations nécessaires:


  • Montant du paiement
  • Code du terminal marchand
  • Délai de paiement
  • Solde équilibre
  • ID de charge

Ainsi, afin d'obtenir des données primaires pour l'analyse, nous devons décharger les messages SMS. Je suis un geek et j'ai donc un téléphone Android rooté. Dans mon cas, cette tâche est triviale:


$ adb shell "su -c 'cp /data/data/com.android.providers.telephony/databases/mmssms.db /mnt/sdcard'" $ adb pull /mnt/sdcard/mmssms.db > /dev/null $ adb shell "rm /mnt/sdcard/mmssms.db" 

(adb [android debug bridge] est un programme inclus dans le SDK Android. Il existe des implémentations pour Windows et Linux / Mac. Pour accéder à la base de données mmssms.db, vous avez besoin des privilèges root. Si quelqu'un sait comment l'obtenir fichier sans racine, veuillez écrire dans les commentaires)


À la suite du script, nous avons une base de données SQLite3 régulière. Vous pouvez l'utiliser avec le package sqlite, dont l'implémentation est également disponible sur Linux, Windows et Mac. Dans cette base de données, nous nous intéressons à la table SMS, qui contient les colonnes d' adresse et de corps .


 $ sqlite3 mmssms.db SQLite version 3.22.0 2018-01-22 18:45:57 Enter ".help" for usage hints. sqlite> PRAGMA table_info(sms); 0|_id|INTEGER|0||1 1|thread_id|INTEGER|0||0 2|address|TEXT|0||0 3|m_size|INTEGER|0||0 4|person|INTEGER|0||0 5|date|INTEGER|0||0 6|date_sent|INTEGER|0|0|0 7|protocol|INTEGER|0||0 8|read|INTEGER|0|0|0 9|status|INTEGER|0|-1|0 10|type|INTEGER|0||0 11|reply_path_present|INTEGER|0||0 12|subject|TEXT|0||0 13|body|TEXT|0||0 14|service_center|TEXT|0||0 15|locked|INTEGER|0|0|0 16|sim_id|INTEGER|0|-1|0 17|error_code|INTEGER|0|0|0 18|seen|INTEGER|0|0|0 19|ipmsg_id|INTEGER|0|0|0 

En utilisant une requête sql régulière, nous pouvons sélectionner les messages SMS envoyés par Sberbank:


  $ echo "select trim(body, X'0A') from sms where address = '900' order by date asc" | sqlite3 mmssms.db 

Ici, 900 est le numéro à partir duquel la Sberbank envoie des notifications. La fonction de suppression supprime le transfert de transport à la fin du message, que certaines banques mettent pour une raison quelconque. Voici un exemple de sortie:


 VISA2222 01.01.18 08:43  1245 GAZPROMNEFT : 1985.29 VISA2222 01.01.18 12:05  176.50 YARCHE : 1808.79 VISA2222 01.01.18 12:16  504 FRUKTY : 1304.79 VISA2222 01.01.18 15:09  441 KFC : 863.79 ECMC1111 01.01.18 17:52  15.09EUR HOSTING COMPANY : 66679.05 ECMC1111 02.01.18 19:41  104 MCDONALDS : 66583.47 ECMC1111 03.01.18 08:49  205.10 MARIYA-RA : 66378.37 ECMC1111 03.01.18 09:16  810 FIT SERVICE : 65568.37 VISA2222 03.01.18 09:17  220 EKSKLYUZIV : 643.79 ECMC1111 03.01.18 09:18  4200 FIT SERVICE : 61368.37 

Ma femme et moi utilisons des cartes différentes. Par ID de carte, vous pouvez différencier le payeur. En utilisant le code du terminal, vous pouvez savoir exactement ce que l'argent et le montant dépensé ont été dépensés. En principe, cela suffit pour obtenir une sorte d'image statistique.


Traitement des données


À partir de ce moment, chacun peut suivre son propre chemin. Quelqu'un peut écrire un script Python pour l'analyse et l'analyse. Quelqu'un peut utiliser AWK pour dépasser les données dans CSV et analyser dans Excel. J'utilise le grand livre cli pour l'analyse. Sur le sujet du grand livre sur Habré il n'y a qu'un seul article "La comptabilité financière dans une console texte" par estet . Si vous êtes impatient de commencer, je vous recommande de lire cet article.


Dans le prochain article, je vais vous expliquer comment je transfère les données des messages SMS au format texte Ledger, ainsi que comment j'organise ce fichier.

Source: https://habr.com/ru/post/fr423711/


All Articles