Pythonによる密度プロットについて解説する

スポンサーリンク

密度プロットは、データセット内の連続した数値変数の分布を可視化するために使用されます。

カーネル密度プロットとも呼ばれる。

機械学習技術を適用する前に,自分のデータをよく知ることは良い習慣です.

優れた機械学習の実践者として、我々は以下のような質問をする必要がある。

  • 我々のデータはどのようなものだろうか?
  • データは正規分布か,それとも異なる形状か?
  • 私たちがデータに適用しようとしているアルゴリズムは,データの分布について何か基礎となる仮定を持っていますか?

このような疑問は、データを取得した直後に解決することで、後々の結果を飛躍的に向上させ、多くの時間を節約することができます

ヒストグラムや密度プロットなどのプロットは、上記のような疑問に答えるための手段です。

スポンサーリンク

密度プロットについて学ぶ前に、なぜヒストグラムを理解する必要があるのでしょうか?

密度プロットはヒストグラムと非常に類似しています。

ヒストグラムを使用して分布の形状を視覚化します。

ヒストグラムは、データをビン分割し、各ビン内のオブザベーションの数のカウントを保持することによって作成できます。

ヒストグラムでは、Y軸は通常ビンカウントを表しますが、密度とも呼ばれる単位あたりのカウントで表現することもできます。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
 
data = np.random.normal(10,3,100) # Generate Data
density = gaussian_kde(data)
 
x_vals = np.linspace(0,20,200) # Specifying the limits of our data
density.covariance_factor = lambda : .5 #Smoothing parameter
 
density._compute_covariance()
plt.plot(x_vals,density(x_vals))
plt.show()

ヒストグラムのビンの数を増やすと、分布の形がより滑らかに見えるようになります。

import numpy as np
import seaborn as sb
import matplotlib.pyplot as plt
 
data = np.random.normal(10,3,300) #Generating data.
plt.figure(figsize = (5,5))
sb.kdeplot(data , bw = 0.5 , fill = True)
plt.show()

ここで、各ビンの上部を通る滑らかな連続線を想像して、分布の形状の輪郭を作成してみましょう。

その結果が、密度プロットと呼ばれるものです。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
x_values = np.random.random(10,3,300) #Generating Data
df = pd.DataFrame(x_values, columns = ['var_name'] ) #Converting array to pandas DataFrame
df.plot(kind = 'density)

密度プロットを理解する

密度プロットは、平滑化されたヒストグラムのプロットであると考えることができます。

  密度プロットは主にカーネル密度推定を使用します。

カーネル密度推定は、ノイズを平滑化することで、より滑らかな分布を可能にします。

密度プロットは、ヒストグラムの主要なパラメータであるビンの数に影響されないので、データの分布をよりよく可視化することができます

つまり、密度プロットはヒストグラムと同じですが、各ビンの上部に滑らかなカーブが描かれています。

分布の形状は、世の中にいくつか存在します。

私たちが遭遇する可能性の高い最も一般的な形状のいくつかは以下のとおりです。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb
 
data = np.random.normal(10, 3, 1000) #Generating data randomly from a normal distribution.
 
sb.set_style("whitegrid"# Setting style(Optional)
plt.figure(figsize = (10,5)) #Specify the size of figure we want(Optional)
sb.distplot(x = data  ,  bins = 10 , kde = True , color = 'teal'
             , kde_kws=dict(linewidth = 4 , color = 'black'))
plt.show()

Pythonによる密度プロット

Pythonを使用すると、さまざまな方法で密度プロットを行うことができます。

よく使われる方法をいくつか見てみましょう。

1. Python scipy.statsモジュールの使用法

scipy.statsモジュールは、与えられたデータの密度を求めるためにgaussian_kde` クラスを提供します。

A Histogram With Less Number Of Bins
A Histogram With Less Number Of Bins
Histogram Having More Number Of Bins
Histogram Having More Number Of Bins

ここでは、 gaussian_kde クラスの covariance_factor 関数を変更し、より滑らかなプロットを得るために異なる値を渡します。

関数を変更した後は、 _compute_covariance を忘れずに呼び出してください。

2. Seabornの kdeplot モジュールを使用する

Seabornモジュールは、上記のタスクをより簡単に、より柔軟に実行する方法を提供してくれます。

Density Plot With Histogram
Density Plot With Histogram
Some Shapes Of Distributions
Some Shapes Of Distributions

Seaborn の kdeplot は、一変量データの配列または pandas の系列オブジェクトを入力引数として必要とします。

引数 bw は、上で示した gaussian_kde クラスの covariance_factor と同じです。

fill = False を渡すと、曲線下の領域を色で埋めずに、単に曲線を描画します。

3. 3. pandas の plot 関数の使用

Pandas の plot メソッドは、入力引数として kind = 'density' を与えることで、密度プロットを作成することもできます。

Density Plot Using Scipy
Density Plot Using Scipy
Density Plot Using Kdeplot
Density Plot Using Kdeplot

4. Seaborn distplot の使用法

連続した数値データの分布を可視化するために、seabornの distplot メソッドを使用することもできます。


seaborn.distplot( ) メソッドは入力パラメータとして一変量データ変数を必要とし、それは pandas Series, 1d-array, または list であることができます。


必要に応じてプロットを調整するために seaborn.distplot( ) に渡すことができるいくつかの重要な引数は以下の通りです。

  • hist : (Type – Bool) ヒストグラムを描画するかどうかを指定します.
  • kde : (Type – Bool) ガウシアンカーネル密度推定値をプロットするかどうか.
  • bins : (Type – Number) ヒストグラムのビンの数を指定します.
  • hist_kws : (Type – Dict) matplotlib.axes.Axes.hist() のキーワード引数の dict.
  • kde_kws : (Type – Dict) kdeplot() のキーワード引数を,辞書として渡す.
Density Plot Using Pandas
Density Plot Using Pandas
Density Plot Using Distplot 1
Density Plot Using Seaborn distplot

seabornの distplot についてより詳しく知りたい方は、seabornのDistplotsについての記事を参照してください。

まとめ

これで、この記事の終わりです! 今日は様々な密度プロットについて多くのことを学んでいただけたと思います。

この記事で使用した Pandas と matplotlib ライブラリについては、これらの記事を読むとより詳しく知ることができます。

タイトルとURLをコピーしました