Python:Seabornの散布図マトリックス(Pairs Plots)視覚化データ



Python Seaborns Scatter Plot Matrix Visualization Data



散布図行列 見てみましょう2つの変数間の関係、傾向を分析します。

この記事では、 Seaborn視覚化ライブラリ Pythonで図を描画して実行します。デフォルトのペアリンググラフを作成してデータをすばやく確認する方法と、視覚化をカスタマイズしてより深い洞察を得る方法を説明します。プロジェクトのコード GitHubで 取る JupyterNotebookの形式で入手可能 。このプロジェクトでは、実際のデータセットを調査します。 ギャップレス 収集された全国的な社会経済データ 組成



シーボーン 散布図行列 ペアプロット )。

始める前に、どのようなデータがあるかを知る必要があります。 Pandasデータフレームを使用して社会経済データを読み込み、列を表示できます。



95ed713028089a443d0f196ac28b7c2aa12c0fdb

データの各行は1年以内の国の結果を表し、列には変数が含まれています(この形式で) データ と呼ばれる きちんとしたデータ )。 2つの分類列(国と大陸)と4つの数値列があります。これらの列は次のとおりです。life_exp出生時の平均余命、pop人口、gdp_per_capはい 国際ドル ユニットの一人当たりGDP。

後で色付けするためにカテゴリ変数を使用しますが、seabornのデフォルトのペアは数値列のみを描画します。デフォルトの散布図行列の作成は簡単です:それをseabornライブラリにロードし、pairplot関数を呼び出して、データフレームに渡します:



# Seaborn visualization library import seaborn as sns # Create the default pairplot sns.pairplot(df)

ニーズ全体を完了するための1行の単純なコードにはまだ驚いています!散布図マトリックスは、ヒストグラムと散布図の2つの基本的なグラフに基づいて作成されています。対角線上のヒストグラムにより、個々の変数の分布を確認できます。一方、上三角と下三角の散布図は、2つの変数間の関係を示しています。たとえば、2行目の左端のグラフは、life_expと年の散布図を示しています。

デフォルトの散布図行列は、多くの場合、貴重な洞察を提供します。平均余命と一人当たりGDPは正の相関関係にあり、高所得国の人々は長生きする傾向があることを示唆しています(もちろんですが) 他人をリードすることを証明することはできません これもこんな感じです)。また、世界の平均余命は時間とともに伸びているようです。これらの変数を将来のグラフでより適切に表示するために、これらの値の対数を取ることによってこれらの列を変換できます。

# Take the log of population and gdp_per_capita df['log_pop'] = np.log10(df['pop']) df['log_gdp_per_cap'] = np.log10(df['gdp_per_cap']) # Drop the non-transformed columns df = df.drop(columns = ['pop', 'gdp_per_cap']) Although this kind of charting can be used for analysis itself, we can find it more valuable by digitally coloring categorical variables such as the mainland. This is very simple in seaborn! All we need to do is use the sns.pairplot function call in hue to use the keyword: sns.pairplot(df, hue = 'continent')

現在、オセアニアとヨーロッパの1人あたりの平均余命が最も長く、アジアの人口が最も多いことがわかります。人口とGDPの対数変換により、これらの変数が正規分布して値をより完全に表すことに注意してください。

上の画像はより有益ですが、まだいくつかの問題があります。対角線のように、オーバーレイヒストグラムが見つからないため、非常に理解しやすいです。 表示 複数のカテゴリーから 単変量分布より良い方法 密度マップです。関数呼び出しでヒストグラムの密度マップを交換できます。それを処理するとき、いくつかのキーワードを散布図に渡して、ポイントの透明度、サイズ、およびエッジの色を変更します。

# Create a pair plot colored by continent with a density plot of the # diagonal and format the scatter plots. sns.pairplot(df, hue = 'continent', diag_kind = 'kde', plot_kws = {'alpha': 0.6, 's': 80, 'edgecolor': 'k'}, size = 4)

対角線上の密度プロットは、積み重ねられたストリップよりも大陸全体の分布を比較する方が簡単です。散布図の透明度を変更すると、これらの数値の間にかなりの重複があるため、読みやすさが向上します( と呼ばれる オーバーラップ図面)。

ペアプロットのデフォルトの最後の例として、2000年以降の年をプロットすることにより、データの乱雑さを減らしましょう。本土の分布に従って色を付けますが、年の列は描画しません。描画される列を制限するために、リストを渡しますvars関数を与えます。プロットを説明するために、タイトルを追加することもできます。

# Plot colored by continent for years 2000-2007 sns.pairplot(df[df['year'] >= 2000], vars = ['life_exp', 'log_pop', 'log_gdp_per_cap'], hue = 'continent', diag_kind = 'kde', plot_kws = {'alpha': 0.6, 's': 80, 'edgecolor': 'k'}, size = 4) # Title plt.suptitle('Pair Plot of Socioeconomic Data for 2000-2007', size = 28)

これは見栄えがし始めます!モデリングしている場合は、これらの図の情報を使用して選択を行うことができます。たとえば、log_gdp_per_capはlife_expと正の関係があることがわかっているため、この関係を定量化する線形モデルを作成できます。この記事では、図面に固執します。データをさらに詳しく調べたい場合は、PairGridクラスを使用して散布図行列をカスタマイズできます。

PairGridでカスタマイズ

sns.pairplot関数の反対sns.PairGridクラスです。つまり、グリッドプロットに自動的に入力されません。代わりに、クラスのインスタンスを作成してから、特定の関数をグリッドのさまざまな部分にマップします。データを使用してPairGridインスタンスを作成するには、次のコードを使用します。これにより、表示する変数も制限されます。

# Create an instance of the PairGrid class. grid = sns.PairGrid(data= df_log[df_log['year'] == 2007], vars = ['life_exp', 'log_pop', 'log_gdp_per_cap'], size = 4)

それを表示したい場合は、グリッド部分に関数をマップしていないため、白地図が表示されます。 PairGridには、上三角、下三角、対角の3つのグリッドセクションがあります。メッシュをこれらのセクションにマップするには、grid.mapセクションのメソッドを使用します。たとえば、散布図を使用した上の三角形にマッピングするには、次のようにします。

# Map a scatter plot to the upper triangle grid = grid.map_upper(plt.scatter, color = 'darkred')

map_upperメソッドは、任意の2つの変数配列(plt.scatterなど)と関連するキーワード(colorなど)の関数を受け入れます。 map_lowerメソッドはまったく同じですが、メッシュの下の三角形を塗りつぶします。単一の配列を受け入れるにはわずかに異なる関数が必要なためです(対角線には1つの変数のみが表示されていることに注意してください)。例は、以下の対角部分を埋めるために使用するplt.histです。

# Map a histogram to the diagonal grid = grid.map_diag(plt.hist, bins = 10, color = 'darkred', edgecolor = 'k') # Map a density plot to the lower triangle grid = grid.map_lower(sns.kdeplot, cmap = 'Reds')

この場合、下の三角形で2次元(密度マップ)カーネル密度推定を使用します。まとめると、このコードは次の図を示します。

69a544e1c0eb50dfc36888602021d7fb33d5d461

PairGridクラスを使用する本当の利点は、さまざまな情報をグラフにマッピングするカスタム関数を作成することです。たとえば、2つの変数の間に入れたい場合があります ピアソン相関係数 散布図に追加します。これを行うには、2つの配列を取り、統計を計算して、それをグラフに描画する関数を作成します。次のコードは、これがどのように行われるかを示しています(これに感謝します) スタックオーバーフローの回答 ):

# Function to calculate correlation coefficient between two arrays def corr(x, y, **kwargs): # Calculate the value coef = np.corrcoef(x, y)[0][1] # Make the label label = r'$ ho$ = ' + str(round(coef, 2)) # Add the label to the plot ax = plt.gca() ax.annotate(label, xy = (0.2, 0.95), size = 20, xycoords = ax.transAxes) # Create a pair grid instance grid = sns.PairGrid(data= df[df['year'] == 2007], vars = ['life_exp', 'log_pop', 'log_gdp_per_cap'], size = 4) # Map the plots to the locations grid = grid.map_upper(plt.scatter, color = 'darkred') grid = grid.map_upper(corr) grid = grid.map_lower(sns.kdeplot, cmap = 'Reds') grid = grid.map_diag(plt.hist, bins = 10, edgecolor = 'k', color = 'darkred')

相関係数を計算するために2つの配列が必要なため、新しい関数は上の三角形にマップされます(複数の関数をメッシュ部分にマップできることにも注意してください)。これにより、次のグラフィックが生成されます。

2e2b961261ada9aafbd92bd7640462817bf9e01f

相関係数が散布図の上に表示されます。これは比較的簡単な例ですが、PairGridを使用して、必要な関数をグラフにマップできます。関数の書き方がわかれば、必要なだけ情報を追加できます!最後の例として、グリッドの代わりに対角線を示す要約チャートを次に示します。

b4767adb43362a3f812c4df8fadaeca57b480b9e

これは、ライブラリ内の既存の機能を使用することを除いて、アイコンを作成するだけの一般的な考え方を示しています(例:matplotlibデータをグラフにマッピングすることに加えて、カスタム情報を表示する独自の関数を作成することもできます。

結論として

散布図行列は、データセット内の分布と関係をすばやく調査するための強力なツールです。 Seabornは、PairGridクラスを介して散布図行列をカスタマイズおよび拡張するための単純なデフォルトメソッドを提供します。データ分析プロジェクトでは、価値の主な部分は、派手な機械学習ではなく、直感的なデータの視覚化であることがよくあります。散布図は、包括的なデータ分析を提供し、データ分析プロジェクトの開始点として適しています。

記事の元のタイトル 視覚化データとペアプロット-in-python 》、

からの転送: https://yq.aliyun.com/articles/581263