LEVEL 7 ・ Excel / Lesson 17
棒グラフ・折れ線グラフを描く
部署別の比較は棒グラフ、時間の変化は折れ線グラフ。タイトル・軸・色の付け方も学びます。
このレッスンが終わったら
「plt.bar で棒グラフ、plt.plot で折れ線グラフが描ける。何を横に並べ、何を高さにするかを、渡せばよい」と言える。
できることを見る
数字の表を眺めるより、グラフにしたほうが、一目で違いが分かります。ExcelのグラフをPythonで作ることもできます。
部署別の売上を、棒グラフにしてみましょう。使うのは、matplotlib(マットプロットリブ)という、グラフを描くための道具です。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel("sales.xlsx")
summary = df.groupby("部署")["金額"].sum()
plt.bar(summary.index, summary.values)
plt.title("部署別の売上合計")
plt.show()動かしてみる
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
結果の下に、グラフが表示されましたか。営業が一番高く、総務が一番低いことが、数字を読まなくても、すぐ分かります。
1行ずつ読む
import matplotlib.pyplot as pltグラフを描く道具を使う。呼ぶときは、短く「plt」と呼ぶsummary = df.groupby("部署")["金額"].sum()部署ごとの、金額の合計を求める(Lesson 16 と同じ)plt.bar(summary.index, summary.values)棒グラフを描く。横に並べるもの(部署名)と、棒の高さ(合計)を渡すplt.title("部署別の売上合計")グラフのタイトルを付けるplt.show()グラフを表示する日本語にすると
summary.index は、集計結果の「見出し」(部署名)、summary.values は「中身」(合計の数字)です。**「何を横に並べ、何を高さにするか」**を、plt.bar(横, 高さ) の形で渡すだけです。
1か所だけ変える
① 折れ線グラフにする。 推移(時間の変化)を見るときは、折れ線グラフが向いています。日付ごとの売上を、plt.plot で描きます。(marker="o" は、点の印を付ける指定です)
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
plt.xticks(rotation=45) は、横軸の文字を、45度に傾けて、重ならないようにする指定です。
② 軸に名前を付ける。 何の数字か分かるように、横軸・縦軸に名前を付けます。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
③ 色を変える。 color で、棒の色を指定します。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
④ 横棒グラフにする。 項目名が長いときは、bar の代わりに barh を使います。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
⑤ pandas の機能で、もっと短く描く。 pandas の表には、グラフを描く機能が、最初から付いています。1行で描けます。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
kind="bar"(棒)、kind="line"(折れ線)、kind="barh"(横棒)のように、種類を文字で選ぶだけです。
自分で書く
グラフは、見た目を、画面で確かめるものです。ここでは、「確認用の行」が、最初から書いてあります。タイトルや種類を指定する行を、書き足してください。
お題① 商品別の売上合計の棒グラフに、タイトル「商品別売上」を付けてください。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
plt.title("商品別売上") と書きます。最後の print の行は、タイトルが付いたかを、確かめる行です。
答えの例を見る
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel("sales.xlsx")
summary = df.groupby("商品")["金額"].sum()
plt.bar(summary.index, summary.values)
plt.title("商品別売上")
print(plt.gca().get_title())お題② 担当者別の売上合計の棒グラフを描いてください。5人なので、棒は5本になります。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
summary = df.groupby("担当")["金額"].sum() で合計を求め、plt.bar(summary.index, summary.values) で描きます。
答えの例を見る
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel("sales.xlsx")
summary = df.groupby("担当")["金額"].sum()
plt.bar(summary.index, summary.values)
print(len(plt.gca().patches), "本")