Python in Excel を使用したビジュアル データ分析: 棒グラフの使用

この記事は、Microsoft Excel で Python を使ってデータを視覚的に分析する方法を紹介するシリーズのパート 4 です。

Python in Excel を初めて使用する場合は、このシリーズで想定している多くの概念について説明した「Excel アナリスト向け Python」シリーズから始めることをお勧めします。

このシリーズでは、コードの記述に Microsoft Excel Labs Python Editor を使用します。ただし、Python Editor は必須ではありません。すべてのコードは、数式バーと新しい PY() 関数を使用して入力できます。

このシリーズの各記事には、Microsoft Excel のワークブックが用意されています。パート 4 のワークブックは、こちらからダウンロードできます。

このシリーズは、以下の 5 つのパートで構成されます。

注: この記事で紹介する例を実際に試す場合は、Python in Excel の体験版をインストールしてください。このブログ シリーズが気に入った方は、自己学習型認定プログラム「Anaconda 認定: Python in Excel を使用したデータ分析」もぜひチェックしてみてください。

分析シナリオ

この記事では、パート 3 で使用したプロモーション戦略の効果を分析するシナリオを引き続き使用します。

この記事のワークブックには、次の再販業者の売上データのテーブルが含まれています。

図 1 – 再販業者の売上データ

図 1 のテーブルは、ビジネス分析で非常に一般的なシナリオ (地理や製品などのカテゴリ データの広範な使用) を示しています。

カテゴリ データの分析では、視覚化によく棒グラフ (バー チャート) を使用します。Microsoft Excel の縦棒グラフとしてご存知の方も多いでしょう。

棒グラフの導入

Python seaborn ライブラリを使用すると、棒グラフを簡単に作成できます。必要なのは数行のコードだけです。

データの分析に必要な seaborn 棒グラフを作成するには、図 1 に示す Excel テーブルを pandas DataFrame として読み込む必要があります。

図 2 – データを読み込む Python コード

注: 上記の Python コードは Excel Labs Python Editor を使用して記述されていますが、これは必須ではありません。

Python Editor のディスク アイコンをクリックすると、コードが実行されます。

図 3 – Python コードの実行

最初の棒グラフ

分析の開始点として、SalesTerritoryCountry (販売国) ごとの SalesAmounts (販売額) を理解することは理にかなっています。次の Python コードは、seaborn barplot() 関数を使用して棒グラフを作成します。

図 4 – 棒グラフの Python コード

図 4 に示すコードは、棒グラフを次のように構成します。

  • reseller_sales DataFrame は、視覚化のデータ ソースです。
  • SalesTerritoryCountry 列は、x 軸にマップされます。
  • SalesAmount 列は、y 軸にマップされます。

コード セルを [Convert to Excel values] オプションで構成すると、ワークシート セル内に棒グラフが表示されます。

図 5 – ワークシート セル内で棒グラフをレンダリング

Python Code Editor でディスク アイコンをクリックすると、コードが実行され、次の棒グラフが生成されます。

図 6 – 最初の棒グラフ

図 6 の棒グラフについて、以下の点に注意してください。

  • barplot() 関数は、デフォルトで数値の平均 (または平均値) を計算します。
  • 各棒の上部にある黒い縦線は、平均値の信頼区間を表します。これは、平均値の可能な範囲と考えることができます。
  • 国名が読みづらいです。

ほとんどの場合、平均値を計算する barplot() のデフォルトの動作は望ましくありません。

棒グラフの修正

次の Python コードは、上記の棒グラフの問題に対処します。

図 7 – 更新された Python コード

図 4 のコードと比較すると、図 7 のコードは以下の点が更新されています。

  • estimator が、平均ではなく SalesAmount 列の合計を使用するように変更されています。
  • グラフのテキストを読みやすくするため、tight_layout() function 関数が使用されています。
  • デフォルトでは、barplot() 関数は大きな数値に対して科学的記数法を使用します。ticklabel_format() 関数を使用すると、プレーンな数値の使用が強制されます。

コード セルを [Convert to Excel values] オプションで実行すると、棒グラフが更新されます。

図 8 – 更新された棒グラフ

図 8 の棒グラフを調べると、販売の大部分がカナダと米国からのものであることがわかります。

カテゴリ別棒グラフ

seaborn barplot() 関数は、数値列 (例: SalesAmount) とカテゴリ列 (例: SalesTerritoryCountry) の棒グラフを作成するシナリオ向けです。

カテゴリ値の数をカウントする場合は、seaborn countplot() 関数を使用します。次のコードは、さまざまな SalesTerritoryCountry 値の数をカウントする棒グラフを作成します。

図 9 – カテゴリのみの棒グラフの Python コード

コード セルを [Convert to Excel values] オプションで実行すると、次の棒グラフが生成されます。

図 10 – SalesTerritoryCountry 値の棒グラフ

図 10 でも、数が最も多いのは米国とカナダです。

プロモーション分析

ビジネス分析の一般的な戦略は、数値列をカテゴリ表現に変換することです。

たとえば、次の Python コードは、reseller_sales DataFrame に Profitable (収益性) 列を作成します。

図 11 – Profitable カテゴリ列を作成する Python コード

注: 上記のコード セルは、[Python object] 出力オプションを使用して構成されています。

図 11 のコード セルを実行すると、プロモーション分析を簡素化するために使用できるブール値 (True/False) 列が作成されます。

プロモーション タイプ別の収益性

Profitable 列を作成したら、次のコードで PromotionType (プロモーション タイプ) 別の Profitable 値の数の棒グラフを作成できます。

図 12 – PromotionTypeProfitable の棒グラフの Python コード

図 12 のコードは、棒グラフを次のように構成します。

  • reseller_sales DataFrame は、視覚化のデータ ソースです。
  • PromotionType 列は、y 軸にマップされます。
  • Profitable 列は hue にマップされます。

上記のリストの最後の項目にある hue パラメーターは、視覚化に 2 番目のカテゴリ列を追加します。

図 12 のコードの場合、hueProfitable を使用すると、PromotionType の一意の値ごとに True と False のバーが関連付けられます。これらの True/False バーの長さは、PromotionType 別の値の数になります。

説明が抽象的で分かりづらいかもしれませんが、図 12 のコード セルを実行すると、次のように視覚化されます。

図 13 – PromotionTypeProfitable の棒グラフ

図 13 の棒グラフを調べると、次のことがわかります。

  • 数量の点では、No Discount (割引なし) の販売が大部分を占めています。ただし、これらの販売のほぼ 50% は利益が出ていません。
  • New Product (新製品) と Discontinued Product (販売中止製品) の販売は常に利益が出ていないようです。
  • Volume Discount (数量割引) の販売は利益が出ないことが多いです。
  • Seasonal Discount (季節割引) の販売は常に利益が出ているようです。
  • Excess Inventory (余剰在庫) の販売は数量が非常に小さいため、グラフに描画されていません。

図 13 は、プロモーションの収益性に関する多くの情報を提供しており、ビジュアル データ分析でよく使用される、複数の列を同時に視覚化する方法を示しています。

ファセット棒グラフ

図 13 に示すように、視覚化に使用する列の数が増えるにつれて、データ視覚化の威力は増します。

seaborn ライブラリは、ファセットと呼ばれる手法を使用して、多数の列を組み合わせた視覚化の作成をサポートしています。ファセットは、複数の異なるカテゴリ値の交差を表すミニ視覚化と考えることができます。

たとえば、次のコードは ProductCategoryName (製品カテゴリ名) と PromotionType を組み合わせた Profitability のファセット棒グラフを作成します。

図 14 – ファセット棒グラフの Python コード

図 14 のコードは、seaborn catplot() 関数を使用してファセット棒グラフを作成しています。このコードは、棒グラフを次のように構成します。

  • reseller_sales DataFrame は、視覚化のデータ ソースです。
  • kindcount プロット (カテゴリ データのみの棒グラフ) に設定されています。
  • 視覚化はグリッドを使用して作成され、グリッドには Profitable の一意の値ごとに列があります。
  • グリッドの各行は、ProductCategoryName の一意の値に対応します。
  • グリッドの各セルは、y パラメーターを介して PromotionType の値の水平棒グラフになります。

図 14 のコード セルを実行すると、次のように視覚化されます。

図 15 – ファセット棒グラフ

図 15 に示すグラフは非常に大きいので、ファセットの仕組みをよりわかりやすく示すため、グラフの最初の行だけを次に示します。

図 16 – ファセット棒グラフの最初の行

図 16 は次のように読むことができます。

  • 左側の棒グラフは、販売が利益を生まなかった Bikes 製品カテゴリのさまざまな PromotionType 値の数を示しています。
  • 右側の棒グラフは、販売が利益を生んだ Bikes 製品カテゴリのさまざまな PromotionType 値の数を示しています。

図 16 は、売上数で測定すると Bikes カテゴリが不採算であることを示しています。これはデータの 1 つの見方にすぎず、最も正確な解釈ではない可能性があります。


次のコードは、Profit の合計を使用してデータを別の視点から見るファセット棒グラフを作成します。

図 17 – 更新されたファセット棒グラフの Python コード

図 14 のコードと比較すると、図 17 のコードは以下の点が更新されています。

  • kind が bar グラフ (数値列とカテゴリ列) に変更されています。
  • estimator が数値列の合計に設定されています。
  • 数値列は、x パラメーターによって Profit 列に設定されます。

以下は、更新されたファセット棒グラフの最初の行です。

図 18 – 更新されたファセット棒グラフの最初の行

図 18 のファセットを調べると、より詳しい情報が得られます。すべての PromotionType 値における Bikes カテゴリの損失を考慮すると、Bikes カテゴリは全体的に不採算であることがわかります。

以下は、更新されたファセット棒グラフの全体です。

図 19 – 更新されたファセット棒グラフの全体

図 19 のファセット棒グラフから、以下のことがわかります。

  • Bikes カテゴリは利益/損失の点で群を抜いて最大であり、カテゴリ全体では利益が出ていません。
  • Components カテゴリと Clothing カテゴリは損失もありますが、全体的には利益が出ています。
  • Accessories カテゴリは利益のみで損失がありません。

この記事で取り上げた手法を使用することで、データをさらに掘り下げて、プロモーション効果の「理由」をさらに明確にするスキルが身につきます。

たとえば、Bikes カテゴリをさらに詳しく調査して、不採算販売の潜在的な要因やパターンを明らかにすることができます。

次にすべきこと

この記事では、データ分析ツールの 1 つとして棒グラフを使用すべき理由を説明しました。棒グラフは、エグゼクティブ ダッシュボードなど、データ視覚化にもよく使用されます。

特に、ファセット棒グラフは、意思決定者にとってデータに裏付けされた説得力のある根拠を示すのに役立ちます。

このシリーズの最後となる次の記事では、ビジネス データの分析に最適な視覚化である折れ線グラフを紹介します。

次回まで、楽しいデータ調査を続けてください!

2024 © Anaconda Inc.
Visual Data Analysis with Python in Excel: Using Bar Charts

タイトルとURLをコピーしました