HAGAKURE PROGRAMMING塾
← → / スペースで移動 · 手書きでコードを写す勉強会

Study Session · Handwriting Dojo

pandas × matplotlib
手書き道場

ノートにコードを書いて、表を読み・眺め・グラフにする。データ分析の入口を、手で覚える勉強会です。

想定 45〜60 分 HAGAKURE PROGRAMMING塾 道具: Google Colab

手を振る侍マスコット
今日は「写経」の日だ。まずは手を動かそう。

Agenda

今日やること

01 書く

スライドのコードをノートへ手書きする(写経)

02 眺める

pandas で表の形・型・要約を確認する書き方を覚える

03 描く

matplotlib で棒・折れ線の型をノートに残す

04 持ち帰る

「読む → 集計 → 描く」の型を、自分の手で再現できるようにする

指差し侍
ゴールは「完璧なグラフ」ではなく、Python で表を触る型を手に残すこと。実行は家でも、まずは手が覚える。

How to proceed

今日の進め方(手書き前提)

  1. スライドに出る ノートに書く コードを、そのまま写す
  2. コメント(#)も意味ごと書く。後で読み返せるように
  3. チャレンジは空欄に自分で書いてみる(正解は隣と相談)
  4. 帰宅後に PC で打ち込んで動かしてもOK
今日は Notebook を「実行しながら進む」会ではありません。まずは手で型を刻みます。
ノートPCを使う侍
写すときは「なぜこの1行か」を口に出してみよう。

Audience

こんな人におすすめ

型を手で覚えたい

動画を見るだけでは抜けてしまう人。写経で身体に残したい人

表計算は慣れている

Excel / スプレッドシートは使えるが、Python での可視化にまだ不安がある人

コードの型が欲しい

「読む → 絞る → 集計 → 描く」の短い型を、ノート1冊に残したい人

前提知識: 変数・関数のごく初歩があれば十分。ループやクラスの深い理解は不要です。

Why this stack

なぜ pandas × matplotlib か

  • 1

    実務の入口に近い

    「表を読む → 集計する → 図にする」は、現場でも最初に回す基本動作。

  • 2

    Excel の延長線

    フィルタ・ピボット・グラフの操作を、コードで再現している感覚が掴みやすい。

  • 3

    短い型が残る

    手書き向きの短いAPIが多く、ノートに写しても負担が少ない。

今日やらないこと

  • 機械学習・統計モデリング
  • 複雑な前処理・欠損値戦術
  • 見た目を極めるデザイン調整

まずは「書ける」こと。美しさや厳密さは次の稽古で十分です。

Why pandas

なぜ pandas を使うのか

pandas は、Python で表形式データを扱う定番ライブラリ。Excel の「シート」に近い感覚で、行・列を操作できます。

Excel でやっていること

  • 先頭数行を眺める
  • フィルタで絞り込む
  • ピボットで集計する
  • 列の型や欠損を気にする

pandas での対応

  • head() / info() / describe()
  • df[条件] で絞り込み
  • groupby() で集計
  • 列名付きの表(DataFrame)として扱う
いちばんの利点は、手順をコードとして残せること。同じ集計を再現でき、データ量が増えても同じ書き方で回せます。

Why matplotlib

なぜ matplotlib を使うのか

matplotlib は Python でグラフを描く基礎ライブラリ。「棒」「折れ線」など、説明用の図を素早く作れます。

  • 学習コストが比較的低く、教材・現場の双方で登場しやすい
  • pandas の集計結果をそのまま渡して描ける
  • 後から seaborn など、見た目寄りのライブラリへ橋渡ししやすい

今日ノートに残すもの

折れ線(推移) 棒(比較) groupby → 描画

グラフは「正解を出す道具」ではなく、差・変化・偏りを伝える道具です。

Dummy data

どんなダミーデータを使うか

本日の題材は架空の販売データ。個人情報や社外秘を含まないので、安心してコピー・改変・失敗できます。

240行(レコード)
6列(項目)
12か月分
5×4商品 × 地域
待機する侍

設定: 2025年1月〜12月。商品(ノートPC / モニター / キーボード / マウス / ヘッドセット)と地域(東京 / 大阪 / 福岡 / 札幌)の組み合わせごとに、販売数・単価・売上金額を持っています。

Schema

列の意味(データ辞書)

列名 意味 Excel で例えると
年月売上の月2025-01日付列(月単位)
商品商品カテゴリノートPC区分列
地域販売地域東京区分列
販売数売れた個数32数量
単価1個あたりの価格128606単価
売上金額販売数 × 単価4115392金額(計算列)
1行 = 「ある月・ある商品・ある地域」の販売実績、と読むと整理しやすいです。

Preview

データの見本(先頭数行)

年月商品地域販売数単価売上金額
2025-01ノートPC東京8118533948264
2025-01ノートPC大阪321286064115392
2025-01ノートPC福岡8110260882080
2025-01ノートPC札幌291314143811006
2025-01モニター東京30370021110060

なぜダミーか

本番データは権限・個人情報の話が先に来がち。学習では、構造がはっきりした架空データで「操作の型」に集中します。

ファイル名を覚える

手書きでは sales_dummy.csv を読み込む型を使います。同じデータがリポジトリの data/ にあります。

Step 0 · Write

ライブラリを読み込む

Excel のアドインを有効にするイメージ。まずはこの3行をノートに写してください。

ノートに書く
import pandas as pd
import matplotlib.pyplot as plt

# 日本語ラベルが化けないように(任意)
import japanize_matplotlib

print("pandas:", pd.__version__)
print("準備OK")

覚える名前は2つ

  • pd … 表操作(pandas)
  • plt … 描画(matplotlib)
PCに向かう侍
別名(as)は「短いあだ名」。毎回フルネームは書かない。

Step 1 · Write

ダミーデータを読み込む

ノートに書く
# CSV を読み込んで DataFrame にする
df = pd.read_csv("sales_dummy.csv")

# 先頭5行を眺める(Excelの上の数行)
df.head()

# 形を確認
print("行数:", len(df))
print("列数:", len(df.columns))
print(df.shape)  # (行, 列)

ここで起きていること

  • DataFrame が「シート」に相当
  • head() で先頭を確認
  • shape で行×列を確認
いきなりグラフを描かず、必ず一度眺める。形・列名・単位の確認が事故防止になります。

Step 2 · Write

pandas でデータを眺める

ノートに書く
# 形(行数・列数)と列名
print("shape:", df.shape)
print("columns:", list(df.columns))

# 各列の型・欠損の有無
df.info()

# 数値列のざっくり統計
df.describe()

# 区分の一覧
print("商品:", df["商品"].unique())
print("地域:", df["地域"].unique())
print("年月:", df["年月"].min(), "〜", df["年月"].max())

まず覚える4つ

  • df.shape
  • df.info()
  • df.describe()
  • df["列"].unique()
考え込む侍
グラフの前に「中身の確認」。これが道場の基本動作だ。

Step 2b · Write

条件で絞り込む(フィルタ)

ノートに書く
# 東京 × ノートPC だけ残す
tokyo_pc = df[
    (df["地域"] == "東京") &
    (df["商品"] == "ノートPC")
]

# 年月で並べて確認
tokyo_pc.sort_values("年月")

Excel で例えると

フィルタで「地域=東京」「商品=ノートPC」を選ぶ操作と同じです。条件は &(かつ)でつなぎます。

書き方の型

df[
  (df["列"] == "値") &
  (df["列"] == "値")
]

Challenge

ミニチャレンジ① 絞り込み

考え込む侍
答えを見る前に、まずノートへ書いてみよう。

ノートの空欄に書いてみよう

  • 大阪モニター だけに絞り込む
  • 販売数 が 30 以上の行だけ出す

ヒント(答え合わせ用)

df[(df["地域"] == "大阪") & (df["商品"] == "モニター")]
df[df["販売数"] >= 30]

Step 3-1 · Write

折れ線グラフで推移を見る

ノートに書く
line_df = (
    df[(df["地域"] == "東京") &
       (df["商品"] == "ノートPC")]
    .sort_values("年月")
)

plt.figure(figsize=(8, 4))
plt.plot(line_df["年月"],
         line_df["売上金額"],
         marker="o")
plt.title("東京 × ノートPC の月次売上")
plt.xlabel("年月")
plt.ylabel("売上金額(円)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

いつ折れ線か

時間や順序があるとき。増えた / 減った / 波があるを見せたい場面向き。

書き順の型

  • データを絞る・並べる
  • plt.figure でキャンバス
  • plt.plot で線
  • タイトル・軸 → show()

Step 3-2 · Write

棒グラフで比較する

ノートに書く
product_units = (
    df.groupby("商品")["販売数"]
      .sum()
      .sort_values(ascending=False)
)

plt.figure(figsize=(8, 4))
plt.bar(product_units.index,
        product_units.values)
plt.title("商品別 販売数合計")
plt.xlabel("商品")
plt.ylabel("販売数")
plt.tight_layout()
plt.show()

いつ棒グラフか

カテゴリ同士の大小比較。どれが多い/少ないを一目で伝えるときに使います。

指差し侍
生データ240行をそのまま棒にはしない。まず groupby で要約してから描く。

Challenge

ミニチャレンジ② グラフを変える

ノートに書いてみよう

  • 棒グラフの縦軸を 売上金額 に変える
  • 折れ線の対象を 福岡 × モニター に変える

ヒント(答え合わせ用)

# 棒: 販売数 → 売上金額
df.groupby("商品")["売上金額"].sum()

# 折れ線: 条件だけ差し替え
df[(df["地域"] == "福岡") &
   (df["商品"] == "モニター")]
驚いた侍
条件を1か所変えるだけで、見える景色が変わる!

Step 4 · Optional Write

集計 → 可視化の一連の流れ

読む

列と粒度を確認

集計

groupby で要約

確認

表で数値を見る

描く

グラフで伝える

余裕があれば書く
region_month = (
    df.groupby(["年月", "地域"], as_index=False)
      ["売上金額"].sum()
)
pivot = region_month.pivot(
    index="年月", columns="地域",
    values="売上金額"
)

plt.figure(figsize=(9, 5))
for region in pivot.columns:
    plt.plot(pivot.index, pivot[region],
             marker="o", label=region)
plt.title("地域別 月次売上の推移")
plt.xlabel("年月")
plt.ylabel("売上金額(円)")
plt.xticks(rotation=45)
plt.legend(title="地域")
plt.tight_layout()
plt.show()

現場でも同じ型

  • 質問を一文にする(例: 地域差は?)
  • その質問に必要な粒度で集計
  • 表で検算してから図にする

時間が足りなければ、必須は Step 3 まで。この流れは「型」として持ち帰ってください。

Recap

ふりかえり(ノートの目次)

やりたいこと書くコードの型Excel 感覚
表を扱うpd.read_csv / DataFrameシート
概要を見るhead / info / describe先頭確認・概要
絞り込むdf[条件]フィルタ
集計するgroupbyピボット
グラフを描くplot / barグラフ挿入
待機する侍

持ち帰り一文: 「表を読んで、必要なら集計して、比較や推移が伝わる形で描く」——これが今日の型です。

Next

次に伸ばすなら

家で打ち込む

今日ノートに書いたコードを、PC に打ち込んで動かしてみる

自分の表で試す

手元の CSV / Excel で同じ head → groupby → plot を通す

見た目を整える

seaborn やテーマ設定で、説明資料向けの体裁に寄せる

眠そうな侍
一度に全部やらなくてよい。ノートに型が残っていれば、今日は勝ちです。休息も稽古のうち。

FAQ

よくあるつまずき

日本語が □□□ になる

import japanize_matplotlib を書いたか確認。未インストールなら pip install japanize-matplotlib

NameError: df is not defined

pd.read_csv(...) の行を飛ばしている。上から順に書く/打ち込む

グラフが出ない

plt.show() を忘れがち。最後に必ず書く

自分の CSV を使いたい

ファイル名だけ差し替え → pd.read_csv("自分のファイル.csv")

驚いた侍
エラーは失敗じゃない。メッセージを読む稽古だ。

Closing · HAGAKURE PROGRAMMING塾

手で書いて、
型を残そう

ダミーデータで失敗しながら、読む → 集計 → 描く をノートに一周。それが今日の成功条件です。

データ: data/sales_dummy.csv 参考: notebooks/01_pandas_matplotlib_intro.ipynb

喜ぶ侍
お疲れさま!ノートを見返せるようになったら一人前だ。