Study Session · Handwriting Dojo
pandas × matplotlib
手書き道場
ノートにコードを書いて、表を読み・眺め・グラフにする。データ分析の入口を、手で覚える勉強会です。
想定 45〜60 分 HAGAKURE PROGRAMMING塾 道具: Google Colab
Agenda
今日やること
スライドのコードをノートへ手書きする(写経)
pandas で表の形・型・要約を確認する書き方を覚える
matplotlib で棒・折れ線の型をノートに残す
「読む → 集計 → 描く」の型を、自分の手で再現できるようにする
How to proceed
今日の進め方(手書き前提)
- スライドに出る ノートに書く コードを、そのまま写す
- コメント(
#)も意味ごと書く。後で読み返せるように - チャレンジは空欄に自分で書いてみる(正解は隣と相談)
- 帰宅後に PC で打ち込んで動かしてもOK
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 など、見た目寄りのライブラリへ橋渡ししやすい
今日ノートに残すもの
グラフは「正解を出す道具」ではなく、差・変化・偏りを伝える道具です。
Dummy data
どんなダミーデータを使うか
本日の題材は架空の販売データ。個人情報や社外秘を含まないので、安心してコピー・改変・失敗できます。
設定: 2025年1月〜12月。商品(ノートPC / モニター / キーボード / マウス / ヘッドセット)と地域(東京 / 大阪 / 福岡 / 札幌)の組み合わせごとに、販売数・単価・売上金額を持っています。
Schema
列の意味(データ辞書)
| 列名 | 意味 | 例 | Excel で例えると |
|---|---|---|---|
| 年月 | 売上の月 | 2025-01 | 日付列(月単位) |
| 商品 | 商品カテゴリ | ノートPC | 区分列 |
| 地域 | 販売地域 | 東京 | 区分列 |
| 販売数 | 売れた個数 | 32 | 数量 |
| 単価 | 1個あたりの価格 | 128606 | 単価 |
| 売上金額 | 販売数 × 単価 | 4115392 | 金額(計算列) |
Preview
データの見本(先頭数行)
| 年月 | 商品 | 地域 | 販売数 | 単価 | 売上金額 |
|---|---|---|---|---|---|
| 2025-01 | ノートPC | 東京 | 8 | 118533 | 948264 |
| 2025-01 | ノートPC | 大阪 | 32 | 128606 | 4115392 |
| 2025-01 | ノートPC | 福岡 | 8 | 110260 | 882080 |
| 2025-01 | ノートPC | 札幌 | 29 | 131414 | 3811006 |
| 2025-01 | モニター | 東京 | 30 | 37002 | 1110060 |
なぜダミーか
本番データは権限・個人情報の話が先に来がち。学習では、構造がはっきりした架空データで「操作の型」に集中します。
ファイル名を覚える
手書きでは 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)
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.shapedf.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()
いつ棒グラフか
カテゴリ同士の大小比較。どれが多い/少ないを一目で伝えるときに使います。
groupby で要約してから描く。Challenge
ミニチャレンジ② グラフを変える
ノートに書いてみよう
- 棒グラフの縦軸を
売上金額に変える - 折れ線の対象を
福岡×モニターに変える
ヒント(答え合わせ用)
# 棒: 販売数 → 売上金額
df.groupby("商品")["売上金額"].sum()
# 折れ線: 条件だけ差し替え
df[(df["地域"] == "福岡") &
(df["商品"] == "モニター")]
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