KOMPUTASI STATISTIKA

~ Visualisasi Data ~

Kontak Konsultasi & Diskusi ke : \(\downarrow\)
Email
Instagram https://www.instagram.com/dsciencelabs/
RPubs https://rpubs.com/dsciencelabs/
Github https://github.com/dsciencelabs/
Telegram @dsciencelabs

Visualisasi data adalah teknik mengambil informasi dari data ke dalam konteks visual, seperti bagan, grafik, dan peta. Visualisasi data membuat data besar dan kecil lebih mudah dipahami oleh otak manusia, dan visualisasi juga membuatnya lebih andal untuk mendeteksi pola, tren, dan outlier dalam kelompok data.

R dan Python adalah platform luar biasa untuk analisis data, yang mampu membuat hampir semua jenis grafik. Pada kesempatan ini, materi yang akan dibahas adalah ragam visualisasi yang paling populer dalam data science, dari plot paling sederhana hingga grafik siap publikasi. Secara spesifik akan fokus pada teknik visualisasi data Univariat, Bivariat, dan Multivariat.

Univariat (Satu Variabel)

Visualisasi data univariat biasanya digunakan untuk melakukan distribusi data dari satu variabel. Dalam hal ini, variabel yang dimaksud dipartisi menjadi dua bagian:

  • Kategoris, seperti; jenis kelamin, ras, negara, kota, dll.
  • Numerik, seperti; usia, berat badan, inflasi, suku bunga, dll.

Data Kategori

Distribusi pada suatu variabel kategori tunggal biasanya diplot dengan diagram batang, diagram lingkaran, atau diagram pohon (tetapi ini sangat jarang sekali).

Grafik Batang (Barplot)

Grafik batang sebenarnya menunjukkan hubungan antara variabel variabel kategori dan numerik. Dimana setiap entitas dari variabel kategori direpresentasikan sebagai sebuah bar. Frekuensi untuk setiap kategori mewakili nilai numeriknya. Berikut ini deperlihatkan cara membuat barplot dengan Python, menggunakan Matplotlib dan Seaborn.

import numpy as np                           # memuat perpustakaan numpy
import matplotlib.pyplot as plt              # memuat perpustakaan matplotlib

Usia = [3, 12, 5, 18, 45]                    # data numerik
Nama = ('A', 'B', 'C', 'D', 'E')             # data 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)                         # memuat data numerik ke grafik batang
## <BarContainer object of 5 artists>
plt.xticks(pos_y, Nama)                      # memuat data kategori pada sumbu x
## ([<matplotlib.axis.XTick object at 0x0000000038F6F8E0>, <matplotlib.axis.XTick object at 0x0000000038F6F8B0>, <matplotlib.axis.XTick object at 0x0000000038F59550>, <matplotlib.axis.XTick object at 0x0000000038FBFD30>, <matplotlib.axis.XTick object at 0x00000000396642B0>], [Text(0, 0, 'A'), Text(1, 0, 'B'), Text(2, 0, 'C'), Text(3, 0, 'D'), Text(4, 0, 'E')])
plt.xlabel('Nama')                           # label pada sumbu x
## Text(0.5, 0, 'Nama')
plt.ylabel('Usia')                           # label pada sumbu y
## Text(0, 0.5, 'Usia')
plt.show()                                   # Tampilkan grafik 

plt.savefig('img/output/bar.png')            # menyimpan ouput

Catatan: Warna pada visualisasi diatas akan ditampilkan secara acak tiap kali anda menjalankan koding tersebut.

Grafik batang diatas adalah contoh visualisasi yang paling sederhana yang dapat dilakukan pada stuktur data array. Bagaimana jika struktur datanya adalah data frame?. Perhatikan Koding berikut:

# memuat perpustakaan
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})

# 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 
## <AxesSubplot:xlabel='Nama', ylabel='Usia'>
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".

# memuat perpustakaan
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})

# 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 
## <AxesSubplot:xlabel='Usia', ylabel='Nama'>
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:

# memuat perpustakaan
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 
## <AxesSubplot:xlabel='Usia', ylabel='Nama'>
plt.show() 

Grafik Lingkaran (Piechart)

Pie Chart adalah lingkaran yang dibagi menjadi beberapa sektor yang masing-masing mewakili proporsi dari keseluruhan. Ini adalah salah satu jenis yang paling umum, tetapi juga mungkin yang paling dikritik. Dalam python, sebagian besar dilakukan dengan fungsi pie() dari perpustakaan Matplotlib.

import numpy as np                           # memuat perpustakaan numpy
import matplotlib.pyplot as plt              # memuat perpustakaan matplotlib

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 0x0000000064A0C220>, <matplotlib.patches.Wedge object at 0x0000000064A0C9A0>, <matplotlib.patches.Wedge object at 0x0000000064A1A100>, <matplotlib.patches.Wedge object at 0x0000000064A1A820>, <matplotlib.patches.Wedge object at 0x0000000064A0C160>], [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)

Diagram Peta menampilkan data hierarkis sebagai kumpulan persegi panjang bersarang. Setiap kelompok diwakili oleh persegi panjang, yang luasnya sebanding dengan nilainya. Dengan Python, kita dapat menggunakan library squarify untuk menghitung posisi persegi panjang dan memplotnya.

# memuat perpustakaan python
import pandas as pd
import matplotlib.pyplot as plt
import squarify    

# Buat bingkai data dengan data palsu 
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 )
## <AxesSubplot:>
plt.axis('off')

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

Data Numerik

Distribusi variabel kuantitatif tunggal biasanya digambarkan dengan histogram, kepadatan kernel, atau diagram titik.

Grafik Histogram

Histogram mewakili distribusi variabel numerik untuk satu atau beberapa grup. Nilai dibagi menjadi bin, masing-masing bin direpresentasikan sebagai bar. Halaman ini menampilkan banyak histogram yang dibuat dengan python, menggunakan perpustakaan seaborn dan matplotlib.

Menggambar histogram sederhana dengan parameter default

# perpustakaan & kumpulan data 
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", bins=20, kde=True)

# menampilkan grafiknya 
## <AxesSubplot:xlabel='sepal_length', ylabel='Count'>
plt.show()

Jika anda ingin memplot dua distribusi variabel numerik pada grafik yang sama

# perpustakaan & kumpulan data 
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)
## <AxesSubplot:xlabel='sepal_length', ylabel='Count'>
sns.histplot(data=df, x="sepal_width", color="red", label="Sepal Width", kde=True)

# menampilkan grafiknya 
## <AxesSubplot:xlabel='sepal_length', ylabel='Count'>
plt.legend() 
## <matplotlib.legend.Legend object at 0x0000000066DDF9D0>
plt.show()

Jika anda ingin membagi grafik menjadi beberapa sebanyak yang diperlukan, perhatikan koding berikut:

# perpustakaan & kumpulan data 
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", kde=True, color="skyblue", ax=axs[0, 0])
## <AxesSubplot:xlabel='sepal_length', ylabel='Count'>
sns.histplot(data=df, x="sepal_width", kde=True, color="olive", ax=axs[0, 1])
## <AxesSubplot:xlabel='sepal_width', ylabel='Count'>
sns.histplot(data=df, x="petal_length", kde=True, color="gold", ax=axs[1, 0])
## <AxesSubplot:xlabel='petal_length', ylabel='Count'>
sns.histplot(data=df, x="petal_width", kde=True, color="teal", ax=axs[1, 1])

# menampilkan grafiknya 
## <AxesSubplot:xlabel='petal_width', ylabel='Count'>
plt.show()

Grafik Kepadatan Kernel

Alternatif untuk histogram adalah grafik kepadatan kernel. Secara teknis, estimasi densitas kernel merupakan metode non-parametrik untuk mengestimasi fungsi densitas probabilitas dari variabel acak kontinu. Pada dasarnya, grafik kepadatan kernel mencoba menggambar histogram yang dihaluskan, di mana area di bawah kurva sama dengan satu.

# perpustakaan & kumpulan data 
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])
## <AxesSubplot:xlabel='sepal_length', ylabel='Density'>
sns.kdeplot(data=df, x="sepal_width", color="olive", shade=True, ax=axs[0, 1])
## <AxesSubplot:xlabel='sepal_width', ylabel='Density'>
sns.kdeplot(data=df, x="petal_length",color="gold", shade=True, ax=axs[1, 0])
## <AxesSubplot:xlabel='petal_length', ylabel='Density'>
sns.kdeplot(data=df, x="petal_width", color="teal", shade=True, ax=axs[1, 1])

# menampilkan grafiknya 
## <AxesSubplot:xlabel='petal_width', ylabel='Density'>
plt.show()

Opsi lain yang dapat anda gungakan adalah bagan multi-densitas yang memungkinkan untuk membandingkan distribusi beberapa kelompok. Sayangnya, jenis bagan ini cenderung berantakan: distribusi kelompok saling tumpang tindih dan gambar menjadi tidak terbaca. Solusi mudah adalah dengan menggunakan transparansi.

# perpustakaan & kumpulan data 
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

# menampilkan grafiknya 
## <AxesSubplot:xlabel='price', ylabel='Density'>
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.

# perpustakaan & kumpulan data 
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)
           
# menampilkan grafiknya          
## <AxesSubplot:xlabel='price', ylabel='Density'>
plt.show()

Berikut ini diperlihatkan salah satu penggunaan grafik kepadatan kernel yang sesuai dengan menggunakan contoh dataset ini. Dalam kumpulan data ini, memiliki kelompok distribusi yang sangat berbeda, dan mudah untuk menemukannya meskipun pada grafik yang sama. Dalam hal ini, sangat direkomendasikan untuk menambahkan nama grup di sebelah distribusi mereka daripada memiliki legenda di samping bagan.

# perpustakaan & kumpulan data 
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        
## Text(5, 0.15, 'Hampir Tidak Mungkin')
## Text(53, 0.4, 'Memungkinkan')
## Text(65, 0.06, 'Sangat Mungkin')
## Text(79, 0.1, 'Hampir pasti')
plt.xlabel("Probabilitas dalam (%)")
## Text(0.5, 0, 'Probabilitas dalam (%)')
plt.ylabel("Densitas Kernel")
        
# menampilkan grafiknya 
## Text(0, 0.5, 'Densitas Kernel')
plt.show()

Grafik Lolipop

Grafik lolipop adalah alternatif untuk barplot. Python memungkinkan untuk membuat lolipop berkat pustaka matplotlib, seperti yang ditunjukkan pada contoh di bawah ini. Strategi di sini adalah menggunakan fungsi stem() atau meretas fungsi vline() tergantung pada format input Anda.

# 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)

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

# atur 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'])

# menampilkan grafiknya 
## ([<matplotlib.axis.XTick object at 0x000000006F3BD6D0>, <matplotlib.axis.XTick object at 0x000000006F3BD6A0>, <matplotlib.axis.XTick object at 0x000000006F3B4460>, <matplotlib.axis.XTick object at 0x00000000710150D0>, <matplotlib.axis.XTick object at 0x0000000071015760>, <matplotlib.axis.XTick object at 0x0000000071015EB0>, <matplotlib.axis.XTick object at 0x000000007101C640>, <matplotlib.axis.XTick object at 0x0000000071015A30>, <matplotlib.axis.XTick object at 0x000000007101C6A0>, <matplotlib.axis.XTick object at 0x0000000071025130>, <matplotlib.axis.XTick object at 0x0000000071025880>, <matplotlib.axis.XTick object at 0x00000000710270D0>, <matplotlib.axis.XTick object at 0x0000000071027760>, <matplotlib.axis.XTick object at 0x0000000071027EB0>, <matplotlib.axis.XTick object at 0x00000000710276A0>, <matplotlib.axis.XTick object at 0x0000000071025400>, <matplotlib.axis.XTick object at 0x00000000710323A0>, <matplotlib.axis.XTick object at 0x0000000071032A30>, <matplotlib.axis.XTick object at 0x000000007103B1C0>, <matplotlib.axis.XTick object at 0x000000007103B910>], [Text(1, 0, 'B'), Text(2, 0, 'I'), Text(3, 0, 'K'), Text(4, 0, 'E'), Text(5, 0, 'T'), Text(6, 0, 'Q'), Text(7, 0, 'H'), Text(8, 0, 'C'), Text(9, 0, 'R'), Text(10, 0, 'D'), Text(11, 0, 'J'), Text(12, 0, 'A'), Text(13, 0, 'N'), Text(14, 0, 'M'), Text(15, 0, 'P'), Text(16, 0, 'L'), Text(17, 0, 'F'), Text(18, 0, 'G'), Text(19, 0, 'O'), Text(20, 0, 'S')])
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.

# Perpustakaan
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
# memuat data fram
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)
## <matplotlib.collections.LineCollection object at 0x00000000710686D0>
plt.scatter(ordered_df['values'],
            my_range, 
            color=my_color, 
            s=my_size, 
            alpha=1)
 
# Tambahkan judul dan nama sumbu 
## <matplotlib.collections.PathCollection object at 0x0000000071068E50>
plt.yticks(my_range, ordered_df['group'])
## ([<matplotlib.axis.YTick object at 0x000000007102CEB0>, <matplotlib.axis.YTick object at 0x000000007102CC70>, <matplotlib.axis.YTick object at 0x0000000071014FA0>, <matplotlib.axis.YTick object at 0x000000007107F4C0>, <matplotlib.axis.YTick object at 0x000000007107FF40>, <matplotlib.axis.YTick object at 0x000000007108A6D0>, <matplotlib.axis.YTick object at 0x000000007107F490>, <matplotlib.axis.YTick object at 0x000000007108AC70>, <matplotlib.axis.YTick object at 0x0000000071091400>, <matplotlib.axis.YTick object at 0x0000000071091B50>, <matplotlib.axis.YTick object at 0x00000000710972E0>, <matplotlib.axis.YTick object at 0x0000000071097A30>, <matplotlib.axis.YTick object at 0x0000000071097C40>, <matplotlib.axis.YTick object at 0x0000000071091970>, <matplotlib.axis.YTick object at 0x000000007107F4F0>, <matplotlib.axis.YTick object at 0x000000007109C6D0>, <matplotlib.axis.YTick object at 0x000000007109CE20>, <matplotlib.axis.YTick object at 0x00000000710A45B0>, <matplotlib.axis.YTick object at 0x00000000710A4D00>, <matplotlib.axis.YTick object at 0x00000000710A4880>], [Text(0, 1, 'C'), Text(0, 2, 'M'), Text(0, 3, 'Q'), Text(0, 4, 'S'), Text(0, 5, 'R'), Text(0, 6, 'G'), Text(0, 7, 'O'), Text(0, 8, 'J'), Text(0, 9, 'H'), Text(0, 10, 'L'), Text(0, 11, 'A'), Text(0, 12, 'T'), Text(0, 13, 'B'), Text(0, 14, 'K'), Text(0, 15, 'N'), Text(0, 16, 'I'), Text(0, 17, 'P'), Text(0, 18, 'D'), Text(0, 19, 'E'), Text(0, 20, 'F')])
plt.title("Fokus dengan Grup B", loc='left')
## Text(0.0, 1.0, 'Fokus dengan Grup B')
plt.xlabel('Nilai Variabel')
## Text(0.5, 0, 'Nilai Variabel')
plt.ylabel('Grup')

# menampilkan grafiknya 
## Text(0, 0.5, 'Grup')
plt.show()

Bivariat (Dua Variabel)

Grafik bivariat menampilkan hubungan antara dua variabel. Jenis grafik akan tergantung pada tingkat pengukuran variabel (kategoris atau kuantitatif)

Dua Variabel Kategori

Dalam hal ini, barplot mungkin bukan metode yang paling tepat untuk memvisualisasikan data Anda! Memang, semua informasi di balik setiap bilah hilang. Anda mungkin harus mencoba menggunakan Grafik boxplot atau biola.

Grafik Box (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 
## <AxesSubplot:xlabel='day', ylabel='total_bill'>
plt.show()

Dengan melihat plotnya kita dapat mengatakan bahwa orang yang tidak merokok memiliki tagihan yang lebih tinggi pada hari Jumat dibandingkan dengan orang yang merokok. (Cantatan: Silahkan berikan hasil analisa yang lain berdasarkan prespektif anda)

Grafik Biola (Violinplot)

Sebuah grafik biola memungkinkan untuk memvisualisasikan distribusi variabel numerik untuk satu atau beberapa kelompok. Seaborn secara khusus disesuaikan untuk membuatnya berkat fungsi biola(). Grafik biola layak mendapat perhatian lebih dibandingkan dengan Boxplot yang terkadang dapat menyembunyikan fitur data. Ini mirip dengan Boxplot kecuali bahwa ia memberikan visualisasi yang lebih tinggi dan lebih maju dan menggunakan estimasi kepadatan kernel untuk memberikan deskripsi distribusi data yang lebih baik.

import seaborn as sns                       # impor perpustakaan seaborn 
from warnings import filterwarnings         # untuk menghindari peringatan
import matplotlib.pyplot as plt             # impor perpustakaan matplotlib
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")
         
# menampilkan grafiknya
## <AxesSubplot:xlabel='day', ylabel='total_bill'>
plt.show()

Numerik vs Numerik

Hubungan antara dua variabel kuantitatif biasanya ditampilkan menggunakan scatterplots dan grafik garis.

Plot Pencar (Scatterplot)

Sebuah plot pencar menampilkan hubungan antara 2 variabel numerik. Setiap titik data direpresentasikan sebagai lingkaran. Silahkan perhatikan transaksi permintaa dan penawara suatu pruduk pada perusahaan ABC berikut:

# memuat perpustakaan
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")

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

# plot
plt.plot('x_values',
         'y_values', 
         data = df, 
    linestyle = 'none', 
       marker = 'o')
       
# menambahkan label
## [<matplotlib.lines.Line2D object at 0x000000007FEE8AF0>]
plt.xlabel('Permintaan')
## Text(0.5, 0, 'Permintaan')
plt.ylabel('Penawaran')
       
# menampilkan grafiknya    
## Text(0, 0.5, 'Penawaran')
plt.show()

Grafik Garis

Grafik Garis menampilkan evolusi satu atau beberapa variabel numerik.

# memuat perpustakaan
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")

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

# plot
plt.plot('x_values',
         'y_values', 
         data = df
         )
       
# menambahkan label
## [<matplotlib.lines.Line2D object at 0x000000007FF47880>]
plt.xlabel('Permintaan')
## Text(0.5, 0, 'Permintaan')
plt.ylabel('Penawaran')
       
# menampilkan grafiknya    
## Text(0, 0.5, 'Penawaran')
plt.show()

Multivariat (Multi Variabel)

Grafik multivariat menampilkan hubungan antara tiga variabel atau lebih. Ada dua metode umum untuk mengakomodasi beberapa variabel: pengelompokan dan faceting.

Grafik Scatter dan Grup

Dengan menggunakan perpustakaan seaborn, anda dapat memplot sebar dasar dengan kemampuan untuk menggunakan pengkodean 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.

# memuat perpustakaan dan dataset 
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('iris')

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

# atur tema whitegrid seaborn 
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')

# menampilkan grafiknya
## <matplotlib.legend.Legend object at 0x00000000710B53D0>
plt.show()

Grafik Korelogram

Korelogram atau matriks korelasi memungkinkan untuk menganalisis hubungan antara setiap pasangan variabel numerik dari suatu matriks. Korelasi divisualisasikan sebagai scatterplot. Diagonal mewakili distribusi setiap variabel dengan histogram atau plot kepadatan.

# memuat perpustakaan dan dataset 
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")

# menampilkan grafiknya

plt.show()

Grafik Berlapis (Faceting)

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.

# memuat perpustakaan dan dataset 
import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
 
# Membuat data frame
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 ')

# Show the graph
plt.show()