令 E 定义构成时间序列数据的 k 个唯一事件集。例如,时间序列可能由以下三个基本且唯一的事件组成,这些事件表示在离散时间步长上绘制数据时观察到的路径轨迹类型:向下、持平和向上。令 S 定义长度为 n(表示离散时间步长)的序列,该序列由E 中定义的事件组成,表示部分或全部数据。例如,序列 [向上、向下、向上、持平、向上] 表示五个时间步长的数据。
元素 A(i, j) 表示事件序列中某个时间步 t 的事件 i 后面跟着时间步 t+1 的事件 j 的次数; i 和 j 分别是行索引和列索引。请注意,行表示从上到下、从上到下的顺序的事件,而列从左到右表示相同的事件。例如,A 的左上角元素表示在给定的事件序列中,上事件后紧跟着另一个上事件两次。 A 的中右元素表示在事件序列中,平事件之后紧接着下事件。等等。
>>> df up flat down up 221 flat 101 down 200>>> df_rnorm up flat down up 0.40.40.2 flat 0.50.00.5 down 1.00.00.0>>> df_cnorm up flat down up 0.41.00.5 flat 0.20.00.5 down 0.40.00.0
可视化转移状态
defget_df_edgelist(df,ls_index): edgelist = []for i in ls_index:for j in ls_index: edgelist.append([i, j, df[j][i]])return pd.DataFrame(edgelist, columns=['src', 'dst', 'weight']) defedgelist_to_digraph(df_edgelist): g =Digraph(format='jpeg') g.attr(rankdir='LR', size='30') g.attr('node', shape='circle') nodelist = []for _, row in df_edgelist.iterrows(): node1, node2, weight = [str(item)for item in row]if node1 notin nodelist: g.node(node1, **{'width': '1', 'height': '1'}) nodelist.append(node1)if node2 notin nodelist: g.node(node2, **{'width': '1', 'height': '1'}) nodelist.append(node2) g.edge(node1, node2, label=weight)return g defrender_graph(fname,df,ls_index): df_edgelist =get_df_edgelist(df, ls_index) g =edgelist_to_digraph(df_edgelist) g.render(fname, view=True)