Pythonを活用!散布図の作り方10選

Pythonで作成したカラフルな散布図Python
この記事は約15分で読めます。

※本記事のコンテンツは、利用目的を問わずご活用いただけます。実務経験10000時間以上のエンジニアが監修しており、基礎知識があれば初心者にも理解していただけるように、常に解説内容のわかりやすさや記事の品質に注力しております。不具合・分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。(理解できない部分などの個別相談も無償で承っております)
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonという言語を使って、ビジュアルに訴える力を持つ散布図を作る方法を学びましょう。

散布図はデータのパターンや関連性を視覚的に理解するのに非常に有効なツールです。

この記事ではPythonで散布図を作るための10の方法を詳しく解説します。

●Pythonとは

Pythonは初心者でも学びやすいプログラミング言語であり、さまざまな分野で広く活用されています。

その中でも、データ分析やデータ可視化では特にその力を発揮します。

Pythonにはデータ分析を助けるライブラリが多数存在し、その中でもMatplotlib、Seaborn、Pandasなどは散布図を作るのに特に役立つライブラリです。

●Pythonでの散布図の作り方

散布図は主に2つの変数間の関連性を視覚的に表現するのに使用されます。

Pythonでは、さまざまなライブラリを使って散布図を作成することができます。

○Matplotlibライブラリを使った方法

MatplotlibはPythonでグラフを描画するための基本的なライブラリです。

Matplotlibの「pyplot」モジュールを使って散布図を作成します。

□サンプルコード1

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

plt.scatter(x, y)
plt.show()

このコードではMatplotlibのpyplotモジュールを使って散布図を作成しています。

xとyのリストを定義し、それぞれの値を座標として散布図を描画します。

最後に、show()関数を用いて描画したグラフを表示します。

○Seabornライブラリを使った方法

SeabornはMatplotlibをベースにしたグラフ描画ライブラリで、より美しいグラフを簡単に作成することができます。

□サンプルコード2

import seaborn as sns

tips = sns.load_dataset('tips')
sns.scatterplot(x='total_bill', y='tip', data=tips)
plt.show()

このコードではSeabornを使って散布図を作成しています。

Seabornに内蔵されている’tips’データセットを読み込み、総計(total_bill)とチップ(tip)の関連性を散布図で表現します。

○Pandasライブラリを使った方法

PandasはPythonでデータ分析を行うためのライブラリで、データフレームという2次元の表形式のデータを扱うことができます。

Pandasを使ってデータを整形した後、散布図を描くことができます。

□サンプルコード3

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [2, 3, 5, 7, 11]})
df.plot.scatter(x='A', y='B')
plt.show()

このコードではPandasのデータフレームを使って散布図を作成しています。

AとBの2つのカラムを持つデータフレームを作り、その値を基に散布図を描画します。

●散布図のカスタマイズ方法

散布図を更に魅力的にするために、Pythonではさまざまなカスタマイズ方法が用意されています。

その中でもここではマーカーの変更、色の変更、透明度の調整の3つについて具体的に見ていきましょう。

○マーカーの変更

散布図のマーカーとは、データポイントを表す記号のことを指します。

マーカーの形やサイズを変更することで、視覚的な情報を更に加えることができます。

次のサンプルコードでは、マーカーの形を変更する方法を示しています。

□サンプルコード4

import matplotlib.pyplot as plt

# データの準備
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 10, 8]

# 散布図の描画(マーカーの形を's'(正方形)に設定)
plt.scatter(x, y, marker='s')

plt.show()

このコードでは、’scatter’関数の’marker’パラメータに’marker=’s”を指定して、マーカーの形を正方形に設定しています。

この例ではデータポイントが正方形のマーカーで描画されます。

他にもマーカーの形を指定するためには、’o'(円)、’+'(プラス)、’*'(星)、’.'(点)など多くのオプションが用意されています。

○色の変更

散布図のマーカーの色もまた、視覚的な情報を更に加えるための一つの手段です。

色を変更することで、データの属するカテゴリやデータの大きさなどを表現することができます。

次のサンプルコードでは、マーカーの色を変更する方法を示しています。

□サンプルコード5

import matplotlib.pyplot as plt

# データの準備
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 10, 8]

# 散布図の描画(マーカーの色を'red'に設定)
plt.scatter(x, y, color='red')

plt.show()

このコードでは、’scatter’関数の’color’パラメータに’red’を指定して、マーカーの色を赤に設定しています。

この例ではデータポイントが赤いマーカーで描画されます。

他にも多くの色を指定することができ、それぞれの色は特定の文字列(’blue’、’green’、’cyan’、’magenta’など)やRGB値で表されます。

○透明度の調整

マーカーの透明度を調整することで、データポイントの重なり具合を視覚的に表現することができます。

これは大量のデータを扱う際に特に有効です。次のサンプルコード6では、マーカーの透明度を調整する方法を表しています。

□サンプルコード6

import matplotlib.pyplot as plt

# データの準備
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 10, 8]

# 散布図の描画(マーカーの透明度を0.5に設定)
plt.scatter(x, y, alpha=0.5)

plt.show()

このコードでは、’scatter’関数の’alpha’パラメータに0.5を指定して、マーカーの透明度を半透明に設定しています。

この例ではデータポイントが半透明のマーカーで描画されます。

‘alpha’パラメータには0(完全に透明)から1(完全に不透明)までの数値を指定することができます。

次に、3D散布図の作り方について解説していきましょう。

2D散布図よりも更に情報を詰め込むことができるのが、3D散布図の魅力です。

○Matplotlibを使った3D散布図の作成

PythonのMatplotlibライブラリを使って3D散布図を作る方法を見ていきましょう。

まず、numpyとMatplotlibのインストールが必要です。

それぞれのライブラリはpipコマンドを使ってインストールできます。

pip install numpy matplotlib

□サンプルコード7

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# データ作成
np.random.seed(0)
x = np.random.randn(100)
y = np.random.randn(100)
z = np.random.randn(100)

# 3Dでプロット
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter3D(x, y, z)

# プロット表示
plt.show()

このコードでは、numpyを使ってランダムなデータを生成し、それを3Dでプロットしています。

先頭で乱数のシードを固定しているので、何度実行しても同じ結果が得られます。

生成される散布図は3軸を持ち、各点はそれぞれの軸に対する値を表します。

この3D散布図は、3つの特徴量を持つデータを可視化するのに非常に役立ちます。

このコードを実行すると、x軸、y軸、z軸のそれぞれにランダムな100個のデータポイントが散布された3D散布図が表示されます。

各点は3つのランダムな値に基づいてプロットされます。

○Plotlyを使った3D散布図の作成

次に、Plotlyライブラリを使って3D散布図を作成してみましょう。

PlotlyはPythonのインタラクティブなグラフィカルライブラリで、3Dグラフィックスに対応しています。

Plotlyを使うと、グラフにマウスホバーやズームといったインタラクティブな機能を追加できます。

まずは、Plotlyのインストールを行います。

下記のpipコマンドでインストールできます。

pip install plotly

次にPlotlyを使った3D散布図のサンプルコードを表します。

□サンプルコード8

import plotly.express as px

# データ作成
df = px.data.iris()

# 3Dでプロット
fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_length', color='species')
fig.show()

このコードでは、Plotly Expressの組み込みのアイリスデータセットを使用して3D散布図を作成しています。

このデータセットには、アイリス花の4つの特徴(がくの長さ、がくの幅、花びらの長さ、花びらの幅)と種類が含まれています。

この例では、がくの長さ、がくの幅、花びらの長さの3つの特徴を軸に3D散布図を作成し、花の種類によって色分けしています。

このコードを実行すると、3つの軸(がくの長さ、がくの幅、花びらの長さ)に沿ってデータポイントが散布され、それぞれの点はアイリスの種類によって色分けされた3D散布図が表示されます。

点をマウスでクリックしたり、図をドラッグしたりすることで、グラフを自由に回転させたり、ズームイン・ズームアウトしたりすることができます。

これにより、データのパターンやトレンドを多角的に観察することが可能になります。

●散布図行列の作成

複数の特徴を持つデータを分析する際に、各特徴間の関係を一度に視覚化したい場合があります。

そのようなときに便利なのが、散布図行列です。

散布図行列は、各特徴のペアごとの散布図を行列形式で表示するもので、データの特徴間の相関を一覧で確認することができます。

PythonのSeabornライブラリとPandasライブラリを使って、散布図行列を作成する方法を紹介します。

○Seabornを使った散布図行列の作成

Seabornライブラリは、データ可視化に特化したPythonのライブラリで、散布図行列の作成もサポートしています。

下記のサンプルコード9では、Seabornを使ってIrisデータセットの散布図行列を作成します。

Irisデータセットは花の種類(Iris-setosa、Iris-versicolour、Iris-virginica)とその花びらとがく片の長さと幅の4つの特徴からなるデータセットです。

□サンプルコード9

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

# Irisデータセットをロード
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)

# Seabornを使って散布図行列を作成
sns.pairplot(iris_df)
plt.show()

このコードではまず、SeabornとMatplotlib、sklearn.datasetsをインポートしています。

次に、sklearnの関数load_iris()を使ってIrisデータセットをロードし、そのデータをPandasのデータフレームに変換しています。

その後、Seabornのpairplot関数を使って散布図行列を作成し、Matplotlibのshow関数を使って画面に表示しています。

このコードを実行すると、Irisデータセットの4つの特徴(’sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width (cm)’)間の相関を表した散布図行列が表示されます。

○Pandasを使った散布図行列の作成

Pandasライブラリも散布図行列の作成をサポートしています。

下記のサンプルコード10では、Pandasを使ってIrisデータセットの散布図行列を作成します。

□サンプルコード10

import pandas as pd
from pandas.plotting import scatter_matrix
from sklearn.datasets import load_iris

# Irisデータセットをロード
iris = load_iris()
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)

# Pandasを使って散布図行列を作成
scatter_matrix(iris_df, figsize=(10,10))
plt.show()

このコードではまず、Pandasとそのplottingモジュール、そしてsklearn.datasetsをインポートしています。

その後、同じくload_iris関数を使ってIrisデータセットをロードし、Pandasのデータフレームに変換しています。

最後に、scatter_matrix関数を使って散布図行列を作成し、Matplotlibのshow関数を使って画面に表示しています。

scatter_matrix関数の引数figsizeは、作成する図のサイズを指定します。

ここでは、(10, 10)と指定して10×10のサイズで図を作成します。

このコードを実行すると、同じくIrisデータセットの4つの特徴間の相関を表した散布図行列が表示されます。

次に、散布図作成時の注意点と対処法について解説します。

●散布図の注意点と対処法

Pythonを用いて散布図を作成する際には、いくつかの注意点があります。

ここでは、その注意点とそれに対する対処法について解説します。

第一の注意点は、大量のデータ点を扱うときの視覚的な混乱です。

特に、データ点が重なって描画されると、その領域の密度が正確に把握できなくなります。

この問題に対する一つの対処法は、透明度(alpha)を調整することです。

透明度を下げると、データ点が重なる部分が明るくなり、データの密度を視覚的に理解しやすくなります。

下記のサンプルコードでは、Matplotlibのscatter関数のalpha引数を使って、透明度を設定しています。

□サンプルコード11

import matplotlib.pyplot as plt
import numpy as np

# ランダムなデータを生成
x = np.random.rand(1000)
y = np.random.rand(1000)

# 透明度を0.1に設定して散布図を作成
plt.scatter(x, y, alpha=0.1)
plt.show()

このコードではまず、numpyを使って1000個のランダムなデータを生成しています。

その後、scatter関数で散布図を作成する際に、alpha引数を0.1に設定してデータ点の透明度を下げています。

このコードを実行すると、透明度が下げられた散布図が表示されます。データ点が重なる部分が明るくなっていることから、データの密度を視覚的に把握しやすくなっています。

第二の注意点は、データの範囲による視覚的な歪みです。

データの範囲が特徴間で大きく異なると、散布図上でのデータ点の配置が歪んでしまう可能性があります。

この問題に対する対処法は、データのスケーリングです。

下記のサンプルコードでは、sklearnのStandardScalerを使って、データのスケーリングを行っています。

□サンプルコード12

from sklearn.preprocessing import StandardScaler

# データを生成
data = np.array([[1, 5000], [2, 5500], [3, 6000], [4, 6500]])

# データのスケーリング
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)

# スケーリング後のデータを表示
print(data_scaled)

このコードでは、まずsklearn.preprocessingからStandardScalerをインポートしています。

そして、2つの特徴を持つ4つのデータ点からなるデータを生成しています。

一つ目の特徴は1から4の範囲で、二つ目の特徴は5000から6500の範囲です。

このデータをStandardScalerを使ってスケーリングし、結果を表示しています。

このコードを実行すると、スケーリング後のデータが表示されます。

これにより、どちらの特徴も同じスケールで表示されるため、散布図上でのデータ点の配置が歪むことを防げます。

以上が散布図作成時の注意点と対処法です。

これらの対処法を用いることで、より分析しやすい散布図を作成することができます。

最後に、今回紹介した内容をまとめます。

まとめ

この記事では、Pythonを使った散布図の作成方法について詳しく解説しました。

散布図は、データの分布や特徴間の関係を視覚的に理解するのに有効な手段です。

Pythonのライブラリ、特にMatplotlib、Seaborn、Pandasを用いることで、簡単に美しい散布図を作成することができます。

さらに、散布図作成時の注意点とそれに対する対処法についても紹介しました。

大量のデータ点を視覚的に理解しやすくするための透明度の調整、データの範囲による視覚的な歪みを防ぐためのデータのスケーリングなど、散布図の分析をより容易にするテクニックを取り上げました。

これらのPythonでの散布図作成方法を用いることで、初心者でも簡単に散布図を作ることが可能となります。

Pythonの力を用いて、データ分析や可視化の技術をさらに深めていきましょう。