売上管理表で棒グラフで作成その2 Matplotlib 入門講座 05_02

Python
この記事は約9分で読めます。

【実践】売上管理表で棒グラフでグラフ化してみよう

前回作成したデータを元にグラフを作成します。
前回のブログ記事はこちら
volumeという変数にsum_df['売上金額'] を代入、
dateという変数に、日付型に変更したインデックスを代入

グラフを表示させる領域をplt.figureで設定。
plt.barでグラフを表示させます。

月ごとの売上棒グラフ

volume = sum_df['売上金額']
date = sum_df.index
plt.figure(figsize=(9,6))
plt.bar(date,volume, width=20)
plt.show()

時間軸ラベルの表示変更 全ての棒グラフに日付ラベル追加

ここから今までと少し違くことをします。
x軸の日付の表示を変更するのですが、
内容としては月のみ表示に変更します。
matplotlibに時間軸の表示を自由に変更できる
set major formatterという関数があるそうです。

この関数はaxisという、日本語で軸を意味するオブジェクトで使用することが
できるそうです。

axisの省略名のaxという名前で、axisオブジェクトを作成します。
ax=plt.subplot()
このaxというオブジェクトに対して棒グラフを描画します。
set_icks()の中には、先ほど設定した変数のdateを引数として渡します。
そして、ax.xaxisの部分の()の中に、matplotlib.dateの省略名dtを記述し
DateFormatter()の中には、%mと記述します。
monthの頭文字を取ったmを記述することで、
軸のラベルが月のみになります。

fig = plt.figure(figsize=(9,6))
ax = plt.subplot()

ax.bar(date,volume, width=20)
ax.set_xticks(date)
ax.xaxis.set_major_formatter(dt.DateFormatter("%m"))

plt.show()


ちなみに%mと入力した部分を%bとすると英語表記の月名となります。

グラフ色変更、タイトル、軸ラベル付与

これまでのところをふまえて、グラフの各種設定、タイトルの付与などを
行っていきます。
日本語表記するためにjapanize_matplotlibをインポートします。
Googlecoaboratryを使用しているためインストールも必要です。

!pip install japanize_matplotlib

import japanize_matplotlib 

fig = plt.figure(figsize=(9,6))
ax = plt.subplot()

ax.bar(date, volume, width=20, color='darkcyan')
ax.set_xticks(date)
ax.xaxis.set_major_formatter(dt.DateFormatter("%b"))
ax.set_title('月別売上金額', fontsize=18)
ax.set_xlabel('月', fontsize=15)
ax.set_ylabel('売上金額(円)', fontsize=15)

plt.show()

氏名ごとの売上棒グラフ

ここから氏名ごとの売り上げ棒グラフの説明になるのですが、
データを見ても氏名の欄がありません。
なので氏名の部分を社員IDで変えてコードを書きたいと思います。
groupbyメソッドを使って社員ID別売上合計のdfを作成します。

df_name = df[['社員ID','売上金額']].groupby('社員ID').sum()
df_name


このデータを元に社員ID毎の売り上げ棒グラフを作成します。
その際、今まで学んできたxlabel や bar の 幅、
タイトルなども付与します。

plt.figure(figsize=(9,6))
volume = df_name['売上金額']
labels = df_name.index

plt.bar(labels, volume, width=0.5 ,color='coral')
plt.xlabel('社員ID', fontsize=12)
plt.ylabel('合計', fontsize=12)
plt.title('社員ID別売上金額', fontsize=16)
plt.show()

商品分類棒グラフ

次は氏名ごと、商品分類ごとの積み上げ棒グラフ作成です。
[]の中に、社員ID、商品分類、売上金額を入力。
groupby()の中には、社員IDと商品分類をリストで入力します。
合計を算出するために、sum()を記述します。
これを、df name2というデータフレームに代入します。

df_name2 = df[['社員ID', '商品分類', '売上金額']].groupby(['社員ID','商品分類']).sum()
df_name2

作成したデータフレームは、社員ID商品分類という
ふたつのindexがあります。

このようなデータフレームをマルチインデックスと言うらしいです。
このままではうまくグラフ作成ができないので社員IDをindexにします
マルチインデックスのデータフレームは、
縦に積み上げたように見えるので、その逆のunstackメソッドを使います。

これを変数df name2に入れ直します。

df_name2 = df_name2.unstack()
df_name2


これでインデックスに社員ID、カラムが商品分類の
データフレームを作成できました。

pandasデータフレームのplotメソッドで、
データフレームをそのままグラフにすることができるらしいです。
グラフにしたいデータフレームに、plotと記述。
()の中には、グラフの種類を指定するkindと書いて、
棒グラフを意味するbarを指定します。
続いて、legendで凡例の名前をリストで記述します。
pandasのplotメソッドで作成したグラフのサイズは、
引数figsizeで指定が可能です。

df_name2.plot(kind='bar',rot=0, figsize=(9,6))
plt.legend(['アウター','トップス','ボトムス'])
plt.xlabel('社員ID', fontsize=15)
plt.ylabel('売上金額(円)', fontsize=15)
plt.title('社員ID/商品別売上', fontsize=20)
plt.show()

商品分類積み上げ棒グラフ

社員IDごとの商品分類を、積み上げ棒グラフにします。
plotメソッドで、引数stackedTrueを指定するだけで、
積み上げの棒グラフにすることができます。

df_name2.plot(kind='bar',rot=0, figsize=(9,6), stacked=True)
plt.legend(['アウター','トップス','ボトムス'])
plt.xlabel('社員ID', fontsize=15)
plt.ylabel('売上金額(円)', fontsize=15)
plt.title('社員ID/商品別売上', fontsize=20)
plt.show()

商品分類積み上げ棒グラフ(水平)

kind='bar' を kind='barh' とするだけで
水平積み上げ棒グラフの作成もできます。

df_name2.plot(kind='barh',rot=0, figsize=(9,6), stacked=True)
plt.legend(['アウター','トップス','ボトムス'])
plt.xlabel('社員ID', fontsize=15)
plt.ylabel('売上金額(円)', fontsize=15)
plt.title('社員ID/商品別売上', fontsize=20)
plt.show()

fig保存

最後に、作成したグラフを画像として保存します。
savefig()の中に、好きなファイル名を記述し実行します。

df_name2.plot(kind='barh',rot=0, figsize=(9,6), stacked=True)
plt.legend(['アウター','トップス','ボトムス'])
plt.xlabel('社員ID', fontsize=15)
plt.ylabel('売上金額(円)', fontsize=15)
plt.title('社員ID/商品別売上', fontsize=20)
plt.show()
plt.savefig('Sales.png')

今回もkinocodeさんの動画で勉強させていただきました。
ありがとうございました!

コメント

タイトルとURLをコピーしました