edgelist
                    
                     = [[
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      85
                    
                    ], [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    , 
                    
                      80
                    
                    ], [
                    
                      'Erfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      186
                    
                    ], [
                    
                      'Munchen'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      167
                    
                    ], [
                    
                      'Munchen'
                    
                    , 
                    
                      'Augsburg'
                    
                    , 
                    
                      84
                    
                    ], [
                    
                      'Munchen'
                    
                    , 
                    
                      'Kassel'
                    
                    , 
                    
                      502
                    
                    ], [
                    
                      'Numberg'
                    
                    , 
                    
                      'Stuttgart'
                    
                    , 
                    
                      183
                    
                    ], [
                    
                      'Numberg'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      103
                    
                    ], [
                    
                      'Numberg'
                    
                    , 
                    
                      'Munchen'
                    
                    , 
                    
                      167
                    
                    ], [
                    
                      'Stuttgart'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      183
                    
                    ], [
                    
                      'Augsburg'
                    
                    , 
                    
                      'Munchen'
                    
                    , 
                    
                      84
                    
                    ], [
                    
                      'Augsburg'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    , 
                    
                      250
                    
                    ], [
                    
                      'Kassel'
                    
                    , 
                    
                      'Munchen'
                    
                    , 
                    
                      502
                    
                    ], [
                    
                      'Kassel'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      173
                    
                    ], [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Mannheim'
                    
                    , 
                    
                      85
                    
                    ], [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      217
                    
                    ], [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Kassel'
                    
                    , 
                    
                      173
                    
                    ], [
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      103
                    
                    ], [
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Erfurt'
                    
                    , 
                    
                      186
                    
                    ], [
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      217
                    
                    ], [
                    
                      'Karlsruhe'
                    
                    , 
                    
                      'Mannheim'
                    
                    , 
                    
                      80
                    
                    ], [
                    
                      'Karlsruhe'
                    
                    , 
                    
                      'Augsburg'
                    
                    , 
                    
                      250
                    
                    ],[
                    
                      "Mumbai"
                    
                    , 
                    
                      "Delhi"
                    
                    ,
                    
                      400
                    
                    ],[
                    
                      "Delhi"
                    
                    , 
                    
                      "Kolkata"
                    
                    ,
                    
                      500
                    
                    ],[
                    
                      "Kolkata"
                    
                    , 
                    
                      "Bangalore"
                    
                    ,
                    
                      600
                    
                    ],[
                    
                      "TX"
                    
                    , 
                    
                      "NY"
                    
                    ,
                    
                      1200
                    
                    ],[
                    
                      "ALB"
                    
                    , 
                    
                      "NY"
                    
                    ,
                    
                      800
                    
                    ]]
                  
                
              
            
              
                 
              
              
            
            
                
                  
                    g = nx.Graph()
                  
                
                
                  
                    
                      for
                    
                     edge 
                    
                      in
                    
                     edgelist:
                  
                
                
                  
                        g.add_edge(edge[
                    
                      0
                    
                    ],edge[
                    
                      1
                    
                    ], weight = edge[
                    
                      2
                    
                    ])
                  
                
              
            
              
                 
              
              
            
            
                
                  
                    
                      for
                    
                     i, x 
                    
                      in
                    
                     enumerate(nx.connected_components(g)):
                  
                
                
                  
                    
                      print
                    
                    (
                    
                      "cc"
                    
                    +str(i)+
                    
                      ":"
                    
                    ,x)
                  
                
                
                  
                    ------------------------------------------------------------
                  
                
                
                  
                    cc0: {
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Kassel'
                    
                    , 
                    
                      'Munchen'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      'Erfurt'
                    
                    , 
                    
                      'Stuttgart'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Mannheim'
                    
                    , 
                    
                      'Augsburg'
                    
                    }
                  
                
                
                  
                    cc1: {
                    
                      'Kolkata'
                    
                    , 
                    
                      'Bangalore'
                    
                    , 
                    
                      'Mumbai'
                    
                    , 
                    
                      'Delhi'
                    
                    }
                  
                
                
                  
                    cc2: {
                    
                      'ALB'
                    
                    , 
                    
                      'NY'
                    
                    , 
                    
                      'TX'
                    
                    }
                  
                
              
            - 
                零售:很多客户使用大量账户,可以利用连通分量算法寻找数据集中的不同簇类。假设使用相同信用卡的客户 ID 存在连边(edges),或者将该条件替换为相同的住址,或者相同的电话等。一旦我们有了这些连接的边,就可以使用连通分量算法来对客户 ID 进行聚类,并对每个簇类分配一个家庭 ID。然后,通过使用这些家庭 ID,我们可以根据家庭需求提供个性化建议。此外,通过创建基于家庭的分组功能,我们还能够提高分类算法的性能。 
- 
                财务:我们可以利用这些家庭 ID 来识别金融欺诈。如果某个账户曾经有过欺诈行为,那么它的关联帐户很可能发生欺诈行为。 
从鹿特丹到格罗宁根的最短途径是什么?或者换句话说:从特定城市到特定城市的最短路径是什么?这便是最短路径算法,而我只用了二十分钟就完成了该算法的设计。 一天早上,我和未婚妻在阿姆斯特丹购物,我们逛累了,便在咖啡馆的露台上喝了一杯咖啡。而我,就想着我能够做到这一点,于是我就设计了这个最短路径算法。正如我所说,这是一个二十分钟的发明。事实上,它发表于1959年,也就是三年后。它之所以如此美妙,其中一个原因在于我没有用铅笔和纸张就设计了它。后来我才知道,没有铅笔和纸的设计的一个优点就是,你几乎被迫避免所有可避免的复杂性。最终,这个算法让我感到非常惊讶,而且也成为了我名声的基石之一。
——Edsger Dijkstra于2001年接受ACM通讯公司 Philip L. Frana 的采访时的回答
                
                  
                    
                      print
                    
                    (nx.shortest_path(g, 
                    
                      'Stuttgart'
                    
                    ,
                    
                      'Frankfurt'
                    
                    ,weight=
                    
                      'weight'
                    
                    ))
                  
                
                
                  
                    
                      print
                    
                    (nx.shortest_path_length(g, 
                    
                      'Stuttgart'
                    
                    ,
                    
                      'Frankfurt'
                    
                    ,weight=
                    
                      'weight'
                    
                    ))
                  
                
                
                  
                    --------------------------------------------------------
                  
                
                
                  
                    [
                    
                      'Stuttgart'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Frankfurt'
                    
                    ]
                  
                
                
                  
                    503
                  
                
              
            
                
                  
                    
                      for
                    
                     x 
                    
                      in
                    
                     nx.all_pairs_dijkstra_path(g,weight=
                    
                      'weight'
                    
                    ):
                  
                
                
                  
                    
                      print
                    
                    (x)
                  
                
                
                  
                    --------------------------------------------------------
                  
                
                
                  
                    (
                    
                      'Mannheim'
                    
                    , {
                    
                      'Mannheim'
                    
                    : [
                    
                      'Mannheim'
                    
                    ], 
                    
                      'Frankfurt'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    ], 
                    
                      'Karlsruhe'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    ], 
                    
                      'Augsburg'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    , 
                    
                      'Augsburg'
                    
                    ], 
                    
                      'Kassel'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Kassel'
                    
                    ], 
                    
                      'Wurzburg'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    ], 
                    
                      'Munchen'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    , 
                    
                      'Augsburg'
                    
                    , 
                    
                      'Munchen'
                    
                    ], 
                    
                      'Erfurt'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Erfurt'
                    
                    ], 
                    
                      'Numberg'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Numberg'
                    
                    ], 
                    
                      'Stuttgart'
                    
                    : [
                    
                      'Mannheim'
                    
                    , 
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      'Stuttgart'
                    
                    ]})
                  
                
                
                  
                    (
                    
                      'Frankfurt'
                    
                    , {
                    
                      'Frankfurt'
                    
                    : [
                    
                      'Frankfurt'
                    
                    ], 
                    
                      'Mannheim'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Mannheim'
                    
                    ], 
                    
                      'Kassel'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Kassel'
                    
                    ], 
                    
                      'Wurzburg'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    ], 
                    
                      'Karlsruhe'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Mannheim'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    ], 
                    
                      'Augsburg'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Mannheim'
                    
                    , 
                    
                      'Karlsruhe'
                    
                    , 
                    
                      'Augsburg'
                    
                    ], 
                    
                      'Munchen'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      'Munchen'
                    
                    ], 
                    
                      'Erfurt'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Erfurt'
                    
                    ], 
                    
                      'Numberg'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Numberg'
                    
                    ], 
                    
                      'Stuttgart'
                    
                    : [
                    
                      'Frankfurt'
                    
                    , 
                    
                      'Wurzburg'
                    
                    , 
                    
                      'Numberg'
                    
                    , 
                    
                      'Stuttgart'
                    
                    ]})
                  
                
                
                  
                    ....
                  
                
              
            - 
                Dijkstra 算法的变体在 Google 地图中广泛使用,用于计算最短的路线。
- 
                想象身处在沃尔玛商店,我们知道了各个过道之间的距离,我们希望为从过道 A 到过道 D 的客户提供最短路径。
- 
                如下图所示,当我们知道了领英中用户的一级连接、二级连接时,如何得知幕后的信息呢?Dijkstra 算法可以帮到我们。
                
                  
                    # 
                    
                      nx.minimum_spanning_tree
                    
                    (
                    
                      g
                    
                    ) 
                    
                      returns
                    
                    
                      a
                    
                    
                      instance
                    
                    
                      of
                    
                    
                      type
                    
                    
                      graph
                    
                  
                
                
                  
                    
                      nx.draw_networkx
                    
                    (
                    
                      nx.minimum_spanning_tree
                    
                    (
                    
                      g
                    
                    ))
                  
                
              
            - 
                最小生成树在网络设计中有着最直接的应用,包括计算机网络,电信网络,运输网络,供水网络和电网。(最小生成树最初就是为此发明的)
- 
                最小生成树可用于求解旅行商问题的近似解
- 
                聚类——首先构造最小生成树,然后使用类间距离和类内距离来设定阈值,从而破坏最小生成树中的某些连边,最终完成聚类的目的
- 
                图像分割——首先在图形上构建最小生成树,其中像素是节点,像素之间的距离基于某种相似性度量(例如颜色,强度等),然后进行图的分割。
4、网页排序(Pagerank)
              
                
              
            
                
                  
                    # reading the dataset
                  
                
                
                  
                    
                      fb
                    
                     = nx.read_edgelist(
                    
                      '../input/facebook-combined.txt'
                    
                    , create_using = nx.Graph(), nodetype = int)
                  
                
              
            
                
                  
                    pos = nx.spring_layout(fb)
                  
                
                
                  
                    import warnings
                  
                
                
                  
                    warnings.filterwarnings(
                    
                      'ignore'
                    
                    )
                  
                
                
                  
                    plt.style.
                    
                      use
                    
                    (
                    
                      'fivethirtyeight'
                    
                    )
                  
                
                
                  
                    plt.rcParams[
                    
                      'figure.figsize'
                    
                    ] = (
                    
                      20
                    
                    , 
                    
                      15
                    
                    )
                  
                
                
                  
                    plt.axis(
                    
                      'off'
                    
                    )
                  
                
                
                  
                    nx.draw_networkx(fb, pos, with_labels = 
                    
                      False
                    
                    , node_size = 
                    
                      35
                    
                    )
                  
                
                
                  
                    plt.show()
                  
                
              
            
                
                  
                    
                      pageranks
                    
                     = 
                    
                      nx.pagerank(fb)
                    
                  
                
                
                  
                    print(pageranks)
                  
                
                
                  
                    ------------------------------------------------------
                  
                
                
                  
                    
                    : 
                    
                      0.006289602618466542,
                    
                  
                
                
                  
                    
                      1
                    
                    : 
                    
                      0.00023590202311540972,
                    
                  
                
                
                  
                    
                      2
                    
                    : 
                    
                      0.00020310565091694562,
                    
                  
                
                
                  
                    
                      3
                    
                    : 
                    
                      0.00022552359869430617,
                    
                  
                
                
                  
                    
                      4
                    
                    : 
                    
                      0.00023849264701222462,
                    
                  
                
                
                  
                    ........}
                  
                
              
            
              
                 
              
              
            
            
                
                  
                    
                      import
                    
                     operator
                  
                
                
                  
                    sorted_pagerank = sorted(pagerank.items(), key=
                    
                      operator
                    
                    .itemgetter(
                    
                      1
                    
                    ),
                    
                      reverse
                    
                     = 
                    
                      True
                    
                    )
                  
                
                
                  
                    
                      print
                    
                    (sorted_pagerank)
                  
                
                
                  
                    ------------------------------------------------------
                  
                
                
                  
                    [(
                    
                      3437
                    
                    , 
                    
                      0.007614586844749603
                    
                    ), (
                    
                      107
                    
                    , 
                    
                      0.006936420955866114
                    
                    ), (
                    
                      1684
                    
                    , 
                    
                      0.0063671621383068295
                    
                    ), (
                    
                      0
                    
                    , 
                    
                      0.006289602618466542
                    
                    ), (
                    
                      1912
                    
                    , 
                    
                      0.0038769716008844974
                    
                    ), (
                    
                      348
                    
                    , 
                    
                      0.0023480969727805783
                    
                    ), (
                    
                      686
                    
                    , 
                    
                      0.0022193592598000193
                    
                    ), (
                    
                      3980
                    
                    , 
                    
                      0.002170323579009993
                    
                    ), (
                    
                      414
                    
                    , 
                    
                      0.0018002990470702262
                    
                    ), (
                    
                      698
                    
                    , 
                    
                      0.0013171153138368807
                    
                    ), (
                    
                      483
                    
                    , 
                    
                      0.0012974283300616082
                    
                    ), (
                    
                      3830
                    
                    , 
                    
                      0.0011844348977671688
                    
                    ), (
                    
                      376
                    
                    , 
                    
                      0.0009014073664792464
                    
                    ), (
                    
                      2047
                    
                    , 
                    
                      0.000841029154597401
                    
                    ), (
                    
                      56
                    
                    , 
                    
                      0.0008039024292749443
                    
                    ), (
                    
                      25
                    
                    , 
                    
                      0.000800412660519768
                    
                    ), (
                    
                      828
                    
                    , 
                    
                      0.0007886905420662135
                    
                    ), (
                    
                      322
                    
                    , 
                    
                      0.0007867992190291396
                    
                    ),......]
                  
                
              
            
              
                 
              
              
            
            
                
                  
                    first_degree_connected_nodes = list(fb.neighbors(
                    
                      3437
                    
                    ))
                  
                
                
                  
                    second_degree_connected_nodes = []
                  
                
                
                  
                    
                      for
                    
                     x 
                    
                      in
                    
                     first_degree_connected_nodes:
                  
                
                
                  
                        second_degree_connected_nodes+=list(fb.neighbors(x))
                  
                
                
                  
                    second_degree_connected_nodes.
                    
                      remove
                    
                    (
                    
                      3437
                    
                    )
                  
                
                
                  
                    second_degree_connected_nodes = list(
                    
                      set
                    
                    (second_degree_connected_nodes))
                  
                
                
                  
                    subgraph_3437 = nx.subgraph(fb,first_degree_connected_nodes+second_degree_connected_nodes)
                  
                
                
                  
                    pos = nx.spring_layout(subgraph_3437)
                  
                
                
                  
                    node_color = [
                    
                      'yellow'
                    
                    
                      if
                    
                     v == 
                    
                      3437
                    
                    
                      else
                    
                    
                      'red'
                    
                    
                      for
                    
                     v 
                    
                      in
                    
                     subgraph_3437]
                  
                
                
                  
                    node_size =  [
                    
                      1000
                    
                    
                      if
                    
                     v == 
                    
                      3437
                    
                    
                      else
                    
                    
                      35
                    
                    
                      for
                    
                     v 
                    
                      in
                    
                     subgraph_3437]
                  
                
                
                  
                    plt.style.use(
                    
                      'fivethirtyeight'
                    
                    )
                  
                
                
                  
                    plt.rcParams[
                    
                      'figure.figsize'
                    
                    ] = (
                    
                      20
                    
                    , 
                    
                      15
                    
                    )
                  
                
                
                  
                    plt.axis(
                    
                      'off'
                    
                    )
                  
                
                
                  
                    nx.draw_networkx(subgraph_3437, pos, with_labels = False, node_color=node_color,node_size=node_size )
                  
                
                
                  
                    plt.show()
                  
                
              
            - 
                已被用于根据引文寻找最具影响力的论文
- 
                已被谷歌用于网页排名
- 
                它可以对推文进行排名,其中,用户和推文作为网络的节点。如果用户 A 跟随用户 B,则在用户之间创建连边;如果用户推文或者转发推文,则在用户和推文之间建立连边。
- 
                用于推荐系统
https://networkx.github.io/documentation/networkx-1.10/reference/algorithms.centrality.html#current-flow-closeness
- 
                介数中心性: 拥有最多朋友的用户很重要,而起到桥梁作用、将一个领域和另一个领域进行连接的用户也很重要,因为这样可以让更多的用户看到不同领域的内容。介数中心性衡量了特定节点出现在两个其他节点之间最短路径集的次数。 
- 
                度中心性: 即节点的连接数。 
                
                  
                    pos = nx.spring_layout(subgraph_3437)
                  
                
                
                  
                    betweennessCentrality = nx.betweenness_centrality(subgraph_3437,normalized=True, endpoints=True)
                  
                
                
                  
                    node_size =  [v * 10000 for v in betweennessCentrality.values()]
                  
                
                
                  
                    plt.figure(figsize=(20,20))
                  
                
                
                  
                    nx.draw_networkx(subgraph_3437, pos=pos, with_labels=False,
                  
                
                
                  
                                     node_size=node_size )
                  
                
                
                  
                    plt.axis('off')
                  
                
              
            
              
            
- 
                        谷歌NIPS论文Transformer模型解读:只要Attention就够了
- 
                        阿里云弹性计算负责人蒋林泉:亿级场景驱动的技术自研之路
- 
                        开源sk-dist,超参数调优仅需3.4秒,sk-learn训练速度提升100倍
- 
                        你在北边的西二旗被水淹没,我在东边的八通线不知所措
- 
                        为什么说边缘计算的发展比5G更重要?
- 
                        C/C++ 最易受攻击、70% 漏洞无效,揭秘全球开源组件安全现状
- 
                        首批共享单车死于 2019
- 
                        公钥加密、加密Hash散列、Merkle树……区块链的密码学你知多少?


 
               
               
               
               
               
               
               
               
               
               
               
                                     
					 
					