▶ データの可視化のもっと基本から解説した記事もあります。合わせてお読みください。
はじめに
前回に続いてsummary記事です。今回は可視化のsummaryとします。summaryでは細かな設定は気にせずに、まずグラフを描けるようにすることを目標とします。必ずしも「最適」とはいえないかもしれませんが、まず目の前にあるデータを可視化できるようにすることを優先とします。
ライブラリ
まずはライブラリのインポートです。必要なものだけをインポートするのが基本ですが、ここではあまり気にせずに、この後の可視化に使う可能性のあるものをインポートしてしまいましょう。
# ライブラリのインポート
import numpy as np
import pandas as pd
import pandas_profiling
import matplotlib.pyplot as plt
import seaborn as sns
import japanize_matplotlib
# 初期設定
sns.set_style("whitegrid", {'grid.linestyle': '--'})
%matplotlib inline
「import japanize matplotlib」はmatplotlibを簡単に日本語化できるライブラリです。また、「sns.set_style」の部分は特に必要ありませんが、私のPC環境では枠線が薄く見づらかったので、スタイルを指定しています。
matplotlibとseaborn
まずはmatplotlibかseabornでグラフを描ければよいでしょう。特にこだわりがなければ、どのグラフはどちらで描くと決めてしまってもよいでしょう。まずはmatplotlibとseabornの基本を整理します。
matplotlib
matplotlibでは、基本的に「plt + グラフ種類の指定」をおこない、そのあとにデータを指定します。
グラフ種類の指定
グラフの種類 | グラフの指定 |
折れ線グラフ | plot |
散布図 | scatter |
ヒストグラム | hist |
棒グラフ | bar |
箱ひげ図 | boxplot |
基本的な書式
例えば、折れ線グラフの例で示すと、
plt.plot(x, y, kwargs)
となります。1変数のときは、当然、yは不要となります。kwargsはcolorやlinewidth,linestyleなど、いくらでもあるのでよく使うものを自然に覚えるのがよいでしょう。それまでの間は描くたびにヘルプで調べるとよいでしょう。ヘルプは「Shift+タブ」で表示させることができます。
「+」ボタンを押すと、さらに詳しいヘルプをみることができます。
グラフ周りの書式設定
- タイトル:plt.title(‘ タイトル’)
- x軸ラベル:plt.xlabel(‘ x軸ラベル’)
- y軸ラベル:plt.ylabel(‘ y軸ラベル’)
- 凡例の表示:plt.legend()
表示内容はプロット時にlabelオプションで指定します。位置はlocオプションで指定することができます。 - x軸目盛の設定:plt.xlim(最小値, 最大値)
- y軸目盛の設定:plt.ylim(最小値, 最大値)
seaborn
グラフ種類の指定
seabornもmatplotlibと同様に基本形は、「sns + グラフ種類の指定」となります。
グラフの種類 | グラフの指定 |
折れ線グラフ | lineplot / relplot |
散布図 | jointplot / relplot |
ヒストグラム | hist / distplot |
カウントプロット | countplot / catplot |
棒グラフ | barplot / catplot |
箱ひげ図 | boxplot |
基本的なグラフ
個人的に、seabornで描画するのが簡単できれいに描けてよいかな?と思います。ただ、グラフの細かな設定をするにはmatplotlibで描くことも知っておく必要があります。
折れ線グラフ
データはあらかじめseabornに用意されているものを使うことにします。
fmri=sns.load_dataset(‘fmri’)
plt.figure(figsize=(6,3))
sns.lineplot('timepoint','signal',data=fmri,err_style=None)
あるいは、以下を使うとよいでしょう。
sns.relplot('timepoint','signal',data=fmri,kind='line',err_style=None,height=3,aspect=2)
sns.lineplotでは、matplotlibと同様にplt.figure(figsize=(xx,xx))でサイズを指定することができる。
但し、seabornの一部のプロット( pairplot、relplot、catplot、lmplot、PairGrid、FacetGrid )では、plt.figureではサイズを指定できないので、heightとaspectでサイズを指定する。
また、lineplotはdefaultでは信頼区間が表示されます。これはerr_style=Noneで表示しない設定にすることができます。また、relplotは軸(col , row)にカテゴリ変数をマッピングさせて比較するときに便利なプロットですが、特に軸へのマッピングがない時の描画にも使えます。kindのところでグラフ種類の指定をする必要があり、折れ線グラフはkind=’line’を指定します。
散布図
散布図でも基本的にrelplotにしておいて、kindでkind=’scatter’と指定するのが楽です。
sns.relplot('total_bill','tip',data=tips,kind='scatter')
他にjointplotで描く方法もあります。(こっちのほうが第一の選択かもしれません)こちらは下の描画のようにdefaultで描く変量のヒストグラムが描かれます。
sns.jointplot('total_bill','tip',data=tips)
ヒストグラム
sns.distplot(train.loc[train['Survived']==0,'Age'],kde=False,label=0,bins=30)
sns.distplot(train.loc[train['Survived']==1,'Age'],kde=False,label=1,bins=30)
plt.legend(title='Survived')
あるいは、matplotlibで次のようにしてもよいです。
plt.hist(train.loc[train['Survived']==0,'Age'].dropna(),bins=30,alpha=0.5,label='0')
plt.hist(train.loc[train['Survived']==1,'Age'].dropna(),bins=30,alpha=0.5,label='1')
plt.xlabel('Age')
plt.ylabel('count')
plt.legend(title='Survived')
sns.distplotでは、defaultでカーネル密度曲線が描かれるため、これを描きたくないときにはkde=Falseとする。上記には記載していないが、matplotlibでもseabornでもビン数はbins=XXで指定することができる。
カウントプロット
ここではseabornに用意されている、tipsというデータで描いてみます。 どちらも同じ意味となりますが、以下のようにすると描けます。
sns.countplot('day',data=tips)
sns.catplot('day',data=tips,kind='count',height=3.5,aspect=1.5)
棒グラフ
ここでもtipsデータを使います。以下はどちらも同じ意味になります。
sns.barplot('sex','total_bill',data=tips,errwidth=0)
sns.catplot('sex','total_bill',data=tips,kind='bar',errwidth=0)
defaultでエラーバーが表示されるため、errwidth=0でエラーバーが表示されないようにしている。
箱ひげ図
ここでもtipsデータを使います。 以下はどちらも同じ意味になります。
sns.boxplot('day','total_bill',data=tips)
sns.catplot('day','total_bill',data=tips,kind='box')
まとめ
いかがでしょうか?ちょっとは、苦手意識がなくなったでしょうか?seabornもmatplotlibも書式が大体決まっているので、違う種類のグラフでも簡単に描けますね。
▶ seabornライブラリを使ったグラフの作成方法も解説しています。
コメント