docs/si/cfr/analytics.html
1fromtypingimportList23importaltairasalt4importnumpyasnp56fromlabmlimportanalytics7fromlabml.analyticsimportIndicatorCollection
10defcalculate\_percentages(means:List[np.ndarray],names:List[List[str]]):11normalized=[]1213foriinrange(len(means)):14total=np.zeros\_like(means[i])15forj,ninenumerate(names):16ifn[-1][:-1]==names[i][-1][:-1]:17total+=means[j]18normalized.append(means[i]/(total+np.finfo(float).eps))1920returnnormalized
23defplot\_infosets(indicators:IndicatorCollection,\*,24is\_normalize:bool=True,25width:int=600,26height:int=300):27data,names=analytics.indicator\_data(indicators)28step=[d[:,0]fordindata]29means=[d[:,5]fordindata]3031ifis\_normalize:32normalized=calculate\_percentages(means,names)33else:34normalized=means3536common=names[0][-1]37fori,ninenumerate(names):38n=n[-1]39iflen(n)\<len(common):40common=common[:len(n)]41forjinrange(len(common)):42ifcommon[j]!=n[j]:43common=common[:j]44break4546table=[]47fori,ninenumerate(names):48forj,vinzip(step[i],normalized[i]):49table.append({50'series':n[-1][len(common):],51'step':j,52'value':v53})5455table=alt.Data(values=table)5657selection=alt.selection\_multi(fields=['series'],bind='legend')5859returnalt.Chart(table).mark\_line().encode(60alt.X('step:Q'),61alt.Y('value:Q'),62alt.Color('series:N',scale=alt.Scale(scheme='tableau20')),63opacity=alt.condition(selection,alt.value(1),alt.value(0.0001))64).add\_selection(65selection66).properties(width=width,height=height)