Как добавить группы в мой файл JSON из матрицы смежности - PullRequest
0 голосов
/ 13 мая 2019

Я хочу создать группы в своем файле JSON, группы должны основываться на аналогичных ссылках и значениях, как указано ниже, код для создания файла JSON из CSV выглядит следующим образом:

const fs = require('fs');

fs.readFile('GephiMatrix_co-authorship.csv', (error, content) => {
    if (error) {
        return console.error('Error while reading file: ', error);
    }

    let lines = content.toString().split('\n');

    // delete the last line
    lines = lines.slice(0, lines.length - 1);

    let nodes = lines.shift().split(';');
    // remove the first node because it is empty
    nodes.shift();

    nodes = nodes.map((node, idx) => ({name: node, id: idx}));

    lines = lines.map(line => {
        let tmp = line.split(';');
        tmp = tmp.slice(1, tmp.length - 1);
        return tmp.map(x => parseFloat(x));
    });

    links = [];

    for (let i = 0; i < lines.length; i++) {
        for (let j = 0; j < lines[0].length; j++) {
            if (lines[i][j] !== 0) {
                links.push({source: i, target: j, weight: lines[i][j]});
            }
        }
    }


    const obj = {
        nodes: nodes,
        links: links 
    }

    fs.writeFile('output3.json', JSON.stringify(obj, undefined, 4), (errWrite) => {
        if (errWrite) {
            return console.error('There was an error when writing the json output: ', errWrite);
        }
    });
});

Это выводит это:

{
    "nodes": [
        {
            "name": "Jim_Thomas",
            "id": 0
        },
        {
            "name": "Eleftherios_Koutsofios",
            "id": 1
        }, 
        ...

    "links": [
        {
            "source": 0,
            "target": 57,
            "weight": 1
        },
        {
            "source": 1,
            "target": 57,
            "weight": 1
        },
        ...

Это очень упрощено, но, как вы можете видеть, источники 0 и 1 (Джим и Элефтерио соответственно) имеют одну и ту же цель и одну и ту же весовую ссылку, поэтому я хочу назначить их обоих в одну группу.

Таким образом, узлы становятся такими:

    "nodes": [
        {
            "name": "Jim_Thomas",
            "id": 0
            "group": 1
        },
        {
            "name": "Eleftherios_Koutsofios",
            "id": 1
            "group": 1
        }, 
        ...

Заранее спасибо!

...