Not built
for phones

The Twitch DJ Network Map is made for a computer screen.

On a phone the controls are too small to use, and pinching or dragging will not move the map.

The Twitch DJ Network

How it works
SCROLL to zoom, drag to move around
CLICK a DJ to see who they are tied to
SEARCH a name in the panel, top right
ADD a second DJ to see their shared connections
DJ MAP shows that DJ’s personal network map

The Twitch DJ Network Map is for entertainment purposes only.

It is built from a random sampling of publicly available Twitch data by statistical methods, and the accuracy of such methods cannot be guaranteed. The map changes over time as new data is acquired.

Questions, complaints, or want to be taken off? Write to [email protected]

Questions

The map
What is this?
It is a map of the DJs streaming on Twitch and how they are connected to each other, based on statistical analysis of a sample of publicly available Twitch data — and the accuracy of such methods cannot be guaranteed.
What are the big names when the map is zoomed out?
They mark where something is shared — a sound, a team — not what everyone underneath is. Enough DJs in that part of the map have it in common for it to show as a trend, so the name describes the neighbourhood, not the people in it. A DJ sitting under DRUM & BASS is not necessarily a drum and bass DJ, and one under a team name is not necessarily in that team.
What do the colours mean?
A dot’s inner colour is the Cluster they are associated with. The ring around it is the Genre Family they belong to; a dot with no ring is one we have no Genre Family assignment for.
Does the map change?
Yes, and it always will. The map changes over time as new data is acquired, so DJs move, connections appear and fade, and the shape of the whole thing shifts. Where anyone sits is a snapshot of what was known on the build date, not a fixed address.
How are connections worked out?
Connection strength comes from a mix of public signals — raids, shoutouts, suggested channels, shared teams, and more. Each DJ is pulled toward the DJs they are connected to and pushed away from everyone else, and the picture settles where those forces balance.
How are genres decided?
Genre comes from stream titles and stream tags, which we do our best to parse correctly. If you disagree with the genre you have been given, take into consideration what genres you are signalling with your own titles and tags.
Why is a DJ I know not on the map?
To be drawn, a DJ must be enrolled in the Twitch DJ program and also meet other minimum requirements — a minimum frequency of streams over the last year, a minimum average audience, and other measures. As a rule of thumb, the higher a DJ’s numbers and the more often they stream, the more likely they are to be on the map.
The small print
Can I license this, advertise on it, or buy the data?
No. This is a hobby project and it will never be commercialised in any way. Enquiries about or proposals for commercialising it will be ignored, and so will requests for access to the raw data. Seriously — I have a good job, and I made this entirely for fun and out of personal interest. All business enquiries will be ignored with extreme prejudice.
Who owns it?
The map itself is released under a Creative Commons Attribution–NonCommercial–ShareAlike 4.0 licence: share it and build on it freely, credit it, don’t sell it. The underlying Twitch data is public and is used here for non-commercial commentary and research. Twitch is a trademark of its owner and this project is not affiliated with or endorsed by Twitch.

The math

The connections

Every pair of DJs on the map carries a single number: how strongly they are connected.

That number is built from signals of connection that Twitch makes public — raids between the two channels, shoutouts, mod and VIP status held in each other’s channels, shelf endorsements, shared teams, and other such publicly available Twitch data. Each kind counts for a different amount, and recent activity counts for more than old.

How a connection is scored

Each kind of evidence is counted separately, then combined into one number per pair.

Recency. A single observation is not worth the same forever. Anything inside a recent window counts in full; past that it decays by half over a fixed period:

weight(t) = 1for t ≤ fweight(t) = 2^−(t − f)/hfor t > f

where t is how long ago it happened, f the window where nothing decays, and h the half-life. A raid last week and a raid two years ago are not the same evidence.

Combination. The decayed counts for each kind are scaled by that kind’s coefficient and summed into a running total T.

Corroboration. A pair confirmed by several different kinds of evidence is treated as better established than a pair with the same total from one kind alone. The final score applies a bonus for that, then compresses the result:

w = √( T · (1 + K(n − 1)) )

where n is how many distinct kinds of evidence the pair carries, and K how much each additional kind is worth. The square root keeps a few very heavy pairs from dominating everything else.

That single w is what the map is built from.

The layout

Every position is computed. Three stages, each one minimising or maximising a quantity.

1 · Communities — Leiden

The network is partitioned to maximise weighted modularity:

Q = (1 / 2m) · Σⁱⱼ[ wⁱⱼ − γ · (sⁱ sⱼ / 2m) ] · δ(cⁱ, cⱼ)

where wⁱⱼ is the connection strength between two DJs, sⁱ is the total strength on DJ i, m is the total over the whole map, and δ is 1 when both sit in the same community and 0 otherwise. The bracket is observed connection minus what chance alone would predict — so a community only survives if its members are connected to each other more than their overall activity explains. γ sets how fine the division is. These become the regions, and at a coarser γ, the colours.

2 · Positions — Fruchterman–Reingold

A force simulation over the DJs, with an ideal separation k = √(area / n). Every pair repels; every connected pair also attracts:

f_repulsive= − k² / df_attractive= wⁱⱼ · d² / k

Positions are stepped along the sum of those forces under a decreasing temperature, until movement dies out. Run once to place the regions relative to each other, then again inside each region.

3 · Refinement — stress majorization

Network distance dⁱⱼ is the shortest weighted path between two DJs — strong connections being short. The pass then minimises

σ(X) = Σⁱ<ⱼ Wⁱⱼ · ( ‖xⁱ − xⱼ‖ − dⁱⱼ )²Wⁱⱼ = dⁱⱼ⁻²

— the squared error between drawn distance and network distance, weighted so near pairs matter most. Solved iteratively, each step guaranteed not to increase σ.

THE TWITCH DJ NETWORK
LEVELS
DJ
is not on the map
not every DJ is drawn, there are minimum requirements
GENRE FAMILIES
 
—DJs
—ties
—
zoom
—
field
—
depth
—version
—build date