Tujuan buku catatan ini adalah untuk mengilustrasikan bagaimana Anda dapat membuat alat yang interaktif dan responsif untuk analisis deret waktu gambar dengan menggabungkan Panel def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 0, beberapa def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 1 fungsi plot beranotasi dan beberapa HoloViews def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 2
Ketergantungan
import numpy as np import pandas as pd import holoviews as hv import hvplot.pandas import panel as pn hv.extension('bokeh') pn.extension(sizing_mode="stretch_width")
Data
def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head()
Plot
HEIGHT=300
plot_a = ts_data.hvplot(y="a", responsive=True, height=HEIGHT) plot_b = ts_data.hvplot(y="b", responsive=True, height=HEIGHT) plot_c = ts_data.hvplot(y="c", responsive=True, height=HEIGHT) plot_a + plot_b + plot_c _
def get_image(frame): return hv.Image(np.random.normal(size=(100, 100))).opts(height=HEIGHT, responsive=True) get_image(100)
def get_vline(frame): return hv.VLine(frame).opts(color="red") get_vline(0.5) _
Aplikasi
Batang
app_bar = pn.Row( pn.pane.Markdown("## TimeSeries Image Analysis - POC", style={"color": "white"}, width=500, sizing_mode="fixed", margin=(10,5,10,15)), pn.Spacer(), pn.pane.PNG("//holoviews.org/_static/logo.png", height=50, sizing_mode="fixed", align="center"), pn.pane.PNG("//panel.holoviz.org/_static/logo_horizontal.png", height=50, sizing_mode="fixed", align="center"), background="black", ) app_bar _
Plot Dinamis
frame_slider = pn.widgets.IntSlider(name="Time", value=25, start=0, end=999) @pn.depends(frame=frame_slider) def image(frame): return get_image(frame) @pn.depends(frame=frame_slider) def vline(frame): return get_vline(frame) vline_dmap = hv.DynamicMap(vline) img_dmap = hv.DynamicMap(image) plots = ((plot_a + plot_b + plot_c) * vline_dmap).cols(1)
Tata letak
app = pn.Column( app_bar, pn.Spacer(height=10), frame_slider, pn.Row( plots, pn.Column( pn.Spacer(height=20), img_dmap, ), ), ) app
Anda sekarang siap menyajikan aplikasi kepada pengguna Anda melalui def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 3
Catatan
Baris def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 4 sangat penting untuk membuat aplikasi cepat dan responsif. Awalnya def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() _5 dibuat ulang bersama dengan def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 6 setiap kali def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 7 diubah. Itu membuat aplikasi lebih lambat karena harus menghitung ulang dan mentransfer lebih banyak data
Aplikasi
Mari bungkus menjadi template bagus yang dapat disajikan melalui def make_ts_data(n_timesteps): data = pd.DataFrame( { "a": np.random.normal(size=(n_timesteps,)), "b": np.random.normal(size=(n_timesteps,)), "c": np.random.normal(size=(n_timesteps,)), }, index=pd.Index(np.arange(n_timesteps), name="time", ) ) return data ts_data = make_ts_data(1000) ts_data.head() 3
pn.template.FastListTemplate( site="Panel", title="Dynamic Timeseries Image Analysis", main=[ "The purpose of this app is to illustrate how you can **make an interactive and responsive tool for timeseries analysis of images** by combining a Panel `IntSlider`, some `@pn.depends` annotated plotting functions and a few HoloViews `DynamicMap`.", *app[2:]] ).servable();
Halaman web ini dihasilkan dari notebook Jupyter dan tidak semua interaktivitas akan berfungsi di situs web ini. Klik kanan untuk mengunduh dan menjalankan secara lokal untuk interaktivitas penuh yang didukung Python