チャート描画ライブラリ『Plotly』をPythonで試す:インストール&環境設定編

チャート描画ライブラリ『Plotly』をPythonで試す:インストール&環境設定編

Clock Icon2021.07.18

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

データアナリティクス事業本部 サービスソリューション部 サービス開発部のしんやです。

ここまで色々な可視化におけるツールやサービスを個人的に触ってきましたが、何らかの言語でサクッとデータを可視化出来るライブラリとかないものかなーと思っていたところ、『Plotly』というプロダクトの存在を知りました。ザッと内容を確認してみたところとっつき易さと表現の幅の広さが良い感じっぽいぞ!ということで個人的にこのプロダクトを触っていってみようと思います。

目次

 

Plotly 概要

 

Plotlyとは

plotly Pythonライブラリは統計、金融/地理/科学/三次元等での幅広い用途をカバーする40種類以上のユニークなチャートをサポートする、インタラクティブなオープンソースのライブラリです。基本的な特徴は以下の通り。

  • Plotly Javascriptライブラリ(plotly.js)上に構築
  • PythonユーザーはWebベースの美しいインタラクティブなビジュアライゼーション(以降"可視化")を作成出来る
  • この可視化は以下の形で提供することが可能
    • Jupyterノートブックに表示
    • スタンドアロンのHTMLファイルに保存
    • Dashを使った純粋なPython製Webアプリケーションの一部として提供
  • plotlyのPythonライブラリはJavascriptライブラリと区別するために「plotly.py」と呼ばれることもある
  • 画像エクスポートユーティリティ「Kaleido」と連携することでウェブ以外のコンテクストでも優れたサポートを提供
    • デスクトップエディタ(例:QtConsole, Spyder, PyCharm)
    • 静的なドキュメント生成(例:高画質なベクター画像を含むノートブックのPDFへのエクスポート)

今回触っていくのはオープンソース版ですが、下記料金ページを見ると有償版もプランが用意・展開されているようです。

また、plotlyのライブラリはPython版の他にもR言語版、Javascript版が存在します。

 

Dashとは

「Dash」はWeb分析アプリケーションを構築するために作られた、生産性の高いPythonフレームワークです。Flask, Plotly.js, React.jsで構成されています。高度にカスタマイズされたユーザーインタフェースを持つデータ可視化アプリケーションを純粋なPythonで構築することが出来、Pythonでデータを扱う人に適しています。

Dashは幾つかのシンプルなパターンを通じて、インタラクティブなWebベースのアプリケーションを構築するために必要な技術やプロトコルを全て抽象化します。DashアプリケーションはWebブラウザで表示され、アプリをサーバにデプロイしてURLで共有することも可能です。DashのアプリはWebブラウザで表示されるため、Dashは本質的にクロスプラットフォームであり、モバイルにも対応しています。

Dashはオープンソースのライブラリで、寛容的なMITライセンスで公開されています。また、PlotlyではDashを開発し、エンタープライズ環境で管理するためのプラットフォームも提供しています。

今回からブログでPlotlyを扱う際は、このDash経由で触ってみることにします。

 

環境構築

 

導入環境について

plotlyはpip経由でインストールすることが可能です。Mac OS X環境上で以下のPython/pip実行環境にて以降の作業を進めていきます。Python及びpipのインストールは予め済ませておいてください。

 % sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.3
BuildVersion:	19D76

% python --version
Python 3.8.6
% pip --version
pip 20.2.1 from /Users/xxxxxxxxxx/.pyenv/versions/3.8.6/lib/python3.8/site-packages/pip (python 3.8)

 

plotlyのインストール

plotly単体のインストールは以下のコマンドで対応可能です。ドキュメントではバージョンをオプション指定する形で記載がありますが、現時点ではオプション指定が無くとも所定のバージョンが最新版として導入されるようです。

$ pip install plotly
$ pip freeze | grep plotly
plotly==5.1.0

所定のバージョンがインストールされない場合は下記のオプション指定でインストールを行います。

$ pip install plotly==5.1.0

動作確認用のコードを試してみます。pythonでコードを以下の様に入力してみると...

% python
Python 3.8.6 (default, May 22 2021, 06:01:41) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import plotly.graph_objects as go
>>> fig = go.Figure(data=go.Bar(y=[2, 3, 1]))
>>> fig.write_html('first_figure.html', auto_open=True)

以下のようにブラウザが起動し、グラフが表示されました!

 

Dashのインストール

Dashのインストールはpip install dashで行います。このコマンドで、Dashの中核を構成する3つのコンポーネント(dash_html_componentsdash_core_componentsdash_table)及びplotlyのグラフ作成ライブラリを利用出来るようになります。これらのライブラリは活発に開発が行われているため、適宜アップグレードを行うようにしてください。

$ pip install dash

開発環境としてjupyterノートブックまたはjupyterLabを使用する場合はjupyter-dashをインストールする事をお勧めします。

$ pip install jupyter-dash

また、Plotlyで図形描画の高レベルAPIであるPlotlyExpressを利用するために、Pandasを追加でインストールしておくことをお勧めします。

$ pip install pandas

 

notebookインストールと表示確認

Plotlyの動作確認はJupyter Notebookで行うことが出来ます。pip install notebookコマンドでインストールを行い、jupyter notebookで起動。起動後に表示されるURLを用いて、

$ pip install notebook
$ jupyter notebook
[I 11:44:34.660 NotebookApp] ローカルディレクトリからノートブックをサーブ: /Users/xxxxxxxxxxx/Desktop
[I 11:44:34.660 NotebookApp] Jupyter Notebook 6.4.0 is running at:
[I 11:44:34.660 NotebookApp] http://localhost:8888/?token=d8a98b4f2e995114438338f7f151e9c849ea84a949b0f3cb
[I 11:44:34.660 NotebookApp]  or http://127.0.0.1:8888/?token=d8a98b4f2e995114438338f7f151e9c849ea84a949b0f3cb
[I 11:44:34.660 NotebookApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。
[C 11:44:34.670 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///Users/xxxxxxxxxxxxxx/Library/Jupyter/runtime/nbserver-10148-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=d8a98b4f2e995114438338f7f151e9c849ea84a949b0f3cb
     or http://127.0.0.1:8888/?token=d8a98b4f2e995114438338f7f151e9c849ea84a949b0f3cb

ブラウザにてアクセス。

下記サンプルコードを貼り付けて実行し、チャートが描画されることを確認。

import plotly.graph_objects as go
fig = go.Figure(data=go.Bar(y=[2, 3, 1]))
fig.show()

 

JupyterLabのインストールと表示確認

Plotly(Dash)はjupyter-labにも対応しているのでこちらも試してみましょう。下記指定で関連ライブラリをインストールし、jupyter labコマンドで起動。起動時ログに表示されるURLを控えておき、

% pip install "jupyterlab>=3" "ipywidgets>=7.6"
%
% jupyter lab    
[I 2021-07-18 12:34:21.243 ServerApp] jupyterlab | extension was successfully linked.
[I 2021-07-18 12:34:21.550 ServerApp] nbclassic | extension was successfully linked.
[I 2021-07-18 12:34:21.593 ServerApp] nbclassic | extension was successfully loaded.
[I 2021-07-18 12:34:21.594 LabApp] JupyterLab extension loaded from /Users/xxxxxxxxxxx/.pyenv/versions/3.8.6/lib/python3.8/site-packages/jupyterlab
[I 2021-07-18 12:34:21.594 LabApp] JupyterLab application directory is /Users/xxxxxxxxxxx/.pyenv/versions/3.8.6/share/jupyter/lab
[I 2021-07-18 12:34:21.599 ServerApp] jupyterlab | extension was successfully loaded.
[I 2021-07-18 12:34:21.600 ServerApp] ローカルディレクトリからノートブックをサーブ: /Users/xxxxxxxxxxx/Desktop
[I 2021-07-18 12:34:21.600 ServerApp] Jupyter Server 1.9.0 is running at:
[I 2021-07-18 12:34:21.600 ServerApp] http://localhost:8888/lab?token=34c565d65276b259c3303f6812ebdc8328d63ff156a0022c
[I 2021-07-18 12:34:21.600 ServerApp]  or http://127.0.0.1:8888/lab?token=34c565d65276b259c3303f6812ebdc8328d63ff156a0022c
[I 2021-07-18 12:34:21.600 ServerApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。
[C 2021-07-18 12:34:21.611 ServerApp] 
    
    To access the server, open this file in a browser:
        file:///Users/xxxxxxxxxxx/Library/Jupyter/runtime/jpserver-12012-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/lab?token=34c565d65276b259c3303f6812ebdc8328d63ff156a0022c
     or http://127.0.0.1:8888/lab?token=34c565d65276b259c3303f6812ebdc8328d63ff156a0022c

ブラウザに貼り付けて遷移。途中ビルドを促される場合は、

ダイアログに従い実行します。

環境が利用出来るようになったらサンプルコードを貼り付けて実行してみます。以下のようにチャートが描画されました。

 

まとめ

という訳で、Plotlyのインストールに関する内容の紹介でした。

次回以降のエントリで、Plotly/Dashの様々な機能や使い方を試してみたいと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.