def _show_session_stats()

in identity-resolution/notebooks/identity-graph/nepytune/usecase/purchase_path.py [0:0]


def _show_session_stats(data, title):
    def sunburst_data(data):
        total_sum = sum(
            values["sessions_count"]
            for _, v in data.items()
            for values in v["transient_ids"].values()
        )
        yield "", "Users", 1.5 * total_sum, "white", ""

        for i, (persistentId, v) in enumerate(data.items(), 1):
            yield (
                "Users",
                persistentId[:5],
                sum(values["sessions_count"] for values in v["transient_ids"].values()),
                i,
                (
                    f"<br>persistentId: {persistentId} </br>"
                    f"devices count: {len(v['transient_ids'])}"
                )
            )
            for transientId, values in v["transient_ids"].items():
                yield (
                    persistentId[:5],
                    transientId[:5],
                    values["sessions_count"],
                    i,
                    (
                        f"<br>transientId: {transientId}"
                        f"<br>session count: {values['sessions_count']}"
                        f"<br>total session duration: {values['sessions_duration']}"
                    )
                )
                for session in values["sessions"]:
                    yield (
                        transientId[:5],
                        session.events[0].ts,
                        1,
                        i,
                        (
                            f"<br>session start: {session.events[0].ts}"
                            f"<br>session end: {session.events[-1].ts}"
                            f"<br>session duration: {session.events[-1].ts - session.events[0].ts}"
                        )
                    )
        # aka legend
        yield "Users", "User ids", total_sum / 2, "white", ""
        yield "User ids", "User devices", total_sum / 2, "white", ""
        yield "User devices", "User sessions", total_sum / 2, "white", ""

    parents, labels, values, colors, hovers = zip(*[r for r in list(sunburst_data(data))])

    fig = go.Figure(
        go.Sunburst(
            labels=labels,
            parents=parents,
            values=values,
            branchvalues="total",
            marker=dict(
                colors=colors,
                line=dict(width=0.5, color='DarkSlateGrey')
            ),
            hovertext=hovers,
            hoverinfo="text",
        ),
    )

    fig.update_layout(margin=dict(t=50, l=0, r=0, b=0), title=title)
    return fig