KOMPUTASI STATISTIKA
~ Visualisasi Data ~
Kontak | Konsultasi & Diskusi ke : \(\downarrow\) |
dsciencelabs@outlook.com | |
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
= [3, 12, 5, 18, 45] # data numerik
Usia = ('A', 'B', 'C', 'D', 'E') # data kategori
Nama = np.arange(len(Usia)) # reposisi data usia ke array
pos_y
=(8, 6)) # atur ukuran gambar plt.figure(figsize
# memuat data numerik ke grafik batang plt.bar(pos_y, Usia)
## <BarContainer object of 5 artists>
# memuat data kategori pada sumbu x plt.xticks(pos_y, Nama)
## ([<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')])
'Nama') # label pada sumbu x plt.xlabel(
## Text(0.5, 0, 'Nama')
'Usia') # label pada sumbu y plt.ylabel(
## Text(0, 0.5, 'Usia')
# Tampilkan grafik plt.show()
'img/output/bar.png') # menyimpan ouput plt.savefig(
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
= ["A", "B", "C","D", "E"]
Nama = [39, 63, 45, 24, 13]
Usia = pd.DataFrame({"Nama": Nama,
df "Usia": Usia})
# atur tema plot dan latar belakang
set(style="darkgrid")
sns.
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# buat diagram batang
sns.barplot(= "Nama",
x = "Usia",
y = df,
data = sum,
estimator = None)
ci
# 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 digunakanestimator:
perhitungan berdasarkan kategorici:
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
= ["A", "B", "C","D", "E"]
Nama = [39, 63, 45, 24, 13]
Usia = pd.DataFrame({"Nama": Nama,
df "Usia": Usia})
# atur tema plot dan latar belakang
set(style="darkgrid")
sns.
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# buat diagram batang
sns.barplot(= "Usia",
x = "Nama",
y = df,
data = sum,
estimator = None)
ci
# 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
= ["A", "B", "C","D", "E"]
Nama = [39, 63, 45, 24, 13]
Usia = pd.DataFrame({"Nama": Nama,
df "Usia": Usia})
# Susun ulang data frame
= df.sort_values(["Usia"], ascending=False).reset_index(drop=True)
df
# atur tema plot dan latar belakang
set(style="darkgrid")
sns.
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# buat diagram batang
sns.barplot(= "Usia",
x = "Nama",
y = df,
data = sum,
estimator = None)
ci
# 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
= [3, 12, 5, 18, 45] # data numerik
Usia = ('A', 'B', 'C', 'D', 'E') # data kategori
Nama = sns.color_palette('pastel')[0:4] # warna Seaborn yang akan digunakan
warna
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# membuat diagram lingkaran
plt.pie(Usia, = Nama,
labels = warna,
colors ='%.0f%%');
autopct
# 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
= pd.DataFrame({'nb_people':[8,3,4,2],
df 'group':["A", "B", "C", "D"] })
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# membuat diagram
= df['nb_people'],
squarify.plot(sizes = df['group'],
label #color = ["red","green","blue", "grey"],
=.8 ) alpha
## <AxesSubplot:>
'off')
plt.axis(
# 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
=(8, 6))
plt.figure(figsize
# atur latar belakang abu-abu
="darkgrid")
sns.set_theme(style= sns.load_dataset("iris")
df
=df, x="sepal_length", bins=20, kde=True)
sns.histplot(data
# 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
=(8, 6))
plt.figure(figsize
# atur latar belakang abu-abu
="darkgrid")
sns.set_theme(style= sns.load_dataset("iris")
df
=df, x="sepal_length", color="skyblue", label="Sepal Length", kde=True) sns.histplot(data
## <AxesSubplot:xlabel='sepal_length', ylabel='Count'>
=df, x="sepal_width", color="red", label="Sepal Width", kde=True)
sns.histplot(data
# 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
="darkgrid")
sns.set_theme(style= sns.load_dataset("iris")
df
# membagi grafik 2 kali 2
= plt.subplots(2, 2, figsize=(7, 7))
fig, axs
=df, x="sepal_length", kde=True, color="skyblue", ax=axs[0, 0]) sns.histplot(data
## <AxesSubplot:xlabel='sepal_length', ylabel='Count'>
=df, x="sepal_width", kde=True, color="olive", ax=axs[0, 1]) sns.histplot(data
## <AxesSubplot:xlabel='sepal_width', ylabel='Count'>
=df, x="petal_length", kde=True, color="gold", ax=axs[1, 0]) sns.histplot(data
## <AxesSubplot:xlabel='petal_length', ylabel='Count'>
=df, x="petal_width", kde=True, color="teal", ax=axs[1, 1])
sns.histplot(data
# 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
="darkgrid")
sns.set_theme(style= sns.load_dataset("iris")
df
# membagi grafik 2 kali 2
= plt.subplots(2, 2, figsize=(7, 7))
fig, axs
=df, x="sepal_length", color="skyblue", shade=True, ax=axs[0, 0]) sns.kdeplot(data
## <AxesSubplot:xlabel='sepal_length', ylabel='Density'>
=df, x="sepal_width", color="olive", shade=True, ax=axs[0, 1]) sns.kdeplot(data
## <AxesSubplot:xlabel='sepal_width', ylabel='Density'>
=df, x="petal_length",color="gold", shade=True, ax=axs[1, 0]) sns.kdeplot(data
## <AxesSubplot:xlabel='petal_length', ylabel='Density'>
=df, x="petal_width", color="teal", shade=True, ax=axs[1, 1])
sns.kdeplot(data
# 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
"figure.figsize"]=8,6
plt.rcParams[
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# Tanpa transparansi
= diamonds,
sns.kdeplot(data = "price",
x = "cut",
hue = 0,
cut = True,
fill = False,
common_norm = 0.4) # penyesuaian transparansi dengan nilai alpha
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
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# plot kepadatan bertumpuk
= diamonds,
sns.kdeplot(data = "price",
x = "cut",
hue = False,
common_norm = "fill",
multiple = 0.7)
alpha
# 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
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# memuat dataset dari GitHub dan mengubah formatnya
= pd.read_csv("https://raw.githubusercontent.com/dsciencelabs/dataset/master/probly.csv")
data = pd.melt(data, var_name='text', value_name='value')
data
# memuat beberapa variabel dari dataset
= data.loc[data.text.isin(["Almost No Chance",
data "About Even",
"Probable",
"Almost Certainly"])]
# plot kepadatan kernel
= sns.kdeplot(data = data,
p = "value",
x = "text",
hue = True,
fill = False,
common_norm = 0.6,
alpha = "viridis",
palette = False)
legend
# kontrol batas sumbu x
0, 100)
plt.xlim(
# Anotasi data frame
## (0.0, 100.0)
= pd.DataFrame({
annot '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], ='left',
horizontalalignment='large')
size
# 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')
"Probabilitas dalam (%)") plt.xlabel(
## Text(0.5, 0, 'Probabilitas dalam (%)')
"Densitas Kernel")
plt.ylabel(
# 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
= pd.DataFrame({'group':list(map(chr, range(65, 85))),
df 'values':np.random.uniform(size=20) })
# mengurutkan berdasarkan nilai
= df.sort_values(by='values')
ordered_df =range(1,len(df.index)+1)
my_range
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# buat plotnya
'values']) plt.stem(ordered_df[
## <StemContainer object of 3 artists>
'group'])
plt.xticks(my_range, ordered_df[
# 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
= pd.DataFrame({'group':list(map(chr, range(65, 85))),
df 'values':np.random.uniform(size=20) })
# mengurutkan berdasarkan nilai
= df.sort_values(by='values')
ordered_df =range(1,len(df.index)+1)
my_range
# Buat warna jika grupnya adalah "B"
=np.where(ordered_df ['group']=='B', 'orange', 'skyblue')
my_color=np.where(ordered_df ['group']=='B', 70, 30)
my_size
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# Plot horizontal dibuat menggunakan fungsi hline()
= my_range,
plt.hlines(y = 0,
xmin = ordered_df['values'],
xmax = my_color,
color = 0.48) alpha
## <matplotlib.collections.LineCollection object at 0x00000000710686D0>
'values'],
plt.scatter(ordered_df[
my_range, =my_color,
color=my_size,
s=1)
alpha
# Tambahkan judul dan nama sumbu
## <matplotlib.collections.PathCollection object at 0x0000000071068E50>
'group']) plt.yticks(my_range, ordered_df[
## ([<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')])
"Fokus dengan Grup B", loc='left') plt.title(
## Text(0.0, 1.0, 'Fokus dengan Grup B')
'Nilai Variabel') plt.xlabel(
## Text(0.5, 0, 'Nilai Variabel')
'Grup')
plt.ylabel(
# 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
= sns.load_dataset('tips') # memuat dataset dari seaborn
df
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# membuat grafik boxplotnya
= 'day',
sns.boxplot(x = 'total_bill',
y = df,
data = 'smoker')
hue
# 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
= sns.load_dataset('tips') # memuat dataset dari seaborn
df
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# Grouped violinplot
= "day",
sns.violinplot(x = "total_bill",
y = "smoker",
hue = df,
data = "Pastel1")
palette
# 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
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# Create a dataset:
=pd.DataFrame({'x_values': range(1,101),
df'y_values': np.random.randn(100)*15+range(1,101) })
# plot
'x_values',
plt.plot('y_values',
= df,
data = 'none',
linestyle = 'o')
marker
# menambahkan label
## [<matplotlib.lines.Line2D object at 0x000000007FEE8AF0>]
'Permintaan') plt.xlabel(
## Text(0.5, 0, 'Permintaan')
'Penawaran')
plt.ylabel(
# 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
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# Create a dataset:
=pd.DataFrame({'x_values': range(1,101),
df'y_values': np.random.randn(100)*15+range(1,101) })
# plot
'x_values',
plt.plot('y_values',
= df
data
)
# menambahkan label
## [<matplotlib.lines.Line2D object at 0x000000007FF47880>]
'Permintaan') plt.xlabel(
## Text(0.5, 0, 'Permintaan')
'Penawaran')
plt.ylabel(
# 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
= sns.load_dataset('iris')
df
# atur ukuran gambar
=(8, 6))
plt.figure(figsize
# atur tema whitegrid seaborn
set(style="whitegrid")
sns.
# Gunakan argumen 'hue' untuk menambahkan variabel faktor
= "sepal_length",
sns.lmplot(x = "sepal_width",
y = df,
data = False,
fit_reg = 'species',
hue = False,
legend =["o", "x", "1"])
markers
# Pindahkan legend ke bagian plot yang kosong
='lower right')
plt.legend(loc
# 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
= sns.load_dataset('iris')
df
# memuat grafik korelogram
sns.pairplot(df, = "scatter",
kind = "species",
hue = ["o", "s", "D"],
markers = "Set2")
palette
# 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
=["France","Australia","Japan","USA","Germany",
my_count"Congo","China","England","Spain","Greece",
"Marocco","South Africa","Indonesia","Peru",
"Chili","Brazil"]
= pd.DataFrame({
df "country":np.repeat(my_count, 10),
"years":list(range(2000, 2010)) * 16,
"value":np.random.rand(160)
})
# Inisialisasi grafik berlapis
= sns.FacetGrid(df, col='country', hue='country', col_wrap=4)
g
# Tambahkan garis di atas area dengan fungsi plot
= g.map(plt.plot, 'years', 'value')
g
# Isi area dengan fill_between
= g.map(plt.fill_between,
g 'years',
'value',
=0.2).set_titles("{col_name} country")
alpha
# Pengaturan nama variabel setiap aspek
= g.set_titles("{col_name}")
g
# Tambahkan nama variabel untuk keseluruhan plot
=0.92)
plt.subplots_adjust(top= g.fig.suptitle('Evolusi harga suatu produk di 16 negara ')
g
# Show the graph
plt.show()