PlotlyのPython用ライブラリでデータをテーブルで表示してみた

2022.02.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

データアナリティクス事業本部の鈴木です。

今回はPlotlyのPython用ライブラリでデータをテーブルで表示する方法を試してみたのでご紹介します。

データをテーブルで表示する際にはPandasを使っている方も多いのではと思いますが、Plotlyでもテーブルで表示することができます。

本記事では、テーブルの表示方法と、表示する際の色や枠の設定方法について記載しました。

なお、内容は以下の公式ドキュメントを参考にしています。

Plotly Python Open Source Graphing Library Basic Charts - Table

検証した環境

  • コンテナ:jupyter/datascience-notebook
  • plotly:5.6.0
  • scikit-learn:1.0

データの準備

今回は、scikit-learnのdatasetsにある、wine datasetを利用しました。

多クラス分類を目的としたデータセットで、178サンプルが格納されています。targetにはclass_0・class_1・class_2の3種類があります。

以下のようにして、PandasのDataFrameに変換しておきます。

from sklearn.datasets import load_wine

data = load_wine()

X = pd.DataFrame(data["data"], columns=data["feature_names"])

# 後でテーブルで見る際に横に長くなって紹介しにくいので、今回はカラムを減らしておきます。
features = ['alcohol', 'alcalinity_of_ash', 'total_phenols', 'nonflavanoid_phenols', 'od280/od315_of_diluted_wines', 'proline']
X = X.loc[:, features]

X.head()

使用するデータの例

使ってみる

1.基本の作り方を確認する

plotly.graph_objects.Figureplotly.graph_objects.Tableを渡してテーブルを表示するという流れになります。

Tableインスタンスはheadercellsに値を渡して作成します。headerはヘッダーに表示する値のリスト、cellsはセルに表示する列の値のリストのリストです。

# https://plotly.com/python/table/
# を2022/02/14に引用しました。

import plotly.graph_objects as go

fig = go.Figure(
        data=[
            go.Table(
                # ヘッダーをリストで渡す。
                header=dict(values=['A Scores', 'B Scores']),
                # 列の値をリストのリストで渡す。
                cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]])
            )
        ]
      )
fig.show()

実行してみると、以下のようなテーブルが表示されます。

サンプルテーブル交換前

ドラック&ドロップで列を入れ替えることができます。列同士の値を比較したいときに便利ですね。

サンプルテーブル交換後

2. Pandas Dataframeから作成する

多くのケースで、テーブルを表示したいときはPandasのDataframeを使うと思うので、Dataframeからの作成方法も確認します。 PandasのDataframeであっても、headercellsに値を渡してTableインスタンスを作成することとなります。

fig = go.Figure(
        data=[
          go.Table(
            # ヘッダーとしてDataframeのcolumnsを渡す。
            header=dict(values=X.columns),
            # 全て表示するときは、valuesで取得して転置した方がシンプルかも。
            cells=dict(values=X.values.T))
        ]
      )
fig.show()

実行してみると、以下のようなテーブルができました。

ワインデータの表示例1

体裁は調整することができます。例えば、今回はヘッダーの一部が見切れているので、改行するようにします。

headerに渡す値のうち、該当の値に改行要素を入れます。

features_fixed = ['alcohol', 'alcalinity_of_ash', 'total_phenols', 
                  'nonflavanoid<br>phenols', 'od280/od315_of<br>diluted_wines', 
                  'proline']

再度表示すると、今度は事象が解消されたことが分かります。

ワインデータの表示例2

headercellsはセルの枠線・塗り・文字の配置など設定を行うことができます。

# https://plotly.com/python/table/
# のChanging Row and Column Sizeを2022/02/14に参考にしました。

fig = go.Figure(
        data=[
          go.Table(
            # ヘッダーとしてDataframeのcolumnsを渡す。
            header=dict(
                values=features_fixed,
                # セルの枠線の設定
                line_color='darkslategray',
                # セルの塗りの設定
                fill_color='royalblue',
                # 文字の配置の設定
                align=['center'],
                # フォントの設定
                font=dict(color='white', size=12),
                # セルの高さの設定
                height=60
            ),
            cells=dict(
                values=X.values.T,
                line_color='darkslategray',
                fill=dict(color=['paleturquoise', 'white']),
                align=['center']
            )
          )
        ]
      )
fig.show()

ワインデータの表示例3

特にaligncolorなどを全列で指定しなかった場合は、渡したリストの一番最後の値が適用されるようでした。

最後に

今回はPlotlyのPython用ライブラリでデータをテーブルで表示する方法を紹介しました。 PandasのDataFrameと併せて、場面に合わせて使い分けると良さそうですね。

参考