「Matplotlibのマスタリング:データ可視化の包括的なガイド」

Matplotlib Mastery Comprehensive Guide to Data Visualization

パート1:プロットの理解がより良い表現の鍵です!

Ideogram.aiで生成された画像

こんにちは、データ愛好家👋 データは視覚化を通じてよりよく理解されることを知っています。それは洞察を得るだけでなく、視覚化は洞察をクライアントや他の人に説明するのを簡単にします。つまり、より良い視覚化を作成することを学ぶことは、どんなデータ愛好家にとっても重要です!

Pythonの基本的なデータ視覚化ライブラリであるMatplotlibは、「Mathematical Plotting Library」の略です。画家がキャンバス上に傑作を作り出すために絵筆を使うように、Matplotlibはデータサイエンティストやアナリストがデータを使用して異なる洞察に基づいたグラフを作成することを可能にします。これから何が待っているかをご紹介します。

目次

  1. 基本的なプロット ∘ 1.1 シンプルな折れ線グラフの作成 ∘ 1.2 ラベル、色、スタイルのカスタマイズオプション ∘ 1.3 Matplotlibプロットを画像ファイルとして保存する
  2. プロットの種類 ∘ 2.1 棒グラフ ∘ 2.2 ヒストグラム ∘ 2.3 散布図 ∘ 2.4 円グラフ ∘ 2.5 箱ひげ図 ∘ 2.6 ヒートマップ、および画像の表示 ∘ 2.7 スタックプロット

・ 結論 ∘ 発表 #100daysMLDL

— 視覚化の世界に入りましょう! —

1. 基本的なプロット

まず最初に、プロット関数にアクセスするためにimport matplotlib.pyplotが必要です。

1.1 シンプルな折れ線グラフの作成

名前の通り、データポイントは連続する範囲で変化するデータを表示するために便利な直線で接続されます。パターンやトレンドを簡単に特定することができます。シンプルな折れ線グラフにはplt.plot(x,y)を使用し、plt.show()でプロットを表示します。

import matplotlib.pyplot as plt# 月間のウェブサイトのトラフィックを表すデータ(千単位)months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']traffic = [150, 200, 180, 220, 250, 210]# 折れ線グラフを作成するplt.plot(months, traffic)plt.show()
シンプルな折れ線グラフ
  • しかし、ラベルやタイトルはありません。

1.2 ラベル、色、スタイルのカスタマイズオプション

プロットをカスタマイズすることで情報をより明確に伝えることができます。Matplotlibには、色、線スタイル、マーカーなどを制御するための多数のカスタマイズオプションがあります。

  • ラベルとタイトルの追加: plt.xlabel()plt.ylabel()plt.title()を使用します。
import matplotlib.pyplot as plt# サンプルデータ(千単位)months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']traffic = [150, 200, 180, 220, 250, 210]# 折れ線グラフを作成するplt.plot(months, traffic)# ラベルとタイトルを追加するplt.xlabel('月')plt.ylabel('月間トラフィック(千単位)')plt.title('月間ウェブサイトトラフィック')plt.show()
ラベルとタイトル付きのシンプルな折れ線グラフ

注意:plt.show()は常にプロット設定の最後に配置する必要があります。もしplt.show()の後にラベルコマンドを追加すると、それらは表示されません!

  • 色と線のスタイルの変更:点をマークするにはmarkerパラメータを使用し、線のスタイルを変更するにはlinestyleを使用し、plt.grid(True)を使用してプロットにグリッドを追加します。
# カスタムの外観を持つ折れ線グラフを作成するplt.plot(months, traffic, marker='o', linestyle='--', color='g')# ラベルとタイトルを追加plt.xlabel('月')plt.ylabel('月間トラフィック(千単位)')plt.title('月間ウェブサイトトラフィック')# グリッドをプロットに追加plt.grid(True)# プロットを表示plt.show()
カスタムの折れ線グラフ
  • プロットスタイルの変更:Matplotlibにはさまざまなスタイルがあります。利用可能なスタイルを確認するにはplt.style.availableコマンドを使用します。プロット全体のスタイルを変更するにはplt.style.use('desired_style')を使用します。コミック風のプロットを使用するにはplt.xkcd()を使用します。これにより、以下のようなクールなプロットが表示されます。これらのスタイルコマンドは、plt.show()の前に使用する必要があります。

  • 図のサイズの変更:プロットのサイズを調整する必要があることがよくありますよね?そのためには、plt.figure(figsize=(x_size,y_size))を使用します。このコマンドは.plotコマンドの前に使用する必要があります。
  • ラベルの使用:同じグラフに複数の線をプロットする場合、プロットしたい変数ごとにplotコマンドを2回使用することができます。ただし、それらを適切に区別するためには、labelというパラメータを使用する必要があります。その際にはplt.legend()も使用する必要があります。
# 2つの製品の月間収益(千ドル)のサンプルデータmonths = ['1月', '2月', '3月', '4月', '5月', '6月']product_a_revenue = [45, 55, 60, 70, 80, 75]product_b_revenue = [35, 40, 50, 55, 70, 68]# 製品Aの折れ線グラフを作成し、青の線と丸印を追加plt.plot(months, product_a_revenue, marker='o', linestyle='-', color='blue', label='製品A')# 製品Bの折れ線グラフを作成し、赤の破線と四角印を追加plt.plot(months, product_b_revenue, marker='s', linestyle='--', color='red', label='製品B')# ラベルとタイトルを追加plt.xlabel('月')plt.ylabel('月間収益(千ドル)')plt.title('月間収益の比較')# 製品Aと製品Bを区別するための凡例を表示plt.legend()# プロットを表示plt.show()
各プロットに適切なラベルが付いた複数の折れ線グラフ

1.3 Matplotlibプロットを画像ファイルとして保存する

Matplotlibを使用してプロットを画像ファイルとして保存することができます。

  • Jupyter Notebookでの保存:Jupyter Notebookで作業している場合、プロットを画像ファイルとして保存するにはplt.savefig('path/to/directory/plot_name.png')を使用する必要があります。完全なファイルパスを指定することができ、希望するファイル名と形式(例:.jpg、.png、.pdf)を指定することができます。
  • Google Colabでの保存:Google Colabで作業している場合、プロットを画像ファイルとして保存するには、まずドライブをマウントし、plt.savefig()を使用する必要があります。
from google.colab import drive# Google Driveをマウントdrive.mount('/content/drive')# プロットをイメージファイルとしてColabに保存# ドライブを使用する場合、場所を任意のフォルダに変更できます。plt.savefig('/content/drive/My Drive/'+'my_plot.png')

2. プロットの種類

前のセクションで基本的な折れ線グラフを見ましたが、Matplotlibには他にも多くの種類のプロットがあります。バーチャート、ヒストグラム、散布図、円グラフ、箱ひげプロット、ヒートマップ、画像の表示などがあります。それでは、それらを使用するタイミングといくつかの使用例について理解しましょう。

2.1 バーチャート

バーチャートは、長方形のバーでカテゴリデータを表します。各バーの長さまたは高さは値を表します。垂直バーチャートにはplt.bar(x,y)コマンドを使用し、水平バーチャートにはplt.barh(x,y)を使用します。

使用例:1. 異なる製品の販売実績の比較。2. 国ごとの人口分布の表示。

例: グラフ内の複数のバープロット

# 費用カテゴリcategories = ['住居', '交通', '食料品', 'エンターテイメント', '公共料金']# アリス、ボブ、キャロルの月次支出alice_expenses = [1200, 300, 400, 200, 150]bob_expenses = [1100, 320, 380, 180, 140]carol_expenses = [1300, 280, 420, 220, 160]# x軸の位置のための配列の作成x = np.arange(len(categories))# バーの幅、複数のバーをプロットするために必要です。bar_width = 0.2# アリスの支出のためのバーを作成、x配列からバーの幅を引くことで、左に配置します。plt.bar(x - bar_width, alice_expenses, width=bar_width, label='アリス', color='skyblue')# ボブの支出のためのバーを作成plt.bar(x, bob_expenses, width=bar_width, label='ボブ', color='lightcoral')# キャロルの支出のためのバーを作成、x配列にバーの幅を追加し、右に配置します。plt.bar(x + bar_width, carol_expenses, width=bar_width, label='キャロル', color='lightgreen')# ラベル、タイトル、凡例の追加plt.xlabel('費用カテゴリ')plt.ylabel('月次支出(USD)')plt.title('月次支出の比較')# x軸の位置にカテゴリ名を表示plt.xticks(x, categories)plt.legend()# プロットの表示plt.show()

  • したがって、これらのバーを取得するためには、最初のバーではxラベルからバーの幅を引き、最後のバーではラベルにバーの幅を追加しました。すべてのバーに対してバーの幅としてwidthパラメータを設定しました。

2.2 ヒストグラム

ヒストグラムは、連続または数値データの分布を視覚化するために使用され、データのパターンを特定するのに役立ちます。ヒストグラムプロットでは、データは「ビン」にグループ化され、各バーの高さはそのビン内のデータポイントの頻度またはカウントを表します。与えられたデータの下限と上限を取り、指定されたビンの数に分割します。

ヒストグラムを生成するにはplt.hist(x)コマンドを使用します。バープロットとは異なり、ここでは「y」は必要ありません。これは単一の連続データの頻度を表すためです。デフォルトのビン数は10で、変更することができます。また、任意のビン範囲を指定してオーバーライドすることもできます。バーに対してedgecolorを追加することもできます。

ヒストグラムプロットに加えて、同じグラフに平均値や中央値などの任意のラインを追加したい場合は、値を計算してplt.axvline(計算された平均値, label=任意のラベル)に渡すことができます。これは他のプロットでも使用できます。

使用例:1. 人口の年齢分布の分析。2. 教室の試験の点数分布の調査。

# サンプルの試験の点数データ
exam_scores = [68, 72, 75, 80, 82, 84, 86, 90, 92, 95, 98, 100]
# カスタムのビン範囲
bin_ranges = [60, 70, 80, 90, 100]
# カスタムのビン範囲を指定してヒストグラムを作成
plt.hist(exam_scores, bins=bin_ranges, color='lightblue', edgecolor='black', alpha=0.7)
# ラベルとタイトルを追加
plt.xlabel('試験の点数')
plt.ylabel('頻度')
plt.title('カスタムのビンを使った試験の点数のヒストグラム')
# 中央値の線を計算して追加
median_score = np.median(exam_scores)
plt.axvline(median_score, color='red', linestyle='dashed', linewidth=2, label=f'中央値: {median_score}')
# 凡例を追加
plt.legend()
# プロットを表示
plt.show()
カスタムのビン範囲と中央値の線を追加したヒストグラム

2.3 散布図

散布図は、二次元平面上に個々のデータ点を点として表示するものです。数値の二つの変数間の関係や相関を探索するために使用されます。各軸は一つの変数を表し、点はデータ点を表します。

散布図を生成するには、plt.scatter(x, y)を使用します。点のサイズを変更するにはsパラメータを、色を変更するにはcパラメータを、ドット以外のマーカーに変更するにはmarkerパラメータを使用します。また、alphaパラメータは色の強度を制御します。サイズについては、各点ごとに異なるサイズのリストを送ることもできます。

いくつかの使用例:1. 勉強時間と試験の点数の関係を調査する。2. 気温とアイスクリームの売上の相関を分析する。

# 店舗のサンプルデータを取得します
stores = ['店舗A', '店舗B', '店舗C', '店舗D', '店舗E']
customers = [120, 90, 150, 80, 200]
revenue = [20000, 18000, 25000, 17000, 30000]
store_size = [10, 5, 15, 8, 20]  # 散布図の点のサイズをスケーリングするために店舗のサイズを設定します
point_sizes = [size * 100 for size in store_size]  # 散布図の点のサイズを計算します
# 異なる点のサイズを持つ散布図を作成します
plt.scatter(customers, revenue, s=point_sizes, c='skyblue', alpha=0.7, edgecolors='b')
# ラベルとタイトル、凡例を追加
plt.xlabel('顧客数')
plt.ylabel('収益 (USD)')
plt.title('顧客数、収益、店舗のサイズの関係')
# プロットを表示
plt.show()
点のサイズが店舗のサイズにスケーリングされた散布図

2.4 円グラフ

円グラフは、円形のパイのスライスとして全体の一部を表します。これは、1つのカテゴリ変数の構成をパーセンテージで表示するのに適しています。ただし、6つ以上のカテゴリがある場合は見づらくなるため、そのような場合は水平棒が好まれるかもしれません。

コマンドplt.pie(x, labels=your_category_names, colors=desired_colors_list)を使用します。希望する色のリストを持っている場合は、それを指定することができます。また、円グラフのエッジの色をwedgeprops={'edgecolor':your_color}パラメータで変更することもできます。

また、explodeパラメータを使用して特定のセグメントを強調することもできます。このパラメータには、各要素が爆発する量を示すタプルを渡すことができます。そして、autopctパラメータを使用してプロットで小数点以下の値をいくつ表示するかを選択することができます。

数少ないユースケース:1. 費目の予算の分布を表示すること。2. 様々なスマートフォンブランドの市場シェアを表示すること。

例:プレゼンテーション中のストーリーテリングをより良くするために特定のセグメントを強調すること。

# 商品のカテゴリcategories = ['電子機器', '衣類', 'インテリア', '書籍', 'おもちゃ']# 各カテゴリの売上データsales = [3500, 2800, 2000, 1500, 1200]# 特定のセグメントを強調する(例:'衣類')# 2番目の値(0.1)はセグメント '衣類' の強調量explode = (0, 0.1, 0, 0, 0)  # 強調を指定してパイチャートを作成plt.pie(sales, labels=categories, explode=explode, shadow=True, autopct='%1.1f%%')plt.title('商品カテゴリ別の売上')# プロットを表示plt.show()
衣類セグメントを強調したパイチャート

2.5 箱ひげ図(Box and Whisker Plot)

箱ひげ図は複雑に見えるものですよね? 簡単に言えば、数値データの分布を四分位数、外れ値、および潜在的な歪度で要約しています。データの分散、中央傾向、および変動性の洞察を提供します。箱ひげ図は特に外れ値の特定や分布の比較に役立ちます。

箱ひげ図をプロットするには、plt.boxplot(data)を使用します。boxpropsflierpropsを使用して、箱や外れ値の外観をカスタマイズすることができます。水平な箱ひげ図を作成するにはvert=Falseを使用し、箱を色で塗りつぶすにはpatch_artist=Trueを使用します。

数少ないユースケース:1. 会社の給与の分布を分析すること。2. 異なる地域の住宅価格の変動性を評価すること。

# 外れ値を含むランダムデータの生成np.random.seed(42)data = np.concatenate([np.random.normal(0, 1, 100), np.random.normal(6, 1, 10)])# 外れ値を含む箱ひげ図の作成plt.figure(figsize=(8, 6))  # グラフのサイズを設定plt.boxplot(data, vert=False, patch_artist=True,             boxprops={'facecolor': 'lightblue'},             flierprops={'marker': 'o', 'markerfacecolor': 'red',                         'markeredgecolor': 'red'})# ラベルとタイトルの追加plt.xlabel('値')plt.title('外れ値を含む箱ひげ図')# グリッドを追加して読みやすくするplt.grid(True)plt.show()
外れ値にカスタマイズされたスタイルを使用した箱ひげ図

2.6 ヒートマップと画像の表示

plt.imshow()は、2Dの画像データを表示したり、2D配列を可視化したり、さまざまな形式で画像を表示するために使用されるMatplotlibの関数です。

  • ヒートマップにimshowを使用する:ヒートマップは相関行列の可視化であり、各変数が他の変数とどのように相関しているかを感じ取れるものです。ここでは、相関行列をヒートマップとして可視化し、関係を視覚的に示すためにカラーマップを使用します。ヒートマップを可視化するために相関行列をimshowに渡します。
# サンプル相関行列の作成correlation_matrix = np.array([[1.0, 0.8, 0.3, -0.2],                               [0.8, 1.0, 0.5, 0.1],                               [0.3, 0.5, 1.0, -0.4],                               [-0.2, 0.1, -0.4, 1.0]])# 相関行列のヒートマップの作成plt.imshow(correlation_matrix, cmap='coolwarm', vmin=-1, vmax=1, aspect='auto', origin='upper')# 次のコマンドでカラーバーを追加cbar = plt.colorbar()cbar.set_label('相関', rotation=270, labelpad=20)# ラベルとタイトルの追加plt.title('相関行列のヒートマップ')plt.xticks(range(len(correlation_matrix)), ['変数1', '変数2', '変数3', '変数4'])plt.yticks(range(len(correlation_matrix)), ['変数1', '変数2', '変数3', '変数4'])plt.show()
matplotlibのimshowメソッドを使ってヒートマップを生成する
  • imshowを使った画像の表示: Matplotlibのimshowメソッドは、matplotlib.imageモジュールのimreadメソッドを使用して、JPEG、PNG、BMP、TIFFなどのさまざまな形式の画像を読み込み、表示するためによく使用されます。すでに配列に画像データがある場合は、imshowを使って直接表示することができます。
import matplotlib.image as mpimg# 画像をロードして表示するimg = mpimg.imread('sample_image.jpg')# 画像を表示するplt.imshow(img)  # 軸ラベルと目盛りをオフにするplt.axis('off')# タイトルを追加するplt.title('サンプル画像')  # プロットを表示するplt.show()  

2.7 スタックプロット

電子機器、衣料品、家庭用電化製品の3つの製品カテゴリが4つの四半期(Q1からQ4)で総売上にどのように寄与するかを視覚化したいと考えてください。その場合、プロット内のそれぞれのカテゴリの売上をレイヤーとして表現し、プロットはそれらの寄与と時間のトレンドを理解するのに役立ちます。それがスタックプロットが行うことです。

スタックプロットは、スタックされた領域プロットとも呼ばれるデータ可視化の一種であり、複数のデータセットを互いに重ねたレイヤーとして表示し、各レイヤーがデータの異なるカテゴリやコンポーネントを表します。スタックプロットは、個々のコンポーネントが連続した時間期間またはカテゴリの範囲全体にどのように寄与するかを視覚化するのに特に便利です。plt.stackplot(x,y1,y2)のように使用し、スタックはいくつでも作成できます!

# スタックプロットのサンプルデータquarters = ['Q1', 'Q2', 'Q3', 'Q4']electronics = [10000, 12000, 11000, 10500]clothing = [5000, 6000, 7500, 8000]home_appliances = [7000, 7500, 8200, 9000]# スタックプロットを作成するplt.figure(figsize=(10, 6))  # フィギュアサイズを設定するplt.stackplot(quarters, electronics, clothing, home_appliances, labels=['電子機器', '衣料品', '家庭用電化製品'],              colors=['青', '緑', '赤'], alpha=0.7)# ラベル、凡例、タイトルを追加するplt.xlabel('四半期')plt.ylabel('売上($)')plt.title('製品カテゴリの四半期売上')plt.legend(loc='upper left')# プロットを表示するplt.grid(True)plt.show()
4つの四半期で異なるカテゴリを比較するスタックプロット

参考文献:1. Codebasics ChannelのMatplotlibチュートリアル

結論

このMatplotlibガイドでは、基本プロットの作成方法、カスタマイズ方法について説明し、重要なプロットの特性について議論しました。私が述べたノートポイントを覚えておくことを忘れないでください。

Matplotlibの習得は、より良いデータ可視化のために不可欠であり、私たちが議論した内容で止まりません!Matplotlibの高度な技術については、このガイドの第2部で詳しく説明します。エキサイティングなデータサイエンスの記事を見逃さないために、購読してください!

Pandasに関する包括的なガイドもお探しの場合は、以下の詳細な記事をチェックしてください。Numpyガイドも私のプロフィールでチェックしてください。

Pandas Demystified: データ愛好家のための包括的なハンドブック

パート1: 効果的なデータ分析のための必須機能の探索

python.plainenglish.io

お知らせ #100daysMLDL

Day 4/100 — Matplotlibの再訪。

こちらはチャレンジへのリポジトリリンクです。皆さんもこのスリリングな旅に参加してください!データ愛好家の方でも、機械学習の世界に興味がある方でも、みなさんに何かしらの価値があるでしょう。一緒に学び、成長し、お互いに刺激しましょう。読んでくださり、ありがとうございます。楽しい学びと良い一日をお過ごしください 🙂

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more