Gerenciando para um nerd: de onde obter dados?

imagem


Se você decidir seriamente levar em consideração as finanças pessoais, uma das primeiras dificuldades para você provavelmente será a coleta de dados. Nos comentários do artigo anterior , onde tentei, sem sucesso, justificar a própria necessidade de gerenciamento de dinheiro, foram notadas pessoas com o mais alto nível de autodisciplina, para quem essa pergunta não é uma pergunta. Eles disciplinam anotam seus gastos dia após dia em seu telefone celular por muitos anos. Pessoalmente, posso dizer por mim mesmo que nunca consegui e, para ser honesto comigo mesmo, provavelmente nunca começarei a ter sucesso no futuro. Portanto, esse caminho claramente não é para mim. Mas eu encontrei uma solução!


Felizmente, meu telefone registra todas as minhas despesas sem minha participação. Para cada operação no meu cartão, recebo uma notificação por SMS do banco, que contém a maioria das informações necessárias:


  • Valor do pagamento
  • Código do terminal do comerciante
  • Tempo de pagamento
  • Balance balance
  • ID da cobrança

Portanto, para obter dados primários para análise, precisamos descarregar mensagens SMS. Eu sou um nerd e, portanto, tenho um telefone Android enraizado. No meu caso, esta tarefa é trivial:


$ 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] é um programa incluído no Android SDK. Existem implementações para Windows e Linux / Mac. Para acessar o banco de dados mmssms.db, você precisa de privilégios de root. Se alguém souber como obtê-lo, arquivo sem raiz, por favor escreva nos comentários)


Como resultado do script, temos um banco de dados SQLite3 regular. Você pode trabalhar com ele usando o pacote sqlite, cuja implementação também está disponível no Linux, Windows e Mac. Nesse banco de dados, estamos interessados ​​na tabela SMS, que contém as colunas de endereço e corpo .


 $ 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 

Usando uma solicitação sql regular, podemos selecionar as mensagens SMS enviadas pelo Sberbank:


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

Aqui 900 é o número a partir do qual o Sberbank envia notificações. A função de apara remove a transferência de carro no final da mensagem, que alguns bancos colocam por algum motivo. Aqui está um exemplo de saída:


 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 

Minha esposa e eu usamos cartões diferentes. Por ID do cartão, você pode diferenciar o pagador. Usando o código do terminal, você pode descobrir em que exatamente o dinheiro e o valor gasto foram gastos. Em princípio, isso é suficiente para obter algum tipo de quadro estatístico.


Processamento de dados


A partir daí, todos podem seguir seu próprio caminho. Alguém pode escrever um script Python para análise e análise. Alguém pode usar o AWK para ultrapassar dados no CSV e analisar no Excel. Eu uso o ledger cli para análise. No tópico contabilidade de Habré, há apenas um artigo "Contabilidade financeira em um console de texto" por estet . Se você está ansioso para começar, recomendo que você leia este artigo.


No próximo artigo, mostrarei como transfiro dados de mensagens SMS para o formato de texto do Ledger, além de como organizo esse arquivo.

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


All Articles