Skip to content
Network Analysis of Sources

A weighted edge in a historical network is simply a connection that carries a number — the strength or frequency of the relationship — instead of just recording that two people were linked. If Anne sent Mary 40 letters and Mary sent John 2, weighting captures that Anne-Mary is a far stronger tie. This guide explains the idea in plain language and walks through a small worked example you can follow end to end.

What is a weighted edge, in plain terms?

Imagine a map of who corresponded with whom. An unweighted network draws a plain line between any two people who exchanged at least one letter. A weighted network thickens that line according to how many letters passed. The number attached to each line is the weight.

Weights turn a yes/no picture into a graded one. That matters because in history the difference between one chance letter and a hundred intimate ones is usually the whole point.

When should you add weights at all?

Weights are not always worth the trouble. Use this quick test:

  • If your question involves how strong, frequent, or important a relationship is — add weights.
  • If you only care whether a relationship existed — stay unweighted; it is simpler and easier to read.

Adding weights you never use just clutters the analysis, so commit to them only when intensity is part of the story.

How do you decide what a weight means?

Pick one clearly countable thing from your sources and stick to it. Good candidates:

SourceNatural weight
Letterbooksnumber of letters exchanged
Account ledgersnumber or value of transactions
Witness liststimes two people co-witnessed
Newspaperstimes two names co-occur in articles

The fatal mistake is blending meanings — letters plus transactions plus a guess at closeness — into one number nobody can interpret. Define the weight in a sentence and write it into your data dictionary.

A small worked example

Start from a tidy list of interactions, count duplicates into a weight, and load it:

python
import pandas as pd
import networkx as nx

rows = pd.DataFrame({
    "source": ["Anne", "Anne", "Anne", "Mary", "Mary"],
    "target": ["Mary", "Mary", "John", "John", "John"],
})

# count repeats -> weight
agg = rows.groupby(["source", "target"]).size().reset_index(name="weight")
G = nx.from_pandas_edgelist(agg, "source", "target", edge_attr="weight")

for u, v, w in G.edges(data="weight"):
    print(u, v, w)        # Anne Mary 2, Anne John 1, Mary John 2

Now Anne-Mary carries weight 2 and Anne-John weight 1 — the structure already reflects intensity.

Should you normalise the weights?

Raw counts favour whoever left more records. If one correspondent's archive survives in full and another's barely, raw weights compare survival, not friendship. Normalising rescales weights so they are comparable — for example, dividing each person's tie weights by their total, or capping by a per-person maximum.

python
# express each tie as a share of the source's total activity
totals = agg.groupby("source")["weight"].transform("sum")
agg["weight_norm"] = (agg["weight"] / totals).round(3)

Keep both the raw and normalised columns and report which you used where.

Do weights change the results?

Yes — often dramatically. Weighted degree (called strength) sums a node's weights instead of counting its edges, so a person with a few heavy ties can outrank one with many trivial ones. Weighted versions of betweenness and clustering behave differently too. Always state plainly: "centrality computed on weighted edges, weight = letters exchanged."

Key Takeaways

  • A weighted edge attaches a number for relationship strength or frequency, not just existence.
  • Add weights only when intensity matters to your question; otherwise stay unweighted.
  • Define a weight as one clearly countable quantity and document it — never mix meanings.
  • Aggregate duplicate interactions into a weight at load time.
  • Normalise when source survival is uneven, but keep raw counts alongside.
  • Weighted metrics can reorder your nodes, so always state which version you report.

Frequently Asked Questions

What is a weighted edge in a historical network?

A weighted edge is a connection that carries a number expressing the strength or frequency of a relationship — for example, how many letters two people exchanged — rather than just recording that a tie existed.

When should I add weights instead of just yes/no ties?

Add weights when the intensity of a relationship matters to your question, such as comparing close versus occasional correspondents. If you only care whether a tie existed, an unweighted graph is simpler and clearer.

How do I decide what a weight should represent?

Pick one clearly defined, countable quantity from your sources — letters exchanged, co-appearances, shared transactions — and document it. Mixing different meanings into one weight makes the number uninterpretable.

Should I normalise my edge weights?

Normalise when you compare across people or periods with unequal source survival, so a prolific letter-writer does not dominate purely by volume. Keep raw counts too, and report both.

Do weights change centrality results?

Yes. Weighted degree (strength) and weighted betweenness can rank nodes very differently from their unweighted versions, so always state which one you used.

Can a weight be a non-count, like emotional closeness?

It can, but only if you define an explicit, repeatable coding scheme. Subjective weights need documented rules and ideally a second coder, or they are not reproducible.