はじめに
他の人が誰と友達か、気になりませんか?僕はめちゃくちゃ気になります!
ログレスというオンラインゲームをやっているんですが、このゲームのプレイヤーのつながりをネットワークで可視化しました!
→ https://denlgrs.github.io/logres-network/
こんな感じで、つながりがある(と推定される)プレイヤー同士の間に線が引いています。


丸がプレイヤーです。
仲の良さそうなプレイヤーたちがかたまりになっていたりして、眺めているだけでも楽しいです。
では、これをどうやって作るのかを見ていきます。
……といきたいところですが、長くなるので今回は前半戦です。
まずは、とりあえずそれっぽいネットワークを作るところまでやります。
どうやったら仲がいいかどうか分かるのか?
仲がいい人同士をデータから見つけるにはどうすればいいでしょうか?
正直、そんなの直接は分かりません。仲の良さを返してくれるAPIは存在しないので...。
なので、所属グループを見ます。
例えば学校で考えてみます。
同じクラスにいる人同士って、めちゃくちゃ仲がいいわけじゃなくても、少なくとも顔は知っていそうですよね。このように、「同じ集まりにいる」というだけでも、ある程度の関係はありそうです。
というわけで今回は、「同じグループにいる人同士は、ある程度仲がいい」という単純な仮定を置いて勧めます。
ゲームのグループからネットワークを作る
このログレスというゲームにはグループという機能があります。イメージとしてはLINEグループみたいなものです。
同じグループのプレイヤーとチャットすることができます。雑談やパーティ集め、攻略情報の共有などに使われています。
ここで重要なのは、プレイヤーは複数のグループに入れるということです。

この図では、オレンジがグループ、青がプレイヤーです。「ルーシー」や「ケミカル」などが複数のグループに入っていることが分かります。
中には170個以上のグループに入っている人もいます。とんでもない社交性ですね!
こうした人が、グループをまたいで人をつなげるので、
自然とネットワーク構造ができあがります。
これを使うと、例えばこんなことが分かります。
- だれが中心的なのか(=スーパースターは誰か)
- どんな仲良しのかたまりがあるか
- いろんなプレイヤーをつないでいるのは誰か
つまり、ネットワークにすると人間関係がちょっと分かるということです!
というわけでネットワークを作っていきましょう。
必要なデータはシンプルです。
- グループのリスト
- 各グループに所属しているプレイヤー
そして嬉しいことに、このゲームはうまいことやるとこのデータが取れてしまいます(少なくともこの記事を書いている時点では)。
まずはそのままつなぐ
集めたデータを使って、まずは素直にネットワークを作ります。やることは簡単で、グループとプレイヤーを線でつないでいきます。
つまり、プレイヤー → グループ → プレイヤーという構造になります。
これでプレイヤーとグループのネットワークが作れます。
でも、グループ自体にはあまり興味がないです。知りたいのは「プレイヤー同士がどうつながっているか」です。
なので、グループを消してしまいます。
そして、同じグループに所属しているプレイヤー同士を直接つなぐように変換します。
これでプレイヤーだけのネットワークができました!やっと、人間関係(っぽい)ものが見えるようになります。
ちなみにこの変換はPythonのnetworkxライブラリを使えば簡単にできます。最悪、AIに聞けば全部教えてくれます。便利ですね!
実際に作ったネットワーク
何やら、カラフルな"かたまり"に分かれているのが見えますね。これはプレイヤーのサーバごとに色分けしています。
このゲームはもともとワールドと呼ばれるサーバに分かれていて、別のサーバのプレイヤーとは交流できませんでした(今は半分統一されています)。
つまり昔は、同じサーバーの人としかグループを作れなかったわけです。その名残でかたまりができています。
ゲームの歴史がネットワークからうかがえて、なかな興味深いです。
ズームしてみる
さて、全体像はなんとなく分かりました。
でも本当に知りたいのは、もっと細かいところです。もっと個人間のつながりが知りたいです。つまり、誰と誰が仲良しなのかです。
なので、ズームしてみましょう。

名前付きの丸がプレイヤーで、背景のカラフルな線がつながりです。
...どうでしょう?
分かります?
ぶっちゃけ、線が多すぎて何も分からん!
実は、同じグループの人同士を単純につなぐだけではうまくいきません。
ネットワークが密すぎる
このネットワークは線が多すぎて、誰と誰がつながっているのか全然分かりません。ちなみに線の数は21万個あります。
この問題の原因はシンプルです。
「同じグループに入っていたら仲がいい」と単純に仮定している。
そしてさらに、同じグループの人を全員平等につないでいるからです。
これを学校で例えると、「同じクラス=全員友達」とみなしているようなものです。クラスには、話したことがないどころか、名前も怪しい人、いますよね。僕はいました。
そういう人たちまで、がっつりつながってしまっています。これではさすがに無理がありますね。
じゃあどうする?
このままでは使い物になりません。
- 線が多すぎる
- 本当に仲がいい人が埋もれる
- 何も読み取れない
という悲しい状態です。
なので、改良が必要です。
次回は、「仲の良さ」に強弱をつけることで、もっと見やすいネットワークにしていきます。
まとめ
・オンラインゲームのグループとプレイヤーの関係からネットワークを作った
・同じグループに所属しているプレイヤー同士をつないだ
・グループとプレイヤーの対応からネットワークを作った
・サーバごとの“かたまり”が見えて、ゲームの歴史も反映されていた
・ただし、このままだと線が多すぎて何も分からない
つまり、「マクロな構造は見えたけど、ミクロな関係は何も分からない」という状態です。次回はこれをなんとかしていきます。


