2
schangxiang@126.com
2024-08-16 b47c50a2a514def7374b32d7194b2c599cba5625
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
var fs = require('fs');
// http://international.caixin.com/2013-09-06/100579154.html
var dataSource = [
    ['美国','叙利亚反对派',100,'green'],
    ['美国','阿萨德',100,'red'],
    ['美国','伊朗',100,'red'],
    ['美国','塞西',100,'yellow'],
    ['美国','哈马斯',100,'red'],
    ['美国','以色列',100,'green'],
    ['美国','穆斯林兄弟会',100,'yellow'],
    ['美国','基地组织',100,'red'],
    ['俄罗斯','叙利亚反对派',100,'red'],
    ['俄罗斯','阿萨德',100,'green'],
    ['伊朗','叙利亚反对派',100,'red'],
    ['伊朗','阿萨德',100,'green'],
    ['伊朗','黎巴嫩什叶派',100,'green'],
    ['伊朗','哈马斯',100,'green'],
    ['以色列','叙利亚反对派',100,'green'],
    ['以色列','阿萨德',100,'red'],
    ['以色列','哈马斯',100,'red'],
    ['土耳其','塞西',100,'red'],
    ['土耳其','穆斯林兄弟会',100,'green'],
    ['土耳其','叙利亚反对派',100,'green'],
    ['土耳其','阿萨德',100,'red'],
    ['卡塔尔','叙利亚反对派',100,'green'],
    ['卡塔尔','阿萨德',100,'red'],
    ['卡塔尔','塞西',100,'red'],
    ['卡塔尔','穆斯林兄弟会',100,'green'],
    ['卡塔尔','哈马斯',100,'green'],
    ['沙特','叙利亚反对派',100,'green'],
    ['沙特','黎巴嫩逊尼派',100,'green'],
    ['沙特','塞西',100,'green'],
    ['沙特','穆斯林兄弟会',100,'red'],
    ['塞西','穆斯林兄弟会',100,'red'],
    ['黎巴嫩逊尼派','叙利亚反对派',100,'green'],
    ['黎巴嫩逊尼派','阿萨德',100,'red'],
    ['黎巴嫩什叶派','叙利亚反对派',100,'red'],
    ['黎巴嫩什叶派','阿萨德',100,'green'],
    ['哈马斯','叙利亚反对派',100,'green'],
    ['哈马斯','塞西',100,'red'],
    ['穆斯林兄弟会','阿萨德',100,'red'],
    ['基地组织','叙利亚反对派',100,'green'],
    ['基地组织','阿萨德',100,'red'],
    ['基地组织','沙特',100,'red']
];
var groupIndices = {};
var count = 0;
for (var i = 0; i < dataSource.length; i++) {
    var country = dataSource[i][0];
    var country2 = dataSource[i][1];
    if (groupIndices[country] === undefined) {
        groupIndices[country] = count++;
    }
    if (groupIndices[country2] === undefined) {
        groupIndices[country2] = count++;
    }
}
for (var i = 0; i < dataSource.length; i++) {
    var target = dataSource[i][1];
    if (groupIndices[target] === undefined) {
        groupIndices[target] = count++;
    }
}
var attitudeMap = {
    'green' : 0,
    'red' : 1,
    'yellow' : 2
}
var series = [{
    name : '支持',
    type : 'chord',
    showScaleText : false,
    data : [],
    matrix : []
}, {
    name : '反对',
    type : 'chord',
    showScaleText : false,
    data : [],
    matrix : []
}, {
    name : '未表态',
    type : 'chord',
    showScaleText : false,
    data : [],
    matrix : []
}];
for (var k = 0; k < 3; k++) {
    series[k].matrix = [];
    for(var countryName in groupIndices) {
        var idx = groupIndices[countryName];
        series[k].data[idx] = {
            name : countryName
        }
    }
    for (var i = 0; i < count; i++) {
        series[k].matrix[i] = [];
        for (var j = 0; j < count; j++) {
            series[k].matrix[i][j] = 0;
        }
    }
}
for (var i = 0; i < dataSource.length; i++) {
    var sourceIdx = groupIndices[dataSource[i][0]];
    var targetIdx = groupIndices[dataSource[i][1]];
    var val = dataSource[i][2];
    var serieIdx = attitudeMap[dataSource[i][3]];
    var matrix = series[serieIdx].matrix;
    matrix[sourceIdx][targetIdx] += 100;
    matrix[targetIdx][sourceIdx] += 10;
}
 
var res = {
    title : {
        text : "中东地区的敌友关系",
        subtext: '数据来自财新网',
        x:'right',
        y:'bottom'
    },
    legend : {
        data : Object.keys(groupIndices),
        orient : 'vertical',
        x : 'left'
    },
    series : series 
}
 
fs.writeFileSync("middle-east.js", 'define(' + JSON.stringify(series) + ')');