In [ ]:
import numpy as np
import pandas as pd
from bokeh.io import output_notebook, show
output_notebook()
In [ ]:
from app.utils.process_gtimelog import get_work_df, add_processed_columns
processed = add_processed_columns(get_work_df())
processed.tail()
In [ ]:
import datetime
today = datetime.datetime.today()
today
In [ ]:
one_week_ago = today - datetime.timedelta(weeks=1)
two_week_ago = today - datetime.timedelta(weeks=2)
three_week_ago = today - datetime.timedelta(weeks=3)
start = two_week_ago + datetime.timedelta(days=1)
end = one_week_ago
one_week = processed[(processed.timestamp.dt.date >= start.date()) & (processed.timestamp.dt.date <= end.date())]
one_week = one_week[one_week.activity != 'start']
one_week['formatted_activity'] = one_week.parent_activity + ' (' + one_week.sub_activity + ')'
one_week['activity_bottom'] = one_week.formatted_activity + ':0.25'
one_week['activity_top'] = one_week.formatted_activity + ':0.75'
one_week.tail()
In [ ]:
grouped = one_week.groupby([one_week.timestamp.dt.date, one_week.parent_activity, one_week.formatted_activity]).sum().unstack(0).fillna(0)
grouped
In [ ]:
grouped = one_week.groupby([one_week.timestamp.dt.date, one_week.parent_activity, one_week.formatted_activity]).sum().fillna(0)
#levels = grouped.columns.levels
#labels = grouped.columns.labels
#grouped.columns = levels[1][labels[1]]
#grouped.index.names=['']
grouped
In [ ]:
def make_df(group_by):
df = one_week.groupby([one_week.timestamp.dt.date, group_by]).sum().unstack(1)
df.columns = df.columns.levels[1][df.columns.labels[1]]
df.columns.name = None
df.index = pd.DatetimeIndex(df.index)
all_date_index = pd.DatetimeIndex(start=start.date(), end=end.date(), freq='d')
df = df.join(pd.DataFrame(index=all_date_index), how='outer').fillna(0)
df.index = df.index.format(formatter=lambda x: x.strftime("%a %b %d"))
df = df.T
df['Total'] = df.sum(axis=1)
return df
parent = make_df(one_week.parent_activity)
parent
In [ ]:
individual = make_df(one_week.formatted_activity)
individual = individual.reset_index()
def get_proportion_of_parent(r):
activity_total = r['Total']
activity = r['index']
parent_total = parent['Total'][activity.split(' ')[0]]
return '%i%%' % ((( activity_total / parent_total ) * 100) )
individual['%'] = individual.apply(get_proportion_of_parent, axis=1)
individual = individual.set_index('index')
individual.index.name = None
individual
In [ ]:
list(individual.columns)
In [ ]:
pd.concat([parent, individual])[list(individual.columns)].fillna('')
In [ ]:
from IPython.display import display, HTML
display(HTML(individual.to_html(header=False)))
In [ ]: