-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmarket_graph.py
121 lines (92 loc) · 2.28 KB
/
market_graph.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
# %%
import graph_tool.all as gt
import numpy as np
import urllib.request
import os
import csg as csg
from pycoingecko import CoinGeckoAPI
from sklearn import preprocessing
# %%
cg = CoinGeckoAPI()
if not os.path.exists("symbols_imgs"):
os.mkdir("symbols_imgs")
img_path = os.path.join(os.getcwd(), "symbols_imgs")
markets = cg.get_coins_markets(
"usd", per_page=40, page=1, sparkline=True, price_change_percent="1h,24h,7d"
)
# %%
markets
# %%
def process_market_data(data):
sd = {}
derived_sd = {}
for symbol in data:
s = symbol["symbol"]
img = symbol["image"]
mcap = symbol["market_cap"]
vol = symbol["total_volume"]
price = symbol["current_price"]
price_change = symbol["price_change_percentage_24h"]
mcap_change = symbol["market_cap_change_percentage_24h"]
sd[s] = [mcap, vol, price_change, mcap_change]
derived_sd[s] = [100 * vol / mcap, price_change, mcap_change]
return sd, derived_sd
# %%
sd, derived_sd = process_market_data(markets)
# %%
sd
# %%
derived_sd
# %%
names = np.array(list(sd.keys()))
sdarray = np.array(list(sd.values()))
dsd = np.array(list(derived_sd.values()))
# %%
tdsd = preprocessing.minmax_scale(dsd)
# %%
volmcap = dsd[:, 0]
price_change = dsd[:, 1]
mcap_change = dsd[:, 2]
mcap = sdarray[:, 0]
# %%
names
volmcap
# %%
g = gt.Graph(directed=False)
# %%
g.vp.name = g.new_vp("string")
g.vp.color = g.new_vp("string")
g.vp.volmcap = g.new_vp("float")
g.vp.pricec = g.new_vp("float")
g.vp.mcapc = g.new_vp("float")
g.vp.mcap = g.new_vp("float")
# %%
M = np.column_stack((mcap, price_change))
# %%
cs = csg.ConnectedSparseGraph(M, g=g)
# %%
cs.build()
# %%
for v in cs.get_vertices():
cs.vp.name[v] = names[v]
cs.vp.color[v] = "green" if price_change[v] >= 0 else "red"
cs.vp.volmcap[v] = volmcap[v]
cs.vp.pricec[v] = price_change[v]
cs.vp.mcapc[v] = mcap_change[v]
cs.vp.mcap[v] = mcap[v]
print(names[v], volmcap[v], price_change[v])
# %%
cs.vp.name[1]
cs.vp.color[1]
cs.vp.volmcap[1]
# %%
gt.graph_draw(
cs,
vertex_text=cs.vp.name,
vertex_text_position="centered",
vertex_font_size=8,
vertex_fill_color=cs.vp.color,
vertex_size=gt.prop_to_size(cs.vp.mcap, mi=5, ma=15, power=1, log=True),
output = "market_graph.png",
)
# %%