管理极客:从哪里获取数据?

图片


如果您认真决定考虑个人理财,那么数据收集将是您面临的第一个困难。 在上一篇文章的评论中,我未能成功地证明对资金管理的需求是正确的,其中指出了自律程度最高的人,这个人不是这个问题。 他们严格遵守纪律,每天用手机写下他们的消费。 就我个人而言,我可以为自己说自己从未成功过,老实说,我将来可能永远也不会成功。 因此,这条路显然不适合我。 但是我找到了解决方案!


幸运的是,我的电话记录了我所有未参加的费用。 对于银行卡上的每项操作,我都会从银行收到一条短信通知,其中包含大多数必要信息:


  • 付款金额
  • 商家终端代码
  • 付款时间
  • 余额余额
  • 收费编号

因此,为了获得用于分析的主要数据,我们需要卸载SMS消息。 我是一个极客,因此我拥有扎根的Android手机。 就我而言,此任务很简单:


$ 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]是Android SDK中包含的程序。Windows和Linux / Mac都有实现。要访问mmssms.db数据库,您需要root权限。如果有人知道如何获得此权限,没有root的文件,请在评论中写)


作为脚本的结果,我们有一个常规的SQLite3数据库。 您可以使用sqlite软件包来使用它,在Linux,Windows和Mac上也可以使用该软件包的实现。 在此数据库中,我们对SMS表感兴趣,该表包含地址正文列。


 $ 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 

使用常规的sql请求,我们可以选择Sberbank发送的SMS消息:


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

Sberbank发送通知的电话号码是900。 修剪功能会在消息末尾删除笔架转帐,某些银行出于某种原因将其转入。 这是示例输出:


 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 

我和妻子使用不同的卡。 通过卡ID,您可以区分付款人。 使用终端代码,您可以确切地知道花了多少钱和多少钱。 原则上,这足以获得某种统计图像。


资料处理


从这一点开始,每个人都可以走自己的路。 有人可以编写Python脚本进行解析和分析。 有人可以使用AWK来获取CSV中的数据并在Excel中进行分析。 我使用账本cli进行分析。 关于Habré上的分类帐主题, estet仅有一篇文章“文本控制台中的财务会计” 。 如果您渴望入门,建议您阅读这篇文章。


在下一篇文章中,我将告诉您如何将数据从SMS消息传输到Ledger文本格式,以及如何组织此文件。

Source: https://habr.com/ru/post/zh-CN423711/


All Articles