$30 off During Our Annual Pro Sale. View details »

Managing Personal Finances using Python

Managing Personal Finances using Python

Siddhant Goel

October 24, 2018
Tweet

More Decks by Siddhant Goel

Other Decks in Programming

Transcript

  1. Managing Personal Finances using Python Siddhant Goel  / 

    @siddhantgoel PyMunich October 2018
  2. Let's talk about money.

  3. What is my net worth?

  4. Where is my money going?

  5. How much do I owe others?

  6. Started questioning things earlier this year.

  7. Spend less Track more

  8. Number of solutions = O(∞) Mint.com YNAB Outbank GNUCash ...

  9. Proprietary ... mayyyyybe

  10. -based ... sorry, that's not happening

  11. Requirements Simple No cloud Ideally free Open source Hopefully Python

  12. #plaintextaccounting

  13. Double Entry Bookkeeping

  14. Beancount $ pip install beancount

  15. Big Fat Disclaimers ™ I'm not a nancial advisor Aim

    is to show you the tip of the iceberg Next slide may or may not contain some maths
  16. ∑(postings) = 0

  17. None
  18. None
  19. ; Date format - YYYY-MM-DD option "title" "Mustermann" option "operating_currency"

    "EUR" 2018-10-01 open Assets:DKB 2018-10-01 open Income:BigCorp 2018-10-01 open Expenses:Food 2018-10-01 open Expenses:Rent ; ... ; ... ; ... 2018-10-25 "*" "Überweisung BigCorp" Assets:DKB 3000.00 EUR Income:BigCorp -3000.00 EUR 2018-11-01 "*" "Miete" Assets:DKB -1500.00 EUR Expenses:Rent 1500.00 EUR 2018-11-02 "*" "Essen" Assets:DKB -50.00 EUR Expenses:Food 50.00 EUR 2018-10-26 balance Assets:DKB 3000.00 EUR 2018-11-03 balance Expenses:Food 50.00 EUR
  20. How to get started?

  21. Work ow     

  22. Beancount does not understand your CSV les? Write an importer.

  23. Sample Importer from beancount.core.amount import Amount from beancount.core.number import Number

    from beancount.ingest.importer import ImporterProtocol class SampleImporter(ImporterProtocol): # ... def identify(self, file_): """Check if file_ is from the bank we're supposed to work with """ # ... def extract(self, file_): """Read file_, and emit a list of beancount data structures """
  24. Fava: web UI for Beancount $ pip install fava

  25. None
  26. None
  27. Bean SQL SELECT month, SUM(position) FROM year = 2017 WHERE

    account ~ 'Expenses:Supermarket' GROUP BY month
  28. What's next? Envelope Budgeting Automating Downloads

  29. Resources https://plaintextaccounting.org https://www.reddit.com/r/plaintextaccounting https://aumayr.github.io/beancount-docs-static/ https://beancount.github.io/fava/ Slides https://bit.ly/sg-pymunich-2018

  30. Thank you for your time!  bit.ly/sg-pymunich-2018  / 

    @siddhantgoel  sgoel.org