-
Notifications
You must be signed in to change notification settings - Fork 0
/
name2sankeydata.py
137 lines (104 loc) · 2.51 KB
/
name2sankeydata.py
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
import json
import random
from random import randint
# output json structure,
# {
# "nodes": [
# {
# "name": "cat",
# "influence": 5 # determine node's height, and positive and negative value should sum up to this value.
# "id": 2
# }
# ],
# "links": [
# {
# "source": 0,
# "target": 1,
# "value": <random number between 0 and 1>
# }
# ]
# }
json_file = open('animals.json')
json_str = json_file.read()
rawdata = json.loads(json_str)
resultjson = {
"nodes": [],
"links": []
};
resultjson['nodes'].append({
'name': 'Sentiment',
'id': 0
})
resultjson['nodes'].append({
'name': 'Positive',
'id': 1
})
resultjson['nodes'].append({
'name': 'Negative',
'id': 2
})
base = 3
cap = 30
for index, animal in enumerate(rawdata['animals']):
rand = randint(1, 10) # randomly generate the influence value.(frequency)
if(index < cap):
resultjson['nodes'].append({
'name': animal,
'id': index + base,
'influence': rand}) # start from base
else:
break
# resultjson['links'].append({
# 'source': 0,
# 'target': 1,
# 'value' : 20
# })
# resultjson['links'].append({
# 'source': 0,
# 'target': 2,
# 'value' : 10
# })
posSum = 0
negSum = 0
for node in resultjson['nodes']:
if node['name'] != 'Positive' and node['name'] != 'Negative' and node['name'] != 'Sentiment': # ignore the first two nodes.
negProb = random.random() * node['influence'] * 0.6
posProb = node['influence'] - negProb
posSum += posProb
negSum += negProb
resultjson['links'].append({
'source': 1,
'target': node['id'],
'value': posProb
})
resultjson['links'].append({
'source': 2,
'target': node['id'],
'value': negProb
})
else:
continue
resultjson['links'].append({
'source': 0,
'target': 1,
'value' : posSum
})
resultjson['links'].append({
'source': 0,
'target': 2,
'value' : negSum
})
posPercentage = posSum / (posSum + negSum)
negPercentage = 1 - posPercentage
def int2percentage(num):
return "{0:.0f}%".format(num * 100)
resultjson['nodes'][0]['influence'] = '100%'
resultjson['nodes'][1]['influence'] = int2percentage(posPercentage)
resultjson['nodes'][2]['influence'] = int2percentage(negPercentage)
# for node in data["results"]:
# rand = randint(0, 2)
# node['geoInference'] = {'geoName': countryName[rand], 'geoFlag': countryAcron[rand]}
# sentiRand = random.random()
# node['sentimentProbabilities'] = {'POS': sentiRand, 'NEG': (1 - sentiRand)}
with open('output.json', 'w+') as outfile:
json.dump(resultjson, outfile)