Gestionar para un geek: ¿de dónde obtener datos?

imagen


Si decide seriamente tener en cuenta las finanzas personales, es probable que una de las primeras dificultades para usted sea la recopilación de datos. En los comentarios al artículo anterior , donde intenté sin éxito justificar la necesidad misma de administrar el dinero, se observó a las personas con el más alto nivel de autodisciplina para quienes esta pregunta no es una pregunta. Disciplinariamente escriben sus gastos día tras día en su teléfono celular durante muchos años. Personalmente, puedo decir por mí mismo que nunca tuve éxito, y para ser honesto conmigo mismo, probablemente nunca comenzaré a tener éxito en el futuro. Por lo tanto, este camino claramente no es para mí. ¡Pero encontré una solución!


Afortunadamente, mi teléfono registra todos mis gastos sin mi participación. Para cada operación en mi tarjeta, recibo una notificación por SMS del banco, que contiene la mayor parte de la información necesaria:


  • Monto de pago
  • Código de terminal comercial
  • Tiempo de pago
  • Saldo saldo
  • ID de carga

Por lo tanto, para obtener datos primarios para el análisis, necesitamos descargar mensajes SMS. Soy un geek y, por lo tanto, tengo un teléfono Android rooteado. En mi caso, esta tarea es 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] es un programa incluido en el SDK de Android. Existen implementaciones para Windows y Linux / Mac. Para acceder a la base de datos mmssms.db, necesita privilegios de root. Si alguien sabe cómo obtener esto archivo sin root, por favor escriba en los comentarios)


Como resultado del script, tenemos una base de datos SQLite3 normal. Puede trabajar con él utilizando el paquete sqlite, cuya implementación también está disponible en Linux, Windows y Mac. En esta base de datos, estamos interesados ​​en la tabla de SMS, que contiene las columnas de dirección y cuerpo .


 $ 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 

Mediante una solicitud sql regular, podemos seleccionar los mensajes SMS enviados por Sberbank:


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

Aquí 900 es el número desde el cual Sberbank envía notificaciones. La función de recorte elimina la transferencia de carro al final del mensaje, que algunos bancos ponen por alguna razón. Aquí hay un ejemplo de salida:


 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 

Mi esposa y yo usamos diferentes tarjetas. Por ID de tarjeta, puede diferenciar al pagador. Usando el código de terminal, puede averiguar en qué se gastó exactamente el dinero y la cantidad gastada. En principio, esto es suficiente para obtener algún tipo de imagen estadística.


Procesamiento de datos


A partir de este momento, todos pueden seguir su propio camino. Alguien puede escribir un script de Python para analizar y analizar. Alguien puede usar AWK para adelantar datos en CSV y analizar en Excel. Yo uso ledger cli para el análisis. Sobre el tema del libro mayor en Habré solo hay un artículo "Contabilidad financiera en una consola de texto" por estet . Si está ansioso por comenzar, le recomiendo que lea este artículo.


En el próximo artículo, le diré cómo transfiero datos de mensajes SMS a formato de texto Ledger, así como cómo organizo este archivo.

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


All Articles