Pythonでプロットをマスター!基礎から応用までの全12ステップ

Pythonでプロットを学ぶためのチュートリアル記事の表紙Python
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

データ分析や可視化は、現代社会におけるビジネスや研究など多くの場面で重要な役割を果たしています。

そして、それらを支えるためにはPythonというプログラミング言語が欠かせません。

特にPythonには、matplotlibやseabornなどといったデータのプロットに特化したライブラリが存在します。

本記事では、Pythonでのプロットの基礎から応用までを全12ステップで解説します。

Pythonでデータのプロットを始めるためのガイドとして、初心者の方はもちろん、すでに基本的なプロットをマスターしていてさらにスキルを磨きたい方にも役立つ情報を提供します。

●Pythonとプロットの基礎

○Pythonとは

Pythonは、シンプルで読みやすい構文を特徴とする汎用プログラミング言語です。

そのため初心者にも扱いやすく、また、多彩なライブラリが存在するために、科学計算やデータ分析、機械学習などの分野で広く活用されています。

○プロットとは

プロットとは、データを視覚的に表現することを指します。

データの特性やパターンを把握しやすくするために用いられ、具体的には折れ線グラフ、ヒストグラム、散布図、ヒートマップなどがあります。

●Pythonプロットの環境構築

○Pythonのインストール

Pythonのインストールは公式ウェブサイトからダウンロードするか、Anacondaといったデータ分析に特化したPythonディストリビューションを用いることで可能です。

○必要なライブラリのインストール

本記事ではmatplotlibとseabornという2つのライブラリを使用します。

これらはPythonのパッケージ管理システムであるpipを用いてインストールが可能です。

pip install matplotlib seaborn

上記のコードではpipを使ってmatplotlibとseabornをインストールしています。

この例ではPythonのパッケージ管理システムであるpipが使われています。

このコードを実行すると、matplotlibとseabornがあなたのPython環境にインストールされます。

●Pythonでのプロットの基本

○matplotlibの基本

matplotlibはPythonの中で最も基本的で広く使われるプロットライブラリです。

一般的な2Dプロットはもちろん、3Dプロットも可能です。

□サンプルコード1:基本的な線グラフ

import matplotlib.pyplot as plt

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

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

このコードではmatplotlibを使って基本的な線グラフを描いています。

この例では、xとyの二つのリストを作成し、その値を使ってプロットしています。

このコードを実行すると、y = 2x – 1を表す直線が描かれます。

□サンプルコード2:複数の線を持つグラフ

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 6, 8, 10]

plt.plot(x, y1, label='y1')
plt.plot(x, y2, label='y2')

plt.legend()
plt.show()

このコードではmatplotlibを使って複数の線を持つグラフを描いています。

この例では、x、y1、y2の三つのリストを作成し、それぞれのリストを使用して二つの線を描いています。

plt.legend()を用いることで、線の凡例も表示されます。

このコードを実行すると、二つの異なる直線が描かれます。

○seabornの基本

seabornはmatplotlibに基づいて作られたライブラリで、より美しいグラフ作成や統計的データ視覚化が可能です。

□サンプルコード3:基本的なヒストグラム

import seaborn as sns

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

sns.histplot(data, bins=5)
plt.show()

このコードではseabornを使って基本的なヒストグラムを描いています。

この例では、dataというリストを作成し、その値を使ってプロットしています。

binsパラメータにより、ヒストグラムの棒の数を指定しています。

このコードを実行すると、1から5までの数値の出現頻度を表すヒストグラムが描かれます。

□サンプルコード4:複数のヒストグラムを持つグラフ

import seaborn as sns

data1 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
data2 = [2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6]

sns.histplot(data1, bins=5, color='blue', label='data1')
sns.histplot(data2, bins=5, color='red', label='data2')

plt.legend()
plt.show()

このコードではseabornを使って複数のヒストグラムを持つグラフを描いています。

この例では、data1とdata2の二つのリストを作成し、それぞれのリストを使用して二つのヒストグラムを描いています。

色と凡例は、colorパラメータとlabelパラメータを使って指定しています。

このコードを実行すると、1から6までの数値の出現頻度を表す二つのヒストグラムが重ねて描かれます。

●Pythonでのプロットの応用

○高度なグラフの作成

データの特性によりますが、様々なタイプのグラフが存在します。

散布図、ヒートマップ、箱ひげ図、バイオリンプロットなどがあります。

それぞれのグラフが持つ特性を理解し、適切なグラフを選ぶことで、より深いデータ理解を得ることができます。

□サンプルコード5:散布図

import seaborn as sns

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

sns.scatterplot(x=x, y=y)
plt.show()

このコードではseabornを使って散布図を描いています。

この例では、xとyの二つのリストを作成し、その値を使ってプロットしています。

散布図は二つの変数間の関係性を視覚的に表すことができます。

このコードを実行すると、xとyの値の関係を表す散布図が描かれます。

□サンプルコード6:ヒートマップ

import seaborn as sns
import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

sns.heatmap(data)
plt.show()

このコードではseabornを使ってヒートマップを描いています。

この例では、dataという二次元配列(numpy array)を作成し、その値を使ってプロットしています。

ヒートマップは二次元のデータの強度を色で表現し、パターンやトレンド、異常値を視覚的に理解することができます。

このコードを実行すると、dataの値を色で表したヒートマップが描かれます。

□サンプルコード7:箱ひげ図

import seaborn as sns

data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]

sns.boxplot(x=data)
plt.show()

このコードではseabornを使って箱ひげ図を描いています。

この例では、dataというリストを作成し、その値を使ってプロットしています。

箱ひげ図はデータの分布を五数要約(最小値、第一四分位数、中央値、第三四分位数、最大値)で表し、外れ値の存在も視覚化します。

このコードを実行すると、dataの分布を表す箱ひげ図が描かれます。

□サンプルコード8:バイオリンプロット

import seaborn as sns

data1 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
data2 = [2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6]

sns.violinplot(data=[data1, data2])
plt.show()

このコードではseabornを使ってバイオリンプロットを描いています。

この例では、data1とdata2の二つのリストを作成し、それぞれのリストを使用してバイオリンプロットを描いています。

バイオリンプロットは箱ひげ図とカーネル密度推定を組み合わせたようなグラフで、データの分布と密度を一度に視覚化することができます。

このコードを実行すると、data1とdata2の分布と密度を示す二つのバイオリンプロットが描かれます。

○データセットを利用したグラフ作成

seabornには、実際のデータセットを用いたグラフ作成も可能です。

それでは、有名なアヤメのデータセットを用いて、様々なグラフの描き方を紹介します。

□サンプルコード9:データセットを利用した散布図

import seaborn as sns

iris = sns.load_dataset('iris')

sns.scatterplot(x='sepal_length', y='sepal_width', hue='species', data=iris)
plt.show()

このコードではseabornの組み込み関数load_datasetを使ってアヤメのデータセットを読み込み、そのデータセットを用いて散布図を描いています。

この例では、sepal_length(がくの長さ)とsepal_width(がくの幅)をxとyの軸にし、species(種)を色分けしています。

このコードを実行すると、アヤメの種ごとにがくの長さと幅の関係性を示す散布図が描かれます。

□サンプルコード10:データセットを利用したヒートマップ

import seaborn as sns

iris = sns.load_dataset('iris')
correlation = iris.corr()

sns.heatmap(correlation, annot=True)
plt.show()

このコードではアヤメのデータセットの各特徴間の相関係数を計算し、その相関係数をヒートマップとして描いています。

この例では、pandasの組み込み関数corrを使って相関係数を計算しています。

相関係数は-1から1までの値を取り、1に近いほど正の相関(一方が増えるともう一方も増える)、-1に近いほど負の相関(一方が増えるともう一方は減る)が強いことを表します。

このコードを実行すると、各特徴間の相関関係を色で表したヒートマップが描かれます。

□サンプルコード11:データセットを利用した箱ひげ図

import seaborn as sns

iris = sns.load_dataset('iris')

sns.boxplot(x='species', y='sepal_length', data=iris)
plt.show()

このコードではアヤメのデータセットを用いて箱ひげ図を描いています。

この例では、種(species)ごとのがくの長さ(sepal_length)の分布を描いています。

このコードを実行すると、アヤメの種ごとのがくの長さの分布を表す箱ひげ図が描かれます。

□サンプルコード12:データセットを利用したバイオリンプロット

import seaborn as sns

iris = sns.load_dataset('iris')

sns.violinplot(x='species', y='sepal_length', data=iris)
plt.show()

このコードではアヤメのデータセットを用いてバイオリンプロットを描いています。

この例では、種(species)ごとのがくの長さ(sepal_length)の分布を描いています。

このコードを実行すると、アヤメの種ごとのがくの長さの分布と密度を表すバイオリンプロットが描かれます。

●Pythonでのプロットの注意点と対処法

データのプロットは非常に有用なツールですが、その使い方には注意が必要です。

間違ったグラフの選択や表示方法は、データを誤解する原因となります。

一部の典型的な問題とその対処法を紹介していきます。

  1. 外れ値の無視:データに外れ値が含まれている場合、その存在を無視するとデータ全体の理解に影響を与えます。
    箱ひげ図やバイオリンプロットを使用して、外れ値を視覚化しましょう。
  2. スケールの誤解:異なるスケールの変数を比較すると、結果の解釈が難しくなることがあります。
    スケールを揃えるか、適切な正規化や標準化を行うことが重要です。
  3. 多重共線性:二つ以上の説明変数が強く相関している場合、多重共線性という問題が生じます。
    これは、特定の変数の影響を正確に測定することを難しくします。ヒートマップを使用して、変数間の相関関係を確認しましょう。
  4. グラフの誤解:グラフの種類を間違えると、データの解釈に影響を及ぼします。
    例えば、カテゴリ変数を連続変数として扱ったり、逆に連続変数をカテゴリ変数として扱ったりすると、データの特性を正しく理解できません。

これらの問題を避けるためには、データとそれをどのように表現するかについて深く理解することが重要です。

適切なグラフを選び、正しいスケールを使用し、データの特性と外れ値を考慮に入れることで、データから得られる情報を最大限に引き出すことができます。

●Pythonでのプロットのカスタマイズ方法

まずは基本的な折れ線グラフを作成してみましょう。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

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

このコードでは、numpyのlinspace関数を使って0から10までの範囲を100分割した数列を生成し、その数列をsin関数に適用した結果を折れ線グラフで描いています。

このコードを実行すると、sin関数の波形が表示されます。

次に、グラフのタイトルと軸ラベルを追加してみましょう。

plt.plot(x, y)
plt.title('Sine Wave')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()

このコードでは、タイトルを’Sine Wave’とし、x軸のラベルを’x’、y軸のラベルを’sin(x)’としています。

このコードを実行すると、タイトルと軸ラベルが付いたsin関数の波形が表示されます。

さらに、線の色とスタイルを変更してみましょう。

plt.plot(x, y, color='red', linestyle='--')
plt.title('Sine Wave')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()

このコードでは、線の色を赤にし、スタイルを破線に変更しています。

このコードを実行すると、破線の赤色で描かれたsin関数の波形が表示されます。

次に、seabornのライブラリを使って、より洗練されたプロットを作成してみましょう。

import seaborn as sns

sns.set_theme()
plt.plot(x, y, color='blue')
plt.title('Sine Wave')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()

このコードでは、seabornのset_theme関数を使ってデフォルトのテーマを設定し、線の色を青にしています。

このコードを実行すると、洗練されたデザインの青色のsin関数の波形が表示されます。

まとめ

Pythonでのプロットは、データ分析の重要な一部です。

適切なプロットを使用することで、データからの洞察を視覚的に理解し、共有することができます。

この記事では、Pythonのmatplotlibとseabornを使用した基本的なプロット作成とそのカスタマイズ方法について紹介しました。

さまざまなデータセットとそれらの可視化に挑戦し、この力強いツールを最大限に活用しましょう。