Japan今回も引き続き、Pythonから「PowerPoint」を操作する機能を供する「python-pptx」ライブラリを紹介していきます。連載の目次は、以下のようになっていますので参考になさってください。>>さて、ビジネスシーンにおいて数値の分布や時間推移を可視化するといったニーズは以外にも多いのではないでしょうか。売上の月間の推移や商品の年代別の販売個数など、「マーケッティング」や「統計データ分析」を行いたいときなどです。データの可視化には、「図」「テーブル(表)」「グラフ」などいろいろな手段はあるわけですが、これらの中でももっとも効果を発揮する要素としては、「スライドにグラフを挿入する」だと筆者は考えます。ところで、グラフを作るとき皆さんはどのようなツールを使うでしょうか?おそらく、PowerPoint用の資料を作るにしても一度Excelでグラフを作ってから、それをスライドに貼り付けるといった手順がほとんどだと思います。それでも、全く間違いではないのですが、、Excel→PowerPointという2つのツールを行き来することなくPowerPointだけで自動的にグラフが書けるとしたらより便利だと感じませんか?そこで、連載3回目となる今回はpython-pptxだけを使ってPowerPointのグラフを作成・挿入する方法を紹介します。この記事を読むことで次のことが分かるようなります。この記事で学べることPowerPointにグラフを挿入する手順を図解で解説するグラフ(Chartオブジェクト)の関連オブジェクト・属性について整理する棒グラフ、散布図といった主要グラフのコード例を詳細解説するそれでは、次節より具体的なグラフ作成の手順について解説をしていきます。本記事内で紹介する各種クラスや関数などの使い方は一例です。省略可能なオプション引数などについては割愛していますので、詳細や不明点などは必要に応じて下記「公式ドキュメント」を参照してください。グラフ(Chartオブジェクト)を作成する本節では、python-pptxを使ってスライドにグラフを作成する手順を解説していきます。python-pptxで対応できるグラフの種類は、立体(3D)を除いたほぼ全てのタイプです。それぞれタイプによって、「データ(ChartDataオブジェクト)」(後述)作成手順に違いはありますが、手順の概要はどれも同じです。はじめにグラフ作成のフローを解説します。(図1)以降の説明の➀~➄は<図1>内の番号と紐づいています。Shape(グラフ)オブジェクトを生成する際に、どのタイプのグラフを作成するかあらかじめ宣言する必要があります。まとめられているのでインポートします。(python-pptx.readthedocs.io)XL_CHART_TYPEクラスの主要な定義は以下ようなものがあります。XL_CHART_TYPEクラスの主要な定義(Enum)Exceのグラフ各種に対応しているようですが、立体(3D)グラフのサポートは対象外のようです。グラフを配置する場所(スライドの左上が原点)と、グラフエリアのサイズ(縦・横)を決めます。スライドの座標を決める単位は、「インチ(Inches)」「センチ(Cm)」「ポイント(Pt)」などがあります。必要な単位系のクラスをインポートします。※特に単位を指定しなければ、Emu単位が適用されますが、我々日本人とっては扱いづらいので、上記の単位系を使うことがおすすめします。データクラスは作成するグラフのタイプにより個別に提供されています。事前にインポートします。取得すると同時に、Shapesコレクションに追加されます。add_chart()メソッドの引数には、➀➁➂で用意したオブジェクトを設定します。➃で取得したShape(GraphicFrame)オブジェクト(グラフ・テーブル・SmartArtのコンテナ)からは、直接グラフを操作することはできません。よってChartオブジェクトを取得した後、配下の属性を使ってグラフ本体の詳細設定をしていきます。<補足事項>また➂のデータセットの作り方について補足します。データセットについては、Excelでのグラフ作成の知識を必要とします。最低限、「系列とは?」「カテゴリ(系列)とは?」といったことは分かっているものとして以降の解説をします。本記事では、例えば図4の棒グラフがあった場合、データ区分の呼称は以下のように統一します。X軸(項目軸)の区分領域数を指します。系列(シリーズ)とは、それぞれのカテゴリ(項目)に対するY軸の値をグルーピングする単位のことです。図4の例でいえば、3つのカテゴリ(項目・赤枠)があって、各カテゴリ内に3つずつ系列(青枠)を含むイメージになります。図4(棒グラフ)は各系列で、カテゴリ(項目)を共有に取るタイプのグラフですが、散布図やバブルチャートといったグラフは、各系列ごとに独立した項目(X軸の値)を指定することができます。以上が、グラフ作成における前提知識になります。それでは、フロー内で登場した各オブジェクトやメソッド・属性について次項より詳しく解説していきます。グラフの参照データ(ChartDataオブジェクト)を定義するグラフを作成するには、その参照先となるデータをあらかじめ定義する必要があります。ChartDataオブジェクトの生成手順(使用するクラス)は、目的のグラフの種類によって異なるため使い分ける必要があります。まとめると以下のようになります。グラフタイプによるChartDataクラスの使い分け大きくカテゴリ(項目)の共有の有無で区分されますが、それぞれの詳細を次項にて解説していきます。オブジェクトを参照データにとります。書式は以下のとおりです。ChartDataオブジェクト上記2つのクラスは機能的には全く同じです。以下、公式ドキュメントにあるように完全なエイリアスであるとあります。今後の新規開発時には、「CategoryChartDataクラス」の使用を推奨するとコメントがあります。ChartDataクラスについてのコメントオブジェクトの取得ができたところで、次は配下のプロパティ(属性)を通して「カテゴリ(項目名)」や「系列データ」を設定していきます。「CategoryChartDataクラス」に対して行います。書式の解説だけでは分かりずらいと思いますので、参照データを作るサンプルコードを一つ紹介します。Z)をもつデータセット(ChartDataオブジェクト)の生成ができました。オブジェクトを参照データにとります。XyChartDataオブジェクトオブジェクトの取得ができたところで、今度は配下のメソッドを通して「系列の追加」と「系列のデータ(X,Yのデータ組合せ)の設定」をしていきます。