Module minder_utils.visualisation.transition_graph

Expand source code
from minder_utils.formatting import Formatting
from minder_utils.feature_engineering.calculation import build_p_matrix
import matplotlib.pyplot as plt
from hmmviz import TransGraph
import matplotlib.patches as mpatches
import os
import numpy as np
import pandas as pd
import calendar


locations = ['']
formater = Formatting()
df = formater.activity_data[formater.activity_data.id == formater.activity_data.id.unique()[0]]


df = df[df.location.isin(['bedroom1', 'bathroom1', 'hallway', 'kitchen',
                          'front door', 'back door'])]
df.time = pd.to_datetime(df.time)

for month in df.time.dt.month.unique():

    sequence = df[df.time.dt.month == month].location.values
    T = pd.crosstab(
        pd.Series(sequence[:-1], name='From'),
        pd.Series(sequence[1:], name='To'),
    )
    graph = TransGraph(T)

    # looks best on square figures/axes
    fig = plt.figure(figsize=(18, 18))

    nodelabels = {i: i.split('1')[0] for i in np.unique(sequence)}
    colors = {f'{j}': f'C{i}' for i,j in zip(range(len(np.unique(sequence))), np.unique(sequence))}

    graph.draw(edgecolors=colors, nodecolors=colors, edgelabels=True,
               edgewidths=2, nodefontsize=25, edgefontsize=13, nodelabels=False
    )
    patches = []
    for key in colors:
        patches.append(mpatches.Patch(color=colors[key], label=key))
    plt.legend(handles=patches, prop={'size': 20})
    plt.savefig('{}.png'.format(calendar.month_name[month]))