ヒストグラム
このレッスンでできるようになること。購入金額の分布をヒストグラムで描き、どの価格帯に売上が集中しているかを読めるようになります。
平均単価が8000円だと聞いて、8000円前後の商品がよく売れていると考えるのは早計です。1800円の白磁のマグカップが大量に売れ、16800円の鋳物ホーロー鍋がときどき売れているだけかもしれません。平均は分布を1つの数字に潰してしまうので、潰す前の形を見る必要があります。それがヒストグラムです。
ヒストグラムは、値の範囲をいくつかの区間に区切り、それぞれの区間に何件入るかを数えた図です。棒グラフと形は似ていますが、意味がまったく違います。棒グラフの横軸は分類、ヒストグラムの横軸は数値の目盛りです。だからヒストグラムの棒には隙間がありません。
Python
counts, edges, patches = ax.hist(df["金額"], bins=4)hist は3つの値を返します。counts が各区間の件数、edges が区間の境目、patches が描かれた棒です。区間の数は bins で指定します。bins を変えると図の印象はかなり変わります。細かく切れば凸凹が目立ち、粗く切ればなだらかになります。どちらが正しいということはありませんが、都合の良い形になるまで bins をいじるのは分析ではありません。まず既定に近い数で見て、必要があれば理由とともに変えます。
読み返すときは counts をそのまま使えます。numpy の配列なので、tolist() を掛けてから中身を int に直します。区間の境目も同様に読めます。
Python
values = [int(c) for c in counts.tolist()]分布を見ると、売上の性格が言葉になります。低い価格帯に山が1つあれば「日用品中心の店」、山が2つに分かれていれば「安い雑貨と高額な調理器具の二極」と読めます。山が2つあるデータの平均は、どちらの山にも属さない谷の位置を指すことがあります。平均が実態を表さない典型です。ヒストグラムを描く習慣は、平均に騙されないための保険になります。
要件
- ax.hist で bins を指定してヒストグラムを描く
- counts は hist の戻り値から読み返す
- 件数は int に直す
- busiest は counts から求める
- matplotlib.use("Agg") を pyplot の import より前に書く