HoloViews④(大規模なデータセットの視覚化)

大規模なデータセットの視覚化

Datashaderは、大規模なデータセットを高速に視覚化するためのPythonライブラリです。

HoloViewsは、Datashaderと統合されていて容易に扱うことができます。

Plotly では数十万のデータを処理できますが、Datashader では数千万から数億のデータを処理できます。

Datashader では、データセット全体ではなく、データセットをラスタライズ(複雑なデータを軽くてシンプルなデータに)して扱います。

サンプルコード

今回は、plotly.pyに含まれる irisデータセットを読み込み、ノイズを追加して150万個のデータ(DataFrame) を生成します。(14行目)

この大規模なデータ(DataFrame)を、HoloViews Datasetにラップします。(16行目)

[ソースコード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import dash
from dash import html
from plotly.data import iris

import holoviews as hv
from holoviews.plotting.plotly.dash import to_dash
from holoviews.operation.datashader import datashade

import numpy as np
import pandas as pd

# Load iris dataset and replicate with noise to create large dataset
df_original = iris()[["sepal_length", "sepal_width", "petal_length", "petal_width"]]
df = pd.concat([df_original + np.random.randn(*df_original.shape) * 0.1 for i in range(10000)])

dataset = hv.Dataset(df)

scatter = datashade(
hv.Scatter(dataset, kdims=["sepal_length"], vdims=["sepal_width"])).opts(title="Datashader with %d points" % len(dataset))

app = dash.Dash(__name__)
components = to_dash(
app, [scatter], reset_button=True
)

app.layout = html.Div(components.children)

if __name__ == "__main__":
app.run_server(debug=True)

[ブラウザで表示]

150万個のデータを散布図で表示することができました。

データの表示範囲を変更したり、ドラッグやスクロールで移動拡大・縮小を行ってももたつくことなくスムーズに表示できることが確認できます。