إدارة المهوس: من أين تحصل على البيانات؟

الصورة


إذا قررت بجدية أن تأخذ في الاعتبار التمويل الشخصي ، فمن المحتمل أن تكون جمع البيانات من أولى الصعوبات بالنسبة لك. في التعليقات على المقال السابق ، حيث حاولت دون جدوى تبرير الحاجة الماسة لإدارة الأموال ، لوحظ الأشخاص الذين لديهم أعلى مستوى من الانضباط الذاتي لمن لم يكن هذا السؤال سؤالًا. يقومون بتدوين إنفاقهم يومًا بعد يوم في هواتفهم المحمولة لسنوات عديدة. أنا شخصياً أستطيع أن أقول لنفسي أنني لم أنجح أبداً ، ولأكون صادقاً مع نفسي ، ربما لن أبدأ أبدًا في النجاح في المستقبل. لذلك ، من الواضح أن هذا المسار ليس لي. ولكن وجدت حلا!


لحسن الحظ ، يسجل هاتفي جميع نفقاتي دون مشاركتي. لكل عملية على بطاقتي ، أتلقى إشعارًا عبر رسالة نصية قصيرة من البنك يحتوي على معظم المعلومات الضرورية:


  • مبلغ الدفع
  • رمز المحطة التجارية
  • وقت الدفع
  • رصيد التوازن
  • معرف المسؤول

وبالتالي ، من أجل الحصول على البيانات الأساسية للتحليل ، نحتاج إلى إلغاء تحميل رسائل 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 ، تحتاج إلى امتيازات الجذر. إذا كان أي شخص يعرف كيفية الحصول على هذا ملف بدون جذر ، يرجى الكتابة في التعليقات)


نتيجة للبرنامج النصي ، لدينا قاعدة بيانات SQLite3 عادية. يمكنك العمل معها باستخدام حزمة sqlite ، والتي يتوفر تنفيذها أيضًا على Linux و Windows و Mac. في قاعدة البيانات هذه ، نحن مهتمون بجدول الرسائل القصيرة الذي يحتوي على العنوان وأعمدة النص.


 $ 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 منتظم ، يمكننا تحديد رسائل SMS المرسلة بواسطة Sberbank:


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

هنا 900 هو الرقم الذي يرسل منه Sberbank إشعارات. تزيل وظيفة القطع عملية النقل في نهاية الرسالة ، والتي تضعها بعض البنوك لسبب ما. هنا مثال على الإخراج:


 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 

أنا وزوجتي نستخدم بطاقات مختلفة. من خلال معرف البطاقة ، يمكنك التفريق بين الدافع. باستخدام رمز المحطة الطرفية ، يمكنك معرفة المبلغ الذي تم إنفاقه بالضبط والمبلغ الذي تم إنفاقه عليه. من حيث المبدأ ، هذا يكفي للحصول على نوع من الصورة الإحصائية.


معالجة البيانات


من هذه النقطة ، يمكن للجميع أن يسلكوا طريقهم الخاص. يمكن لشخص ما كتابة نص بايثون للتحليل والتحليل. يمكن لأي شخص استخدام AWK لتجاوز البيانات في CSV والتحليل في Excel. يمكنني استخدام CLI ليدجر للتحليل. حول موضوع دفتر الأستاذ على حبري ، هناك مقال واحد فقط بعنوان "المحاسبة المالية في وحدة التحكم النصية" بواسطة estet . إذا كنت حريصًا على البدء ، أوصيك بقراءة هذه المقالة.


في المقالة التالية ، سأخبرك كيف أنقل البيانات من رسائل SMS إلى تنسيق نص Ledger ، بالإضافة إلى كيفية تنظيم هذا الملف.

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


All Articles