▶ matplotlibによる可視化を基本から解説しています。以下の投稿も合わせてご覧ください。
はじめに
今回はmaplotlibでヒストグラムと棒グラフを描画する方法を基本から解説します。データを手にしたらまずは各変数の基本統計量や分布の確認、可視化をしてデータの概要を把握しましょう。まずは基本となるヒストグラムと棒グラフをおさえましょう。
データを可視化する
データの概要を把握するのにグラフを描くのは有効な手段です。今回はヒストグラムと棒グラフを扱います。ヒストグラムは連続変数の分布の確認に使います。棒グラフはデータの大小を比較するのに使いますが、カテゴリ変数の個数を描いて分布を確認するときにも使います。
今回もseabornにあらかじめ準備されている学習用のデータセットを使うことにします。
# ライブラリのインポート
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# データセットの読み込み
df = sns.load_dataset('tips')
df.head()
ヒストグラム
ヒストグラムはデータをいくつかの階級に分けて、各階級のデータ個数を表したものです。横軸にデータの階級、(階級幅が揃っていれば)縦軸にデータの個数をあらわしたものです。
※階級幅が異なる場合は、面積でデータの個数を比較することができます。
まず書式を確認しておきましょう。
xにデータの分布をみたい連続変数を指定します。早速やってみましょう。
# ヒストグラムの描画
plt.hist(df['total_bill'])
今回はtipsデータセットの「total_bill」の分布をみてみました。このように1行のコードで一発で描画できます。便利ですね。
棒グラフ
棒グラフは、棒の高さでデータの大小を表したグラフです。カテゴリ変数の大小の比較などに使います。こちらもまずは書式を確認しておきましょう。
xにカテゴリ変数、heightに棒の高さにしたい値を指定します。やってみましょう。
# 性別ごとの平均チップ額を算出
tip_by_sex = df.groupby('sex').mean()[['tip']].reset_index()
tip_by_sex
これを棒グラフで表してみましょう。
# 性別ごとの平均チップ額を描画
plt.bar('sex', 'tip',data=tip_by_sex)
このようにxに比較したいカテゴリ変数、heightに値を入れればOKです。データフレームやSeriesの棒グラフは別の書き方もあります。次の書式です。
先ほどのheightがyにあたります。kindで描くグラフの種類を指定します。棒グラフ以外のグラフも描くことができるため、「height」とせずに「y」と表現しているのですね。これも試しておきましょう。
# データフレームのメソッドを使って描く
tip_by_sex.plot('sex','tip',kind='bar')
これはSeriesにも用意されているメソッドです。書式は以下のようになります。
確認しておきましょう。
# Seriesに用意されているメソッドで描く
df.groupby('sex').mean()['tip'].plot(kind='bar')
このようにいろんな書き方ができます。このSeriesからプロットする書き方を知っておくと、例えばカテゴリ変数の各値の数をvalue_counts()したときの結果を瞬時に棒グラフで比較することができます。
# データセットの男性と女性のレコード数
df['sex'].value_counts().plot(kind='bar')
これも便利ですが、もっと便利なものがあります。それがseabornです。matplotlibのラッパーライブラリで美しいグラフを簡単に描くことができます。例えば、男性と女性のレコードの数であれば、次のように書けます。
# seabornを使ってカウントを描画
sns.catplot('sex',data=df,kind='count')
defaultで色分けしてくれるのもありがたいですね。また、先ほどの男女別の平均チップ額も次のように書けます。
# seabornを使って男女別の平均チップ額を描画
sns.catplot('sex','tip',data=df,kind='bar',ci=None)
plt.bar()で描いたときには先に男女別の平均チップ額を算出していましたが、sns.catplot()で描くときには、描画と同時に平均の算出をすることができます。
kindで描くグラフの種類を指定します。「count」を指定すると個数をカウントしてプロットし、「bar」を指定するとxで指定したカテゴリごとにyで指定した値をの平均を計算して棒グラフを描きます。
このように描画とともに計算を実行してくれ、さらに見やすいので、可視化のプロセスではseabornで描くことが多いです。
sns.catplot(x, y, data=df, kind=’bar’)はsns.barplot(x, y, data=df)のように書くこともできます。
まとめ
今回はヒストグラム、棒グラフについてみました。ヒストグラムはもちろん、seabornでも描くことができますが、今回は割愛しました。seabornでの描画として今後まとめることにします。一方、棒グラフではseabornで描くことの方が多いので、matplotlibだけでなくseabornでの描画方法も解説しました。
コメント