Sunteți pe pagina 1din 24

Curs 6

Seaborn
Seaborn

Vizualizări din date în format lung.

Vizualizări de subseturi de date pentru a codifica informații suplimentare


setări de culori pentru diferite categorii.

Personalizați ploturi pentru a le îmbunătăți interpretabilitatea: crearea de


adnotări, adăugarea liniilor de referință, etichetarea corectă a datelor,
controlul paletei de culori, adaptarea axelor.

Creierul uman excelează în găsirea de patternuri - modele vizuale de


reprezentare;
Importul librăriilor

Pregatim mediul de lucru si fișierele cu care vom lucra:

In[]: %pylab
In[]: import seaborn as sns
In[]: import pandas as pd

In[]:fb=pd.read_csv( 'fb_stock2018.csv',
index_col='date',
parse_dates=True)

In[]: qu = pd.read_csv('cutremur.csv')
Fișier de date
Conținutul fișierului fb_stock2018.csv :
Fișier de date
Conținutul fișierului cutremur.csv :
In[]: qu.columns
Index(['mag', 'magType', 'time', 'place', 'tsunami', 'parsed_place'],
dtype='object')

magnitudinea (mag), scara măsurată (magType), data și locația și


parsed_place - indică statul sau țara în care a avut loc un cutremur
Seaborn - stripplot()
A avut loc un tsunami devastator în Indonezia pe 28 septembrie 2018.

Analizăm datele:
In[]: c=qu.assign(time=lambda x: pd.to_datetime(x.time,
unit='ms')) .set_index('time').loc['2018-09-28'].query('parsed_place ==
"Indonesia" ')
Seaborn - stripplot()

Vrem să vizualizăm ce tipuri de magnitudine au fost utilizate în


Indonezia, intervalul de magnitudini înregistrate și câte dintre cutremure
au fost însoțite de un tsunami.

In[]: c=qu.assign(time=lambda x: pd.to_datetime(x.time,


unit='ms')) .set_index('time').loc['2018-09-28'].query('parsed_place ==
"Indonesia" and tsunami ')

Trebuie să facem graficul unei relații între variabile: o variabilă de tip


categorie ( magType ) iar cealaltă variabilă este numerică (mag)

Scatter plots din Pandas sau Matplotlib e limitat la ambele variabile


numerice.
Seaborn - stripplot()
Specificam că vrem magType pe axa x ( x ) și mag pe axa y ( y )
Colorăm punctele dacă cutremurul a fost însoțit de un tsunami (hue)
Extragem subsetul de cutremure care sunt în Indonezia si-l pasăm în
parametrul de date:

In[]: sns.stripplot(x='magType', y='mag', hue='tsunami',


data=qu.query('parsed_place == "Indonesia"'))
Seaborn - swamplot()
Swarmplot (sau bee swarm plot) – vizibilitatea distribuției datelor,
definesc marimea punctelor
In[]: sns.swarmplot( x='magType', y='mag', hue='tsunami',
data=qu.query('parsed_place == "Indonesia"'), size=3.5 )
Seaborn - boxenplot()
Boxenplot pentru seturi mari de date, arată mai multe informații despre
forma distribuției, în special în cozi.
In[]: sns.boxenplot(x='magType', y='mag', data=qu[['magType', 'mag']] )
Seaborn - violinplot()
Violin plot combină o estimare a densității nucleului KDE (estimarea a
distribuția de bază) și un box plot
In[]: fig, axes = subplots(figsize=(10, 5))
In[]: sns.violinplot(x='magType', y='mag', data=qu[['magType', 'mag']],
ax=axes, scale='width')
Faceting

Creăm subploturi în subseturi de date prin fațetare.

1. Trebuie să creăm un FacetGrid - specifică modul de aranjare a


diagramelor (care coloană categorială merge de-a lungul rândurilor și
care de-a lungul coloanelor).
2. Apelăm metoda map() ptr FacetGrid și transmitem funcția de plotare
pe care dorim să o folosim (împreună cu orice argument suplimentar).

Arătăm ce bacsis primesc chenerii unui restaurant pe diverse criterii:

In[]: tips = sns.load_dataset('tips')


In[]: tips.head()
In[]: tips['tip_pct'] = 100 * tips['tip'] / tips['total_bill']
In[]:grid=sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
In[]: grid.map(plt.hist, "tip_pct", bins=np.linspace(0, 40, 15))
Faceting
Seaborn - jointplot()

jointplot()-comparăm doar două variabile, asemănător cu un scatter plot


dar avem împreună și distribuția fiecărei variabile (ca histograme sau
KDE).

Ptr datele fb (stock-ul Facebook 2018), vizualizăm modul în care


volumul tranzacționat se corelează cu diferența zilnică dintre prețul mare
și cel mic.

In[]: sns.jointplot( x='log_volume',


y='max_abs_change',
data=fb.assign(log_volume=np.log(fb.volume),
max_abs_change=fb.high - fb.low))
Seaborn - jointplot()
Seaborn - jointplot()

kind=”hex” - schimbam forma punctelor


kind=”kde” - a contour plot a densității estimate și cu KDE pe laturi
kind= “reg” - linia de regresie în centru și cu KDEs pe laturi
kind= “resid” - rezidurile din regresie

In[]: sns.jointplot( x='log_volume',


y='max_abs_change',
kind=’kde’,
data=fb.assign(log_volume=np.log(fb.volume),
max_abs_change=fb.high - fb.low))
Seaborn - jointplot()
Seaborn - jointplot()
Seaborn - heatmap()

Heatmap() - corelații între prețurile stockurilor OHLC, log volumului


tranzacționat, max_abs_change=diferența zilniă între del mai mare si cel
mai mic preț

In[]:sns.heatmap(fb.sort_index().assign( log_volume=np.log(fb.volume),
max_abs_change=fb.high – fb.low).corr(), annot=True, center=0,
vmin=-1, vmax=1 )

center=0 (nicio correlație) pentru a marca centrul paletei dec culori


vmin si vmax – setăm scala de culori cu limitele coeficienților de
correlație
annot=True- pentru a scrie coeficienții de corelație în fiecare pătrat

Avantajul de a avea datele numerice și datele vizuale toate într-un singur


grafic cu un singur apel de funcție.
Heatmap
Seaborn - pairplot()
Corelațiile între coloanele din datele din fisierul fb ca scatter plots
In[]: sns.pairplot(fb)
Seaborn - pairplot()

Vizualizăm cum s-a schimbat distribuția datelor în fiecare trimestru

In[]: sns.pairplot(fb.assign(quarter=lambda x:
x.index.quarter),diag_kind='kde', hue='quarter')

hue – ptr a colora distribuțiile

Putem vedea cum distribuțiile coloanelor OHLC au deviația standard mai


scăzută (și varianța mai mică) în primul trimestru și modul în care prețul
stocului a scazut mult în trimestrul al patrulea (distribuția se deplasează
spre stânga)
Seaborn - pairplot()
Bibliografie

https://seaborn.pydata.org/

Seaborn – categorii de funcții după tipul de date:


https://seaborn.pydata.org/api.html

S-ar putea să vă placă și