Dat
Visualizati n

Le funzionalità matematiche di Sage per la
visualizzazione dei dati
Andrea Lazzarotto
http://andrealazzarotto.com
Caratteristiche
Oltre 90 componenti
Grafica avanzata
Linguaggio Python
Interfaccia web
Non un banale foglio di calcolo
Percorso
Importare i dati
Funzioni built-in
Grafici complessi
Importare
i dati
infile = open('bunny.txt','r')
d = []
for l in infile:
d.append(l.split(' '))

.txt
infile = open('bunny.csv','r')
import csv
d = list(csv.reader(infile))

.csv
html(
table(
[['x','y','z']] +
d[:10],
header_row = True
)
)
import urllib2 as U
infile = U.urlopen('http://example.com/data.txt')
d = []
for l in infile:
d.append(l.split(' '))
Le liste
a = [1,2,3,4]
b = [[1,3], [6], [1,2,5]]
c = [(5,8,6), 'linux', 7.352]
[i^2 + 3 for i in a]
↓
[4, 7, 12, 19]
Funzioni
built-in
v = [random() for i in [0..9]]
list_plot(v, transparent=True, size=40)
coords = enumerate(v)
line(coords, transparent=True)
scatter_plot(california, edgecolor=[.4,.4,.4,1],
marker='+', markersize=1, aspect_ratio='1',
axes_labels=['Lon','Lat'], transparent=True)
Solo due dimensioni?
Funzioni precedenti → point3d
point3d(bunny[::10], size=20, color='brown')

http://graphics.stanford.edu/data/3Dscanrep/
m = random_matrix(ZZ, 5, 5)
matrix_plot(m, cmap='autumn', transparent=True)
Opzioni
color='red'
axes=False
frame=True
thickness=8
...
Esportazione
g = scatter_plot(d)

g.save('graficobellissimo.png')

g.save('graficobellissimo.svg')

g.save('graficobellissimo.pdf')
Grafici
complessi
Fitting
v = [(i, random()*0.5-0.25 + i^2+i+1)
for i in srange(0,4,0.2)]
# v -> simulazione di x^2 + x + 1
var('a b c')
f(x) = a*x^2 + b*x + c
sol = find_fit(v, f, solution_dict=True)
A = scatter_plot(v)
B = plot(f.subs(sol), (x, 0, v[-1][0]))
(A+B).show(transparent=True)
Interpolazione
points = [[x,y] for [x,y,z] in bunny]
values = [z for [x,y,z] in bunny]
xv = [float(x) for [x,y] in points]
yv = [float(y) for [x,y] in points]
import numpy as np
grid_x, grid_y = np.mgrid[min(xv):max(xv):200jr,
min(yv):max(yv):200jr]
from scipy.interpolate import griddata
grid_z = griddata(points, values,
(grid_x, grid_y), method='linear')

http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html
matrix_plot(grid_z.T, origin='lower',
cmap='BrBG_r', transparent=True)
Matplotlib con Pylab
import matplotlib.pyplot as plt
from pylab import figure, savefig
def twobar(dA, dB, xlabel, ylabel, ticks, suff):
fig = figure()
ax = fig.add_subplot(1,1,1)
i = range(len(dA))
ax.bar(i, dB, align='center', linewidth=4,
facecolor='#bb0000', edgecolor='white')
ax.bar(i, dA, fill=False, align='center',
edgecolor='#666666')
ax.set_xticks(i)
ax.set_xticklabels([str(d) + suff
for d in ticks])
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.xaxis.labelpad = 12
savefig("output.png", transparent=True)

twobar(datiA, datiB, 'Percentuale', 'Elementi',
[2,4,6,8], "%")
Conclusione
Numerosi elementi base
Infinite varianti
Vari livelli di complessità
?

Data Visualization — Le funzionalità matematiche di Sage per la visualizzazione dei dati