
「Pythonに興味がある」「プログラミングを勉強してみたい」そんな方におすすめの新連載が始まりました!Excelと組み合わせて、楽しく始められる内容です。手順の紹介だけではなく、読むだけでも「なるほど!」と思っていただけるよう、ポイントもやさしく解説しています。
さらに、本記事のご感想をお寄せいただいた方の中から抽選で、書籍『いきなりプログラミングPython』wat著(翔泳社)をプレゼント。詳細は記事の最後をご覧ください。
今回つくるもの
◆どれとどれが関係ある?データ発見ツール
Excelは世界中の企業で使われている表計算ソフトで、その名の通りデータを表にまとめることが得意です。Excel単体でも統計分析やグラフを使ったデータの可視化処理は可能ですが、今回は「Excelでまとめられたデータを、Pythonを使って一気に相関分析*する方法」を紹介します。
*相関分析とは:二つの要素の関連性を見る分析手法
- Excelでも分析はできるけど、Pythonで楽をしよう
・大量の相関関係をPythonで分析するメリット
・ペアプロットとは? - Pythonプログラミングの準備
・Pythonプログラミング環境の構築
・必要なライブラリのインストール - サンプルのExcelファイルについて
- Python×Excelで実践!
・まずはシンプルなペアプロットを描画してみる
・相関係数で色を付ける - 全体のコードはこちらから
- 読者プレゼントのお知らせ
1.Excelでも分析はできるけど、Pythonで楽をしよう
■大量の相関関係をPythonで分析するメリット
小売業界や製造業界、IT業界等の業種に限らず、企業活動の中では日々多くのデータが蓄積されます。これらのデータを適切に分析することで経営の舵取りやプロダクトの方向性を判断できるため、データ分析の重要性はますます高まっています。
とはいえ、大量のデータが「ある」だけでは意味がありません。分析といってもデータの種類や特性ごとに適切な手法を選択する必要があります。生成AI時代になった現代でも、まずは生データを人がよくみて考察をすることでAIへの指示の明確化ができ、その後のデータ分析から得られる洞察の精度が上がることがあります。
しかし、生データをサッと見たいとき、データが増えてくるとExcelではなかなか可視化が困難です。そこで、Pythonの出番です。Pythonを使えば、データが大量に増えたときにでも簡単に可視化分析ができるのでおすすめです。
■ペアプロットとは?
この記事では複数の変数間における相関関係を一望するペアプロットと呼ばれる可視化する方法を学びます。ペアプロットの例を次に示します。

このように「ペアプロット」は、非対角成分が散布図、対角成分がヒストグラムになっている図のことを言います。

MEMO
◆画像中赤枠で囲った対角成分=ヒストグラム*
データの変数が0, 1, 2...の順に並んでいるとして、0と0同士をはじめとした「対角成分」は散布図を描くと直線になるだけなのでヒストグラムで埋めています。
◆画像中青枠で囲った非対角成分=散布図*
「非対角成分」は0番目と1番目のデータ、0番目と2番目のデータ…と総当たりで散布図を描いているので、この図を見ると全ての変数間の相関関係を一望していることになります。
*ヒストグラムとは:「どのくらいの数が、どのグループに入っているか」を、棒の高さで見せるグラフ
*散布図とは:「2つの変数の関係」を点であらわすグラフ
Excelでこの図をつくろうと思ったらグラフを1つずつ用意してデータを手動で登録し、ヒストグラムを別で計算した後にグラフを作成して…という作業を繰り返す必要があります。
もちろんVBAを使って自動化することも可能ですが、餅は餅屋、データ分析が得意なPythonを使ってみましょう。
2. Pythonプログラミングの準備
■Pythonプログラミング環境の構築
Pythonプログラミングの環境は「最速でPython環境を構築してプログラミングをはじめよう」を参照してください。リンク先にはPythonのインストール方法、プログラムの記述・実行方法、外部ライブラリのインストール方法をまとめています。
▼第0回:最速でPython環境を構築してプログラミングをはじめよう
jupyter labコマンドを実行する手前まで行う)。■必要なライブラリのインストール
以下の2つの外部ライブラリをインストールしておきましょう。
(1)seaborn
seabornは内部でMatplotlibを使っていますが、少ないコードで統計的な可視化を行う便利なライブラリです。今回はペアプロットの描画で使います。次のコマンドでインストールしましょう。seabornをインストールすることでPandasやMatplotlibも依存関係として一緒にインストールされます。pip install seaborn
(2)openpyxl
openpyxlはPandasでExcelを読み込むときに必要です。以下のコマンドでインストールしましょう。pip install openpyxl
外部ライブラリのインストールが終了したら、以下のコマンドを入力して、JupyterLabを立ち上げましょう。立ち上がったらNotebookと書かれている下のアイコンをクリックします。jupyter lab

3. サンプルのExcelファイルについて
この記事で使用するサンプルのExcelファイルを用意しました。このファイルをプログラム実行フォルダの直下に置いて使ってください。
▼クリックするとファイルがダウンロードされます。
https://www.r-staffing.co.jp/rasisa/wp-content/uploads/2025/11/data.xlsx
このファイルの中身は以下です。

データの内容は次の通りです。
- A列:睡眠時間
- B列:1日当たりの歩数
- C列:体重
- D列:血圧
- E列:1日当たりのコーヒー摂取量
健康に関するデータになっていますが、本記事のために作成した架空のデータであることにご注意ください。
4. Python×Excelで実践!
■まずはシンプルなペアプロットを描画してみる
次のコードはseabornを使ってペアプロットを描画するPythonコードです。とても簡単なコードです。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
# Excel読み込み(最初のシート)
df = pd.read_excel("data.xlsx")
df_num = df.select_dtypes(include="number")
# ペアプロット
sns.set_theme()
g = sns.pairplot(df_num)
g.fig.savefig("pairplot.png", dpi=300, bbox_inches="tight")
plt.show()
plt.close()
このコードを実行すると、次のグラフがコード記入欄の直下に表示されます。また、プログラム実行フォルダの中にpairplot.pngという画像ファイルも保存されています。

対角成分のヒストグラムを見るとどのデータも中央に最頻値があるように見えます。
さて、このグラフを見てすべてを理解したという人はいますか?と聞くまでもなく、なかなか難しいと思います。それでは次にもっとわかりやすくする方法を考えてみましょう。
■相関係数で色を付ける
先ほどのペアプロットはただ散布図を並べただけでした。このプロットの目的は相関関係を一望するものでしたが、ただ並べただけだとその相関関係すらよくわからない結果となります。
そこで、相関係数によって散布図に色をつけてもっと見やすくしてみましょう。
先ほどのプログラムファイルに以下のコードを追加します。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib import colors as mcolors # 追加
colorsをimportします。mcolorsというエイリアスを使うことでよく使われる変数名colorsの重複を避けています。続いて、scatter_with_corr_background関数を追加しましょう。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib import colors as mcolors
def scatter_with_corr_background(x, y, **kwargs):
"""散布図の背景色を相関係数に応じて変える"""
ax = plt.gca()
coeff = corr.loc[y.name, x.name]
if pd.isna(coeff):
coeff = 0.0
ax.set_facecolor(cmap(norm(coeff)))
sns.scatterplot(x=x, y=y, ax=ax)
plt.gca()で現在のサブプロット情報を取得し、相関係数の行列corrから列名y.name, x.nameをキーにして相関係数を取得します。if文では値が
NaNでないかをチェックして、データが欠損している場合等に対応します。 その後
axに背景色を指定します。ここではnormを使って相関係数の値を0から1の範囲に正規化しています。 最後に
sns.scatterplotにデータを渡して散布図を描画するというものです。関数の引数に**kwargsがありますが、これはseabornのPairGridが内部で使っているキーワード引数を意味しており、この関数自体では受け皿としてしか使っていませんが、ないとTypeErrorになるので必要です。最後に、メイン文に以下のコードを追記して完成です。
# Excel読み込み(最初のシート)
df = pd.read_excel("data.xlsx")
df_num = df.select_dtypes(include="number")
# 散布図用に相関係数とカラーマップを事前計算 # 追加
corr = df_num.corr() # 追加
cmap = sns.color_palette("coolwarm", as_cmap=True) # 追加
norm = mcolors.Normalize(vmin=-1, vmax=1) # 追加
# ペアプロット
sns.set_theme()
g = sns.PairGrid(df_num)
g.map_diag(sns.histplot) # 追加
g.map_offdiag(scatter_with_corr_background) # 追加
g.fig.savefig("pairplot_color.png", dpi=300, bbox_inches="tight")
plt.show()
plt.close()
df_numにはExcelから読み込んだ数値データが入っていますが、.corrにより相関係数を計算しています。cmapにはカラーマップを指定しますが、この例ではcoolwarmを使っています。normでカラーマップの範囲を-1から1に正規化しています。gでPairGridをつくっていますが、対角成分map_diagと非対角成分map_offdiagで別々の処理をしています。非対角成分には先ほど作成した自作の関数をつかって色をつけているという仕組みです。このコードを実行すると、次のグラフがコード記入欄の直下に表示されます。また、プログラム実行フォルダの中にpairplot_color.pngという画像ファイルも保存されています。

濃い青ほど負の相関が強く、濃い赤ほど正の相関が強い結果を示しており、データの相関関係が視覚的にわかりやすくなりました。 これは架空のデータですが、以下の特徴がわかると思います。
- 睡眠時間が長い人はコーヒーをあまり飲まない
- 歩数が多い人は体重が軽い傾向にある
- 体重が重い人は血圧が高い傾向にある
5. 全体のコードはこちらから
この記事ではデータを記録することが得意なExcelの数値をPythonで読み込み、Excel単体ではなかなか時間のかかる処理をPythonで実施してみました。
ペアプロットはかなり汎用的に使えるデータ可視化手法なので、ぜひお手元のデータで試してみてください。Pythonを使ったデータ分析をたくさん身につけると、お仕事でも一目置かれるかもしれませんね!
最後に、この記事で紹介した全体のコードを載せます。パソコンで開ける方はぜひコピペして遊んでみてください。
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib import colors as mcolors
def scatter_with_corr_background(x, y, **kwargs):
"""散布図の背景色を相関係数に応じて変える"""
ax = plt.gca()
coeff = corr.loc[y.name, x.name]
if pd.isna(coeff):
coeff = 0.0
ax.set_facecolor(cmap(norm(coeff)))
sns.scatterplot(x=x, y=y, ax=ax)
# Excel読み込み(最初のシート)
df = pd.read_excel("data.xlsx")
df_num = df.select_dtypes(include="number")
# 散布図用に相関係数とカラーマップを事前計算
corr = df_num.corr()
cmap = sns.color_palette("coolwarm", as_cmap=True)
norm = mcolors.Normalize(vmin=-1, vmax=1)
# ペアプロット
sns.set_theme()
g = sns.PairGrid(df_num)
g.map_diag(sns.histplot)
g.map_offdiag(scatter_with_corr_background)
g.fig.savefig("pairplot_color.png", dpi=300, bbox_inches="tight")
plt.show()
plt.close()
6. 読者プレゼントのお知らせ!
アンケートにご協力いただいた方の中から抽選で書籍『いきなりプログラミングPython』wat著(翔泳社)をプレゼントします。その名の通り、「いきなり」作りはじめる入門書!ご応募お待ちしています。
※リクルートスタッフィングにご登録いただいている方が対象となります。
■応募締め切り
2026年2月10日(火)まで
■応募条件
リクルートスタッフィングにご登録いただいている方が対象となります。
■応募方法
こちらよりご応募ください。
※ご応募は期間中お1人様1回限りとなります。ご了承ください。
■注意事項
・リクルートスタッフィングのご登録情報と応募時にご入力いただく【氏名】【スタッフNo.】【メールアドレス】【生年月日】の4点が一致していない場合は、抽選の対象外となります。ご登録情報のご確認は、MyPageよりお願いしております。
・当選者の発表は、賞品の発送をもって代えさせていただきます。賞品の発送は、締め切り後1ヶ月以内にお送りいたします。
・賞品は、MyPageにご登録の「住所」にお送りいたします。変更がある場合は、締め切りの2026年2月10日(火)までに「登録情報の確認・変更」よりお手続きをお願いいたします。
・個人情報やご登録状況、抽選の結果、賞品発送状況に関するお問い合わせは、お答えいたしかねます。
・ご回答いただいた内容は、「エンジニアスタイル」の企画のみに使用いたします。
メーカー勤務機械系エンジニア。WATLABブログ運営者。工学計算に関する知識の習得を目指し、Pythonの学習を2019年からはじめる。仕事以外にも、趣味のプログラミングやPythonコミュニティへの参加を行っている。また、月間数万PVのPythonブログ「WATLAB」を立ち上げ、初心者向けに図を多くしたわかりやすい記事を作成・公開している。著書は『いきなりプログラミング Python』(翔泳社)。
ブログ:https://watlab-blog.com/
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。
※本稿に記載されている情報は2025年10月時点のものです。

