Mengelola geek: dari mana mendapatkan data?

gambar


Jika Anda serius memutuskan untuk mempertimbangkan keuangan pribadi, maka salah satu kesulitan pertama bagi Anda kemungkinan adalah pengumpulan data. Dalam komentar di artikel sebelumnya , di mana saya gagal mencoba membenarkan kebutuhan akan pengelolaan uang, orang-orang dengan tingkat disiplin diri tertinggi dicatat untuk siapa pertanyaan ini bukan pertanyaan. Mereka secara disiplin menuliskan pengeluaran mereka hari demi hari di ponsel mereka selama bertahun-tahun. Secara pribadi, saya dapat mengatakan pada diri saya bahwa saya tidak pernah berhasil, dan jujur ​​pada diri saya sendiri, saya mungkin tidak akan pernah mulai berhasil di masa depan. Karena itu, jalan ini jelas bukan untuk saya. Tapi saya menemukan solusinya!


Untungnya, ponsel saya mencatat semua pengeluaran saya tanpa partisipasi saya. Untuk setiap operasi pada kartu saya, saya menerima pemberitahuan SMS dari bank, yang berisi sebagian besar informasi yang diperlukan:


  • Jumlah Pembayaran
  • Kode Terminal Pedagang
  • Waktu pembayaran
  • Saldo saldo
  • ID biaya

Jadi, untuk mendapatkan data primer untuk dianalisis, kita perlu membongkar pesan SMS. Saya seorang geek dan karenanya saya memiliki ponsel Android yang di-root. Dalam kasus saya, tugas ini sepele:


$ 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] adalah program yang termasuk dalam Android SDK. Ada implementasi untuk Windows dan Linux / Mac. Untuk mengakses basis data mmssms.db, Anda memerlukan hak akses root. Jika ada yang tahu cara mendapatkan ini file tanpa root, silakan tulis di komentar)


Sebagai hasil dari skrip, kami memiliki database SQLite3 biasa. Anda dapat bekerja dengannya menggunakan paket sqlite, yang implementasinya juga tersedia di Linux, Windows dan Mac. Dalam database ini, kami tertarik pada tabel SMS, yang berisi kolom alamat dan tubuh .


 $ 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 

Menggunakan permintaan sql biasa, kami dapat memilih pesan SMS yang dikirim oleh Sberbank:


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

Di sini 900 adalah nomor dari mana Sberbank mengirimkan pemberitahuan. Fungsi trim menghapus transfer carriage di akhir pesan, yang dilakukan beberapa bank karena suatu alasan. Berikut adalah contoh output:


 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 

Saya dan istri saya menggunakan kartu yang berbeda. Dengan ID kartu, Anda dapat membedakan pembayar. Dengan menggunakan kode terminal, Anda dapat mengetahui berapa tepatnya uang dan jumlah yang dihabiskan. Pada prinsipnya, ini cukup untuk mendapatkan semacam gambaran statistik.


Pemrosesan data


Mulai saat ini, semua orang dapat menempuh jalannya sendiri. Seseorang dapat menulis skrip Python untuk analisis dan parsing. Seseorang dapat menggunakan AWK untuk mengambil alih data dalam CSV dan menganalisis dalam Excel. Saya menggunakan buku besar cli untuk analisis. Pada topik buku besar di Habré hanya ada satu artikel "Akuntansi keuangan dalam konsol teks" oleh estet . Jika Anda ingin memulai, saya sarankan Anda membaca artikel ini.


Pada artikel selanjutnya saya akan memberi tahu Anda cara mentransfer data dari pesan SMS ke format teks Buku Besar, serta cara saya mengatur file ini.

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


All Articles