almost there
This commit is contained in:
+6
-1
@@ -1,4 +1,5 @@
|
||||
import polars as pl
|
||||
from datetime import date, timedelta
|
||||
|
||||
accounts = pl.read_parquet('data/warehouse/accounts.parquet')
|
||||
categories = pl.read_parquet('data/warehouse/categories.parquet')
|
||||
@@ -52,4 +53,8 @@ spend_per_payee = master_transactions.sql('''
|
||||
'''
|
||||
)
|
||||
|
||||
print(spend_per_payee)
|
||||
# print(spend_per_day)
|
||||
today = date(date.today())
|
||||
# Convert the dates to datetime objects that are compatible with Polars
|
||||
start_date = pl.Date(today)
|
||||
print(start_date)
|
||||
|
||||
@@ -35,6 +35,8 @@ def load_config():
|
||||
except yaml.YAMLError as e:
|
||||
logging.error(f'Error loading config.yaml: {e}')
|
||||
sys.exit(ec.CORRUPTED_CONFIG_FILE)
|
||||
except Exception as e:
|
||||
logging.error(f'some other problem {e}')
|
||||
|
||||
logger = logging.getLogger("data_pipeline_for_ynab")
|
||||
os.makedirs('logs', exist_ok=True)
|
||||
|
||||
@@ -4,7 +4,7 @@ import pandas as pd
|
||||
import logging
|
||||
import sys
|
||||
import config.exit_codes as ec
|
||||
import datetime
|
||||
# import datetime
|
||||
|
||||
try:
|
||||
accounts = pl.read_parquet('data/warehouse/accounts.parquet')
|
||||
@@ -30,9 +30,7 @@ except Exception as e:
|
||||
|
||||
def update_dates(start_date, end_date):
|
||||
master_data = master_transactions.filter(
|
||||
(pl.col('year') >= start_date.year ) & (pl.col('year') <= end_date.year) &
|
||||
(pl.col('month') >= start_date.month ) & (pl.col('month') <= end_date.month) &
|
||||
(pl.col('day') >= start_date.day ) & (pl.col('day') <= end_date.day)
|
||||
pl.col("date").is_between(start_date, end_date)
|
||||
)
|
||||
return master_data
|
||||
|
||||
@@ -119,5 +117,5 @@ def update_data(master_data):
|
||||
"spend_per_category_bar": spend_per_category_bar,
|
||||
"spend_per_payee_bar": spend_per_payee_bar,
|
||||
"total_spend": total_spend}
|
||||
print(data)
|
||||
|
||||
return data
|
||||
|
||||
+10
-4
@@ -1,21 +1,27 @@
|
||||
'''Module to create a Dash app that displays visualizations of YNAB data.'''
|
||||
import dash
|
||||
from dash import dcc, html
|
||||
from dash.dependencies import Input, Output
|
||||
from dash.dependencies import Input, Output, State
|
||||
import dash_bootstrap_components as dbc
|
||||
from visuals.layout import create_layout
|
||||
from visuals.components import update_data, update_dates
|
||||
from datetime import date
|
||||
from datetime import date, timedelta
|
||||
|
||||
today = date.today()
|
||||
one_year_ago = today - timedelta(days=365)
|
||||
|
||||
master_data = update_dates(start_date=date(2024, 1, 1), end_date=date(2026, 1, 1))
|
||||
master_data = update_dates(start_date=one_year_ago, end_date=today)
|
||||
data = update_data(master_data)
|
||||
|
||||
|
||||
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.DARKLY])
|
||||
|
||||
@app.callback(
|
||||
Output("layout-container", "children"),
|
||||
Output("spend_per_day","figure"),
|
||||
Output("spend_per_category","figure"),
|
||||
Output("spend_per_payee","figure"),
|
||||
Output("total_spend","children"),
|
||||
|
||||
[Input('date-picker-range', 'start_date'),
|
||||
Input('date-picker-range', 'end_date')]
|
||||
)
|
||||
|
||||
+25
-20
@@ -1,6 +1,10 @@
|
||||
from dash import html, dcc
|
||||
from datetime import date
|
||||
import dash_bootstrap_components as dbc
|
||||
from datetime import date, timedelta
|
||||
|
||||
today = date.today()
|
||||
one_year_ago = today - timedelta(days=365)
|
||||
|
||||
|
||||
def create_layout(data):
|
||||
@@ -13,22 +17,22 @@ def create_layout(data):
|
||||
def create_topbar():
|
||||
return [
|
||||
dbc.Container(
|
||||
dbc.Row(
|
||||
[
|
||||
dbc.Col(
|
||||
dcc.DatePickerRange(
|
||||
id="date-picker-range",
|
||||
start_date=date(2024, 1, 1),
|
||||
end_date=date(2026, 1, 1),
|
||||
),
|
||||
width=4,
|
||||
),
|
||||
dbc.Col(
|
||||
html.Button("Change Date Range", id="date-range-confirm-button"),
|
||||
width=2,
|
||||
),
|
||||
]
|
||||
)
|
||||
dbc.Row(
|
||||
[
|
||||
dbc.Col(
|
||||
dcc.DatePickerRange(
|
||||
id="date-picker-range",
|
||||
start_date=one_year_ago,
|
||||
end_date=today,
|
||||
),
|
||||
width=4,
|
||||
),
|
||||
dbc.Col(
|
||||
html.Button("Change Date Range", id="date-range-confirm-button"),
|
||||
width=2,
|
||||
),
|
||||
]
|
||||
)
|
||||
)
|
||||
]
|
||||
|
||||
@@ -54,7 +58,7 @@ def create_main_body(data):
|
||||
html.H4(
|
||||
"Spend Per Day", className="card-title"
|
||||
),
|
||||
dcc.Graph(figure=data.spend_per_day_line),
|
||||
dcc.Graph(figure=data['spend_per_day_line'],id='spend_per_day'),
|
||||
]
|
||||
),
|
||||
className="mb-4",
|
||||
@@ -72,7 +76,7 @@ def create_main_body(data):
|
||||
html.H4(
|
||||
"Spend Per Category", className="card-title"
|
||||
),
|
||||
dcc.Graph(figure=data.spend_per_category_bar),
|
||||
dcc.Graph(figure=data['spend_per_category_bar'],id='spend_per_category'),
|
||||
]
|
||||
),
|
||||
className="mb-4",
|
||||
@@ -85,10 +89,11 @@ def create_main_body(data):
|
||||
[
|
||||
dcc.Markdown(f"""
|
||||
## Total Spend:
|
||||
### £{data.total_spend:,}
|
||||
### £{data['total_spend']:,}
|
||||
"""),
|
||||
]
|
||||
),
|
||||
id='total_spend',
|
||||
className="mb-4",
|
||||
),
|
||||
width=2,
|
||||
@@ -100,7 +105,7 @@ def create_main_body(data):
|
||||
html.H4(
|
||||
"Spend Per Payee", className="card-title"
|
||||
),
|
||||
dcc.Graph(figure=data.spend_per_payee_bar),
|
||||
dcc.Graph(figure=data['spend_per_payee_bar'],id='spend_per_payee'),
|
||||
]
|
||||
),
|
||||
className="mb-4",
|
||||
|
||||
Reference in New Issue
Block a user