From c884aac9477b596bd4fa08e8890d318ab27c6e76 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Fri, 10 Jan 2025 15:56:21 +0100 Subject: Add scripts to convert data from investment portfolios --- beleggen_to_csv.py | 39 +++++++++++++++++++++++++++++++++++++++ evi_to_asn.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ plotasn.py | 3 ++- 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 beleggen_to_csv.py create mode 100644 evi_to_asn.py diff --git a/beleggen_to_csv.py b/beleggen_to_csv.py new file mode 100644 index 0000000..e59922c --- /dev/null +++ b/beleggen_to_csv.py @@ -0,0 +1,39 @@ +import csv +import json +import sys + +# Script om ASN Beleggen vermogensontwikkeling om te zetten naar het CSV +# formaat van spaar- en betaalrekeningen, zodat het door plotasn.py meegenomen +# kan worden. +# +# Om de data te krijgen: +# +# 1. Ga naar https://www.asnbank.nl/online/web/onlinebankieren/beleggen/11812158 +# 2. Er wordt een request gedaan naar .../api/datapunten +# 3. Dit script converteert zulke data op stdin naar een CSV bestand op stdout + +def parse_date(s): + y, m, d = s.split('-') + return '{}-{}-{}'.format(d, m, y) + +def beleggen_to_csv(json): + prev = 0 + + for e in json['grafiekdata']: + value = float(e['waarde']) + if value == prev: + continue + + diff = round(value - prev, 2) + date = parse_date(e['vastgelegd_op']) + yield '', '', '', '', '', '', '', 'EUR', prev, 'EUR', diff, date + + prev = value + +if __name__ == '__main__': + for line in sys.stdin: + obj = json.loads(line) + + wr = csv.writer(sys.stdout) + for line in beleggen_to_csv(obj): + wr.writerow(line) diff --git a/evi_to_asn.py b/evi_to_asn.py new file mode 100644 index 0000000..0531f30 --- /dev/null +++ b/evi_to_asn.py @@ -0,0 +1,52 @@ +import csv +import json +import sys + +# Script om Evi vermogensontwikkeling om te zetten in het CSV formaat van de +# ASN, zodat het door plotasn.py meegenomen kan worden. +# +# Om de data te krijgen: +# +# 1. Ga naar https://mijn.evivanlanschot.nl/deelnemer/vermogensontwikkeling +# 2. Er wordt een request gedaan naar /deelnemer/vermogensontwikkeling/postjsondata +# 3. Dit script converteert zulke data op stdin naar een CSV bestand op stdout + +MONTHS = { + 'jan': '01', 'feb': '02', 'mrt': '03', 'apr': '04', 'mei': '05', 'jun': '06', + 'jul': '07', 'aug': '08', 'sep': '09', 'okt': '10', 'nov': '11', 'dec': '12', + } + +def parse_date(s): + d, m, y = s.split('-') + return '{}-{}-20{}'.format(d, MONTHS[m], y) + +def evi_to_asn(json): + dates = [e['label'] for e in obj['categories'][0]['Category']] + + cum = obj['dataset'][0] + assert cum['seriesName'] == 'Cumulatieve ontwikkeling' + + prev = 0 + + for date, entry in zip(dates, cum['data']): + if len(entry['value']) == 0: + continue + + value = float(entry['value'].replace(',', '.')) + if value == prev: + continue + + diff = round(value - prev, 2) + date = parse_date(date) + yield '', '', '', '', '', '', '', 'EUR', prev, 'EUR', diff, date + + prev = value + +if __name__ == '__main__': + for line in sys.stdin: + s = json.loads(line) + obj = json.loads(s) + + wr = csv.writer(sys.stdout) + for line in evi_to_asn(obj): + wr.writerow(line) diff --git a/plotasn.py b/plotasn.py index 1860de4..a06c8ac 100755 --- a/plotasn.py +++ b/plotasn.py @@ -7,6 +7,7 @@ import matplotlib.pyplot as plt import matplotlib.dates as mdates from matplotlib.ticker import AutoMinorLocator import numpy as np +from os.path import basename class Record: def __init__(self, date, balance): @@ -94,7 +95,7 @@ def plot_files(files): i = 0 for xs, ys in axes_lists: - plt.plot(xs, ys, label=files[i]) + plt.plot(xs, ys, label=basename(files[i])) i += 1 if len(files) > 1: -- cgit v1.2.3