top of page
Gambar penulisCornellius Yudha Wijaya

Berbagai Cara Memvisualisasikan Data dengan Animasi

Berbagai Cara Memvisualisasikan Data dengan Animasi

Orang sering mengatakan bahwa satu gambar bernilai seribu kata, dengan kata lain satu animasi bernilai lebih dari ribuan kata. Mengapa? Karena animasi adalah serangkaian gambar, iya kan? Kita sebagai manusia selalu lebih memperhatikan visual untuk menjelaskan fenomena apa yang terjadi dalam data kita, tetapi terkadang gambar statis tidak dapat sepenuhnya menjelaskan data. Di sinilah animasi membuat data semakin jelas.


Kita tidak selalu memerlukan animasi untuk membantu kita memahami data, tetapi data time-series kadang-kadang lebih baik disajikan dalam bentuk animasi. Harga saham, jumlah panggilan setiap hari, persentase pendaftaran dari waktu ke waktu, adalah beberapa contoh data time-series. Data ini dapat divisualisasikan menggunakan animasi.


Dalam artikel ini, saya ingin memperkenalkan cara membuat animasi sederhana menggunakan bahasa pemrograman Python dan berbagai library yang tersedia untuk menyederhanakan proses ini. Termasuk Matplotlib, Celluloid, dan Plotly.

Animasi Matplotlib

Matplotlib adalah “grandfather” library visualisasi yang berbasis pada bahasa pemrograman MATLAB. Banyak library visualisasi yang dikembangkan berdasarkan modul ini dan saya yakin hampir semua orang yang memulai belajar visualisasi akan memulai dengan modul ini.

Dalam modul matplotlib, ada API khusus yang digunakan untuk membuat animasi dengan menyediakan kelas dasar yang diperlukan.


Ada dua kelas, yaitu FuncAnimation dan ArtistAnimation. Di sini, saya akan memperkenalkan animasi yang dibuat oleh kelas FuncAnimation karena ini yang paling mudah.


Saya akan menunjukkan bagaimana kelas ini bekerja dengan menggunakan contoh animasi harga saham di atas. Sebagai persiapan, kita memerlukan beberapa hal berikut:

  • Untuk menyimpan animasi di sistem Anda sebagai mp4 atau gif, perlu diinstal FFmpeg atau ImageMagick.

  • Saya mendapatkan data harga saham dengan menggunakan modul yahoo_historical. Instal modul ini dengan menggunakan pip atau conda.


Sekarang mari kita coba membuat animasi. Pertama, kita perlu mendapatkan data harga saham.

import pandas as pd
from yahoo_historical import Fetcher
BBCA = Fetcher('BBCA.JK', [2012,1,1], interval = '1d').getHistorical()
BBCA.head()

Pastikan data tidak mengandung nilai NaN dengan melakukan pemeriksaan berikut:

BBCA.isna().any()
Berbagai Cara Memvisualisasikan Data dengan Animasi

Tidak ada nilai NaN yang muncul, dengan data ini kita bisa melakukan data preprosessing. Karena kita ingin membuat animasi time-series, kita perlu mengubah data menjadi objek Datetime terlebih dahulu.

BBCA['Date'] = pd.to_datetime(BBCA['Date'])

Saya ingin menganimasikan harga penutupan BBCA.JK dari waktu ke waktu, jadi sekarang mari kita mulai dengan animasi yang dibuat menggunakan kelas FuncAnimation dari matplotlib.


#importing libraries
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#Set the figure for the animation framework
fig = plt.figure(figsize = (10,6))

#creating a subplot 
ax1 = fig.add_subplot(1,1,1)

#Preparing empty list as we want to animate the graph one data at a time rather than all at once
date = []
adjclose = []

#Using FuncAnimation we need to create an animation function which return and/or done a repetitive action
def animate(i):
    #Append the empty list with the data located at the index i
    date.append(BBCA['Date'].loc[i])
    adjclose.append(BBCA['Adj Close'].loc[i])
    #Clear the subplot each time the animate is called
    ax1.clear()
    
    ax1.plot(date, adjclose)
    ax1.tick_params(axis = 'x', labelrotation = 90)
    
    ax1.set_xlabel('Date')
    ax1.set_ylabel('Price')
    ax1.set_title('BBCA Stock graph with matplotlib')

ani = animation.FuncAnimation(fig = fig, func = animate, frames = len(BBCA), interval = 20) 
plt.show()

Di sini saya akan menjelaskan parameter dari FuncAnimation dengan lebih jelas. Parameter penting di sini adalah:

  • Parameter fig sebagai kerangka animasi

  • Parameter func untuk fungsi animasi yang akan dipanggil untuk setiap frame

  • Parameter frames adalah sumber data untuk dilewatkan ke parameter func dan setiap frame animasi. Jika diberikan int, itu akan setara dengan fungsi range(int).

  • Parameter interval mengontrol interval antara setiap frame dalam milisecond


Untuk menyimpan animasi ke dalam mp4 atau gif, jalankan kode berikut.

ani.save('bbca_stock.gif', writer='imagemagick')

atau jika Anda menggunakan Jupyter Notebook dan ingin melihat animasi langsung di notebook Anda, Anda bisa menjalankan kode berikut.

from matplotlib import rc
rc('animation', html='html5')

ani
Berbagai Cara Memvisualisasikan Data dengan Animasi

Sesederhana itulah membuat animasi menggunakan modul matplotlib. Di bagian selanjutnya, saya akan memperkenalkan modul lain yang menyederhanakan proses pembuatan animasi ini.

Celluloid

Celluloid adalah modul yang menyederhanakan proses pembuatan animasi di matplotlib. Kita hanya menggunakan figure dari matplotlib dan dari sana kita membuat kelas Camera untuk mengambil snapshot dari setiap figure sebagai frame. Animasi dibuat dari rangkaian frame.


Kita akan mencoba membuat animasi sederhana dari harga saham menggunakan Celluloid seperti contoh di atas. Sebagai persiapan, kita perlu menginstal Celluloid terlebih dahulu.

pip install celluloid

Membuat animasi menggunakan Celluloid bergantung pada pengulangan figure. Bayangkan kita mengambil gambar beruntun dan dari gambar tersebut, kita membaliknya dengan cepat untuk membuat animasi. Begini cara menuliskannya dalam kode.


#Importing Camera class from Celluloid module
from celluloid import Camera

#Set the BBCA date as index to simplify the plotting procrss 
test = BBCA.set_index('Date')

#Create the figure for animation creation
fig = plt.figure(figsize = (10,6))

#Create camera object by inputting the figure object
camera = Camera(fig)

#Looping the plotting process and taking a snapshot for each frame. I set the loop to take 50 data each time to had a faster interval.
for i in range(49,len(BBCA),50):
    test['Adj Close'][0:i].plot(color = 'blue')
    plt.xlabel('Date')
    plt.ylabel('Price')
    plt.title('BBCA Stock graph with Celluloid')
    #Snap the figure in each loop process
    camera.snap()
    
#Create the animation    
animation = camera.animate()
animation.save('bbca_stock_celluloid.gif', writer='imagemagick')

Plotly

Plotly adalah modul visualisasi yang dianggap sebagai front-end terdepan untuk model ML dan Data Science. Dari grafik statis, visualisasi interaktif, hingga dashboard analitik; Plotly menawarkan semua itu. Animasi juga termasuk dalam modul Plotly dengan hanya beberapa baris kode.


Pertama-tama, kita perlu menginstal modul plotly.

pip install plotly

Ada banyak fungsi dalam modul plotly, tetapi dalam kasus kita saat ini kita akan menggunakan plotly express untuk membuat plot dengan cepat. Kita juga akan menggunakan data populasi yang tersedia dari modul plotly.

import plotly.express as px
df = px.data.gapminder()
df.head()
Berbagai Cara Memvisualisasikan Data dengan Animasi

Data kita akan terlihat seperti ini. Kita memiliki koleksi Negara dengan selang waktu 5 tahun dan berbagai kolom menunjukkan kondisi negara mereka. Mari kita coba membuat animasi sederhana menggunakan plotly dari data ini.

fig = px.scatter(df, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
           size="pop", color="continent", hover_name="country",
           log_x=True, size_max=55, range_x=[100,100000], range_y=[25,90])
fig.show()

Beberapa parameter yang perlu diingat dalam kode di atas adalah:

  • animation_frame mengontrol progres animasi. Kita mengurutkan nilai ini paling lama ke yang paling awal hingga yang terbaru (atau sebaliknya jika).

  • animation_group digunakan untuk memberikan object-constancy di seluruh frame animasi: baris dengan animation_group yang cocok akan diperlakukan seolah-olah menggambarkan objek yang sama di setiap frame.

Berikut hasil animasi di Jupyter Notebook saya.

Berbagai Cara Memvisualisasikan Data dengan Animasi

Satu kelemahan plotly adalah kita tidak bisa mengekspor animasi ke sistem kita (kita bisa mengekspor gambar statis tetapi tidak animasi). Jadi, kita menggunakan proses animasi hanya saat menggunakan Jupyter Notebook atau kita mengintegrasikannya ke dalam dashboard Plotly kita. Seperti yang kita lihat, kode diatas menghasilkan plot interaktif di mana kita bisa memutar animasi.


Hampir semua plot yang dibuat oleh plotly express mempunyai kemampuan untuk membuat animasi, jadi tidak terbatas hanya pada scatter plot. Basa dokumentasi Plotly jika Anda ingin mengetahui semua plot yang tersedia.

Kesimpulan

Di sini saya telah menunjukkan cara sederhana untuk mempresentasikan data Anda melalui animasi dan beberapa modul untuk membantu prosesnya; termasuk Matplotlib, Celluloid, dan Plotly. Dengan hanya beberapa baris kode dan logika dibelakangnya, kita bisa meningkatkan presentasi kita dengan animasi yang menarik.

21 tampilan0 komentar

Comments


bottom of page