Vizualizarea datelor

Introducere

Vizualizarea datelor reprezintă o componentă esențială în analiza datelor, permițându-ne să înțelegem modele, tendințe și relații care ar putea rămâne ascunse în tabelele de date. Matplotlib și Seaborn sunt două dintre cele mai populare biblioteci Python pentru vizualizarea datelor. Matplotlib oferă o platformă flexibilă pentru crearea unei game largi de vizualizări, în timp ce Seaborn extinde funcționalitățile Matplotlib, oferind interfețe mai intuitive pentru grafice statistice atractive.

Pentru a începe, trebuie să instalăm bibliotecile necesare:

# Instalarea bibliotecilor
!pip install matplotlib seaborn pandas numpy

După instalare, putem importa bibliotecile și setările de bază:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

# Setări pentru afișarea graficelor în Jupyter Notebook
%matplotlib inline

# Setarea stilului pentru Seaborn
sns.set_style("whitegrid")

Grafice de Bază cu Matplotlib

Matplotlib este biblioteca fundamentală pentru vizualizarea datelor în Python. Aceasta oferă control complet asupra aspectului graficelor și permite crearea unei varietăți largi de vizualizări.

Grafice Linii (Line Plots)

Graficele linii sunt utile pentru a vizualiza tendințe în date continue sau serii de timp:

# Crearea datelor
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Crearea unui grafic linie
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='sin(x)', color='blue', linewidth=2)
plt.title('Graficul funcției sinus', fontsize=14)
plt.xlabel('Axa X', fontsize=12)
plt.ylabel('Axa Y', fontsize=12)
plt.legend()
plt.grid(True)
plt.show()

Grafice Bară (Bar Plots)

Graficele bară sunt utile pentru a compara valori între categorii:

# Crearea datelor
categorii = ['A', 'B', 'C', 'D']
valori = [15, 30, 45, 10]

# Crearea unui grafic bară
plt.figure(figsize=(10, 6))
plt.bar(categorii, valori, color=['red', 'green', 'blue', 'orange'])
plt.title('Grafic bară', fontsize=14)
plt.xlabel('Categorii', fontsize=12)
plt.ylabel('Valori', fontsize=12)
plt.show()

Grafice Punct (Scatter Plots)

Graficele punct sunt utile pentru a vizualiza relația dintre două variabile numerice:

# Crearea datelor
np.random.seed(42)
x = np.random.randn(100)
y = x * 2 + np.random.randn(100) * 0.5

# Crearea unui grafic punct
plt.figure(figsize=(10, 6))
plt.scatter(x, y, alpha=0.7, c='green')
plt.title('Grafic punct', fontsize=14)
plt.xlabel('Variabila X', fontsize=12)
plt.ylabel('Variabila Y', fontsize=12)
plt.show()

Histogramă

Histogramele sunt utile pentru a vizualiza distribuția unei variabile numerice:

# Crearea datelor
data = np.random.normal(0, 1, 1000)

# Crearea unei histograme
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, alpha=0.7, color='purple', edgecolor='black')
plt.title('Histogramă', fontsize=14)
plt.xlabel('Valori', fontsize=12)
plt.ylabel('Frecvență', fontsize=12)
plt.show()

Grafice Avansate cu Seaborn

Seaborn este construit pe baza Matplotlib și oferă o interfață de nivel înalt pentru crearea de grafice statistice atractive. Seaborn funcționează excelent cu DataFrame-uri Pandas.

Configurare și Stil

Seaborn oferă diverse stiluri și palete de culori pentru a personaliza aspectul graficelor:

# Setarea stilului și paletei de culori
sns.set_style("whitegrid")
sns.set_palette("pastel")

# Crearea unui DataFrame pentru exemple
df = pd.DataFrame({
    'x': np.random.randn(100),
    'y': np.random.randn(100),
    'categoria': np.random.choice(['A', 'B', 'C'], 100)
})

Grafice de Distribuție

Seaborn oferă funcții puternice pentru a vizualiza distribuțiile:

# Crearea unei histograme cu estimare a densității
plt.figure(figsize=(10, 6))
sns.histplot(df['x'], kde=True, bins=30)
plt.title('Histogramă cu estimare a densității', fontsize=14)
plt.xlabel('Valori', fontsize=12)
plt.ylabel('Frecvență', fontsize=12)
plt.show()

Grafice Box

Graficele box sunt utile pentru a vizualiza distribuția datelor și a identifica valori extreme:

# Crearea unui grafic box
plt.figure(figsize=(10, 6))
sns.boxplot(x='categoria', y='x', data=df)
plt.title('Grafic Box', fontsize=14)
plt.xlabel('Categorie', fontsize=12)
plt.ylabel('Valori', fontsize=12)
plt.show()

Grafice Violin

Graficele violin combină aspectele graficelor box cu histogramele de densitate:

# Crearea unui grafic violin
plt.figure(figsize=(10, 6))
sns.violinplot(x='categoria', y='x', data=df)
plt.title('Grafic Violin', fontsize=14)
plt.xlabel('Categorie', fontsize=12)
plt.ylabel('Valori', fontsize=12)
plt.show()

Grafice de Corelație (Heatmap)

Graficele heatmap sunt utile pentru a vizualiza matrice de corelație sau alte date tabulare:

# Crearea unei matrice de corelație
corr_matrix = df.corr()

# Crearea unui heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Matrice de Corelație', fontsize=14)
plt.show()

Personalizarea Graficelor

Atât Matplotlib, cât și Seaborn permit o personalizare extinsă a graficelor pentru a le face mai informative și mai atractive.

Personalizarea cu Matplotlib

# Crearea unui grafic personalizat
plt.figure(figsize=(12, 8))

# Grafic linie cu personalizare avansată
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, 'b-', linewidth=2, label='sin(x)')
plt.plot(x, y2, 'r--', linewidth=2, label='cos(x)')

# Adăugarea titlului și etichetelor
plt.title('Funcții Trigonometrice', fontsize=16, pad=20)
plt.xlabel('Axa X', fontsize=14)
plt.ylabel('Axa Y', fontsize=14)

# Personalizarea axelor
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)

# Adăugarea legendei și grilei
plt.legend(fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)

# Adăugarea unei linii orizontale la y=0
plt.axhline(y=0, color='k', linestyle='-', alpha=0.3)

# Afișarea graficului
plt.tight_layout()
plt.show()

Personalizarea cu Seaborn

# Crearea unui grafic personalizat cu Seaborn
plt.figure(figsize=(12, 8))

# Setarea contextului pentru o vizualizare mai bună
sns.set_context("talk")

# Crearea unui grafic de tip joint plot
g = sns.jointplot(x='x', y='y', data=df, kind='scatter', height=8, space=0.2)

# Adăugarea titlului
g.fig.suptitle('Grafic Joint Personalizat', fontsize=16, y=1.02)

# Afișarea graficului
plt.show()

Vizualizarea Distribuțiilor

Vizualizarea distribuțiilor este esențială pentru a înțelege caracteristicile datelor noastre.

Histogramă și KDE

# Crearea unei histograme cu KDE
plt.figure(figsize=(12, 6))

# Generarea datelor
data = np.random.normal(0, 1, 1000)

# Crearea histogramei cu KDE
sns.histplot(data, kde=True, bins=30, color='skyblue', line_kws={'linewidth': 2})

# Adăugarea titlului și etichetelor
plt.title('Histogramă cu Estimare a Densității (KDE)', fontsize=14)
plt.xlabel('Valori', fontsize=12)
plt.ylabel('Frecvență', fontsize=12)

# Afișarea graficului
plt.show()

Grafice de Distribuție Empirică (ECDF)

# Crearea unui grafic ECDF
plt.figure(figsize=(12, 6))

# Generarea datelor
data = np.random.normal(0, 1, 1000)

# Crearea graficului ECDF
sns.ecdfplot(data, color='green')

# Adăugarea titlului și etichetelor
plt.title('Funcția de Distribuție Empirică (ECDF)', fontsize=14)
plt.xlabel('Valori', fontsize=12)
plt.ylabel('Probabilitate Cumulativă', fontsize=12)

# Afișarea graficului
plt.show()

Grafice Q-Q

Graficele Q-Q (Quantile-Quantile) sunt utile pentru a compara distribuția datelor cu o distribuție teoretică:

# Crearea unui grafic Q-Q
from scipy import stats

# Generarea datelor
data = np.random.normal(0, 1, 1000)

# Crearea graficului Q-Q
plt.figure(figsize=(10, 6))
stats.probplot(data, plot=plt)
plt.title('Grafic Q-Q', fontsize=14)
plt.xlabel('Cuantile Teoretice', fontsize=12)
plt.ylabel('Cuantile Eșantion', fontsize=12)
plt.grid(True, alpha=0.3)
plt.show()

Vizualizarea Relațiilor între Variabile

Pentru a înțelege relațiile dintre variabile, putem folosi diverse tipuri de grafice.

Grafice Punct (Scatter Plots)

# Crearea unui grafic punct cu Seaborn
plt.figure(figsize=(12, 8))

# Generarea datelor
np.random.seed(42)
x = np.random.randn(100)
y = x * 2 + np.random.randn(100) * 0.5
categoria = np.random.choice(['A', 'B', 'C'], 100)

# Crearea unui DataFrame
df_scatter = pd.DataFrame({'x': x, 'y': y, 'categoria': categoria})

# Crearea graficului punct
sns.scatterplot(x='x', y='y', hue='categoria', data=df_scatter, s=80, alpha=0.8)

# Adăugarea titlului și etichetelor
plt.title('Grafic Punct cu Categorii', fontsize=14)
plt.xlabel('Variabila X', fontsize=12)
plt.ylabel('Variabila Y', fontsize=12)

# Afișarea graficului
plt.show()

Grafice de Regresie

# Crearea unui grafic de regresie
plt.figure(figsize=(12, 8))

# Crearea graficului de regresie
sns.regplot(x='x', y='y', data=df_scatter, scatter_kws={'alpha':0.6}, line_kws={'color':'red'})

# Adăugarea titlului și etichetelor
plt.title('Grafic de Regresie', fontsize=14)
plt.xlabel('Variabila X', fontsize=12)
plt.ylabel('Variabila Y', fontsize=12)

# Afișarea graficului
plt.show()

Grafice de Tip Pair Plot

Graficele pair plot sunt utile pentru a vizualiza relațiile dintre perechi de variabile:

# Crearea unui DataFrame cu mai multe variabile
df_pair = pd.DataFrame({
    'var1': np.random.normal(0, 1, 100),
    'var2': np.random.normal(2, 1.5, 100),
    'var3': np.random.normal(-1, 0.5, 100),
    'categoria': np.random.choice(['A', 'B'], 100)
})

# Crearea unui pair plot
sns.pairplot(df_pair, hue='categoria', height=2.5)
plt.suptitle('Pair Plot', fontsize=16, y=1.02)
plt.show()

Vizualizarea Datelor Categorice

Pentru a vizualiza datele categorice, putem folosi diverse tipuri de grafice.

Grafice Bară (Bar Plots)

# Crearea unui grafic bară cu Seaborn
plt.figure(figsize=(12, 6))

# Generarea datelor
categorii = ['A', 'B', 'C', 'D', 'E']
valori = [25, 40, 30, 55, 20]

# Crearea unui DataFrame
df_bar = pd.DataFrame({'Categorie': categorii, 'Valoare': valori})

# Crearea graficului bară
sns.barplot(x='Categorie', y='Valoare', data=df_bar, palette='viridis')

# Adăugarea titlului și etichetelor
plt.title('Grafic Bară', fontsize=14)
plt.xlabel('Categorie', fontsize=12)
plt.ylabel('Valoare', fontsize=12)

# Afișarea graficului
plt.show()

Grafice de Tip Count Plot

# Crearea unui grafic count plot
plt.figure(figsize=(12, 6))

# Generarea datelor
data_count = np.random.choice(['A', 'B', 'C', 'D'], 200)

# Crearea unui DataFrame
df_count = pd.DataFrame({'Categorie': data_count})

# Crearea graficului count plot
sns.countplot(x='Categorie', data=df_count, palette='pastel')

# Adăugarea titlului și etichetelor
plt.title('Grafic Count Plot', fontsize=14)
plt.xlabel('Categorie', fontsize=12)
plt.ylabel('Număr', fontsize=12)

# Afișarea graficului
plt.show()

Grafice de Tip Swarm Plot

# Crearea unui grafic swarm plot
plt.figure(figsize=(12, 6))

# Generarea datelor
np.random.seed(42)
df_swarm = pd.DataFrame({
    'Categorie': np.random.choice(['A', 'B', 'C'], 100),
    'Valoare': np.random.randn(100)
})

# Crearea graficului swarm plot
sns.swarmplot(x='Categorie', y='Valoare', data=df_swarm, palette='Set2')

# Adăugarea titlului și etichetelor
plt.title('Grafic Swarm Plot', fontsize=14)
plt.xlabel('Categorie', fontsize=12)
plt.ylabel('Valoare', fontsize=12)

# Afișarea graficului
plt.show()

Vizualizarea Datelor Temporale

Pentru datele temporale, putem folosi grafice specializate pentru a vizualiza tendințele în timp.

Grafice Linii pentru Serii de Timp

# Crearea unui grafic linie pentru date temporale
plt.figure(figsize=(14, 8))

# Generarea datelor
date_range = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
values = np.cumsum(np.random.randn(len(date_range)) * 0.5 + 10)

# Crearea unui DataFrame
df_time = pd.DataFrame({'Data': date_range, 'Valoare': values})

# Crearea graficului linie
sns.lineplot(x='Data', y='Valoare', data=df_time, linewidth=2)

# Formatarea axei x
plt.xticks(rotation=45)

# Adăugarea titlului și etichetelor
plt.title('Grafic Linie pentru Date Temporale', fontsize=14)
plt.xlabel('Data', fontsize=12)
plt.ylabel('Valoare', fontsize=12)

# Afișarea graficului
plt.tight_layout()
plt.show()

Grafice de Tip Seasonal Plot

# Crearea unui grafic seasonal plot
plt.figure(figsize=(14, 8))

# Generarea datelor
date_range = pd.date_range(start='2020-01-01', end='2023-12-31', freq='M')
values = np.sin(np.arange(len(date_range)) * 0.5) * 10 + np.random.randn(len(date_range)) * 2 + 20

# Crearea unui DataFrame
df_seasonal = pd.DataFrame({'Data': date_range, 'Valoare': values})
df_seasonal['An'] = df_seasonal['Data'].dt.year
df_seasonal['Luna'] = df_seasonal['Data'].dt.month

# Crearea graficului seasonal plot
sns.lineplot(x='Luna', y='Valoare', hue='An', data=df_seasonal, palette='viridis', linewidth=2.5)

# Adăugarea titlului și etichetelor
plt.title('Grafic Seasonal Plot', fontsize=14)
plt.xlabel('Luna', fontsize=12)
plt.ylabel('Valoare', fontsize=12)

# Afișarea graficului
plt.legend(title='An')
plt.tight_layout()
plt.show()

Concluzii

Vizualizarea datelor este o componentă esențială a analizei datelor, permițându-ne să descoperim modele, tendințe și relații care ar putea rămâne ascunse în datele brute. Matplotlib și Seaborn oferă un set puternic de instrumente pentru a crea vizualizări informative și atractive.

În acest articol, am explorat diverse tipuri de grafice, de la cele de bază, cum ar fi graficele linie și bară, la cele mai avansate, cum ar fi graficele violin și pair plot. Am discutat, de asemenea, despre personalizarea graficelor și despre vizualizarea distribuțiilor, relațiilor dintre variabile, datelor categorice și temporale.

Pentru a deveni proficient în vizualizarea datelor, este important să exersați cu diferite seturi de date și să experimentați cu diverse tipuri de grafice. Pe măsură ce vă familiarizați cu aceste instrumente, veți putea crea vizualizări mai complexe și mai informative, care vă vor ajuta să comunicați mai eficient rezultatele analizei dumneavoastră.