折れ線グラフ
このレッスンでできるようになること。月別売上の推移を折れ線で描き、時間の並びを崩さずに図にできるようになります。
棒グラフが比較の図なら、折れ線は変化の図です。点と点を線でつなぐという表現そのものが「この2つは連続している」という主張なので、時間や順序のあるものにしか使えません。店舗別の売上を折れ線で結ぶと、渋谷店と横浜店の間に何かの流れがあるように見えてしまいます。図の種類の選択は、それ自体が主張です。
月別の推移を描く手順は、集計してから描くという点で棒と同じです。売上CSVには月の列が無いので、3章で覚えたとおり売上日から取り出します。
Python
df["売上日"] = pd.to_datetime(df["売上日"])
df["月"] = df["売上日"].dt.month
by_month = df.groupby("月")["金額"].sum().sort_index()
ax.plot(by_month.index, by_month.values)sort_index() を忘れないでください。月を数値で持っていれば数の順に並びますが、"1月" "2月" ... "10月" のような文字列で持っていると、文字列としての並びで "10月" が "2月" より前に来ます。折れ線は左から順に点をつなぐので、並びが狂うと線が行ったり来たりする意味不明な図になります。日付型にしてから月を取り出す手順を守れば、この事故は起きません。3章で日付型に直したのは、こういう場面で効いてきます。
折れ線を読み返すときは、線を取り出してから値の並びを見ます。
Python
line = ax.get_lines()[0]
values = [int(v) for v in line.get_ydata().tolist()]読み返した値が、意図した月の順に並んでいるかを確かめます。ここで並びの崩れに気づけるのが、コードで確認することの利点です。
もう1つ、折れ線では縦軸の始点が話題になります。0から始めずに拡大すると、わずかな変化が急激な伸びに見えます。これは嘘ではありませんが、読み手を誤解させます。売上のように0に意味がある量は、原則として0から描いてください。図で人を驚かせるのは簡単ですが、分析の仕事は驚かせることではありません。
要件
- 売上日を to_datetime で日付型にしてから月を取り出す
- groupby("月") で月別に集計する
- 月は古い順に並べてから描く
- ax.plot で折れ線を1本描く
- values は ax.get_lines() から読み返す
入出力例
draw_monthly_line("売上日,店舗,商品名,カテゴリ,数量,金額
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-03-01,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
") → {"months":[1,2,3],"peak_month":2,"values":[11400,16800,4500]}
draw_monthly_line("売上日,店舗,商品名,カテゴリ,数量,金額
2026-05-01,横浜店,白磁のマグカップ,食器,4,7200
2026-04-01,大宮店,布製収納バスケット,収納,2,3000
2026-04-02,渋谷店,木製カッティングボード,調理器具,1,4200
") → {"months":[4,5],"peak_month":4,"values":[7200,7200]}