Pandas Interactive Plot dengan hvplot
Plot interaktif adalah salah satu media komunikasi data paling efektif. Berbeda dengan plot statis, plot interaktif dapat lebih kaya informasi sehingga memungkinkan kita mengakses lebih banyak informasi dengan hanya menggunakan satu plot yang sama.
import pandas as pd import hvplot.pandas # Line Plot sales = pd.read_csv('https://github.com/aansubarkah/basangdata_pandas/raw/master/AW/Sales.SalesOrderHeader.csv', sep='\t', parse_dates=True) sales = sales.set_index('OrderDate') sales['SalesOrderID'].hvplot() # Bar Plot df = pd.read_excel('https://www.nigrini.com/ForensicAnalytics/Chapter4_Figure4pt4_DataOnly.xlsx') bins = [-80000, 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 27000000] labels = ['<$0', '$0-$1K', '$1K-$2K', '$2K-$3K', '$3K-$4K', '$4K-$5K', '$5K-$6K', '$6K-$7K', '$7K-$8K', '>$8K'] df['bins'] = pd.cut(df['Amount'], bins, labels=labels, include_lowest=True, right=False) df.groupby(['bins']).count()[['Amount']].hvplot.bar(color='lightblue', xlabel='Dollar Intervals in $ Thousands', ylabel='Count')
Latar Belakang
Bagaimana kita mengkomunikasikan data yang kita miliki sama pentingnya dengan bagaimana kita mengolah data. Seberapa eksotisnya metode yang kita gunakan untuk mengolah data menjadi tidak bernilai jika kita kesulitan mengkomunikasikan hasilnya.
Karena manusia adalah makhluk visual, grafik membantu kita mengkomunikasikan data dengan lebih mudah.
Pada tulisan-tulisan sebelumnya kita telah mengenal grafik sebagai alat visualisasi data. Pada tulisan ini kita akan memperkaya informasi pembaca data kita dengan menggunakan grafik interaktif.
Langkah Kerja
Kita akan mereproduksi grafik statis berupa line plot dan bar plot dari tulisan sebelumnya menggunakan library hvplot.
Instalasi library hvplot
Instalasi dapat langsung dari cell notebook.
!pip install hvplot
Load library
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import hvplot.pandas
Line Plot
Load Data
sales = pd.read_csv('https://github.com/aansubarkah/basangdata_pandas/raw/master/AW/Sales.SalesOrderHeader.csv', sep='\t', parse_dates=True) sales = sales.set_index('OrderDate')
Grafik Statis
a4_dims = (11.7, 8.27) plt.figure(figsize=a4_dims) sns.set_style("whitegrid") sales['SalesOrderID'].plot(linewidth=0.5);
Diskusi lebih lanjut mengenai grafik ini dapat dibaca di sini.
Grafik Interaktif
sales['SalesOrderID'].hvplot()
Jika kita mengarahkan kursor ke atas garis biru maka akan ditampilkan nilai SalesOrderID dan tanggalnya.
Di sisi kanan grafik terdapat beberapa menu yang dapat digunakan, misal menu Box Zoom (ikon kaca pembesar) kita gunakan untuk memperbesar area grafik.
Berdasar grafik di atas, kita tahu bahwa angka pada kolom SalesOrderID ternyata tidak lurus-lurus amat. Terdapat tanggal-tanggal dimana penjualan lebih banyak ketimbang hari lainnya. Ditandai dengan adanya garis vertikal yang baru kelihatan saat grafik diperbesar.
Bar Plot
Load Data
df = pd.read_excel('https://www.nigrini.com/ForensicAnalytics/Chapter4_Figure4pt4_DataOnly.xlsx') bins = [-80000, 0, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 27000000] labels = ['<$0', '$0-$1K', '$1K-$2K', '$2K-$3K', '$3K-$4K', '$4K-$5K', '$5K-$6K', '$6K-$7K', '$7K-$8K', '>$8K'] df['bins'] = pd.cut(df['Amount'], bins, labels=labels, include_lowest=True, right=False)
Grafik Statis
a4_dims = (11.7, 8.27) plt.figure(figsize=a4_dims) ax = sns.countplot(x="bins", data=df) ax.set(xlabel='Dollar Intervals in $ Thousands', ylabel='Count') ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x)))) plt.show()
Bahasan lebih rinci mengenai grafik ini dapat dibaca pada tulisan sebelumnya.
Grafik Interaktif
df.groupby(['bins']).count()[['Amount']].hvplot.bar(color='lightblue', xlabel='Dollar Intervals in $ Thousands', ylabel='Count')
Menu Wheel Zoom memungkinkan kita melakukan skrol pada tetikus.
Menu Save akan menyimpan grafik yang sedang tampak, sehingga jika kita telah melakukan pembesaran grafik maka gambar yang diunduh adalah grafik yang telah diperbesar tersebut.
Referensi
Cover Image by blickpixel on pixabay