Nodariety.jl

Hyphenate your way to glory! Or centrality.
Author rkurchin
Popularity
11 Stars
Updated Last
9 Months Ago
Started In
May 2021

Nodariety.jl

Nodariety is a fun (I hope) exploration of the directed graph of concept/theory/algorithm/model/etc. names, where nodes are names of people and edges are "hyphens" between them. Here's a little excerpt: hyphengraph

For more of the story behind this package and some example analyses, see the blog post here.

For a different take on visualizing this graph, check out this repo, or just this site directly.

What do you get?

If you were to install the package (]add Nodariety) and import it (using Nodariety), what could you then do?

The package exports the HyphenGraph type, as well as a default instance of it called hg, which has all the data described by the two CSV files in the data/ folder of this repo.

Because HyphenGraph is a subtype of AbstractGraph, a lot of the graph analysis algorithms in LightGraph "just work" on it! The package has a variety of functions to play around with this. They all use hg as the default argument, so you can call them straight-up. For example, suppose we wanted to find the longest path we can traverse:

julia> paths = longest_path()
2-element Vector{Vector{Int64}}:
 [183, 391, 82, 40, 75, 248, 282, 368]
 [285, 391, 82, 40, 75, 248, 282, 368]

 julia> subgraph = hg[paths[2]]
 HyphenGraph with 8 people, 7 hyphens

 julia> subgraph.node_info.family_name
 8-element Vector{String}:
 "Navier"
 "Stokes"
 "Einstein"
 "Cartan"
 "Dieudonné"
 "Manin"
 "Mumford"
 "Shah"

Or maybe we want to play around with centrality measures (note that eigenvector centrality can return different results different times it's called):

julia> all_centrals()
betweenness_centrality: Albert Einstein
closeness_centrality: Leonhard Euler
degree_centrality: Albert Einstein
eigenvector_centrality: Claude-Louis Navier
katz_centrality: David Mumford
pagerank: Albert Einstein
stress_centrality: Albert Einstein
radiality_centrality: Niels Abel

We can also ask about largest connected clusters (see get_clusters and trim_graph functions), and check out the node_histogram function for ways to directly probe the demographics of the folks represented in this dataset (unsurprisingly, they are overwhelmingly European and male)...

I want to contribute!

There are plenty of ways you can help! Here are a few:

  • Add more data! Please send PR's to the repo and make sure you add to both nodes.csv and edges.csv appropriately, including as much information as you can verify, and being sure that the graph builds properly before PRing.
  • Help with graph layout. The automatic layout (and all the ones built into NetworkLayout.jl that I've played with) leaves a fair bit to be desired at the moment. If you're handy with that sort of thing, I'd love help with it!
  • Feel free also to PR other analysis functions or anything you'd like!