人と人との間の関係のネットワークを視覚化したいと思います。共起をより効率的に計算する
私のデータは次のようになります。
let networkData = [
["John","Dylan","Brian"],
["Dylan","Brian"],
];
そして、私はこのような出力をしたい:
let networkMatrix.links = [
{source: "John", target: "Dylan", weight: 1},
{source: "John", target: "Brian", weight: 1},
{source: "Brian", target: "Dylan", weight: 2}
];
自分の体重は1と同じであるので、ジョンとブライアンは一つのグループを共有するジョンのために真でありますとディラン。 DylanとBrianが2つのグループに分かれているので、それらの関係は2の重みになります。
ここで私は助けが必要だと思っています。私のやり方は、networkData
の各行を通り、次に配列の各要素を調べることでした。各要素については、後に来るすべての要素を調べ、スコアをnetworkMatrix
に増やします。ここに私のコードです。あなたが見ることができるようにhttps://jsfiddle.net/0t81jg3b/2/
それもjsfiddle上では動作しません。ここで
var i = 0, j = 0;
networkData.map(function(d) {
d.forEach(function(val, ind, tab) {
for (let k = ind + 1; k < tab.length; k++) {
while ((i = networkMatrix.person1.indexOf(val, i + 1)) != -1) {
while ((j = networkMatrix.person2.indexOf(tab[k], j + 1)) != -1) {
if (i === j) {
networkMatrix.score[i]++;
}
}
}
}
})
});
はjsfiddleです。
このような感触は、このような単純なタスクのためのwaaaaayあまりにも複雑になっている場合は、誰かが私にどのようにいくつかの指標にを与えることができる:しかし、それは、多かれ少なかれ自分のコンピュータ上で動作しますが、私はなぜ知りませんこの混乱から抜け出す?
グループの任意の数をそのためES6
Map
を使用するか、または他のプレーンオブジェクトだろうか?あなたのデモにはタイプミスがあることにご注意ください – charlietflグループの数はいくつでも、おそらく1-100の間です。私はタイプミスを修正します。 –
「スコア」とは何ですか? – charlietfl