
Networkx Social
- 17 installs
- 869 repo stars
- Updated June 8, 2026
- beita6969/scienceclaw
networkx-social is a skill for social-network and graph analysis with NetworkX, covering centrality, community detection, knowledge graphs, and bipartite networks.
About
This skill covers social-network and graph analysis with NetworkX in Python. A developer uses it for centrality measures, community detection, knowledge graphs from triples, bipartite projections, and visualization. It states it is not for graphs over one million nodes or GPU analytics. It matters for analyzing social structures and relationship data.
- Centrality (degree, betweenness, closeness, eigenvector, PageRank) and community detection
- Knowledge-graph construction from triples plus bipartite projections
- Graph I/O to GraphML, GEXF for Gephi, and JSON node-link
Networkx Social by the numbers
- 17 all-time installs (skills.sh)
- Ranked #1,286 of 2,065 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
networkx-social capabilities & compatibility
Free and open source; installs networkx and matplotlib via uv.
- Capabilities
- data analysis · research
- Use cases
- data analysis · research
- Pricing
- Free
What networkx-social says it does
Social network and graph analysis via NetworkX.
Build a knowledge graph from (subject, predicate, object) triples
NOT for: large-scale graph processing (>1M nodes), GPU graph analytics (use cuGraph).
npx skills add https://github.com/beita6969/scienceclaw --skill networkx-socialAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 17 |
|---|---|
| repo stars | ★ 869 |
| Last updated | June 8, 2026 |
| Repository | beita6969/scienceclaw ↗ |
What it does
Run social-network analysis in Python with NetworkX: centrality, community detection, and knowledge graphs.
Who is it for?
Computing centrality, detecting communities, building knowledge graphs, and projecting bipartite networks in Python.
Skip if: Large-scale graph processing over one million nodes or GPU graph analytics, which the docs say to use cuGraph for.
When should I use this skill?
You need social-network metrics, community detection, or a knowledge graph from triples.
What you get
The developer gets centrality scores, communities, knowledge graphs, and interoperable graph exports.
By the numbers
- 5 centrality measures
- 3 community-detection methods
Files
NetworkX Graph Analysis
Graph analysis, community detection, centrality measures, knowledge graphs, bipartite networks, and visualization.
Graph Creation
import networkx as nx
G = nx.Graph()
G.add_edge('Alice', 'Bob', weight=3)
G.add_edges_from([('Bob', 'Carol'), ('Carol', 'Dave'), ('Alice', 'Dave')])
D = nx.DiGraph() # directed graph
G = nx.read_edgelist('network.txt') # from edge list file
G = nx.from_pandas_edgelist(df, 'source', 'target') # from DataFrameKnowledge Graph Construction
# Build a knowledge graph from (subject, predicate, object) triples
KG = nx.DiGraph()
triples = [
("Python", "is_a", "Language"), ("Pandas", "depends_on", "Python"),
("NumPy", "depends_on", "Python"), ("Pandas", "depends_on", "NumPy"),
]
for subj, pred, obj in triples:
KG.add_edge(subj, obj, relation=pred)
# Query: all dependencies of Pandas
deps = list(nx.descendants(KG, "Pandas"))
# Subgraph around a node (ego graph)
ego = nx.ego_graph(KG, "Python", radius=2, undirected=True)Centrality Measures
dc = nx.degree_centrality(G) # fraction of connected nodes
bc = nx.betweenness_centrality(G) # shortest-path intermediary
cc = nx.closeness_centrality(G) # inverse avg distance
ec = nx.eigenvector_centrality(G, max_iter=1000) # neighbor importance
pr = nx.pagerank(D, alpha=0.85) # PageRank (directed)
for node, score in sorted(bc.items(), key=lambda x: -x[1])[:5]:
print(f"{node}: {score:.4f}")Community Detection
from networkx.algorithms.community import louvain_communities, modularity
from networkx.algorithms.community import label_propagation_communities, greedy_modularity_communities
communities = louvain_communities(G, seed=42) # modularity optimization
communities = list(label_propagation_communities(G)) # fast, non-deterministic
greedy = list(greedy_modularity_communities(G)) # greedy modularity
mod = modularity(G, communities)
print(f"Modularity: {mod:.4f}")Shortest Paths and Distances
path = nx.shortest_path(G, source='Alice', target='Dave')
length = nx.shortest_path_length(G, source='Alice', target='Dave')
if nx.is_connected(G):
diameter = nx.diameter(G)
avg_path = nx.average_shortest_path_length(G)Clustering and Connectivity
avg_cc = nx.average_clustering(G)
transitivity = nx.transitivity(G) # global clustering
components = list(nx.connected_components(G))
largest_cc = G.subgraph(max(components, key=len)).copy()
core_numbers = nx.core_number(G)Bipartite Graphs and Projections
from networkx.algorithms import bipartite
B = nx.Graph()
B.add_nodes_from(["u1", "u2", "u3"], bipartite=0) # users
B.add_nodes_from(["p1", "p2"], bipartite=1) # products
B.add_edges_from([("u1", "p1"), ("u2", "p1"), ("u2", "p2"), ("u3", "p2")])
users = {n for n, d in B.nodes(data=True) if d["bipartite"] == 0}
user_graph = bipartite.projected_graph(B, users) # shared neighbors become edges
weighted_proj = bipartite.weighted_projected_graph(B, users)Network Visualization
import matplotlib.pyplot as plt
pos = nx.spring_layout(G, seed=42, k=1.5)
node_sizes = [3000 * dc[n] for n in G.nodes()]
color_map = {n: i for i, comm in enumerate(communities) for n in comm}
nx.draw_networkx(G, pos, node_size=node_sizes,
node_color=[color_map.get(n, 0) for n in G.nodes()],
cmap=plt.cm.Set3, edge_color='gray', alpha=0.8, font_size=9)
plt.tight_layout()
plt.savefig('network.png', dpi=150)
plt.close()
# Other layouts: nx.circular_layout, nx.kamada_kawai_layout, nx.shell_layoutGraph I/O
# GraphML (XML-based, preserves attributes)
nx.write_graphml(G, 'graph.graphml')
G = nx.read_graphml('graph.graphml')
# GEXF (Gephi format)
nx.write_gexf(G, 'graph.gexf')
G = nx.read_gexf('graph.gexf')
# JSON (node-link format)
from networkx.readwrite import json_graph
import json
data = json_graph.node_link_data(G)
json.dump(data, open('graph.json', 'w'))
G = json_graph.node_link_graph(json.load(open('graph.json')))Best Practices
1. Use G.copy() before destructive operations (node/edge removal). 2. For large graphs, prefer louvain_communities over girvan_newman. 3. Set seed in layout functions for reproducible visualizations. 4. Check nx.is_connected(G) before computing diameter or avg path length. 5. For weighted networks, pass weight='weight' to centrality functions. 6. For knowledge graphs, use DiGraph and store relation types as edge attributes. 7. Export to GraphML or GEXF for interoperability with Gephi and other tools.
Related skills
FAQ
What is this not suited for?
Large-scale graph processing over one million nodes or GPU graph analytics, where cuGraph is recommended instead.
Which community-detection methods are included?
Louvain, label propagation, and greedy modularity, with modularity scoring.