Lewati ke konten utama

Tutorial Visualisasi Data dengan Bokeh: Memplot Struktur Data

Pelajari visualisasi dasar berbagai struktur data menggunakan Bokeh.
· 6 mnt Baca

Jelajahi bersama AI

Dalam tutorial Visualisasi Data dengan Bokeh pertama kami, Anda telah mempelajari cara membangun visualisasi dari awal menggunakan glyph. Kini, Anda dapat memperluas konsep ini dan membuat plot dari berbagai struktur data seperti array dan dataframe. Dalam tutorial ini, Anda akan belajar cara memplot data dengan array NumPy, dataframe di Pandas, dan ColumnDataSource menggunakan Bokeh. ColumnDataSource adalah inti dari Bokeh, yang memungkinkan Anda berbagi data di beberapa plot dan widget.

Plot Bokeh dari Array NumPy

Membuat plot garis dari array NumPy

# Import packages
import numpy as np
import random
from bokeh.io import output_file, show
from bokeh.plotting import figure

# Create an array
x_array = np.array([10,20,30,40,50,60])
y_array = np.array([50,60,70,80,90,100])

# Create a line plot
plot = figure()
plot.line(x_array, y_array)

# Output plot
show(plot)

Membuat plot sebar dari array NumPy

# Import packages
import numpy as np
import random
from bokeh.io import output_file, show
from bokeh.plotting import figure

# Create arrays
x_arr = np.array([10,11,12,13,14,15,16])
y_arr = np.array([17,18,19,20,21,22,23])

# Create plot
plot = figure(title = "Scatter plot", x_axis_label = "Label name of x axis", y_axis_label ="Label name of y axis")
plot.circle(x_arr,y_arr, size = 30, alpha = 0.5)

# show plot
show(plot)

Ini menghasilkan grafik berikut:

Membuat Plot Menggunakan Dataframe Pandas

Memplot garis dengan dataframe Pandas

Data dalam contoh ini diperoleh dari Kaggle. Dataset ini berisi semua saham dalam indeks S&P 500 selama lima tahun hingga Desember 2018. File berisi tujuh kolom:

  • Date - tanggal hari dalam format yy-mm-dd
  • Open - harga pembukaan saham
  • High - harga tertinggi saham dalam sehari
  • Low - harga terendah saham dalam sehari
  • Close - harga penutupan saham pada hari itu
  • Volume - volume saham yang diperdagangkan pada hari itu
  • Name - nama ticker saham

Kita ingin melihat tren saham Google selama periode lima tahun. Pertama, kita memuat data menggunakan Pandas lalu memeriksa lima baris pertama dari dataframe Pandas.

# Import packages
import pandas as pd
# Load data
df = pd.read_csv('all_stocks_5yr.csv')
df.head()
# Focus on Google's stock
df_goog = df[df['Name'] == 'GOOG']
# Convert date column to a time series
df_goog['date'] = pd.to_datetime(df_goog['date'])

plot = figure(title= "Pandas Line Plot", x_axis_type = 'datetime', x_axis_label = 'date', y_axis_label= 'Prices')
plot.line(x = df_goog['date'], y = df_goog['high'])

# Output plot
show(plot)

Pada bagan tersebut, kolom tanggal perlu dikonversi ke datetime agar tanggal dapat ditampilkan di sepanjang sumbu-x. Selain itu, fungsi line (glyph di Bokeh) digunakan untuk menghasilkan plot deret waktu untuk harga tertinggi Google.

Membuat plot sebar dari dataframe Pandas

Pada bagian ini, kita menggunakan data saham S&P 500 sumber terbuka yang tersedia di Kaggle. Dalam contoh ini, kita ingin melihat korelasi antara harga saham Google dan harga saham Apple. Anda dapat mempelajari lebih lanjut tentang korelasi di sini.

# Import required packages
# Import packages
import pandas as pd
from bokeh.io import output_file, show
from bokeh.plotting import figure

# Load data
df = pd.read_csv('all_stocks_5yr.csv')

# Select Google and Apple stock
df_goog = df[df['Name'] == 'GOOG']
df_apple = df[df['Name'] == 'AAPL']

# Select only 'date' and 'high' columns for Google and Apple
df_goog = df_goog[['date','high']]
df_apple = df_apple[['date','high']]
# Rename 'high' column to 'high_goog' and 'high_apple'
df_goog.rename(columns={'high': 'high_goog'}, inplace=True)
df_apple.rename(columns={'high': 'high_apple'}, inplace=True)

df_merged = pd.merge(df_goog, df_apple, how='inner', on='date')
# See the first five rows
df_merged.head(5)

Penggabungan memastikan bahwa harga harian saling berkorespondensi berdasarkan tanggal. Ini mengurangi masalah mengorelasikan harga dari tanggal yang berbeda, karena hal tersebut akan menghasilkan inferensi statistik yang keliru.

# Create scatter plot
plot = figure(title= "Pandas Scatter Plot", x_axis_label = "Apple high prices", y_axis_label= "Google high prices")
plot.circle(x = df_merged['high_apple'], y = df_merged['high_goog'],color = 'red', size = 10, alpha = 0.8)

# Output the plot
show(plot)

Lingkaran menunjukkan keterkaitan antara harga tertinggi Apple dan Google. Secara umum terdapat korelasi positif antara harga saham Google dan Apple.

Membuat Plot Bokeh dari ColumnDataSource

Tujuan ColumnDataSource adalah memungkinkan Anda membuat berbagai plot menggunakan data yang sama. Singkatnya, ini memungkinkan Anda membangun landasan data untuk dipanggil di banyak plot dan analisis. Ini akan menghemat waktu, karena Anda tidak perlu memuat data berkali-kali di Jupyter Notebook.

ColumnDataSource mirip dengan kamus Python, di mana nilai data dalam sebuah kolom memiliki nama string kunci untuk kolom tersebut.

Membuat plot garis menggunakan ColumnDataSource

# Import packages
from bokeh.io import output_file, show
from bokeh.plotting import figure, ColumnDataSource

# Create the ColumnDataSource object
df_goog['date'] = pd.to_datetime(df_goog['date'])
data = ColumnDataSource(df_goog)

# Create time series plot
plot = figure(x_axis_type='datetime',
              title='GOOG high prices ts plot',
             x_axis_label = "Date",
              y_axis_label = "Prices in $")
plot.line(x='date', y = 'high_goog', source = data, color = 'green')
show(plot)

Plot menunjukkan bagaimana harga tertinggi Google berkembang selama periode 5 tahun dengan garis yang menunjukkan setiap titik harga saham.

Untuk membuat plot ini, kita memasukkan seluruh dataframe saham Google ke dalam fungsi ColumnDataSource dan menyimpannya sebagai variabel bernama data.

Kemudian, kita menggunakan argumen source untuk memasukkan data ini ke dalam fungsi plot. Ini memungkinkan penggunaan nama kolom secara langsung saat membuat plot alih-alih berulang kali memanggil dataframe.

Terakhir, kita menggunakan fungsi line untuk menghasilkan garis hijau yang merepresentasikan titik-titik data.

Membuat plot sebar menggunakan ColumnDataSource

Pada kode ini, kita memasukkan seluruh dataframe saham Google ke dalam ColumnDataSource (seperti pada contoh plot garis). Dataframe disimpan ke dalam ColumnDataSource sebagai variabel bernama data. Kita terlebih dahulu membuat plot garis dengan langsung memanggil nama kolom. Terakhir, kita menggunakan fungsi diamond untuk menghasilkan bentuk belah ketupat berwarna merah yang merepresentasikan tiap titik data.

# Import packages
from bokeh.io import output_file, show
from bokeh.plotting import figure, ColumnDataSource

# Create the ColumnDataSource object
df_goog['date'] = pd.to_datetime(df_goog['date'])
data = ColumnDataSource(df_goog)

# Create time series plot
plot = figure(x_axis_type='datetime',
              title='GOOG high prices ts plot',
             x_axis_label = "Date",
              y_axis_label = "Prices in $")
plot.line(x='date', y = 'high_goog', source = data, color = 'green')
plot.diamond(x='date', y = 'high_goog', source = data, color = 'red')
show(plot)

Plot menunjukkan perkembangan saham Google selama periode 5 tahun dengan belah ketupat merah yang menunjukkan setiap titik harga saham.

Kesimpulan

Tutorial ini memperkenalkan struktur data paling umum yang kemungkinan akan Anda temui di Python dan bagaimana Anda dapat menggunakannya untuk menghidupkan data Anda. Meskipun Bokeh bukan satu-satunya opsi untuk visualisasi Python, ia membedakan diri dari Matplotlib atau Seaborn melalui kemudahan penggunaan dan kemampuan interaktifnya. Pada tutorial berikutnya, Anda akan mendapatkan pengalaman langsung menggunakan tata letak untuk membuat visualisasi yang efektif dan interaktif. Jika Anda ingin mendalami semua kemungkinan visualisasi data yang ditawarkan oleh Bokeh, lihat kursus DataCamp Interactive Data Visualization with Bokeh.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026