Pertemuan 4 : Data Visualization (seaborn)

Data visualization in python using seaborn
Published

April 30, 2024

Kembali ke EDA

Seaborn

Seaborn adalah library visualisasi data yang dibangun di atas matplotlib, dan menggunakan struktur data yang ada pada library pandas. Seaborn banyak digunakan karena penggunaannya yang cukup simple dibandingkan dengan matplotlib.pyplot dengan hasil visualisasi yang lebih beragam.

baca dokumentasi seaborn di sini : Seaborn


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

#load dataset yang disediakan oleh modul atau library seaborn
iris = sns.load_dataset('iris')
iris
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
... ... ... ... ... ...
145 6.7 3.0 5.2 2.3 virginica
146 6.3 2.5 5.0 1.9 virginica
147 6.5 3.0 5.2 2.0 virginica
148 6.2 3.4 5.4 2.3 virginica
149 5.9 3.0 5.1 1.8 virginica

150 rows × 5 columns

Berikut salah satu contoh visualisasi dari data iris yang dihasilkan oleh seaborn.


Inputs

Seaborn memiliki 3 cara untuk menginput data sebagai parameter (sumbu y dan/atau sumbu x) dari fungsi-fungsi visualisasinya.

  1. List/Series/Array
  2. Pandas Dataframe dan kolom
  3. Langsung masuk ke dataframenya untuk diolah

List/Series/Array

#Mengambil isinya saja dari kolom sepal length dan sepal width
length = iris['sepal_length'].values
width = iris['sepal_width'].values
print(length, width)
[5.1 4.9 4.7 4.6 5.  5.4 4.6 5.  4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.  5.  5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.
 5.5 4.9 4.4 5.1 5.  4.5 4.4 5.  5.1 4.8 5.1 4.6 5.3 5.  7.  6.4 6.9 5.5
 6.5 5.7 6.3 4.9 6.6 5.2 5.  5.9 6.  6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
 6.3 6.1 6.4 6.6 6.8 6.7 6.  5.7 5.5 5.5 5.8 6.  5.4 6.  6.7 6.3 5.6 5.5
 5.5 6.1 5.8 5.  5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.  6.9 5.6 7.7 6.3 6.7 7.2
 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.  6.9 6.7 6.9 5.8 6.8
 6.7 6.7 6.3 6.5 6.2 5.9] [3.5 3.  3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.  3.  4.  4.4 3.9 3.5
 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.  3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2
 3.5 3.6 3.  3.4 3.5 2.3 3.2 3.5 3.8 3.  3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3
 2.8 2.8 3.3 2.4 2.9 2.7 2.  3.  2.2 2.9 2.9 3.1 3.  2.7 2.2 2.5 3.2 2.8
 2.5 2.8 2.9 3.  2.8 3.  2.9 2.6 2.4 2.4 2.7 2.7 3.  3.4 3.1 2.3 3.  2.5
 2.6 3.  2.6 2.3 2.7 3.  2.9 2.9 2.5 2.8 3.3 2.7 3.  2.9 3.  3.  2.5 2.9
 2.5 3.6 3.2 2.7 3.  2.5 2.8 3.2 3.  3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2
 2.8 3.  2.8 3.  2.8 3.8 2.8 2.8 2.6 3.  3.4 3.1 3.  3.1 3.1 3.1 2.7 3.2
 3.3 3.  2.5 3.  3.4 3. ]
sns.scatterplot(x=length, y=width)

plt.show()

Dataframe dan kolomnya

sns.scatterplot(x=iris['sepal_length'], y=iris['sepal_width'])

plt.show()

atau

sns.scatterplot(x='sepal_length', y='sepal_width', data=iris)

plt.show()

Olah dataframe

sns.boxplot(data=iris)

plt.show()

Plots

Seaborn memiliki banyak sekali jenis plot dengan fungsi yang berbeda-beda. 5 diantaranya yang akan dibahas pada pertemuan ini :

  1. Distribution Plot
  2. Count Plot
  3. Heatmap
  4. Scatter Plot
  5. Box Plot

untuk plot lainnya, silakan telusuri dokumentasi seaborn berikut :

Seaborn Plots

Distribution Plot

sns.displot(iris['petal_length'])

plt.show()

iris['petal_length'].skew()
-0.27488417975101276
sns.displot(iris['sepal_width'])

plt.show()

iris['sepal_width'].skew()
0.31896566471359966
sns.histplot(iris['sepal_length'])

plt.show()

sns.histplot(iris['sepal_width'])

plt.show()

# Histogram kumulatif dari sepal width
sns.histplot(iris['sepal_width'], cumulative=True)

plt.show()

Count Plot

#tips dari seaborn
tips=sns.load_dataset('tips')
tips
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
... ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2

244 rows × 7 columns


# Histogram kumulatif dari sepal width
sns.countplot(x='day', data=tips)

plt.show()

# Histogram kumulatif dari sepal width
sns.countplot(x=tips['day'])

plt.show()

# Histogram kumulatif dari sepal width
sns.countplot(x='sex', data=tips, palette='Accent', hue='sex')

plt.show()

# Histogram kumulatif dari sepal width
sns.countplot(x='day', data=tips, palette='Blues', hue='sex')

plt.show()

# Histogram kumulatif dari sepal width
sns.countplot(x='sex', data=tips, palette='Blues', hue='day')

plt.show()

#Jika ingin mengammbar dalam sumbu vertikal ya y=
sns.countplot(y='day', data=tips, palette='Blues', hue='sex')

plt.show()

sns.countplot(x='sex', data=tips, hue='smoker')

plt.show()

sns.countplot(x='smoker', data=tips, hue='sex')

plt.show()

Heatmap

iris.drop('species', axis=1, inplace=True)
iris
sepal_length sepal_width petal_length petal_width
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
... ... ... ... ...
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8

150 rows × 4 columns


korelasi_iris = iris.corr()
korelasi_iris
sepal_length sepal_width petal_length petal_width
sepal_length 1.000000 -0.117570 0.871754 0.817941
sepal_width -0.117570 1.000000 -0.428440 -0.366126
petal_length 0.871754 -0.428440 1.000000 0.962865
petal_width 0.817941 -0.366126 0.962865 1.000000
sns.heatmap(iris.corr())

plt.show()

sns.heatmap(iris.corr(), cmap='YlGnBu')

plt.show()

sns.heatmap(iris.corr(), cmap='YlGnBu')

plt.xticks(rotation=45)

plt.show()

sns.heatmap(iris.corr(), cmap='YlGnBu')

plt.yticks(rotation=45)

plt.show()

sns.heatmap(iris.corr(), cmap='YlGnBu')

plt.xticks(rotation=45)

plt.yticks(rotation=45)

plt.show()

sns.heatmap(korelasi_iris[(korelasi_iris >= 0.5)])

plt.show()

sns.heatmap(korelasi_iris[(korelasi_iris >= 0.5) | (korelasi_iris <= -0.2)])

plt.show()

sns.heatmap(korelasi_iris[(korelasi_iris >= 0.5) | (korelasi_iris <= -0.2)], annot = True)

plt.show()

sns.heatmap(korelasi_iris[(korelasi_iris >= 0.5) | (korelasi_iris <= -0.2)], annot = True, cmap='Blues')

plt.show()

sns.heatmap(korelasi_iris[(korelasi_iris >= 0.5) | (korelasi_iris <= -0.2) ], annot = True, cmap = 'Blues', linewidth = 1, linecolor = 'black')

plt.show()

Scatter Plot

iris = sns.load_dataset('iris')
iris
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
... ... ... ... ... ...
145 6.7 3.0 5.2 2.3 virginica
146 6.3 2.5 5.0 1.9 virginica
147 6.5 3.0 5.2 2.0 virginica
148 6.2 3.4 5.4 2.3 virginica
149 5.9 3.0 5.1 1.8 virginica

150 rows × 5 columns


sns.scatterplot(x='sepal_length', y='sepal_width', data=iris, palette='Accent_r', hue='species')

plt.show()

sns.regplot(x='sepal_length', y='sepal_width', data=iris)

plt.show()

sns.regplot(x='petal_length', y='petal_width', data=iris)

plt.show()

iris['petal_length'].corr(iris['petal_width'])
0.9628654314027963

Box Plot

sns.boxplot(x='petal_length', data=iris)

plt.show()

sns.boxplot(x='sepal_width', data=iris)

plt.show()

?sns.countplot