{"id":287,"date":"2012-11-02T16:34:47","date_gmt":"2012-11-02T20:34:47","guid":{"rendered":"http:\/\/www.michelecoscia.com\/?page_id=287"},"modified":"2026-08-13T03:32:54","modified_gmt":"2026-08-13T07:32:54","slug":"network-toolbox","status":"publish","type":"page","link":"https:\/\/www.michelecoscia.com\/?page_id=287","title":{"rendered":"Network Backboning"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2012\/11\/er1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"234\" height=\"218\" src=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2012\/11\/er1.png\" alt=\"\" class=\"wp-image-288\" title=\"er1\"\/><\/a><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>MultiLayer Version<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2026\/08\/20260518_cikm_reproducibility.zip\">Download Full Package<\/a><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The archive contains all the data and code to reproduce the paper &#8220;Multilayer Network Backboning,&#8221; published in CIKM26.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re only interested in performing multilayer backboning, the minimum code needed is:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import backboning as bb<br><br>edges_bb = bb.noise_corrected_ml(edges)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Assuming that &#8220;edges&#8221; is a pandas dataframe with a multilayer edgelist. Each row in the dataframe should contain one edge. The dataframe should have columns src, trg (for the nodes connected by the edge), layer (the layer id connecting the edges), and nij (the edge weight). src, trg, and layer can be arbitrary strings, nij should be a non-negative int (but it can be float as well). The &#8220;wiki_data\/edges.csv&#8221; file in the archive is an example of a well-formatted input file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you run it, you can still use the standard thresholding function to extract the backbone just like in the single layer example below.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2026\/08\/20260518_cikm_reproducibility.zip\">Download Full Package<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><strong>Single Layer Version<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2016\/10\/backboning.zip\"><strong>Download Backboning Code and Data (Python 2, Networkx 1 version)<\/strong><\/a><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2018\/10\/backboning_p3nx2.zip\"><strong>Backboning code for Python 3 &amp; Networkx 2<\/strong><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The archive contains a Python module to perform network backboning, which is the filtering of non-significant edges from a very dense and noisy network.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The module provides several utilities and the following methods:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Noise Corrected: New methodology published at ICDE 2017 developed by <a href=\"http:\/\/www.frankneffke.com\/\">Frank Neffke<\/a> and me (please cite: Coscia &amp; Neffke &#8220;Network Backboning with Noisy Data&#8221;, ICDE 2017 &#8212; <a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2017\/01\/20170124backboning.pdf\">Paper<\/a>, <a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2017\/01\/backboning.txt\">Bibtex<\/a>);<\/li>\n\n\n\n<li>Disparity Filter: http:\/\/www.pnas.org\/content\/106\/16\/6483.full;<\/li>\n\n\n\n<li>High Salience Skeleton: http:\/\/www.nature.com\/articles\/ncomms1847;<\/li>\n\n\n\n<li>Doubly Stochastic Transformation: http:\/\/www.pnas.org\/content\/106\/26\/E66.full.pdf;<\/li>\n\n\n\n<li>Maximum Spanning Tree: https:\/\/en.wikipedia.org\/wiki\/Minimum_spanning_tree;<\/li>\n\n\n\n<li>Naive Thresholding.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The module requires the following Python packages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pandas<\/li>\n\n\n\n<li>Numpy<\/li>\n\n\n\n<li>Networkx<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The archive contains data and example code that should get you up and running. A minimal working example is provided here. I will assume you either have the backboning.py module in your running directory or in a directory of your Python path:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import backboning\ntable, nnodes, nnedges = backboning.read(\"\/path\/to\/input\", \"column_of_interest\")\nnc_table = backboning.noise_corrected(table)\nnc_backbone = backboning.thresholding(nc_table, threshold_value)\nbackboning.write(nc_backbone, \"network_name\", \"nc\", \"\/path\/to\/output\")\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Easy!<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2016\/10\/backboning.zip\"><strong>Download Backboning Code and Data<\/strong><\/a><strong><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2016\/10\/backboning.zip\">(Python 2, Networkx 1 version)<\/a><\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><a href=\"https:\/\/www.michelecoscia.com\/wp-content\/uploads\/2018\/10\/backboning_p3nx2.zip\"><strong>Backboning code for Python 3 &amp; Networkx 2<\/strong><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>MultiLayer Version Download Full Package The archive contains all the data and code to reproduce the paper &#8220;Multilayer Network Backboning,&#8221; published in CIKM26. If you&#8217;re only interested in performing multilayer backboning, the minimum code needed is: import backboning as bbedges_bb = bb.noise_corrected_ml(edges) Assuming that &#8220;edges&#8221; is a pandas dataframe with a multilayer edgelist. Each row &hellip; <a href=\"https:\/\/www.michelecoscia.com\/?page_id=287\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Network Backboning&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":25,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-287","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/pages\/287","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=287"}],"version-history":[{"count":12,"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/pages\/287\/revisions"}],"predecessor-version":[{"id":2581,"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/pages\/287\/revisions\/2581"}],"up":[{"embeddable":true,"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=\/wp\/v2\/pages\/25"}],"wp:attachment":[{"href":"https:\/\/www.michelecoscia.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}