Um treemap e um diagrama que permite visualizar dados numericos com categorias hierarquicas. Um exemplo tipico e o mapa de calor do Nikkei 225 ou do S&P 500 . Este notebook usa o squarify .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import squarify
np . random . seed ( 0 ) # Fix random numbers
labels = [ "A" * i for i in range ( 1 , 5 )]
sizes = [ i * 10 for i in range ( 1 , 5 )]
colors = [ "# %02x%02x%02x " % ( i * 50 , 0 , 0 ) for i in range ( 1 , 5 )]
plt . figure ( figsize = ( 5 , 5 ))
squarify . plot ( sizes , color = colors , label = labels )
plt . axis ( "off" )
plt . show ()
Visualizar meu portfolio
# Suponha que eu tenha dados do preco de compra e do preco atual de cada acao que possuo.
Com isso, eu criaria um mapa de calor como o finviz .
Suponha que lemos os dados abaixo de um csv.
Os dados mostrados aqui sao ficticios.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
data = [
[ "PBR" , 80.20 , 130.00 ],
[ "GOOG" , 1188.0 , 1588.0 ],
[ "FLNG" , 70.90 , 230.00 ],
[ "ZIM" , 400.22 , 630.10 ],
[ "GOGL" , 120.20 , 90.90 ],
[ "3466 \n ??????" , 156.20 , 147.00 ], # ??????????
]
df = pd . DataFrame ( data )
df . columns = [ "驫俶氛蜷・, " 蜿門セ嶺セ 。 鬘 ・ , "迴セ蝨ィ縺ョ萓。鬘・]
df [ "隧穂セ。謳咲寢" ] = df [ "迴セ蝨ィ縺ョ萓。鬘・] - df[" 蜿門セ嶺セ 。 鬘 ・ ]
df . head ( 6 )
plt . show ()
驫俶氛蜷・/th> 蜿門セ嶺セ。鬘・/th> 迴セ蝨ィ縺ョ萓。鬘・/th> 隧穂セ。謳咲寢 0 PBR 80.20 130.0 49.80 1 GOOG 1188.00 1588.0 400.00 2 FLNG 70.90 230.0 159.10 3 ZIM 400.22 630.1 229.88 4 GOGL 120.20 90.9 -29.30 5 3466\n?????? 156.20 147.0 -9.20
Definir a cor do treemap
# Verde para areas com lucro e vermelho para areas com prejuizo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
colors = []
percents = []
for p_or_l , oac in zip ( df [ "????" ], df [ "????" ]):
percent = p_or_l / oac * 100
if p_or_l > 0 :
g = np . min ([ percent * 255 / 100 + 100 , 255.0 ])
color = "# %02x%02x%02x " % ( 0 , int ( g ), 0 )
colors . append ( color )
else :
r = np . min ([ - percent * 255 / 100 + 100 , 255 ])
color = "# %02x%02x%02x " % ( int ( r ), 0 , 0 )
colors . append ( color )
percents . append ( percent )
print ( df [ "驫俶氛蜷・" ] . values )
print ( colors )
print ( percents )
plt . show ()
['PBR' 'GOOG' 'FLNG' 'ZIM' 'GOGL' '3466\n??????']
['#00ff00', '#00b900', '#00ff00', '#00f600', '#a20000', '#730000']
[62.094763092269325, 33.670033670033675, 224.4005641748942, 57.43840887511868, -24.376039933444257, -5.8898847631241935]
Exibir o treemap
# Vamos mostrar o lucro/prejuizo em cores e o percentual de lucro/prejuizo no treemap.
Caracteres japoneses nao ficam corrompidos porque usamos import japanize_matplotlib no inicio.
1
2
3
4
5
6
7
8
9
10
11
current_prices = [ cp for cp in df [ "迴セ蝨ィ縺ョ萓。鬘・]]
labels = [
f " { name } \n { np . round ( percent , 2 ) } ・・" . replace ( "-" , "笆シ" )
for name , percent in zip ( df [ "驫俶氛蜷・" ], percents )
]
plt . figure ( figsize = ( 10 , 10 ))
plt . rcParams [ "font.size" ] = 18
squarify . plot ( current_prices , color = colors , label = labels )
plt . axis ( "off" )
plt . show ()
Adicionar exibicao de caixa ao treemap
# Vamos adicionar uma exibicao de caixa ao treemap. A cor deve ser cinza.
1
2
3
4
5
6
7
plt . figure ( figsize = ( 10 , 10 ))
plt . rcParams [ "font.size" ] = 18
squarify . plot (
current_prices + [ 3500 ], color = colors + [ "#ccc" ], label = labels + [ "?????" ]
)
plt . axis ( "off" )
plt . show ()