python PR

【matplotlib入門⑤】ヒストグラムと棒グラフを描画するやり方

記事内に商品プロモーションを含む場合があります

今回の講座ではmatplotlibでヒストグラムと棒グラフを作成する方法を紹介します。
とくに

  • ヒストグラムと棒グラフの違いってなに?
  • matplotlibでどうやって描画するの?

このような疑問を持っている人にうってつけの内容になっています。
データ分析業務において、ヒストグラム・棒グラフを見ない現場はないと思いますので、しっかりと押さえておきましょう。

 

ヒストグラムと棒グラフってなに?

いきなりmatplotlibで描画する方法にいくのではなく、まずはヒストグラムと棒グラフがいったいどういうものかを理解しましょう。

そのためにはまず、

特長量には連続する値とカテゴリカルな値があることを理解しましょう。

えいせい
えいせい
いきなり難しい話しに見えますが、安心してください。意味が分かれば非常にシンプルです。

まず特長量という単語の意味を知っている人も多いと思いますが、知らない人のためにシンプルに説明すると、テーブルデータのカラムだと思ってください。

例えば、前回の講座でも使った「tips」データですが、全てのカラムは.columnsで見る事ができます。

total_billからsizeまで、合計7個のカラムがある事が分かりました。

続いて、連続する値とカテゴリカルな値についてですが、まずカテゴリカルな値について説明します。

 

カテゴリカルな値とは?

簡単に言うと、カラムに入るデータがカテゴリー分けされているものです。
例えば、性別であったり、血液型、ログデータの場合はOSの種類やデバイスの種類などがそれにあたります。

tipsデータでは以下のものが該当します。

  • sex:性別
  • smoker:煙草を吸うか吸わないか?
  • day:何曜日か?
  • time:ランチかディナーか?

 

連続する値とは?

連続する値は、カテゴリーのように区分けされておらず、無数の数値が入るカラムのことです。整数だけの場合や少数が入る場合もあります。
例えば、身長や体重、トランザクションデータでは店舗の売上や購買点数などです。

tipsデータでは以下のものが該当します。

  • total_bill:お会計学
  • tip:チップの金額
  • size:来店人数

 

このような違いがあります。
ちなみにデータ方からも推測することができます。
df.info()で見れます。

 

 

 

 

 

Dtypeと書かれていいる箇所がデータ型にあたります。
categoryと書かれているカラムがカテゴリカルな値で、float64やint64と書かれているカラムが連続する値です。
ちなみにfloatの場合は小数点以下も格納でき、intの場合は整数だけです。

このようにデータ型からも見てとる事ができますが、データによっては本当はカテゴリーなのにintだったりする場合もありますので注意しましょう。

 

ヒストグラムとは何か?

ヒストグラムは連続する値をplotする場合に使います。
ただ、値をそのままplotするのではなく、ある区間ごとに区切ります。
各区間の個数や数値のばらつきを表現するグラフです。

ちなみにこの区切った区間のことを「bins」と呼びます。

例えば、tipsデータの「total_bill」を10個に区切ったヒストグラムが↓です。

支払い額の散らばりを見る事ができますね!
x軸の単位はドルですので、15ドルから20ドル前後の支払いが多い事が分かりました。

 

棒グラフとは何か?

一方、棒グラフは、カテゴリデータの分布状況を表現するために用いられます。
ある学校の生徒の血液型の分布を見たり、ある企業の年度毎の売上をplotしたりします。

x軸が血液型でカテゴリーごとになっていますね。
y軸はそれぞれの血液型の人数を表しています。
今回のy軸の単位は人数ですが、割合で表す場合も多いです。

 

 

plt.hist()でヒストグラムをplotしよう

では実際にmatplotlibでヒストグラムを作成する方法を見ていきましょう。

pyplot.hist(x,bins=10,range=None,density=False,weights=None,
                cumulative=False,bottom=None,histtype=‘bar’,
                align=‘mid’,orientation=‘vertical’,rwidth=None,
                log=False,color=None,label=None,stacked=False,
                hold=None,data=None)
引数 説明 詳細
x x軸を指定
  • x軸にplotするデータを指定
bins 階級数を指定
  • xを何分割するか決める
  • デフォルトは10
range ビンの表示範囲を指定
  • デフォルトはxの最小値と最大値
density 累積密度関数
  • Trueにするとy軸の値が累積密度関数になる
weights 重み
  • 指定した重みを付ける
cumulative 累積ヒストグラム
  • Trueにすると累積ヒストグラムをplot
bottom 下部の余白
  • ヒストグラムの下の余白を数値や配列で指定できる
histtype ヒストグラムの種類
  • ヒストグラムの種類を指定できる
  • barがデフォルト
  • stepにすると塗りつぶし無しの線だけ
align 棒の中心の位置
  • left・mid・rightから指定する
  • デフォルトはmid
orientation 棒の向き
  • horizontal:水平
  • vertical:垂直方向
rwidth 棒の太さ
  • 棒の太さを数値や配列で指定
log 対数目盛
  • Trueにするとy軸が対数目盛になる
color 棒の色の変更
  • redやrで色を指定
  • 色番号でも指定できる
label 凡例
  • 凡例を指定する
stacked 積み上げヒストグラム
  • Trueにすると積み上げヒストグラム
data dataframeを指定
  • dataframeからplotする際に使用

これだけの引数をとる事ができますが、絶対に必要なのはXだけです。
あまり使わないものも多いので、主要なものだけ紹介します。

 

ヒストグラムのplot

では上でdataframe化したtipsデータを使ってplotしてみましょう。
total_billをxに指定します。

ビンが10個のヒストグラムが作れました。
では続いてビンの数を倍の20にしてみましょう。

 

20にすることで、よりデータの分布の詳細が見れるようになりましたね。
あまり細かくし過ぎると、逆に見辛くなってしまうので、データセットに合わせた値を設定しましょう。

 

累積値をplot

ときどき累積値でplotすることもあります。
cumulativeをTrueにするだけですので簡単です。

 

ヒストグラムの見え方を変える

ヒストグラム自体の色や形を変えることもできます。

棒の幅と色を変更してみましょう。

続いて、棒の向きを横向きにして凡例を追加してみましょう。
凡例は今までと同じ方法で追加できます。

 

積み上げヒストグラム

あと積み上げヒストグラムも良く使います。
ランダムな値を作成してplotしてみましょう。

積み上げる場合は↓のようにリストでxを指定します。
また、それぞれのcolorもリストで渡すことで変更することができます。

ちなみにhisttypeではなくstackedを使っても一緒の結果になります。

 

 

plt.bar()で棒グラフをplotしよう

棒グラフをplotするさいはplt.bar()でplotすることができます。

plt.bar(x,height,width=0.8,bottom=None,
          color=None, align=‘center’,data=None)

引数 説明 詳細
x x軸を指定
  • x軸にplotするデータを指定
  • 必須項目
height 各棒の高さ
  • plotしたい高さを指定する
  • 必須項目
width 棒の太さ
  • 棒の太さを数値で指定
  • 0.8がデフォルト
bottom 下部の余白
  • ヒストグラムの下の余白を数値や配列で指定できる
  • 積み上げ棒グラフで使用する
color 棒の色
  • ‘r’や’red’で指定
  • 色番号でも指定できる
align 棒の位置
  • edge(左端)かcenter(中央)で指定
  • hist()のalignとは指定する単語が違うので注意
data dataframeを指定
  • dataframeからplotする際に使用

引数はこのようになっており、xとheightだけ必須項目となっています。

 

棒グラフのplot

では実際に棒グラフを出力してみましょう。
まずは、ある集団の血液型をカウントした結果をplotしてみましょう。
サンプルデータを作るところから始めます。

このように、引数には血液型のように直接リストで渡しても良いですし、countのように一回変数に入れてから渡しても大丈夫です。
ただ、データの個数は同じでないとエラーになってしまいますので、その点だけ注意しましょう。

また、他にもカテゴリーごとの平均値を出してplotすることも多いです。
例えば、先ほどのtipsデータの場合ですと、性別毎のtotal_bill(お会計額)の平均値を出してみると、それぞれの特長が見えてくるかもしれません。

↓のように、性別毎の平均値を出してからplotしてみましょう。

 

棒グラフの見え方を変える

colorやwidthを使う事で、グラフの見え方を変えることができます。

 

棒グラフに付属情報を追加する

棒グラフでもタイトルをつけたり、ラベルを付けたりができます。
また、グリッドも追加してさらに綺麗なグラフを作りましょう。
今までと同じく、下記のコマンドを追加するだけでできます。

  • plt.title(‘タイトル名’)
  • plt.xlabel(‘x軸のラベル’)
  • plt.ylabel(‘y軸のラベル’)

 

積み上げ棒グラフをplot

棒グラフでも積み上げ形式で表示する事ができます。
その際使うのがbottomです。

流れとしては、plotする2つのheightを作り、一個目はそのままplotします。
2個目にbottomに一個目の値を指定して、一個目分浮かしたうえで2個目をplotします。

まぁ説明するのは難しいので、実際に見ていきましょう。

このようにして作成する事ができます。
こうなると、凡例が欲しくなりますよね?
下記のようにすることで追加できます。

 

 

まとめ

今回も大分ボリューミーな内容でしたね。
ヒストグラムや棒グラフは実際の現場でも必ず出てくるものですので、その特徴をしっかりと押さえて使いましょう。

  • ヒストグラム:連続値に対して使う
  • 棒グラフ:カテゴリカルな値に使う

また、全てを覚える必要はないです。
まずは基本だけを抑えて、あとは何が出来るのかを理解出来れば十分です。
実際に使うときは、チートシートやググりつつコードが書ければ問題ないです。

 

 

 

Work illustrations by Storyset

あなたにおススメの記事