回答:
pyplot.matshow()
から使用できますmatplotlib
:
import matplotlib.pyplot as plt
plt.matshow(dataframe.corr())
plt.show()
編集:
コメントには、軸目盛りラベルを変更する方法の要求がありました。これは、大きな図のサイズで描画され、データフレームと一致する軸ラベルと、カラースケールを解釈するカラーバーの凡例があるデラックスバージョンです。
ラベルのサイズと回転を調整する方法を含め、カラーバーとメインの図が同じ高さになるように図の比率を使用しています。
f = plt.figure(figsize=(19, 15))
plt.matshow(df.corr(), fignum=f.number)
plt.xticks(range(df.shape[1]), df.columns, fontsize=14, rotation=45)
plt.yticks(range(df.shape[1]), df.columns, fontsize=14)
cb = plt.colorbar()
cb.ax.tick_params(labelsize=14)
plt.title('Correlation Matrix', fontsize=16);
AttributeError: 'module' object has no attribute 'matshow'
import matplotlib.pyplot as plt
か?
それ自体がプロットを作成するのではなく、相関行列を視覚化することが主な目的である場合、便利pandas
なスタイルオプションは実行可能な組み込みソリューションです。
import pandas as pd
import numpy as np
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps
これは、JupyterLab Notebookなど、HTMLのレンダリングをサポートするバックエンドに存在する必要があることに注意してください。(暗い背景の自動の明るいテキストは既存のPRからのものであり、最新のリリースバージョンpandas
0.23ではありません)。
桁の精度を簡単に制限できます。
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
または、注釈なしのマトリックスが望ましい場合は、数字を完全に削除します。
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
スタイリングドキュメントには、マウスポインタが置かれているセルの表示を変更する方法など、より高度なスタイルの指示も含まれています。出力を保存するには、render()
メソッドを追加してHTMLを返し、それをファイルに書き込みます(または、あまり正式でない目的のためにスクリーンショットを撮ります)。
私のテストでstyle.background_gradient()
は、10x10マトリックスの4倍、10x10マトリックスのplt.matshow()
120 倍高速sns.heatmap()
でした。残念ながら、それだけではスケーリングできませんplt.matshow()
。2つplt.matshow()
は100x100マトリックスの場合はほぼ同じ時間がかかり、1000x1000マトリックスの場合は10倍高速です。
様式化されたデータフレームを保存する方法はいくつかあります。
render()
メソッドを追加してHTMLを返し、出力をファイルに書き込みます。.xslx
追加して、条件付きフォーマットでファイルとして保存しますto_excel()
。を設定することによりaxis=None
、列ごとまたは行ごとではなく、マトリックス全体に基づいて色を計算できるようになりました。
corr.style.background_gradient(cmap='coolwarm', axis=None)
import seaborn as sns corr = df.corr() cm = sns.light_palette("green", as_cmap=True) cm = sns.diverging_palette(220, 20, sep=20, as_cmap=True) corr.style.background_gradient(cmap=cm).set_precision(2)
corr.style.background_gradient(cmap='coolwarm')
。また、matplotlibの組み込みの発散cmapを使用することもできます。現在、cmapを特定の値に集中させる方法はありません。これは、異なるcmapを使用する場合に適しています。
相関行列の変数名も表示する次の関数を試してください。
def plot_corr(df,size=10):
'''Function plots a graphical correlation matrix for each pair of columns in the dataframe.
Input:
df: pandas DataFrame
size: vertical and horizontal size of the plot'''
corr = df.corr()
fig, ax = plt.subplots(figsize=(size, size))
ax.matshow(corr)
plt.xticks(range(len(corr.columns)), corr.columns);
plt.yticks(range(len(corr.columns)), corr.columns);
plt.xticks(range(len(corr.columns)), corr.columns, rotation='vertical')
x軸上の列名の垂直方向が必要な場合
plt.tight_layout()
と長い列名にも役立つ場合があります。
シーボーンのヒートマップバージョン:
import seaborn as sns
corr = dataframe.corr()
sns.heatmap(corr,
xticklabels=corr.columns.values,
yticklabels=corr.columns.values)
シーボーンからヒートマップを描画するか、パンダから散布行列を描画することにより、フィーチャ間の関係を観察できます。
散布図:
pd.scatter_matrix(dataframe, alpha = 0.3, figsize = (14,8), diagonal = 'kde');
各特徴の歪度も視覚化したい場合は、海のペアプロットを使用してください。
sns.pairplot(dataframe)
Snsヒートマップ:
import seaborn as sns
f, ax = pl.subplots(figsize=(10, 8))
corr = dataframe.corr()
sns.heatmap(corr, mask=np.zeros_like(corr, dtype=np.bool), cmap=sns.diverging_palette(220, 10, as_cmap=True),
square=True, ax=ax)
出力は、機能の相関マップになります。つまり、以下の例を参照してください。
食料品と洗剤の相関は高いです。同様に:
高相関のPdoducts:ペアプロットから:ペアプロットまたは散布行列から同じ関係のセットを観察できます。しかし、これらから、データが正常に配布されているかどうかがわかります。
注:上記は、ヒートマップの描画に使用されるデータから取得した同じグラフです。
from matplotlib import pyplot as pl
あなたはmatplotlibからimshow()メソッドを使うことができます
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
plt.imshow(X.corr(), cmap=plt.cm.Reds, interpolation='nearest')
plt.colorbar()
tick_marks = [i for i in range(len(X.columns))]
plt.xticks(tick_marks, X.columns, rotation='vertical')
plt.yticks(tick_marks, X.columns)
plt.show()
相関行列を形成します。私の場合、zdfは相関行列を実行する必要があるデータフレームです。
corrMatrix =zdf.corr()
corrMatrix.to_csv('sm_zscaled_correlation_matrix.csv');
html = corrMatrix.style.background_gradient(cmap='RdBu').set_precision(2).render()
# Writing the output to a html file.
with open('test.html', 'w') as f:
print('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-widthinitial-scale=1.0"><title>Document</title></head><style>table{word-break: break-all;}</style><body>' + html+'</body></html>', file=f)
次に、スクリーンショットを撮ります。または、htmlを画像ファイルに変換します。