Algoritma & Struktur Data

Visualisasi Data menggunakan Python


Kontak : \(\downarrow\)
Email
Instagram https://www.instagram.com/arifin.alicia/
RPubs https://rpubs.com/aliciaarifin/

Biodata

Nama : Alicia Arifin

Prodi : Statistika Bisnis

NIM : 20214920001

Visualisasi Data

Visualisasi data adalah teknik mengambil informasi dari data ke dalam bentuk visual yang bisa dilihat oleh mata, seperti bagan, grafik, dan peta. Visualisasi data dibuat untuk memahami data yang besar atau kecil dengan mudah.

R dan Python merupakan platform yang hampir bisa menganalisis semua jenis grafik.

Univariat (satu variabel)

biasanya digunakan untuk melakukan distribusi data dari suatu variabel.

variabel tersebut dibagi menjadi 2= * Kategoris = tidak bisa dihitung * Numerik = bisa dihitung

Variabel Kategori

Variabel kategori biasanya divisualisasikan dalam bentuk diagram batang, lingkaran, atau pohon.

Diagram Batang (Bar Plot)

Berikut ini deperlihatkan cara membuat barplot dengan Python, menggunakan Matplotlib dan Seaborn.

import numpy as np
import matplotlib.pyplot as plt

Usia = [3,12,5,18,45]                 # numerik
Nama = ('A', 'B','C','D','E')         # kategori
pos_y= np.arange(len(Usia))           # reposisi data usia ke array

plt.figure(figsize=(8,6))             # atur ukuran gambar

plt.bar(pos_y, Usia)   # data numerik
## <BarContainer object of 5 artists>
plt.xticks(pos_y,Nama) # data kategori
## ([<matplotlib.axis.XTick object at 0x0000000061041670>, <matplotlib.axis.XTick object at 0x0000000061041640>, <matplotlib.axis.XTick object at 0x000000006101C280>, <matplotlib.axis.XTick object at 0x000000006108DA60>, <matplotlib.axis.XTick object at 0x00000000610A11C0>], [Text(0, 0, 'A'), Text(1, 0, 'B'), Text(2, 0, 'C'), Text(3, 0, 'D'), Text(4, 0, 'E')])
plt.xlabel('Nama') # label sumbu x
plt.ylabel('usia') # label sumbu y

plt.show()

Note : warna akan acak setiap kali menjalankan coding.

Diatas merupakan array, contoh di bawah ini merupakan datanya dataframe.

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

Nama = ['A','B','C','D','E']
Usia = [39,63,45,24,13]
df = pd.DataFrame({"Nama" : Nama,
                   "Usia" : Usia})
                   
# atur tema plot dan latar belakang
sns.set(style="darkgrid")

#atur ukuran gambar
plt.figure(figsize=(8,6))

#buat diagram batang

sns.barplot(
        x = "Nama", 
        y = "Usia", 
     data = df, 
estimator = sum, 
       ci = None)
    
# menampilkan grafiknya 
plt.show() 
                   

Keterangan: * x : nama kolom data frame yang digunakan untuk sumbu x.

  • data : data frame yang akan digunakan

  • estimator: perhitungan berdasarkan kategori

  • ci : ukuran interval kepercayaan (confidence interval)

  • color : warna yang digunakan pada diagram batang

Jika ingin visualisasikan barplot vertikal alih-alih versi horizontal, anda hanya perlu menukar posisi parameter x=“day” dan y=“total_bill”.

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

Nama = ["A", "B", "C","D", "E"]
Usia = [39, 63, 45, 24, 13]
df = pd.DataFrame({"Nama": Nama,
                   "Usia": Usia})

# atur tema plot dan latar belakang
sns.set(style="darkgrid")                    

# atur ukuran gambar
plt.figure(figsize=(8, 6)) 

# buat diagram batang 
sns.barplot(
        x = "Usia", 
        y = "Nama", 
     data = df, 
estimator = sum, 
       ci = None)
    
# menampilkan grafiknya 
plt.show()     

Jika anda ingin mengurutkan barplot berdasarkan peringkat grup. Misalnya, Anda ingin memiliki grup dengan nilai tertinggi di atas, dan grup dengan nilai terendah di bawah. Anda harus menyusun ulang data frame menggunakan fungsi sort_values() sebagai berikut:

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

# membentuk data frame
Nama = ["A", "B", "C","D", "E"]
Usia = [39, 63, 45, 24, 13]
df = pd.DataFrame({"Nama": Nama,
                   "Usia": Usia})

# Susun ulang data frame  
df = df.sort_values(["Usia"], ascending=False).reset_index(drop=True)

# atur tema plot dan latar belakang
sns.set(style="darkgrid")                    

# atur ukuran gambar
plt.figure(figsize=(8, 6)) 

# buat diagram batang 

sns.barplot(
        x = "Usia", 
        y = "Nama", 
     data = df, 
estimator = sum, 
       ci = None)
       
# menampilkan grafiknya 
plt.show() 

Grafik Lingkaran (Piechart)

Pie chart merupakan diagram yang berbentuk lingkaran yang dibagi menjadi beberapa sektor.

Pada python, sebagian besar dilakukan dengan fungsi pie() dari perpustakaan Matplotlib.

import numpy as np                        
import matplotlib.pyplot as plt          

Usia = [3, 12, 5, 18, 45]                    # data numerik
Nama = ('A', 'B', 'C', 'D', 'E')             # data kategori
warna = sns.color_palette('pastel')[0:4]     # warna Seaborn yang akan digunakan 

# atur ukuran gambar
plt.figure(figsize=(8, 6)) 

# membuat diagram lingkaran
plt.pie(Usia, 
        labels = Nama, 
        colors = warna, 
        autopct='%.0f%%');
        
# menampilkan grafiknya 
## ([<matplotlib.patches.Wedge object at 0x00000000667B3A60>, <matplotlib.patches.Wedge object at 0x0000000066784190>, <matplotlib.patches.Wedge object at 0x0000000066784970>, <matplotlib.patches.Wedge object at 0x000000006678B0D0>, <matplotlib.patches.Wedge object at 0x00000000667B34C0>], [Text(1.0929159432867397, 0.12463844073822626, 'A'), Text(0.8544237032772618, 0.6927915525451864, 'B'), Text(0.2679092506479593, 1.066876109685304, 'C'), Text(-0.6431907557286864, 0.8923595977772422, 'D'), Text(-0.14529858766390263, -1.0903615549086805, 'E')], [Text(0.5961359690654943, 0.0679846040390325, '4%'), Text(0.4660492926966882, 0.37788630138828344, '14%'), Text(0.1461323185352505, 0.5819324234647113, '6%'), Text(-0.3508313213065562, 0.4867415987875866, '22%'), Text(-0.07925377508940143, -0.5947426663138257, '54%')])
plt.show()

Grafik Peta (Treemap)

Treemap menampilkan data membagi bagian dengan persegi/persegi panjang. Dibagi sesuai luas.

Pada python kita bisa menggunakan library squarify untuk menghitung posisi persegi panjang dan memplotnya.

import pandas as pd
import matplotlib.pyplot as plt
import squarify    

# buat data dengan data acak/
df = pd.DataFrame({'nb_people':[8,3,4,2],
                   'group':["A", "B", "C", "D"] })

# atur ukuran gambar
plt.figure(figsize=(8, 6)) 

# membuat diagram
squarify.plot(sizes = df['nb_people'], 
              label = df['group'],
              #color = ["red","green","blue", "grey"],
              alpha=.8 )
              
plt.axis('off')

# menampilkan grafiknya 
## (0.0, 100.0, 0.0, 100.0)
plt.show()

Data Numerik

Data numerik bisa divisualisasikan dengan histogram, kepadatan kernel, atau diagram titik.

Grafik Histogram

Histogram bisa dibuat dengan python menggunakan library seaborn dan matplotlib

Menggambar histogram sederhana dengan parameter default

import seaborn as sns
import matplotlib.pyplot as plt

# ukuran gambar
plt.figure(figsize=(8, 6))  

# latar belakang abu-abu 
sns.set_theme(style="darkgrid")
df = sns.load_dataset("iris")

sns.histplot(data=df, x="sepal_length", bins=20, kde=True)

plt.show()

JIka ingin menampilkan dua variabel dalam satu grafik yang sama

import seaborn as sns
import matplotlib.pyplot as plt

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur latar belakang abu-abu 
sns.set_theme(style="darkgrid")
df = sns.load_dataset("iris")

sns.histplot(data=df, x="sepal_length", color="skyblue", label="Sepal Length", kde=True)


sns.histplot(data=df, x="sepal_width", color="red", label="Sepal Width", kde=True)

# menampilkan grafiknya 
plt.legend() 

plt.show()

Jika ingin membagi histogram menjadi beberapa bagian, kita bisa menggunakan cara barikut.

import seaborn as sns
import matplotlib.pyplot as plt

# atur latar belakang abu-abu 
sns.set_theme(style="darkgrid")
df = sns.load_dataset("iris")

#membagi grafik 2 kali 2
fig,axs = plt.subplots(2,2, figsize=(7,7))

sns.histplot(data=df, x="sepal_length", color="skyblue", kde=True, ax= axs[0,0])

sns.histplot(data=df, x="sepal_length", color="olive", kde=True, ax= axs[0,1])

sns.histplot(data=df, x="petal_length", color="gold", kde=True, ax= axs[1,0])

sns.histplot(data=df, x="petal_length", color="teal", kde=True, ax= axs[1,1])


plt.show()

Grafik Kepadatan Kernel

alternatif histogram -> grafik kepadatan kernel. Grafik kepadatan kernel mencoba menggambar histogram yang dihaluskan, area di bawah kurva =1

import seaborn as sns
import matplotlib.pyplot as plt

# atur latar belakang abu-abu 
sns.set_theme(style="darkgrid")
df = sns.load_dataset("iris")

# membagi grafik 2 kali 2
fig, axs = plt.subplots(2, 2, figsize=(7, 7))

sns.kdeplot(data=df, x="sepal_length", color="skyblue", shade=True, ax=axs[0, 0])

sns.kdeplot(data=df, x="sepal_width", color="olive", shade=True, ax=axs[0, 1])

sns.kdeplot(data=df, x="petal_length",color="gold", shade=True, ax=axs[1, 0])

sns.kdeplot(data=df, x="petal_width", color="teal", shade=True, ax=axs[1, 1])


plt.show()

opsi lain yg bisa digunakan adalah dengan menggabungkan semua plot tersebut. Sebenernya bisa, tetapi berantakan (tumpang tindih). Solusi yang lebih mudah menggunakan transparansi.

import seaborn as sns
import matplotlib.pyplot as plt
from plotnine.data import diamonds 

# Tetapkan ukuran gambar untuk notebook
plt.rcParams["figure.figsize"]=8,6

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")

# Tanpa transparansi 
sns.kdeplot(data = diamonds, 
               x = "price", 
             hue = "cut", 
             cut = 0, 
            fill = True, 
     common_norm = False, 
           alpha = 0.4)      # penyesuaian transparansi dengan nilai alpha

plt.show()

Solusi lain yang dapat dilakukan adalah menumpuk grup dengan melewati “isi” ke beberapa argumen fungsi. Hal ini memungkinkan untuk melihat grup mana yang paling sering untuk nilai tertentu, tetapi sulit untuk memahami distribusi grup yang tidak berada di bagian bawah bagan.

import seaborn as sns
import matplotlib.pyplot as plt
from plotnine.data import diamonds 

# atur ukuran gambar
plt.figure(figsize=(8, 6)) 

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")

# plot kepadatan bertumpuk
sns.kdeplot(data = diamonds, 
               x = "price", 
             hue = "cut", 
     common_norm = False, 
        multiple = "fill", 
           alpha = 0.7)
           

plt.show()

contoh di bawah ini merupakan penggunaan grafik kepadatan kernel yang sesuai dengan menggunakan contoh dataset ini.

karena grafik yang akan dibuat dari coding di bawah ini ditumpuk, maka akan lebih mudah untuk menambahkan nama/ keterangan di sebelah grafik.

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

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")

# memuat dataset dari GitHub dan mengubah formatnya
data = pd.read_csv("https://raw.githubusercontent.com/dsciencelabs/dataset/master/probly.csv")
data = pd.melt(data, var_name='text', value_name='value')

# memuat beberapa variabel dari dataset
data = data.loc[data.text.isin(["Almost No Chance",
                                "About Even",
                                "Probable",
                                "Almost Certainly"])]

# plot kepadatan kernel
p = sns.kdeplot(data = data, 
                   x = "value", 
                 hue = "text", 
                fill = True, 
         common_norm = False, 
               alpha = 0.6, 
             palette = "viridis", 
              legend = False)
              
# kontrol batas sumbu x
plt.xlim(0, 100)


# Anotasi data frame
## (0.0, 100.0)
annot = pd.DataFrame({
'x': [5, 53, 65, 79],
'y': [0.15, 0.4, 0.06, 0.1],
'text': ["Hampir Tidak Mungkin",
         "Memungkinkan", 
         "Sangat Mungkin", 
         "Hampir pasti"]
})

# tambahkan anotasi satu per satu dengan loop 
for point in range(0,len(annot)):
     p.text(annot.x[point], 
            annot.y[point], 
            annot.text[point], 
            horizontalalignment='left', 
            size='large')

# tambahkan nama sumbu
plt.xlabel("Probabilitas dalam (%)")

plt.ylabel("Densitas Kernel")
        
        
plt.show()

Grafik Lolipop

grafik lolipop seperti grafik titik yang diberi tangkai di bawahnya. grafik lolipop bisa menjadi alternatif dari barplot.

Kita bisa membuat lollipop menggunakan library matplotlib.

Contohnya coding di bawah ini, Strategi di sini adalah menggunakan fungsi stem() atau meretas fungsi vline() tergantung pada format input.

# memuat dataframe
import pandas as pd
df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 
                   'values':np.random.uniform(size=20) })

# mengurutkan berdasarkan nilai 
ordered_df = df.sort_values(by='values')
my_range=range(1,len(df.index)+1)

# ukuran gambar
plt.figure(figsize=(8, 6))  

# tema whitegrid seaborn 
sns.set(style="whitegrid")

# buat plotnya
plt.stem(ordered_df['values'])
## <StemContainer object of 3 artists>
plt.xticks(my_range, ordered_df['group'])
## ([<matplotlib.axis.XTick object at 0x0000000064C0EDF0>, <matplotlib.axis.XTick object at 0x0000000064C0ED60>, <matplotlib.axis.XTick object at 0x0000000064C28820>, <matplotlib.axis.XTick object at 0x0000000064BD1F40>, <matplotlib.axis.XTick object at 0x00000000A74A5DC0>, <matplotlib.axis.XTick object at 0x00000000A74BA550>, <matplotlib.axis.XTick object at 0x00000000A74BACA0>, <matplotlib.axis.XTick object at 0x00000000A74BAD90>, <matplotlib.axis.XTick object at 0x0000000064BD1820>, <matplotlib.axis.XTick object at 0x00000000A74BD670>, <matplotlib.axis.XTick object at 0x00000000A74BDDC0>, <matplotlib.axis.XTick object at 0x00000000587C3550>, <matplotlib.axis.XTick object at 0x00000000587C3CA0>, <matplotlib.axis.XTick object at 0x00000000587C9430>, <matplotlib.axis.XTick object at 0x00000000587C3D90>, <matplotlib.axis.XTick object at 0x00000000A74BDDF0>, <matplotlib.axis.XTick object at 0x00000000587C9A60>, <matplotlib.axis.XTick object at 0x00000000587C7040>, <matplotlib.axis.XTick object at 0x00000000587C7700>, <matplotlib.axis.XTick object at 0x00000000587C7E50>], [Text(1, 0, 'K'), Text(2, 0, 'P'), Text(3, 0, 'M'), Text(4, 0, 'B'), Text(5, 0, 'N'), Text(6, 0, 'S'), Text(7, 0, 'L'), Text(8, 0, 'Q'), Text(9, 0, 'D'), Text(10, 0, 'H'), Text(11, 0, 'F'), Text(12, 0, 'A'), Text(13, 0, 'J'), Text(14, 0, 'I'), Text(15, 0, 'C'), Text(16, 0, 'G'), Text(17, 0, 'O'), Text(18, 0, 'R'), Text(19, 0, 'E'), Text(20, 0, 'T')])
plt.show()

Grafik diatas menjelaskan cara membuat plot lollipop vertikal. Pada contoh di bawah adalah grafik horizontal menggunakan fungsi hlines() dari matplotlib, “grup B” ditampilkan dengan warna dan ukuran penanda yang berbeda. Untuk melakukannya, variabel my_color didefinisikan; ‘oranye’ untuk grup B dan ‘biru langit’ untuk grup yang tersisa. Variabel warna ini diteruskan ke fungsi hlines() sebagai argumen. Untuk mengubah ukuran marker, fungsi scatter() dari matplotlib digunakan.

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

df = pd.DataFrame({'group':list(map(chr, range(65, 85))), 
                   'values':np.random.uniform(size=20) })
 
# mengurutkan berdasarkan nilai 
ordered_df = df.sort_values(by='values')
my_range=range(1,len(df.index)+1)
 
# Buat warna jika grupnya adalah "B" 
my_color=np.where(ordered_df ['group']=='B', 'orange', 'skyblue')
my_size=np.where(ordered_df ['group']=='B', 70, 30)

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")
 
# Plot horizontal dibuat menggunakan fungsi hline() 
plt.hlines(y = my_range,
        xmin = 0, 
        xmax = ordered_df['values'], 
       color = my_color, 
       alpha = 0.48)
       
plt.scatter(ordered_df['values'],
            my_range, 
            color=my_color, 
            s=my_size, 
            alpha=1)
 
# Tambahkan judul dan nama sumbu 
plt.yticks(my_range, ordered_df['group'])
## ([<matplotlib.axis.YTick object at 0x00000000587D8220>, <matplotlib.axis.YTick object at 0x00000000587C7D00>, <matplotlib.axis.YTick object at 0x00000000A74A5FA0>, <matplotlib.axis.YTick object at 0x0000000058A5C7C0>, <matplotlib.axis.YTick object at 0x0000000058A62040>, <matplotlib.axis.YTick object at 0x0000000058A62670>, <matplotlib.axis.YTick object at 0x0000000058A5C880>, <matplotlib.axis.YTick object at 0x0000000058A62C10>, <matplotlib.axis.YTick object at 0x0000000058A683A0>, <matplotlib.axis.YTick object at 0x0000000058A68AF0>, <matplotlib.axis.YTick object at 0x0000000058A71280>, <matplotlib.axis.YTick object at 0x0000000058A719D0>, <matplotlib.axis.YTick object at 0x0000000058A71CA0>, <matplotlib.axis.YTick object at 0x0000000058A68BB0>, <matplotlib.axis.YTick object at 0x0000000058A5C520>, <matplotlib.axis.YTick object at 0x0000000058A77670>, <matplotlib.axis.YTick object at 0x0000000058A77DC0>, <matplotlib.axis.YTick object at 0x0000000058A7F550>, <matplotlib.axis.YTick object at 0x0000000058A7FCA0>, <matplotlib.axis.YTick object at 0x0000000058A7FD90>], [Text(0, 1, 'K'), Text(0, 2, 'P'), Text(0, 3, 'B'), Text(0, 4, 'H'), Text(0, 5, 'F'), Text(0, 6, 'R'), Text(0, 7, 'S'), Text(0, 8, 'N'), Text(0, 9, 'I'), Text(0, 10, 'G'), Text(0, 11, 'L'), Text(0, 12, 'D'), Text(0, 13, 'T'), Text(0, 14, 'J'), Text(0, 15, 'Q'), Text(0, 16, 'C'), Text(0, 17, 'M'), Text(0, 18, 'A'), Text(0, 19, 'E'), Text(0, 20, 'O')])
plt.title("Fokus dengan Grup B", loc='left')

plt.xlabel('Nilai Variabel')

plt.ylabel('Grup')

plt.show()

Bivariat (Dua Variabel)

Bi artinya dua. jadi bivariat merupakan hubungan antara dua variabel.

Jenis grafik yang dipakai itu ditentukan dengan variabel kategoti atau numerik (kuantitatif)

Dua Variabel Kategori

Boxplot

import seaborn as sns                       # impor perpustakaan seaborn 
from warnings import filterwarnings         # untuk menghindari peringatan 
df = sns.load_dataset('tips')               # memuat dataset dari seaborn

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")

# membuat grafik boxplotnya
sns.boxplot(x = 'day', 
            y = 'total_bill', 
         data = df, 
          hue = 'smoker') 
          
# menampilkan grafiknya
plt.show()

dari graik boxplot di atas, bisa disimpulkan kalau pada hari kamis, rata-rata tagihan orang yang merokok lebih tinggi sedikit daripada yang tidak merokok. pada hari jumat, tagihan orang yang tidak merokok lebih besar daripada orang merokok. Sedangkan pada hari sabtu dan minggu, orang yang merokok tagihannya lebih besar daripada orang yang tidak merokok. Walaupun tagihan orang tidak merokok lebih rendah daripada org merokok pada hari sabtu, pada box plot memiliki pencilan sebanyak 4 nilai. yang berarti ada juga orang yang tagihannya lebih besar daripada orang merokok.

Dari gambar tersebut juga kita bisa melihat adanya pencilan.

Grafik Biola (Violinplot)

Seaborn secara khusus disesuaikan untuk membuatnya berkat fungsi biola().

grafik biola ini visualisisanya lebih “bagus” dari boxplot karena pada violin plot merupakan boxplot yang digabungkan dengan estimasi kepadatan kernel (histogram yang dihaluskan) untuk mendistribusikan suatu data.

import seaborn as sns                      
from warnings import filterwarnings        
import matplotlib.pyplot as plt            
df = sns.load_dataset('tips')               # memuat dataset dari seaborn

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")

# Grouped violinplot
sns.violinplot(x = "day", 
               y = "total_bill", 
             hue = "smoker", 
            data = df, 
         palette = "Pastel1")
         
plt.show()

Numerik vs Numerik

biasa ditampilkan menggunakan scatterplots dan grafik garis.

Plot Pencar (Scatterplot)

Sebuah plot pencar menampilkan hubungan antara 2 variabel numerik. Setiap titik data direpresentasikan sebagai lingkaran.

Contoh untuk memplot scatter plot adalah, coding di bawah ini untuk melihat transaksi permintaan dan penawaran suatu pruduk pada perusahaan ABC.

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

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")

df=pd.DataFrame({'x_values': range(1,101), 
                 'y_values': np.random.randn(100)*15+range(1,101) })


plt.plot('x_values',
         'y_values', 
         data = df, 
    linestyle = 'none', 
       marker = 'o')
       
# menambahkan label
plt.xlabel('Permintaan')
plt.ylabel('Penawaran')
       
plt.show()

Grafik Garis

Grafik garis menunjukkan grafik dalam bentuk garis. Grafik Garis menampilkan evolusi satu atau beberapa variabel numerik.

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

# atur ukuran gambar
plt.figure(figsize=(8, 6))  

# atur tema whitegrid seaborn 
sns.set(style="whitegrid")


df=pd.DataFrame({'x_values': range(1,101), 
                 'y_values': np.random.randn(100)*15+range(1,101) })


plt.plot('x_values',
         'y_values', 
         data = df
         )
       
# menambahkan label
plt.xlabel('Permintaan')

plt.ylabel('Penawaran')
       
plt.show()

Multivariat (Multi Variabel)

Grafik multivariat merupakan hubungan lebih dari dua bariabel. Biasnaya ada dua cara yaitu pengelompokan dan faceting.

Grafik Scatter dan Grup

Jadi kita akan menggunakan library seaborn. di library tersebut bisa memplot kemampuan untuk membedakan warna untuk subset data yang berbeda.

Dalam contoh berikut, dataset iris dari repositori seaborn digunakan. Menggunakan argumen hue, dimungkinkan untuk menentukan grup dalam data Anda dengan warna atau bentuk yang berbeda.

import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('iris')

# ukuran gambar
plt.figure(figsize=(8, 6))  

# tema
sns.set(style="whitegrid")
 
# Gunakan argumen 'hue' untuk menambahkan variabel faktor 
sns.lmplot(x = "sepal_length", 
           y = "sepal_width", 
        data = df, 
     fit_reg = False, 
         hue = 'species', 
      legend = False,
      markers=["o", "x", "1"]);
 
# Pindahkan legend ke bagian plot yang kosong 

plt.legend(loc='lower right')

plt.show()

Grafik Korelogram

Kore atau korelasi. yang berarti grafik kolegram ini berhubungan dengan hubungan setiap variabel dengan variabel numerik dari suatu matriks. Korelasi divisualisasikan sebagai scatterplot. Pada diagonal grafik ini, mewakili distribusi setiap variabel dengan histogram atau plot kepadatan.

import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('iris')

# memuat grafik korelogram
sns.pairplot(df, 
            kind = "scatter", 
             hue = "species", 
         markers = ["o", "s", "D"], 
         palette = "Set2")

plt.show()

Grafik Berlapis (Faceting)

Faceting ini digunakan untuk membandingkan banyak variabel. Faceting ini membandingkan variabel satu ke yang lainnya dengan menggunakan parameer yang sama.

Saya percaya bahwa grafik area sangat berguna ketika digunakan melalui faceting. Hal ini memungkinkan untuk dengan cepat mengetahui pola yang berbeda yang ada dalam data. Andaikan kita memiliki 2 variabel numerik (tahun dan nilai sesuatu), dan variabel kategoris (negara). Grafik area dapat diterapkan menggunakan fungsi fill_between() dari matplotlib. Sedangkan grafik berlapis dibuat menggunakan utilitas FacetGrid() yang mengagumkan dari seaborn.

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

my_count=["France","Australia","Japan","USA","Germany",
          "Congo","China","England","Spain","Greece",
          "Marocco","South Africa","Indonesia","Peru",
          "Chili","Brazil"]

df = pd.DataFrame({
                   "country":np.repeat(my_count, 10),
                   "years":list(range(2000, 2010)) * 16,
                   "value":np.random.rand(160)
})


# Inisialisasi grafik berlapis
g = sns.FacetGrid(df, col='country', hue='country', col_wrap=4)

# Tambahkan garis di atas area dengan fungsi plot 
g = g.map(plt.plot, 'years', 'value')
 
# Isi area dengan fill_between 
g = g.map(plt.fill_between, 
          'years',
          'value', 
          alpha=0.2).set_titles("{col_name} country")
 
# Pengaturan nama variabel setiap aspek 
g = g.set_titles("{col_name}")
 
# Tambahkan nama variabel untuk keseluruhan plot
plt.subplots_adjust(top=0.92)
g = g.fig.suptitle('Evolusi harga suatu produk di 16 negara ')

plt.show()