Skip to main content
  1. Blog/

Fra hledger tidsregnskab til treemap i dash

·173 ord·1 minut

Tidsforbrug registreret i ledger cli eller hledger kan rapporteres som

       3  administrativt:bureaukrati
       6  administrativt:fundraising
       7  administrativt:teknik
       2  redaktionelt:feedback
       1  redaktionelt:ideudvikling
       5  redaktionelt:research:pressekontakt:frugtbar
       5  redaktionelt:research:pressekontakt:unyttig
      37  redaktionelt:skrive

med kommandoen hledger -f folkets-tid.journal bal -c 1..

Det er relativt nemt med Nushell eller Neovim eller andre værktøjer at omsætte til en csv som følger:

values,domains,activities,details,status
3,administrativt,bureaukrati,None,None
6,administrativt,fundraising,None,None
7,administrativt,teknik,None,None
2,redaktionelt,feedback,None,None
1,redaktionelt,ideudvikling,None,None
5,redaktionelt,research,pressekontakt,frugtbar
5,redaktionelt,research,pressekontakt,unyttig
37,redaktionelt,skrive,None,None

Og den fil kan så bruges med plotly til at lave en miniapp i dash:

from dash import Dash, html, dcc
import plotly.express as px
import pandas as pd

app = Dash(__name__)

df = pd.read_csv('treemap1.csv').replace("None", None)

fig = px.treemap(df, path=[px.Constant("Tidsforbrug"), 'domains', 'activities', 'details', 'status'], values='values')
fig.update_traces(root_color="lightgrey")
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.update_traces(marker=dict(cornerradius=10))
app.layout = html.Div(children=[
    html.H1(children='Tidsregnskab'),

    html.Div(children='''
        Tidsforbrug på Folkets Avis januar 2023.
    '''),

    dcc.Graph(
        id='example-graph',
        figure=fig
    )
])

if __name__ == '__main__':
    app.run_server(debug=True)

Det giver så dette treemap

Og man kan klikke sig ind på det:

Det kan man dog ikke her hvor det bare er affotograferet fra serveren som kun kører lokalt.

Treemaps giver et godt overblik over tidsregnskab.