この記事は、Microsoft Excel で Python を使ってデータを視覚的に分析する方法を紹介するシリーズのパート 3 です。
Python in Excel を初めて使用する場合は、このシリーズで想定している多くの概念について説明した「Excel アナリスト向け Python」シリーズから始めることをお勧めします。
このシリーズでは、コードの記述に Microsoft Excel Labs Python Editor を使用します。ただし、Python Editor は必須ではありません。すべてのコードは、数式バーと新しい PY() 関数を使用して入力できます。
このシリーズの各記事には、Microsoft Excel のワークブックが用意されています。パート 3 のワークブックは、こちらからダウンロードできます。
このシリーズは、以下の 5 つのパートで構成されます。
- パート 1 – ヒストグラムの使用
- パート 2 – ボックスプロットの使用
- パート 3 – 散布図の使用 (この記事)
- パート 4 – 棒グラフの使用
- パート 5 – 折れ線グラフの使用
注: この記事で紹介する例を実際に試す場合は、Python in Excel の体験版をインストールしてください。このブログ シリーズが気に入った方は、自己学習型認定プログラム「Anaconda 認定: Python in Excel を使用したデータ分析」もぜひチェックしてみてください。
散布図の導入
ビジネス分析の一般的なシナリオは、たとえば広告費と売上のように、2 つの指標の間に何らかの関係があるかどうかを調査することです。
言い換えると、2 つの数値列の関係です。
以前の記事で説明したように、数値列が小さい場合は目視で検査できますが、数列が大きくなるにつれてこれは困難になります。
散布図を使用して 2 つの数値列を視覚化すると、次の目標を達成できます。
- 分析を大きな数値列に拡張できます。
- データ内のパターンと関係性の検出と分析がはるかに簡単になります。
不自然な例
不自然な例として、次のデータ コレクションについて考えてみます。
図 1 に示すデータは、次のように構成されています。
- 各行は、ある期間 (たとえば、月) を表します。
- Ice Cream Sales (アイスクリームの売上) と Shark Attacks (サメの攻撃回数) は、期間ごとに記録されています。
図 1 は、目視でいくつかの洞察を導き出すことができるシナリオを示していますが、この記事の後の例では、散布図の力を実証します。
最初の散布図
Python seaborn ライブラリには、散布図ベースの視覚化機能がいくつか用意されています。次のコードは、図 1 に示す Excel テーブルを pandas DataFrame として読み込み、データを散布図として視覚化します。
注: 上記の Python コードは Excel Labs Python Editor を使用して記述されていますが、これは必須ではありません。
図 2 に示すコードは seaborn scatterplot() 関数を利用して、次のように視覚化を設定します。
- shark_attacks DataFrame はデータソースです。
- Ice Cream Sales 列は x 軸に描画されます。
- Shark Attacks 列は y 軸に描画されます。
set_title() メソッドは散布図にタイトルを追加します。
コード セルは、Python Code Editor でセルの下矢印をクリックして [Convert to Excel values] オプションを使用して構成します。このオプションを選択すると、ワークシート セル内に散布図が表示されます。
Python Editor のディスク アイコンをクリックすると、コードが実行されます。
図 2 に示すコードにより、次の散布図が生成されます。
図 5 の各ポイントは、図 1 に示すデータ テーブルの 1 行を表します。
相関関係の導入
散布図を使用して数値データを視覚的に分析する場合、主な目的は数値列間の相関関係を特定することです。
相関関係は統計学における重要な概念であり、数学的な定義がいくつかあります。相関関係の基礎となる数学的知識は役に立ちますが、このブログ記事では相関関係を理解するために直感的なアプローチを採用します。
まず、相関関係の 3 つの基本形式を理解しましょう。
正の相関
最初の形式は、ある列の値が大きくなると、2 番目の列の値も大きくなるというデータ内の関係です。
このような関係がデータに存在する場合、正の相関と呼ばれます。
多くの場合、散布図を視覚的に検査すれば、正の相関は明らかです。そうでない場合もあります。
seaborn ライブラリには、トレンド ライン付きの散布図を作成する regplot() 関数が用意されています。散布図にトレンド ラインを追加すると、多くの場合便利です。
図 6 のコードは、図 2 のコードとよく似ています。注目すべき違いは、line_kws パラメーターを使用してトレンド ラインのスタイルを破線に設定していることです。
図 6 に示す Python Code Editor セルは、[Convert to Excel values] オプションで構成されています。コードを実行すると、次のように視覚化されます。
図 7 に示すように、データには正の相関関係があります。Ice Cream Sales の値が大きくなるほど、Shark Attacks の値も大きくなります。
また、図 7 ではトレンド ラインが散布図のすべてのポイントと交差しています。これが発生すると、データは完全に相関していると見なされます。
図 7 を見ると、提供されている限られたデータセットに基づいて、Ice Cream Sales の値から Shark Attacks を 100% 正確に予測できることが直感的に分かります。
言い換えると、散布図のデータ ポイントがトレンド ラインに近づくほど、相関関係が強くなります。
負の相関
2 つ目の形式は、ある列の値が大きくなると、2 番目の列の値が小さくなるというデータ内の関係です。
このような関係がデータに存在する場合、負の相関と呼ばれます。
次の散布図について考えてみましょう。
図 8 を調べると、Daily Temperature (日別の気温) が上昇すると、Monthly Energy Bill (月別の電気料金) は減少する (つまり、電気の使用量が少なくなる) ことが直感的に分かります。
図 7 と比較すると、図 8 のトレンド ラインはデータ ポイントに近いものの、1 つのポイントとしか交差していないことに注意してください。
また、図 7 とは異なり、図 8 のデータは相関性は高くても、完全に相関していません。より正確には、図 8 のデータは負の相関性が高くなっています。
ここでも、1 つの値から別の値を予測できることが直感的に分かります。
たとえば、提供されている限られたデータセットに基づいて、Daily Temperature から Monthly Energy Bill の値をかなり正確に予測できます。
注: 正の相関と負の相関は、数値列の関係の性質のみを指し、関係の質を指すものではありません (つまり、負の相関は「悪い」という意味ではありません)。
相関なし
最後の形式は、数値列の値の間に識別可能な関係がない場合です。
次の散布図について考えてみましょう。
図 9 に示されているデータは不自然なものですが、X Values (X 値) と Y Values (Y 値) の間には予測関係がないという重要な概念を示しています。
たとえば、X 値が 1.00 の場合、Y 値は 1.00、2.00、3.00、4.00、または 5.00 になる可能性があります。この予測関係の欠如は、水平なトレンド ラインに表れています。
弱い相関関係
相関関係がスペクトルであることは注目に値します。一般的には、次のことが言えます。
- トレンド ラインが急勾配であればあるほど、正負を問わず相関関係は強くなります。
- トレンド ラインが平坦であればあるほど、相関関係は弱くなります。
次の散布図について考えてみましょう。トレンド ラインは、視認性を高めるために黒の実線になっています。
図 10 を調べて、トレンド ラインの傾きと、このデータセットで可能な予測の精度に注目します。
トレンド ラインは水平ではありませんが、傾きは非常にわずかです。これは、2 つの数値列の相関関係が非常に弱いことを意味します。
言い換えると、予測の精度は非常に低くなります。
相関分析
相関関係を使ってデータを分析する場合、「相関は因果関係を意味するものではない」ということを覚えておくことが重要です。
基本的な考え方は、2 つの数値列が高い相関関係にあるからといって、一方の列が他方の列の原因になるとは限らないということです。
たとえば、図 7 は、Ice Cream Sales と Shark Attacks の間に完全な正の相関関係があることを示しています。しかし、Ice Cream Sales が Shark Attacks の原因になると考えるのは馬鹿げています。
このように、予測精度の観点から相関関係を考えることは、ビジネス分析において重要です。相関は因果関係を意味するものではありませんが、予測関係は非常に有用です。
再販業者の注文の分析
プロモーション戦略のパフォーマンスを分析していて、次のデータセットがあるとします。
分析の妥当な開始点は、DiscountAmount (割引額) と利益の相関関係を確認することです。
データセットには現在利益が含まれていません。次のコードは、Excel テーブルを pandas DataFrame として読み込み、Profit 列を追加します。
図 12 に示すコードを実行すると、reseller_orders DataFrame が更新されます。
更新された DataFrame を使用すると、Profit と DiscountAmount の相関分析が可能になります。
Profit と DiscountAmount の相関関係
次の Python コードは、reseller_orders DataFrame のトレンド ライン付き散布図を作成します。
図 14 に示すコードは、ci パラメーターを使用している点で前の例と異なります。ci パラメーターは、トレンド ラインの周囲に表示される信頼区間のサイズを制御します。
トレンド ラインは、データセットから作成された線形回帰予測モデルです。データが完全な相関関係を示さない場合、トレンド ライン モデルの予測は完全ではありません。
信頼区間は、トレンド ライン モデルのエラー レベルに関する視覚的な指標を提供します。図 14 のコードは、信頼区間を表示しないように散布図を構成します。
図 14 に示す Python Code Editor セルは、[Convert to Excel values] オプションで構成されています。コードを実行すると、次のように視覚化されます。
図 15 から次のことが分かります。
- 全体的に、DiscountAmount と Profit の間には強い負の相関関係があります。
- 図の左上にあるデータ ポイントの集合から、DiscountAmount の値が非常に低い場合、予測関係はあまり強くありません。
- ただし、DiscountAmount が約 $2,500 を超えると、すべての注文の Profit がマイナスになるようです。
前述のように、この相関分析では、DiscountAmounts が Profit の原因になると想定すべきではありません。しかし、この予測関係は、さらに分析する価値があります。
Profit と DiscountAmount および SalesTerritoryGroup の相関関係
Profit と DiscountAmount の相関をさらに掘り下げる例として、特定の地域が、利益を生む/生まない注文の傾向が高い/低いかを調べることができます。
reseller_orders DataFrame には、以下のカテゴリ値を含む SalesTerritoryGroup 列があります。
- Europe
- North America
- Pacific
次のコードは、Profit と DiscountAmount および SalesTerritoryGroup の散布図を作成します。
図 16 のコードは、hue パラメーターを使用して、SalesTerritoryGroup の値に基づいて散布図データ ポイントを色分けします。
図 16 に示す Python Code Editor セルは、[Convert to Excel values] オプションで構成されています。コードを実行すると、次のように視覚化されます。
図 17 から次のことが分かります。
- North America の注文は、他の地域よりもはるかに多いです。
- 利益の最も少ない注文の大部分は、North America のものです。
図 15 と図 17 を組み合わせると、追加の分析が必要であることが分かります。たとえば、次の 2 つの質問が考えられます。
- DiscountAmount のほかに Profit に影響を与える要因 (過剰在庫の処分など) はないか?
- Profit に影響を与える地域間で違いは本当にあるのか? たとえば、North America で米国の売上はカナダの売上よりもはるかに利益が少ないのか?
次にすべきこと
この記事では、散布図を使用した相関分析が、数値列の関係についての洞察を導き出す強力なツールであることが分かりました。
相関分析はデータ アナリストにとって頼りになるツールです。
このシリーズの次の記事では、ビジネス分析で最も一般的なデータの 1 つである、製品ラインや地域などのカテゴリを視覚的に分析する方法を取り上げます。
次回まで、楽しいデータ調査を続けてください!
2024 © Anaconda Inc.
「Visual Data Analysis with Python in Excel: Using Scatter Plots」