What are the available options for GraphRenderer selection_policy and inspection_policy?

Using the code from this page:

import networkx as nx

from bokeh.io import output_file, show
from bokeh.models import (BoxSelectTool, Circle, EdgesAndLinkedNodes, HoverTool,
                          MultiLine, NodesAndLinkedEdges, Plot, Range1d, TapTool)
from bokeh.palettes import Spectral4
from bokeh.plotting import from_networkx

G=nx.karate_club_graph()

plot = Plot(width=400, height=400,
            x_range=Range1d(-1.1,1.1), y_range=Range1d(-1.1,1.1))
plot.title.text = "Graph Interaction Demonstration"

plot.add_tools(HoverTool(tooltips=None), TapTool(), BoxSelectTool())

graph_renderer = from_networkx(G, nx.circular_layout, scale=1, center=(0,0))

graph_renderer.node_renderer.glyph = Circle(size=15, fill_color=Spectral4[0])
graph_renderer.node_renderer.selection_glyph = Circle(size=15, fill_color=Spectral4[2])
graph_renderer.node_renderer.hover_glyph = Circle(size=15, fill_color=Spectral4[1])

graph_renderer.edge_renderer.glyph = MultiLine(line_color="#CCCCCC", line_alpha=0.8, line_width=5)
graph_renderer.edge_renderer.selection_glyph = MultiLine(line_color=Spectral4[2], line_width=5)
graph_renderer.edge_renderer.hover_glyph = MultiLine(line_color=Spectral4[1], line_width=5)

graph_renderer.selection_policy = NodesAndLinkedEdges()
graph_renderer.inspection_policy = EdgesAndLinkedNodes()

plot.renderers.append(graph_renderer)

output_file("interactive_graphs.html")
show(plot)

I want to change the behavior of the edges: I only want them to appear if I’m hovering over a glyph or if I’ve clicked a glyph, and I only want the edges connected to the hovered-over/click glyph. However, I can’t find on the site where the options for selection_policy and inspection_policy are.

All the GraphHitTestPolicy subclasses are on this page:

There were some discussions about generalizing the selection/inspection policies design, but things fizzled out before the 3.0 release approached completion. So the current set of models will be hanging around for awhile. But maybe we can add a better API for 3.1 or 3.2 and deprecate the old policies.

Ah. I think that I selected the right options. However, I can’t get the edges to disappear if I haven’t selected the connected nodes or are hovering over a node, and everything is super slow. Is there a way to hide the edges?

@commanderjack There is really nothing I can speculate on without a complete Minimal Reproducible Example to actually consider.

Edit: Do you mean the code at the top? Or something different after the response about policies? It is not clear.

I’d have to sanitize the data I’m using, it’s proprietary.

I’ve changed the options to:

graph_renderer.selection_policy = NodesOnly()
graph_renderer.inspection_policy = NodesAndLinkedEdges()

However, the edges still show up in between the nodes, and there are over 5000 nodes in the graph I’m working with. Additionally, the graph itself is super slow (much slower than the graph I created using this method), so I dunno if I’m doing something wrong with creating the graph.

Lemme work on sanitizing the data so I can show you what I’m working with

Here’s the code:

import pandas as pd
import networkx as nx

from bokeh.models import (BoxSelectTool, Circle, ColumnDataSource, 
                          EdgesAndLinkedNodes, HoverTool, Label, LabelSet, MultiLine, 
                          NodesAndLinkedEdges, NodesOnly, Plot, TapTool)
from bokeh.models.graphs import from_networkx
from bokeh.palettes import Spectral4
from bokeh.plotting import figure, show
from itertools import combinations

df = pd.read_csv("sanitized_data.csv")
pos = {index:(df['X'][index],df['Y'][index]) for index in df.index}

G = nx.Graph()
for group in df["Col1"].unique():
    for pair in list(combinations(df[df['Col1']==group].index, 2)):
        G.add_edge(pair[0],pair[1])
        
plot = figure(title="Example", width=1900, height=900)
plot.add_tools(HoverTool(tooltips=None), TapTool(), BoxSelectTool())

graph_renderer = from_networkx(G, pos)
graph_renderer.node_renderer.glyph = Circle(size=4, fill_color=Spectral4[0])
graph_renderer.node_renderer.selection_glyph = Circle(size=4, fill_color=Spectral4[2])
graph_renderer.node_renderer.hover_glyph = Circle(size=4, fill_color=Spectral4[1])

graph_renderer.edge_renderer.glyph = MultiLine(line_color="#CCCCCC", line_alpha=0.3, line_width=.5)
graph_renderer.edge_renderer.selection_glyph = MultiLine(line_color=Spectral4[2], line_width=.5)
graph_renderer.edge_renderer.hover_glyph = MultiLine(line_color=Spectral4[1], line_width=.5)

graph_renderer.selection_policy = NodesOnly()
graph_renderer.inspection_policy = NodesAndLinkedEdges()

plot.renderers.append(graph_renderer)

show(plot)

Unfortunately, I don’t know how to upload a .csv file. I could just… paste the text here, I guess?

5000 nodes could be an enormous number of edges. Depending on your data you might need to look at something like holoviews + datashader to empoy edge bundling:

https://holoviews.org/user_guide/Network_Graphs.html#datashading-graphs

Unfortunately, I don’t know how to upload a .csv file. I could just… paste the text here, I guess?

Gists are useful for that https://gist.github.com

*cue bashing face into desk

Apparently that site is blocked at my work.

1 Like
Col1,Col2,Port,X,Y
Col1-0001,Col2-0001,Col2-001,7776.505484,4635.477394
Col1-0001,Col2-0002,Col2-002,36735.84841,30608.92078
Col1-0002,Col2-0001,Col2-003,25654.27102,54622.77324
Col1-0002,Col2-0002,Col2-004,114460.4591,55766.76168
Col1-0003,Col2-0001,Col2-005,117611.8771,61642.01852
Col1-0003,Col2-0002,Col2-006,99501.48099,4232.773885
Col1-0004,Col2-0001,Col2-007,102171.0858,51535.29825
Col1-0004,Col2-0002,Col2-008,60077.61995,71181.07614
Col1-0004,Col2-0003,Col2-009,100468.8499,59590.51131
Col1-0005,Col2-0004,Col2-010,30855.99154,8448.618107
Col1-0005,Col2-0005,Col2-010,114189.7701,49744.60895
Col1-0005,Col2-0006,Col2-010,63888.82677,29743.53056
Col1-0005,Col2-0007,Col2-010,56361.72663,14639.92441
Col1-0005,Col2-0008,Col2-010,122782.8677,18780.80378
Col1-0005,Col2-0009,Col2-011,93306.6814,37461.31294
Col1-0005,Col2-0010,Col2-012,25329.86541,20155.17598
Col1-0005,Col2-0011,Col2-011,46058.08298,47062.44432
Col1-0005,Col2-0012,Col2-010,46070.67408,41289.39537
Col1-0005,Col2-0013,Col2-010,22931.13312,68104.29881
Col1-0005,Col2-0014,Col2-010,111314.8255,16239.01975
Col1-0005,Col2-0015,Col2-011,96356.17411,22437.25007
Col1-0005,Col2-0016,Col2-011,11962.31213,12186.60036
Col1-0005,Col2-0017,Col2-011,63396.82181,57456.82294
Col1-0005,Col2-0018,Col2-011,63373.81776,35902.67383
Col1-0005,Col2-0019,Col2-011,6026.339777,73252.18162
Col1-0005,Col2-0020,Col2-011,75063.38944,17837.22241
Col1-0005,Col2-0021,Col2-013,61781.25489,75411.61573
Col1-0005,Col2-0021,Col2-014,119689.0381,23894.33583
Col1-0005,Col2-0021,Col2-015,81887.25909,56751.19438
Col1-0005,Col2-0021,Col2-016,90386.27422,55149.02554
Col1-0005,Col2-0021,Col2-017,76515.57432,14890.34019
Col1-0005,Col2-0021,Col2-018,119863.8232,35212.6346
Col1-0005,Col2-0021,Col2-019,6087.200091,73477.71098
Col1-0005,Col2-0021,Col2-020,55312.16861,18287.86356
Col1-0005,Col2-0021,Col2-021,4771.607968,44799.88779
Col1-0005,Col2-0021,Col2-022,10562.24151,57535.18455
Col1-0005,Col2-0021,Col2-023,26346.66958,15187.87313
Col1-0005,Col2-0022,Col2-024,65747.45136,59688.40839
Col1-0005,Col2-0023,Col2-024,61244.59959,13764.8105
Col1-0005,Col2-0024,Col2-011,67760.34545,60532.96665
Col1-0005,Col2-0025,Col2-025,37914.32033,10418.37727
Col1-0005,Col2-0026,Col2-025,39666.39468,39370.23791
Col1-0005,Col2-0027,Col2-025,89425.74089,78147.2372
Col1-0005,Col2-0028,Col2-025,117833.7577,64613.65877
Col1-0005,Col2-0029,Col2-014,94160.01531,77145.70059
Col1-0005,Col2-0030,Col2-011,87102.23179,39196.11153
Col1-0005,Col2-0031,Col2-013,47572.99146,72176.16584
Col1-0005,Col2-0031,Col2-014,39915.83742,78018.23308
Col1-0005,Col2-0031,Col2-015,123554.2466,1830.72057
Col1-0005,Col2-0031,Col2-016,112123.8465,18437.52739
Col1-0005,Col2-0031,Col2-017,124230.4947,48087.12648
Col1-0005,Col2-0031,Col2-018,25537.02786,5643.646895
Col1-0005,Col2-0031,Col2-019,40730.76293,23093.01874
Col1-0005,Col2-0031,Col2-020,22516.26045,31690.39757
Col1-0005,Col2-0031,Col2-021,81108.78693,58787.43951
Col1-0005,Col2-0031,Col2-022,16225.0636,1899.546158
Col1-0005,Col2-0031,Col2-023,114184.3351,3813.309441
Col1-0005,Col2-0032,Col2-011,75324.43799,5180.27929
Col1-0005,Col2-0033,Col2-011,11557.51222,39541.26894
Col1-0005,Col2-0034,Col2-010,48421.27158,42994.37584
Col1-0005,Col2-0035,Col2-011,59008.36689,22503.31932
Col1-0005,Col2-0036,Col2-010,105335.061,70300.69735
Col1-0005,Col2-0037,Col2-010,14345.47711,20343.39781
Col1-0005,Col2-0038,Col2-011,115373.4658,47792.9356
Col1-0005,Col2-0039,Col2-010,8126.475176,21002.21901
Col1-0005,Col2-0040,Col2-010,76877.39911,58346.47497
Col1-0005,Col2-0041,Col2-010,23030.35464,73757.93243
Col1-0005,Col2-0042,Col2-011,28000.47491,2630.836973
Col1-0005,Col2-0043,Col2-011,99364.17285,58058.8768
Col1-0005,Col2-0044,Col2-010,5758.575188,77896.96964
Col1-0005,Col2-0045,Col2-011,38880.15117,40512.89157
Col1-0005,Col2-0046,Col2-010,25791.13846,58287.15388
Col1-0005,Col2-0047,Col2-011,41429.41024,51926.7135
Col1-0005,Col2-0048,Col2-010,83739.10517,49490.64429
Col1-0005,Col2-0049,Col2-011,5319.249146,65892.56938
Col1-0005,Col2-0050,Col2-010,72080.69026,44283.70331
Col1-0005,Col2-0051,Col2-011,34669.82426,53200.30336
Col1-0005,Col2-0052,Col2-010,80665.39513,9483.799316
Col1-0005,Col2-0053,Col2-010,42463.30339,46316.06294
Col1-0005,Col2-0054,Col2-011,57222.13923,9336.891098
Col1-0005,Col2-0055,Col2-010,50443.84034,28582.06033
Col1-0005,Col2-0056,Col2-011,121218.1426,14446.37254
Col1-0005,Col2-0057,Col2-011,4329.211147,37653.58952
Col1-0005,Col2-0058,Col2-011,59576.29612,26352.58332
Col1-0005,Col2-0059,Col2-010,49267.22811,51698.8132
Col1-0005,Col2-0060,Col2-010,106819.9283,42760.10003
Col1-0005,Col2-0061,Col2-011,51647.14545,67917.20026
Col1-0005,Col2-0062,Col2-011,1016.836221,10383.8101
Col1-0005,Col2-0063,Col2-010,11400.29749,16388.80034
Col1-0005,Col2-0064,Col2-011,18627.93397,78228.56998
Col1-0005,Col2-0065,Col2-010,7835.849757,44331.96164
Col1-0005,Col2-0066,Col2-010,19986.48644,63692.4707
Col1-0005,Col2-0067,Col2-010,78554.32087,49317.25928
Col1-0005,Col2-0068,Col2-011,49431.2163,70527.20119
Col1-0005,Col2-0069,Col2-011,74975.71496,38443.38343
Col1-0005,Col2-0070,Col2-011,105090.9933,69884.99855
Col1-0005,Col2-0071,Col2-010,88999.37217,41764.84869
Col1-0005,Col2-0072,Col2-010,119463.7543,11942.88448
Col1-0005,Col2-0073,Col2-010,98330.51536,10497.90705
Col1-0005,Col2-0074,Col2-011,19760.09208,43859.48299
Col1-0005,Col2-0075,Col2-011,11294.67658,5716.058727
Col1-0005,Col2-0076,Col2-011,58055.99941,44063.63669
Col1-0005,Col2-0077,Col2-011,50378.61434,19626.39734
Col1-0005,Col2-0078,Col2-010,6853.343073,59633.18713
Col1-0005,Col2-0079,Col2-010,37921.29087,12188.90848
Col1-0005,Col2-0080,Col2-011,27884.64972,35892.48811
Col1-0005,Col2-0081,Col2-011,90357.01254,34618.61162
Col1-0005,Col2-0082,Col2-011,97141.87816,75948.82313
Col1-0005,Col2-0083,Col2-011,112134.202,24473.27824
Col1-0005,Col2-0084,Col2-026,67417.94918,52571.72945
Col1-0005,Col2-0085,Col2-026,116441.9375,14144.69834
Col1-0005,Col2-0086,Col2-026,17150.46857,74085.04273
Col1-0005,Col2-0087,Col2-026,50558.99187,56580.46973
Col1-0005,Col2-0088,Col2-026,9849.985164,76955.89784
Col1-0005,Col2-0089,Col2-026,72166.44784,52697.18704
Col1-0005,Col2-0090,Col2-026,59364.34497,55347.12011
Col1-0005,Col2-0091,Col2-026,78133.02755,56785.62513
Col1-0005,Col2-0084,Col2-027,38001.39987,23676.546
Col1-0005,Col2-0085,Col2-027,81692.07433,65676.28446
Col1-0005,Col2-0086,Col2-027,51934.7221,72859.80917
Col1-0005,Col2-0087,Col2-027,86975.09276,38305.72751
Col1-0005,Col2-0088,Col2-027,100640.8059,62305.95096
Col1-0005,Col2-0089,Col2-027,6074.778806,24938.24252
Col1-0005,Col2-0090,Col2-027,8737.050663,57741.32791
Col1-0005,Col2-0091,Col2-027,88517.28555,62727.12498
Col1-0005,Col2-0092,Col2-027,100849.6334,76133.43662
Col1-0005,Col2-0093,Col2-028,89140.58358,71911.03376
Col1-0005,Col2-0093,Col2-029,110665.4238,29312.15775
Col1-0005,Col2-0093,Col2-030,35205.49821,2210.587391
Col1-0005,Col2-0093,Col2-031,43298.11664,48848.7488
Col1-0005,Col2-0093,Col2-032,79499.68367,12407.54663
Col1-0005,Col2-0093,Col2-033,21003.43503,60207.92002
Col1-0005,Col2-0093,Col2-034,77114.20875,15987.05983
Col1-0005,Col2-0093,Col2-035,57894.02111,48238.42818
Col1-0005,Col2-0093,Col2-036,114101.0859,10173.85332
Col1-0005,Col2-0093,Col2-037,56431.1443,59929.79522
Col1-0005,Col2-0093,Col2-038,29140.40559,57153.81159
Col1-0005,Col2-0093,Col2-039,11778.24667,68185.71299
Col1-0005,Col2-0093,Col2-040,94254.89664,62602.11973
Col1-0005,Col2-0093,Col2-041,25961.72206,27840.32671
Col1-0005,Col2-0093,Col2-042,18623.91829,12326.21061
Col1-0005,Col2-0093,Col2-043,56831.65858,57461.77755
Col1-0005,Col2-0093,Col2-044,31028.8455,39076.42164
Col1-0005,Col2-0093,Col2-045,99214.35313,2753.411347
Col1-0005,Col2-0093,Col2-046,102645.0425,15702.33434
Col1-0005,Col2-0093,Col2-047,97185.16529,76019.31001
Col1-0005,Col2-0093,Col2-048,97521.65337,32642.70446
Col1-0005,Col2-0093,Col2-049,103788.7366,68035.66807
Col1-0005,Col2-0093,Col2-050,68139.04026,33124.54849
Col1-0005,Col2-0002,Col2-051,124040.4672,33737.95395
Col1-0005,Col2-0002,Col2-052,64574.35466,71809.21787
Col1-0005,Col2-0002,Col2-053,39355.43536,45741.41707
Col1-0005,Col2-0002,Col2-054,118123.1108,71097.09087
Col1-0005,Col2-0002,Col2-013,100204.8898,35356.22926
Col1-0005,Col2-0002,Col2-055,100068.9608,24405.41795
Col1-0005,Col2-0002,Col2-056,89024.099,348.6470252
Col1-0005,Col2-0002,Col2-057,17225.61544,43883.29438
Col1-0005,Col2-0002,Col2-058,24744.82679,42064.76671
Col1-0005,Col2-0002,Col2-059,62678.72119,8650.91956
Col1-0005,Col2-0002,Col2-060,65880.38857,10011.57045
Col1-0005,Col2-0002,Col2-061,82038.39312,45938.67451
Col1-0005,Col2-0002,Col2-062,122028.8828,7814.132239
Col1-0005,Col2-0002,Col2-063,100057.3985,44617.22375
Col1-0005,Col2-0002,Col2-064,36045.52936,33584.32522
Col1-0005,Col2-0002,Col2-065,50446.15306,46240.24868
Col1-0005,Col2-0002,Col2-066,10052.68826,1761.133432
Col1-0005,Col2-0002,Col2-067,122032.4011,11340.12434
Col1-0005,Col2-0002,Col2-068,29198.78109,49077.04218
Col1-0005,Col2-0002,Col2-069,91749.53332,65547.59061
Col1-0005,Col2-0002,Col2-070,122565.1665,50724.4677
Col1-0005,Col2-0002,Col2-071,11111.26701,23124.5411
Col1-0005,Col2-0002,Col2-072,26138.63794,67321.08012
Col1-0005,Col2-0002,Col2-073,86742.68373,12975.98962
Col1-0005,Col2-0002,Col2-074,1208.861203,41285.57821
Col1-0005,Col2-0002,Col2-075,108364.1575,15136.61628
Col1-0005,Col2-0002,Col2-076,100870.3413,36269.09721
Col1-0005,Col2-0002,Col2-014,47449.72636,62876.45666
Col1-0005,Col2-0002,Col2-077,93834.79492,79420.7814
Col1-0005,Col2-0002,Col2-078,28550.56418,77070.03922
Col1-0005,Col2-0002,Col2-079,23385.74693,607.4114983
Col1-0005,Col2-0002,Col2-080,27014.60111,36091.42936
Col1-0005,Col2-0002,Col2-028,42613.30125,23104.29084
Col1-0005,Col2-0002,Col2-081,122480.4188,73821.36438
Col1-0005,Col2-0002,Col2-017,42355.59545,76898.48513
Col1-0005,Col2-0002,Col2-082,74389.6425,58584.67852
Col1-0005,Col2-0002,Col2-083,114335.1437,34619.87562
Col1-0005,Col2-0002,Col2-084,17399.06155,57825.20593
Col1-0005,Col2-0002,Col2-032,112689.1757,53459.66849
Col1-0005,Col2-0002,Col2-085,60373.38777,38974.02573
Col1-0005,Col2-0002,Col2-086,78341.74966,17766.59596
Col1-0005,Col2-0002,Col2-087,33073.07529,24683.38993
Col1-0005,Col2-0002,Col2-088,9110.406877,63580.78326
Col1-0005,Col2-0002,Col2-034,58674.70757,7049.022633
Col1-0005,Col2-0002,Col2-089,87579.15218,49165.49623
Col1-0005,Col2-0002,Col2-007,88264.08795,59866.61981
Col1-0005,Col2-0002,Col2-090,120727.2365,16012.2847
Col1-0005,Col2-0002,Col2-038,51986.36214,28496.02137
Col1-0005,Col2-0002,Col2-091,18964.96537,18934.35951
Col1-0005,Col2-0002,Col2-092,54454.69566,20379.30831
Col1-0005,Col2-0002,Col2-093,83253.05398,7217.396106
Col1-0005,Col2-0002,Col2-040,54126.60536,42257.2728
Col1-0005,Col2-0002,Col2-094,4779.2261,61472.15827
Col1-0005,Col2-0002,Col2-020,66603.34305,68235.95982
Col1-0005,Col2-0002,Col2-095,103892.9962,6820.592958
Col1-0005,Col2-0002,Col2-096,111033.4449,76779.21377
Col1-0005,Col2-0002,Col2-097,117572.396,71585.35316
Col1-0005,Col2-0002,Col2-044,88209.0887,1904.268392
Col1-0005,Col2-0002,Col2-098,71295.95796,18301.41023
Col1-0005,Col2-0002,Col2-099,56938.46989,60626.01137
Col1-0005,Col2-0002,Col2-100,110508.5596,76302.95199
Col1-0005,Col2-0002,Col2-101,42819.80953,71267.38607
Col1-0005,Col2-0002,Col2-046,121285.5336,70910.25178
Col1-0005,Col2-0002,Col2-102,66759.43647,19880.62249
Col1-0005,Col2-0002,Col2-103,102281.4384,49644.19554
Col1-0005,Col2-0002,Col2-022,62668.58159,63759.55806
Col1-0005,Col2-0002,Col2-104,20594.1243,62327.2415
Col1-0005,Col2-0002,Col2-105,61382.7057,56587.92843
Col1-0005,Col2-0002,Col2-106,86599.99005,45721.36876
Col1-0005,Col2-0002,Col2-107,43413.03726,60154.3256
Col1-0005,Col2-0002,Col2-108,99942.38025,70348.77033
Col1-0005,Col2-0002,Col2-049,51571.81498,59646.80791
Col1-0005,Col2-0002,Col2-109,75446.24612,65919.49567
Col1-0005,Col2-0002,Col2-110,21265.5634,72009.19616
Col1-0005,Col2-0002,Col2-111,60128.98075,58644.34936
Col1-0005,Col2-0002,Col2-112,69219.21415,75383.76475
Col1-0005,Col2-0002,Col2-113,59434.69376,13978.96949
Col1-0005,Col2-0002,Col2-114,42346.01066,2691.41647
Col1-0005,Col2-0002,Col2-115,5445.880998,23360.51581
Col1-0005,Col2-0002,Col2-116,60673.1027,74858.96754
Col1-0005,Col2-0002,Col2-117,30577.74478,34907.29261
Col1-0005,Col2-0002,Col2-118,13524.35851,14739.30714
Col1-0005,Col2-0094,Col2-011,92766.88819,49764.38867
Col1-0005,Col2-0095,Col2-119,95103.23629,28009.02237
Col1-0005,Col2-0096,Col2-120,103698.9526,7888.902101
Col1-0005,Col2-0097,Col2-120,38833.49154,70236.31467
Col1-0005,Col2-0098,Col2-121,73098.60651,26991.37645
Col1-0005,Col2-0099,Col2-121,97320.7646,76967.0423
Col1-0005,Col2-0100,Col2-122,107895.0901,50137.09877
Col1-0005,Col2-0100,Col2-123,32919.42786,5801.865187
Col1-0005,Col2-0100,Col2-124,75154.8037,71199.1697
Col1-0005,Col2-0100,Col2-125,83315.5803,73206.11969
Col1-0005,Col2-0100,Col2-126,58978.07743,34124.99385
Col1-0005,Col2-0029,Col2-127,51543.50129,37094.26284
Col1-0005,Col2-0002,Col2-128,99519.15506,30861.5649
Col1-0005,Col2-0002,Col2-129,99968.80442,16130.62129
Col1-0005,Col2-0002,Col2-130,44761.25234,37635.49964
Col1-0005,Col2-0002,Col2-131,27033.08428,4130.205856
Col1-0005,Col2-0002,Col2-132,18718.8596,21816.97166
Col1-0005,Col2-0002,Col2-133,73530.5783,45133.81448
Col1-0005,Col2-0002,Col2-134,109436.959,13579.29546
Col1-0005,Col2-0002,Col2-135,84503.63624,25289.74626
Col1-0005,Col2-0002,Col2-136,109081.039,21790.51649
Col1-0005,Col2-0002,Col2-137,14692.00408,54931.47819
Col1-0005,Col2-0002,Col2-138,100930.28,33350.05205
Col1-0005,Col2-0002,Col2-139,83084.37494,74090.04268
Col1-0005,Col2-0002,Col2-140,59758.9808,20963.85768
Col1-0005,Col2-0002,Col2-141,41717.40299,78662.61523
Col1-0005,Col2-0002,Col2-142,55144.2465,66881.30566
Col1-0005,Col2-0002,Col2-143,34689.05463,53792.22108
Col1-0005,Col2-0002,Col2-144,16515.42442,62063.6345
Col1-0005,Col2-0002,Col2-145,80079.35983,76428.34683
Col1-0005,Col2-0002,Col2-146,25049.70466,56588.05366
Col1-0005,Col2-0002,Col2-147,21770.21519,66261.90277
Col1-0005,Col2-0002,Col2-148,3138.033233,46477.53471
Col1-0005,Col2-0002,Col2-149,32435.39224,49099.28991
Col1-0005,Col2-0002,Col2-150,2515.601769,44138.12389
Col1-0005,Col2-0002,Col2-151,88363.88912,43193.61105
Col1-0005,Col2-0002,Col2-152,33665.35249,48171.65281
Col1-0005,Col2-0002,Col2-153,94273.20095,42753.15559
Col1-0005,Col2-0002,Col2-154,9511.321921,8505.699293
Col1-0005,Col2-0002,Col2-155,2261.448422,52440.28511
Col1-0005,Col2-0002,Col2-156,38927.85229,28192.79712
Col1-0005,Col2-0002,Col2-157,120363.3445,35321.08676
Col1-0005,Col2-0002,Col2-158,5681.584411,46482.42465
Col1-0005,Col2-0002,Col2-159,46077.09563,76586.13609
Col1-0005,Col2-0002,Col2-160,94096.94368,777.4619318
Col1-0005,Col2-0002,Col2-161,8376.598265,4295.201307
Col1-0005,Col2-0002,Col2-162,76391.22841,28241.38339
Col1-0005,Col2-0002,Col2-163,65616.81026,34471.44138
Col1-0005,Col2-0002,Col2-164,73177.19213,9684.321933
Col1-0005,Col2-0101,Col2-165,92100.36712,36141.68786
Col1-0005,Col2-0101,Col2-166,119015.2237,66616.9364
Col1-0005,Col2-0102,Col2-027,71399.09626,42057.3229
Col1-0005,Col2-0103,Col2-167,95624.29682,63834.26268
Col1-0005,Col2-0104,Col2-167,102044.0542,14558.73281
Col1-0005,Col2-0105,Col2-168,110482.2991,18859.5621
Col1-0005,Col2-0106,Col2-168,25407.72772,3960.677703
Col1-0005,Col2-0105,Col2-169,116400.0843,24509.64265
Col1-0005,Col2-0106,Col2-169,123237.2363,18716.4073
Col1-0005,Col2-0105,Col2-170,77476.63811,60295.42312
Col1-0005,Col2-0106,Col2-170,121258.4053,76117.24656
Col1-0005,Col2-0001,Col2-019,52050.69519,165.5268756
Col1-0005,Col2-0107,Col2-171,22442.51694,4311.631667
Col1-0005,Col2-0108,Col2-171,15931.04564,2649.620783
Col1-0005,Col2-0109,Col2-172,64611.25298,70368.70803
Col1-0005,Col2-0109,Col2-173,8167.461353,5248.483703
Col1-0005,Col2-0109,Col2-174,110801.8393,65541.71413
Col1-0005,Col2-0109,Col2-175,49955.48255,50781.02392
Col1-0005,Col2-0110,Col2-167,37664.9236,5448.3729
Col1-0005,Col2-0111,Col2-026,85536.58452,3355.782609
Col1-0005,Col2-0112,Col2-026,16402.80007,9627.991757
Col1-0005,Col2-0113,Col2-012,60853.49717,40425.93953
Col1-0005,Col2-0114,Col2-012,2256.136654,1704.549396
Col1-0005,Col2-0115,Col2-176,7519.991148,34444.33418
Col1-0005,Col2-0115,Col2-177,96094.14441,5934.872585
Col1-0005,Col2-0115,Col2-172,113516.0815,70064.87503
Col1-0005,Col2-0115,Col2-178,116265.3378,37381.86425
Col1-0005,Col2-0115,Col2-179,96293.30305,46.71523808
Col1-0005,Col2-0116,Col2-180,11012.16344,30107.31952
Col1-0005,Col2-0117,Col2-176,62882.4644,26382.2859
Col1-0005,Col2-0118,Col2-181,29.50295767,7004.184679
Col1-0005,Col2-0119,Col2-181,46995.36654,53236.2932
Col1-0005,Col2-0120,Col2-181,114731.7725,73122.80736
Col1-0005,Col2-0121,Col2-182,64032.83755,19280.06386
Col1-0005,Col2-0121,Col2-183,47982.53334,68710.36918
Col1-0005,Col2-0121,Col2-184,64714.45144,79701.82473
Col1-0005,Col2-0121,Col2-185,22142.35348,56558.46226
Col1-0005,Col2-0121,Col2-186,10926.66709,27573.42945
Col1-0005,Col2-0121,Col2-187,79107.69119,71553.6229
Col1-0005,Col2-0121,Col2-174,78560.22315,44598.96918
Col1-0005,Col2-0121,Col2-188,23397.69588,1375.544374
Col1-0005,Col2-0121,Col2-189,98796.36416,48364.61926
Col1-0005,Col2-0121,Col2-190,38929.60474,44921.99641
Col1-0005,Col2-0121,Col2-191,12557.74614,43686.87703
Col1-0005,Col2-0121,Col2-192,106894.2693,8246.764673
Col1-0005,Col2-0121,Col2-193,90788.53496,6741.995086
Col1-0005,Col2-0121,Col2-180,104432.5721,31401.30127
Col1-0005,Col2-0121,Col2-194,122166.3273,47804.08059
Col1-0005,Col2-0121,Col2-195,109850.6203,24533.8811
Col1-0005,Col2-0121,Col2-196,120544.0753,47018.68591
Col1-0005,Col2-0121,Col2-197,77126.24372,11416.87666
Col1-0005,Col2-0121,Col2-198,57187.64414,57256.5489
Col1-0005,Col2-0121,Col2-199,96306.66747,69764.96173
Col1-0005,Col2-0121,Col2-200,121408.4484,71829.57734
Col1-0005,Col2-0121,Col2-201,114608.6838,49216.75902
Col1-0005,Col2-0121,Col2-202,12699.56204,9877.207343
Col1-0005,Col2-0122,Col2-203,9129.097948,6871.142002
Col1-0005,Col2-0122,Col2-183,88216.57301,48993.02094
Col1-0005,Col2-0122,Col2-192,80206.4389,26452.55217
Col1-0005,Col2-0122,Col2-175,49791.09708,5992.709225
Col1-0005,Col2-0122,Col2-204,8612.393301,14443.63787
Col1-0005,Col2-0122,Col2-205,82599.8829,53721.24043
Col1-0005,Col2-0123,Col2-027,86614.54366,27155.11653
Col1-0005,Col2-0124,Col2-027,4618.726957,53961.68915
Col1-0005,Col2-0125,Col2-027,64386.67546,33980.50905
Col1-0005,Col2-0126,Col2-027,53334.24784,56924.46536
Col1-0005,Col2-0127,Col2-027,22786.88649,21786.46577
Col1-0005,Col2-0128,Col2-027,36049.45947,57634.59419
Col1-0005,Col2-0129,Col2-026,70580.8678,15544.53268
Col1-0005,Col2-0002,Col2-206,60654.65704,29886.27914
Col1-0005,Col2-0101,Col2-094,88068.29544,20561.56428
Col1-0005,Col2-0105,Col2-207,41542.95695,1239.249375
Col1-0005,Col2-0106,Col2-207,105930.0966,1293.759699
Col1-0005,Col2-0105,Col2-184,78283.43292,68212.85865
Col1-0005,Col2-0106,Col2-184,16699.98549,13421.69591
Col1-0005,Col2-0001,Col2-042,86534.73649,19125.83013
Col1-0005,Col2-0118,Col2-208,49127.72145,10357.77908
Col1-0005,Col2-0119,Col2-208,9072.424197,42890.21552
Col1-0005,Col2-0120,Col2-208,50878.55969,23695.34791
Col1-0005,Col2-0021,Col2-209,20258.28761,12993.23029
Col1-0005,Col2-0031,Col2-209,74152.96343,45033.02857
Col1-0005,Col2-0021,Col2-210,30037.19266,17766.66186
Col1-0005,Col2-0031,Col2-210,74746.45305,7377.566132
Col1-0005,Col2-0021,Col2-055,68123.7521,39650.52919
Col1-0005,Col2-0031,Col2-055,85681.47779,46368.93804
Col1-0005,Col2-0021,Col2-211,102984.5714,7479.495095
Col1-0005,Col2-0031,Col2-211,39139.8167,16828.47446
Col1-0005,Col2-0021,Col2-212,221.099091,31534.21373
Col1-0005,Col2-0031,Col2-212,104883.7461,48211.1165
Col1-0005,Col2-0021,Col2-213,84838.5192,21306.92367
Col1-0005,Col2-0031,Col2-213,21073.54056,29637.81025
Col1-0005,Col2-0021,Col2-076,66936.28611,36862.00553
Col1-0005,Col2-0031,Col2-076,90645.42867,72596.96466
Col1-0005,Col2-0021,Col2-003,123925.2235,73146.98148
Col1-0005,Col2-0031,Col2-003,91813.18227,50229.62771
Col1-0005,Col2-0021,Col2-214,42182.85413,38682.31532
Col1-0005,Col2-0031,Col2-214,121177.3984,9161.027413
Col1-0005,Col2-0021,Col2-215,67554.46744,77961.3653
Col1-0005,Col2-0031,Col2-215,41326.83701,869.0530917
Col1-0005,Col2-0021,Col2-079,9188.282567,73725.56912
Col1-0005,Col2-0031,Col2-079,7020.164097,58289.37544
Col1-0005,Col2-0021,Col2-216,65728.19595,35034.68928
Col1-0005,Col2-0031,Col2-216,11588.86153,23974.90741
Col1-0005,Col2-0021,Col2-217,39642.24061,15349.46751
Col1-0005,Col2-0031,Col2-217,65037.83344,64025.38188
Col1-0005,Col2-0021,Col2-088,106825.6699,4629.100149
Col1-0005,Col2-0031,Col2-088,106316.6609,78.55106286
Col1-0005,Col2-0021,Col2-086,70274.25348,20529.75243
Col1-0005,Col2-0031,Col2-086,42774.38489,46261.72583
Col1-0005,Col2-0021,Col2-218,39768.81261,68718.11688
Col1-0005,Col2-0031,Col2-218,107077.9248,59687.30491
Col1-0005,Col2-0021,Col2-089,93891.27563,14851.24459
Col1-0005,Col2-0031,Col2-089,74048.86845,61973.33263
Col1-0005,Col2-0021,Col2-219,103761.7454,44197.05274
Col1-0005,Col2-0031,Col2-219,94212.25607,61691.56561
Col1-0005,Col2-0021,Col2-220,30975.60705,55359.34025
Col1-0005,Col2-0031,Col2-220,108591.4712,61972.9356
Col1-0005,Col2-0021,Col2-221,37692.89338,73020.18921
Col1-0005,Col2-0031,Col2-221,2233.923275,10842.3718
Col1-0005,Col2-0021,Col2-166,79077.07927,58567.34518
Col1-0005,Col2-0031,Col2-166,53211.74954,2846.527625
Col1-0005,Col2-0021,Col2-094,114399.7757,50733.47108
Col1-0005,Col2-0031,Col2-094,50385.99131,29303.01106
Col1-0005,Col2-0021,Col2-042,120018.7422,35394.22805
Col1-0005,Col2-0031,Col2-042,30279.22524,73713.69029
Col1-0005,Col2-0021,Col2-222,10484.02303,36533.85031
Col1-0005,Col2-0031,Col2-222,123326.4393,15466.68581
Col1-0005,Col2-0021,Col2-096,78535.8547,38653.69185
Col1-0005,Col2-0031,Col2-096,74946.82457,46227.14105
Col1-0005,Col2-0021,Col2-104,66657.67901,16793.96592
Col1-0005,Col2-0031,Col2-104,102427.719,36833.474
Col1-0005,Col2-0021,Col2-223,38961.47887,30693.40619
Col1-0005,Col2-0031,Col2-223,12284.12614,69543.03198
Col1-0005,Col2-0021,Col2-105,38892.56617,65542.5738
Col1-0005,Col2-0031,Col2-105,64926.61938,44528.76814
Col1-0005,Col2-0021,Col2-224,8719.518575,5554.779694
Col1-0005,Col2-0031,Col2-224,102942.9867,26111.11315
Col1-0005,Col2-0021,Col2-225,10177.36443,23725.72435
Col1-0005,Col2-0031,Col2-225,80247.81131,52399.88163
Col1-0005,Col2-0021,Col2-226,43070.98535,75429.94737
Col1-0005,Col2-0031,Col2-226,60163.49328,11014.4112
Col1-0005,Col2-0021,Col2-227,87565.26601,41347.84054
Col1-0005,Col2-0031,Col2-227,41189.20439,43913.43185
Col1-0005,Col2-0021,Col2-228,66864.21553,19439.03744
Col1-0005,Col2-0031,Col2-228,43561.00126,51893.22376
Col1-0005,Col2-0021,Col2-113,82300.60892,54482.21645
Col1-0005,Col2-0031,Col2-113,56927.32051,55506.58138
Col1-0005,Col2-0021,Col2-229,104249.2842,72845.75025
Col1-0005,Col2-0031,Col2-229,111621.6987,38750.78463
Col1-0005,Col2-0021,Col2-230,71773.9884,43159.19711
Col1-0005,Col2-0031,Col2-230,10978.17546,3529.194078
Col1-0005,Col2-0130,Col2-010,58109.01468,65485.40076
Col1-0005,Col2-0131,Col2-010,69292.57477,45838.99476
Col1-0005,Col2-0132,Col2-010,95081.53527,65401.06338
Col1-0005,Col2-0133,Col2-010,107390.4036,42206.59321
Col1-0005,Col2-0134,Col2-011,22687.74321,10841.96001
Col1-0005,Col2-0135,Col2-011,64393.16714,35956.22221
Col1-0005,Col2-0136,Col2-010,70587.28594,2461.553546
Col1-0005,Col2-0137,Col2-011,117843.4579,13179.47929
Col1-0005,Col2-0138,Col2-011,104902.305,41599.07906
Col1-0005,Col2-0139,Col2-011,59640.0788,36496.15003
Col1-0005,Col2-0140,Col2-011,99090.27158,35256.84247
Col1-0005,Col2-0141,Col2-011,63351.29221,48207.45327
Col1-0005,Col2-0142,Col2-011,48937.54556,55414.45503
Col1-0005,Col2-0143,Col2-011,105704.8701,37800.99849
Col1-0005,Col2-0144,Col2-011,101574.8695,37728.1009
Col1-0005,Col2-0145,Col2-009,107739.3052,63069.0093
Col1-0005,Col2-0146,Col2-024,113909.2691,6999.102177
Col1-0005,Col2-0147,Col2-009,113451.4041,10379.23729
Col1-0005,Col2-0148,Col2-011,8804.05627,43803.92364
Col1-0005,Col2-0149,Col2-011,106395.3023,6715.953057
Col1-0005,Col2-0150,Col2-011,73008.3641,36355.3757
Col1-0005,Col2-0151,Col2-010,52604.89242,76569.39534
Col1-0005,Col2-0152,Col2-011,37255.67397,25279.82093
Col1-0005,Col2-0153,Col2-010,51206.23547,44137.23156
Col1-0005,Col2-0154,Col2-010,111917.4203,62331.3638
Col1-0005,Col2-0155,Col2-010,49483.9039,68560.94637
Col1-0005,Col2-0156,Col2-010,50480.29784,9093.925975
Col1-0005,Col2-0157,Col2-011,77496.17497,6084.584527
Col1-0005,Col2-0158,Col2-011,109815.2968,15421.73102
Col1-0005,Col2-0159,Col2-231,84172.83798,66384.26568
Col1-0005,Col2-0160,Col2-011,76633.60768,60660.90151
Col1-0005,Col2-0161,Col2-011,2460.922273,38554.61121
Col1-0005,Col2-0162,Col2-010,121185.9825,52668.44591
Col1-0005,Col2-0163,Col2-010,38785.86475,36058.32075
Col1-0005,Col2-0164,Col2-010,29573.65379,62668.90059
Col1-0005,Col2-0165,Col2-010,116960.0499,6118.656459
Col1-0005,Col2-0166,Col2-010,81403.97201,32809.12944
Col1-0005,Col2-0167,Col2-010,62506.90768,4515.551367
Col1-0005,Col2-0168,Col2-011,69472.08737,46189.15057
Col1-0005,Col2-0169,Col2-011,7183.185991,49018.37923
Col1-0005,Col2-0170,Col2-010,29934.26021,64289.76194
Col1-0005,Col2-0171,Col2-010,91913.95254,43784.4993
Col1-0005,Col2-0172,Col2-010,92114.24875,13060.60168
Col1-0005,Col2-0173,Col2-010,8881.323994,33505.5024
Col1-0005,Col2-0174,Col2-011,16575.72854,44705.18543
Col1-0005,Col2-0175,Col2-010,35101.05388,11188.53967
Col1-0005,Col2-0029,Col2-232,51977.30873,14583.9775
Col1-0005,Col2-0029,Col2-233,25252.95953,40407.25241
Col1-0005,Col2-0029,Col2-234,80788.78674,29587.86555
Col1-0005,Col2-0029,Col2-235,104924.0299,48507.93692
Col1-0005,Col2-0029,Col2-236,108275.1297,64323.64738
Col1-0005,Col2-0029,Col2-237,60327.37509,13057.38063
Col1-0005,Col2-0029,Col2-238,59320.63012,73466.14482
Col1-0005,Col2-0029,Col2-239,63701.77046,18529.8083
Col1-0005,Col2-0029,Col2-240,68663.81949,7041.649973
Col1-0005,Col2-0029,Col2-241,119062.839,71672.29129
Col1-0005,Col2-0029,Col2-242,118494.2663,37892.29298
Col1-0005,Col2-0029,Col2-243,64353.16148,36439.05591
Col1-0005,Col2-0029,Col2-244,74325.41295,8285.943755
Col1-0005,Col2-0029,Col2-245,65940.31098,28231.67484
Col1-0005,Col2-0029,Col2-246,79732.04465,46901.45288
Col1-0005,Col2-0029,Col2-247,87475.30474,18622.61688
Col1-0005,Col2-0029,Col2-248,118733.4982,35213.63681
Col1-0005,Col2-0029,Col2-003,13458.66197,74082.0881
Col1-0005,Col2-0176,Col2-249,87245.70984,72265.00527
Col1-0005,Col2-0177,Col2-249,120169.0964,77259.28308
Col1-0005,Col2-0178,Col2-249,65604.23227,51381.03706
Col1-0005,Col2-0179,Col2-121,4306.081793,71556.05057
Col1-0005,Col2-0180,Col2-121,118983.1075,76394.29404
Col1-0005,Col2-0181,Col2-120,35651.07239,59495.51457
Col1-0005,Col2-0182,Col2-120,106438.9851,69595.42757
Col1-0005,Col2-0183,Col2-120,6424.771776,66376.60131
Col1-0005,Col2-0184,Col2-121,66048.86897,64564.99976
Col1-0005,Col2-0185,Col2-010,18334.8281,62375.43086
Col1-0005,Col2-0186,Col2-011,18905.88176,58457.98723
Col1-0005,Col2-0187,Col2-250,42672.57981,65363.62433
Col1-0005,Col2-0188,Col2-250,117415.936,53929.18826
Col1-0005,Col2-0189,Col2-250,67195.05146,10191.89899
Col1-0005,Col2-0190,Col2-250,23571.04756,47907.89003
Col1-0005,Col2-0191,Col2-250,22227.89984,75575.96356
Col1-0005,Col2-0192,Col2-249,37057.83723,52402.07697
Col1-0005,Col2-0193,Col2-249,7776.311856,17520.93732
Col1-0005,Col2-0194,Col2-249,2372.771919,47943.92556
Col1-0005,Col2-0194,Col2-121,5010.285179,78516.47469
Col1-0005,Col2-0195,Col2-251,62625.34312,66988.56976
Col1-0005,Col2-0195,Col2-252,115762.2412,16861.0424
Col1-0005,Col2-0196,Col2-253,81145.10248,38959.60649
Col1-0005,Col2-0197,Col2-253,89522.14502,59041.4789
Col1-0005,Col2-0198,Col2-253,28999.56414,35792.75569
Col1-0005,Col2-0199,Col2-253,16884.9076,61819.29388
Col1-0005,Col2-0200,Col2-253,31359.68531,69447.24152
Col1-0005,Col2-0201,Col2-253,24138.82736,75807.11918
Col1-0005,Col2-0202,Col2-253,18458.22791,55173.33779
Col1-0005,Col2-0203,Col2-253,59744.51867,4678.917386
Col1-0005,Col2-0196,Col2-254,117394.9107,74311.72919
Col1-0005,Col2-0197,Col2-254,92559.08325,58517.46703
Col1-0005,Col2-0198,Col2-254,40478.52188,77539.98089
Col1-0005,Col2-0199,Col2-254,83780.52485,2492.391307
Col1-0005,Col2-0200,Col2-254,31639.69768,6190.71273
Col1-0005,Col2-0201,Col2-254,36715.74127,70264.20339
Col1-0005,Col2-0202,Col2-254,37232.7208,42604.21506
Col1-0005,Col2-0203,Col2-254,65881.0224,68125.04253
Col1-0005,Col2-0204,Col2-255,16462.89586,41948.18055
Col1-0005,Col2-0205,Col2-171,43218.80314,44758.01092
Col1-0005,Col2-0129,Col2-171,19532.87615,37514.87619
Col1-0005,Col2-0206,Col2-053,78364.30954,31445.1864
Col1-0005,Col2-0207,Col2-010,84480.94461,71201.22125
Col1-0005,Col2-0208,Col2-010,113487.7955,61717.83432
Col1-0005,Col2-0209,Col2-011,7353.971623,48885.67473
Col1-0005,Col2-0210,Col2-010,102067.5477,24521.74843
Col1-0005,Col2-0211,Col2-010,17296.55941,47544.78886
Col1-0005,Col2-0212,Col2-010,116883.3066,19590.75307
Col1-0005,Col2-0213,Col2-011,94457.39118,24912.32786
Col1-0005,Col2-0214,Col2-011,96551.96834,25099.0942
Col1-0005,Col2-0215,Col2-010,99280.53192,78542.84766
Col1-0005,Col2-0216,Col2-011,21085.75382,42680.05341
Col1-0005,Col2-0217,Col2-011,83516.12254,29577.87941
Col1-0005,Col2-0218,Col2-010,76015.05106,59939.88717
Col1-0005,Col2-0219,Col2-011,112505.6707,23372.57119
Col1-0005,Col2-0220,Col2-010,49607.14503,74310.86028
Col1-0005,Col2-0221,Col2-010,44811.76756,30108.43174
Col1-0005,Col2-0222,Col2-011,112529.9602,54099.65434
Col1-0005,Col2-0223,Col2-010,95175.20801,7267.49155
Col1-0005,Col2-0224,Col2-010,93368.04261,50461.86371
Col1-0005,Col2-0225,Col2-010,7922.532758,58812.85495
Col1-0005,Col2-0226,Col2-011,88232.24291,46034.93756
Col1-0005,Col2-0227,Col2-011,55063.61105,43314.69575
Col1-0005,Col2-0228,Col2-010,7532.819623,66857.70743
Col1-0005,Col2-0229,Col2-011,110696.265,8201.912751
Col1-0005,Col2-0230,Col2-011,49146.5815,68382.33352
Col1-0005,Col2-0231,Col2-010,115511.7202,2175.826959
Col1-0005,Col2-0232,Col2-120,61736.32831,31282.00994
Col1-0005,Col2-0232,Col2-256,80633.64757,8464.194795
Col1-0005,Col2-0233,Col2-256,106475.5097,77544.24712
Col1-0005,Col2-0233,Col2-120,79522.83793,38665.16184
Col1-0005,Col2-0234,Col2-010,50552.84112,31302.73361
Col1-0005,Col2-0235,Col2-024,20319.91491,13580.38497
Col1-0005,Col2-0236,Col2-249,48856.62741,4925.144461
Col1-0005,Col2-0236,Col2-120,94908.78359,63451.80954
Col1-0005,Col2-0237,Col2-251,40468.02426,32788.27692
Col1-0005,Col2-0237,Col2-250,38085.25004,12536.05049
Col1-0005,Col2-0237,Col2-257,115394.4588,9830.011845
Col1-0005,Col2-0237,Col2-258,46720.38955,61893.50852
Col1-0005,Col2-0237,Col2-259,94766.92061,71751.52154
Col1-0005,Col2-0237,Col2-260,97763.85073,69889.1327
Col1-0005,Col2-0237,Col2-261,57202.11918,2660.972551
Col1-0005,Col2-0237,Col2-262,43788.28039,8491.650177
Col1-0005,Col2-0238,Col2-120,96926.92197,62857.32712
Col1-0005,Col2-0238,Col2-256,1846.699034,2711.513248
Col1-0005,Col2-0239,Col2-258,50121.31912,43722.78677
Col1-0005,Col2-0239,Col2-259,122362.1581,71493.45117
Col1-0005,Col2-0239,Col2-263,61331.65216,39933.72135
Col1-0005,Col2-0239,Col2-252,49781.62142,78117.69177
Col1-0005,Col2-0239,Col2-264,115612.7279,71696.68034
Col1-0005,Col2-0239,Col2-265,48551.36662,61528.08981
Col1-0005,Col2-0239,Col2-266,70694.73135,42476.96968
Col1-0005,Col2-0239,Col2-267,68486.80156,70036.77717
Col1-0005,Col2-0240,Col2-231,81362.02853,32565.73965
Col1-0005,Col2-0241,Col2-250,36097.13467,33063.70596
Col1-0005,Col2-0242,Col2-249,1653.780406,26166.00265
Col1-0005,Col2-0242,Col2-120,17079.12314,58627.00733
Col1-0005,Col2-0243,Col2-251,12284.89717,23538.14196
Col1-0005,Col2-0243,Col2-268,106896.8753,26236.98406

That should still work even though it’s a smaller dataset.

Edit: … although I called the data in Col3 “Col2”… oh, well…

So a quick look seems like the sample data adds 170826 edges? I would say that’s already pushing things. If your real dataset has ~10x the number of nodes then this is way too big a graph for plain Bokeh to handle, and you should definitely look at the link I gave above.

Dad gum it.

Or I could continue on with the CustomJS; that one worked:

import pandas as pd

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, CustomJS, HoverTool, Label, LabelSet, Range1d

df = pd.read_csv('sanitized_data.csv')

source = ColumnDataSource(df)

x = list(df["X"])
y = list(df["Y"])
links = {df["Col1"].index[index]:list(df[(df["Col1"]==df["Col1"][index]) & (df["Col2"]!=df["Col2"][index])].index) for index in df["Col2"].index}
output_file("hover_callback.html")
p = figure(width=1600, height=900)

source = ColumnDataSource({'x0': [], 'y0': [], 'x1': [], 'y1': []})
sr = p.segment(x0='x0', y0='y0', x1='x1', y1='y1', color='olive', alpha=0.5, line_width=.5, source=source, )
cr = p.circle(x, y, color='olive', size=4, alpha=1, hover_color='olive', hover_alpha=1.0)

# add a hover tool that sets the link data for a hovered circle
code = """
const links = %s
const data = {'x0': [], 'y0': [], 'x1': [], 'y1': []}
const indices = cb_data.index.indices
for (let i = 0; i < indices.length; i++) {
    const start = indices[i]
    for (let j = 0; j < links[start].length; j++) {
        const end = links[start][j]
        data['x0'].push(circle.data.x[start])
        data['y0'].push(circle.data.y[start])
        data['x1'].push(circle.data.x[end])
        data['y1'].push(circle.data.y[end])
    }
}
segment.data = data
""" % links

callback = CustomJS(args={'circle': cr.data_source, 'segment': sr.data_source}, code=code)
p.add_tools(HoverTool(tooltips=None, callback=callback, renderers=[cr]))

show(p)

Should work on that same dataset. And it works on the full datset. A little slow to highlight the “edges”, but less than a second or so.

Can you actually confirm the number of nodes and edges? To clarify I would be surprised if 170k segments and circles and would also not be slow, probably even with webgl backend. However, your latest code above has nowhere near that many:

In [4]: sum(len(item) for item in links.items())
Out[4]: 1188

Contrasted with the earlier code:

In [6]: N =  0

In [7]: for group in df["Col1"].unique():
   ...:     # every one of these was a call to add_edge
   ...:     N += len(list(combinations(df[df['Col1']==group].index, 2)))
   ...:

In [8]: N
Out[8]: 170826

I mean this as genially as possible, but I have to state that it is hard to offer help when it is not clear what the actual parameters of the problem are.

Huh… they should be identical. I do greatly appreciate your patience and your help; obviously this isn’t my area of expertise, lol.

The actual number of nodes is 5334, give or take 10.

As for edges, in the CustomJS version, it’s a dictionary of lists, so I’m not sure how to get the actual length…

Edit: working on it

Edit2: Okay, I believe that the following is correct:

Number of distinct “groups”: 1329
Number of “nodes”: 5332
Highest number of nodes in a single group: 1298

For each group, I want an edge between each node and every other node in the same group that isn’t itself… if that makes any sense. So that means I want a combination (nCr) for each group.

If I’ve done this correctly, that means that:

Total number of “edges”: 885612

I’m not 100% sure on that. When I tried iterating through each item in each key of the dictionary of lists that represents the edges, I got 1,746,198, which seemed high, but it’s roughly double the number I got calculating through combinations, so perhaps in the network code almost every edge is being written twice? I hope that’s not the case.

OK, my apologies, I mistyped my earlier computation:

In [11]: sum(len(item) for item in links.values())
Out[11]: 321358

So my best guess as to why this performs reasonably well is that any given hover only triggers ~550 lines max (it looks like) and that’s OK. When using the graph support, always has to consider every node and edge all the time (even if they are not not visible), and ~0.5M things at once is generally “not OK”. I’ll have to try to think about ways the last MRE might be improved.

Yeah, in the real dataset, the largest group is ~1300 edges.

Edit: heading to lunch, so I might not respond for a bit.

We are actually getting ready for 3.0 release in a week or so, and I am also pretty slammed with work-work at the moment. Now that I can see exactly what you are after I do want to give this a better think, but it may be a few days, just to set expectations.

No worries! I greatly appreciate all you’ve done thus far!

I feel like this Towards Data Science post has some of the tools that I('ll eventually) need (for all of the things that I want my bokeh graph to do), but I don’t know Python or JavaScript well enough to see it.

No rush, I just wanted to leave this here so I didn’t forget it.