Pythonの基礎の次は何をする?売上CSVで「集計→図→仮説」の3段階を練習しよう

※本サイト・記事にはPRが含まれています
Pythonの基礎の次は何をする?売上CSVで「集計→図→仮説」の3段階を練習しよう

Pythonの入門書や入門講座を、ひととおり終えた方も多いでしょう。

変数、if文、for文、関数までは書けるようになったけれど…

 

「Pythonの基礎は終わったけど、次に何をすればいいの?」

「データ分析の練習をしたいけど、ちょうどいい課題が見つからない」

 

と、手が止まってしまっていませんか。

その気持ち、よくわかります。

結論から言うと、基礎の次は、小さな表データで「集計→図→仮説」を1周やり切るのがおすすめです。

この記事では、店舗の売上CSVを使って、pandasとmatplotlibで3段階を練習する手順をご紹介します。

コードと、実行したときに出てくる結果、正しくできたかの確かめ方をセットで載せています。

読み終えるころには、自分の仕事のデータでも同じ流れを試せるようになっているはずです。

一緒に手を動かしていきましょう!

先に結論|基礎の次は「集計→図→仮説」を1周する

データ分析の仕事は、大きく分けると次の3段階で進みます。

段階やること使うものゴール
STEP1 集計表を読み込み、知りたい切り口でまとめるpandas店舗×月の売上表ができる
STEP2 図まとめた表をグラフにするmatplotlib変化が一目でわかる
STEP3 仮説「なぜ?」を1つ立てて、データで確かめるpandas次に打つ手が言える

文法の練習問題をいくら解いても、この3段階を通しで経験しないと「分析ができる」という感覚はつかみにくいものです。

逆に、20行ほどの小さなデータでも、1周やり切れば仕事のデータにそのまま応用できます。

練習に使うデータ|Excelの記事と同じ売上CSV

練習には、Excelの月次集計を自動化する記事と同じCSVを使います。

あちらの記事では、同じCSVをPower QueryとPythonで集計するところまでを試しました。

この記事はその続きとして、集計の先の「図」と「仮説」まで進みます。

https://d-cubed-lab.com/excel-monthly-report-automation

文房具を売る3つの店舗(本店、駅前店、オンライン)の、10月と11月の注文の記録です。

架空のデータなので、安心して練習に使ってください。

フォルダーの作り方

まず、作業用のフォルダーを1つ作り、次のように置きます。

作業用のフォルダー/
├─ analysis.py        ← これから書くプログラム
└─ monthly_sales/     ← CSVを入れるフォルダー
    ├─ sales_2026-10.csv
    └─ sales_2026-11.csv

CSVの中身

Excelの記事でCSVを作った方は、そのファイルをコピーして使ってください。

まだの方は、次の内容をテキストエディタに貼りつけ、文字コードをUTF-8にして保存しましょう。

sales_2026-10.csv:

注文日,店舗,商品,数量,単価,金額,状態
2026-10-01,本店,ノート,3,250,750,完了
2026-10-02,駅前店,ボールペン,10,120,1200,完了
2026-10-05,オンライン,ファイル,4,300,1200,完了
2026-10-08,本店,ボールペン,5,120,600,キャンセル
2026-10-12,駅前店,ノート,6,250,1500,完了
2026-10-15,オンライン,ノート,2,250,500,完了
2026-10-19,本店,ファイル,5,300,1500,完了
2026-10-22,駅前店,ファイル,2,300,600,キャンセル
2026-10-26,オンライン,ボールペン,8,120,960,完了
2026-10-30,本店,ノート,4,250,1000,完了

sales_2026-11.csv:

注文日,店舗,商品,数量,単価,金額,状態
2026-11-02,本店,ボールペン,6,120,720,完了
2026-11-04,オンライン,ノート,5,250,1250,完了
2026-11-06,駅前店,ファイル,3,300,900,完了
2026-11-09,本店,ファイル,2,300,600,完了
2026-11-11,駅前店,ボールペン,12,120,1440,完了
2026-11-14,オンライン,ファイル,1,300,300,キャンセル
2026-11-18,本店,ノート,7,250,1750,完了
2026-11-21,オンライン,ボールペン,9,120,1080,完了
2026-11-25,駅前店,ノート,4,250,1000,完了
2026-11-28,本店,ボールペン,3,120,360,完了

列の意味は、注文日、店舗、商品、数量、単価、金額(数量×単価)、状態(完了かキャンセル)です。

準備|pandasとmatplotlibを入れる

pandasは表の集計、matplotlibはグラフづくりに使うライブラリです。

ターミナル(WindowsはコマンドプロンプトかPowerShell)で、次のコマンドを実行します。

python -m pip install pandas matplotlib

Macで「python」が見つからないと言われたら、「python3」に置きかえて実行してください。

※この記事のコードは、Python 3.9.6、pandas 2.3.3、matplotlib 3.9.4で動くことを確かめています。

STEP1|集計:店舗×月の売上表を作る

最初の段階は、集計です。

2つのCSVをまとめて読み込み、キャンセルを除いて、店舗ごと・月ごとの売上表を作ります。

analysis.pyに、次のコードを書きましょう。

from pathlib import Path
import platform
import pandas as pd
import matplotlib.pyplot as plt

# ===== STEP1:集計 =====
folder = Path("monthly_sales")  # CSVを置いたフォルダー
frames = [pd.read_csv(p, encoding="utf-8-sig") for p in sorted(folder.glob("sales_*.csv"))]
data = pd.concat(frames, ignore_index=True)

# 注文日から「月」の列を作る
data["月"] = pd.to_datetime(data["注文日"]).dt.strftime("%Y-%m")

# キャンセルを除く
done = data[data["状態"] != "キャンセル"]
print(f"読み込み: {len(data)}行 / キャンセルを除いて: {len(done)}行")

# 店舗 × 月 の売上表を作る
pivot = done.pivot_table(index="店舗", columns="月", values="金額",
                         aggfunc="sum", margins=True, margins_name="合計")
print(pivot)

作業用のフォルダーで「python analysis.py」と実行すると、次のように表示されます。

読み込み: 20行 / キャンセルを除いて: 17行
月      2026-10  2026-11     合計
店舗
オンライン     2660     2330   4990
本店        3250     3430   6680
駅前店       2700     3340   6040
合計        8610     9100  17710

pivot_table(ピボットテーブル)は、Excelのピボットテーブルと同じように、行と列の切り口を決めて集計する機能です。

margins=Trueを付けると、いちばん下の行と右の列に「合計」が付きます。

STEP1の確かめ方

集計は、数字が合っているかを自分で確かめるところまでが1セットです。

STEP1で確かめる3つのこと

  • 読み込みが20行(10行×2ファイル)、キャンセルを除いて17行になっているか
  • 右下の合計が17,710円になっているか(Excelの記事の合計と同じ)
  • 1か所だけ手で計算して合うか(例:駅前店の10月は1,200円+1,500円=2,700円)

3つとも合えば、STEP1は完了です。

合わないときは、CSVのファイル名が「sales_」で始まっているか、文字コードがUTF-8かを確かめてください。

STEP2|図:棒グラフにして、変化を目で見る

次の段階は、図です。

表のままだと、どの店舗がどれだけ変わったのかを読み取るのに少し時間がかかります。

STEP1のコードの下に、次のコードを書き足しましょう。

# ===== STEP2:図 =====
# 日本語の文字化けを防ぐ(WindowsはMeiryo、MacはHiragino Sans)
plt.rcParams["font.family"] = "Meiryo" if platform.system() == "Windows" else "Hiragino Sans"

table = pivot.drop(index="合計", columns="合計")  # 合計の行と列を外す
ax = table.plot(kind="bar", rot=0, figsize=(6, 4))
ax.set_title("店舗別の売上(キャンセルを除く)")
ax.set_xlabel("")
ax.set_ylabel("売上(円)")
plt.tight_layout()
plt.savefig("sales_by_store.png", dpi=150)
print("sales_by_store.png を保存しました")

もう一度「python analysis.py」と実行すると、STEP1の表のあとに次の1行が表示されます。

sales_by_store.png を保存しました

作業用のフォルダーに、sales_by_store.pngという画像ファイルができています。

グラフの読み方

開いてみると、横に「オンライン」「本店」「駅前店」が並んだ棒グラフになっています。

それぞれの店舗に、10月(青)と11月(オレンジ)の2本の棒が並びます。

棒を見比べると、次の3つがすぐにわかります。

  • オンラインだけ、11月の棒が10月より低い
  • 本店は、11月の棒が少しだけ高い
  • 駅前店は、11月の棒が10月よりはっきり高い

表で数字を見比べるより、駅前店の伸びが一番大きいことが一目でわかります。

これが、図にする一番の意味です。

STEP2の確かめ方

STEP2で確かめる2つのこと

  • 棒の高さが、STEP1の表の数字と合っているか(駅前店の11月は3,340円なので、3,000と3,500の目盛りの間)
  • タイトルや店舗名の日本語が「□□□」に化けていないか

日本語が化けるときは、フォントの指定の行を確かめてください。

WindowsならMeiryo、MacならHiragino Sansが、はじめから入っているフォントです。

STEP3|仮説:「なぜ?」を1つだけ立てて、確かめる

最後の段階は、仮説です。

図を見て一番気になったことに「なぜ?」と問い、答えの候補を1つだけ立てます。

仮説を1つ立てる

STEP2の図で一番目立ったのは、駅前店の伸び(2,700円→3,340円、640円増)でした。

ここで、元のCSVを見返してみます。

すると、10月の駅前店には、ファイル600円分のキャンセルが1件あることに気づきます。

そこで、次の仮説を立ててみましょう。

 

駅前店の伸びは、注文が増えたからではなく、10月にあったキャンセルが11月にはなかったからでは?

 

STEP1の表はキャンセルを除いているので、キャンセルが減るだけでも売上が伸びたように見えるのです。

仮説を確かめるコード

この仮説が正しければ、キャンセルも含めた「注文ベース」の売上で比べると、駅前店はほとんど伸びていないはずです。

STEP2のコードの下に、次のコードを書き足しましょう。

# ===== STEP3:仮説を確かめる =====
# キャンセルを含めた「注文ベース」の売上表
ordered = data.pivot_table(index="店舗", columns="月", values="金額",
                           aggfunc="sum", margins=True, margins_name="合計")
print("■ 注文ベース(キャンセルを含む)")
print(ordered)

# キャンセルの件数と金額を月ごとに数える
cancel = data[data["状態"] == "キャンセル"]
print("■ キャンセル")
print(cancel.groupby("月")["金額"].agg(件数="size", 金額="sum"))

実行すると、図を保存した行のあとに、次の表が表示されます。

■ 注文ベース(キャンセルを含む)
月      2026-10  2026-11     合計
店舗
オンライン     2660     2630   5290
本店        3850     3430   7280
駅前店       3300     3340   6640
合計        9810     9400  19210
■ キャンセル
         件数    金額
月
2026-10   2  1200
2026-11   1   300

結果の読み方

注文ベースで見ると、駅前店は3,300円→3,340円で、40円しか増えていません。

キャンセルを除いた売上で見えていた640円の伸びは、ほとんどがキャンセルが減った分だったことになります。

全体で見ても、注文ベースでは9,810円→9,400円と、410円減っています。

一方でキャンセルは、2件・1,200円から、1件・300円に減りました。

つまり、11月の売上が伸びたのは、注文が増えたからではなく、キャンセルが減ったからというのが、このデータから言えることです。

STEP3の確かめ方

STEP3で確かめる2つのこと

  • キャンセルの件数の合計(2件+1件=3件)が、STEP1で除いた行数(20行-17行)と同じか
  • 注文ベースとSTEP1の合計の差(19,210円-17,710円=1,500円)が、キャンセルの金額(1,200円+300円)と同じか

どちらも合えば、STEP3の数字は正しく出ています。

仮説を立てるときの3つのルール

最後に、仮説の段階で気をつけたいことを3つお伝えします。

  • 仮説は1つに絞る:「なぜ?」の答えを並べると、どれも確かめきれずに終わりがちです
  • 確かめ方を先に決める:「正しければ、こうなるはず」を決めてからコードを書きます
  • データの量で言い切らない:2か月・20行のデータでわかるのは「傾向の候補」までです

今回の結論も、12月のデータで同じことが起きるかを見るまでは、仮説のままにしておきましょう。

実際の仕事なら、次は「なぜ10月はキャンセルが多かったのか」を、お店の人に聞いてみる番です。

この練習のあとに挑戦したいpandasの課題

1周できたら、同じデータで次の課題にも挑戦してみてください。

課題1|店舗ではなく、商品で同じことをする

STEP1のpivot_tableのindexを「店舗」から「商品」に変えて、商品×月の売上表を作ってみましょう。

正しくできていれば、キャンセルを除いた売上は次のようになります。

  • ノート:10月3,750円→11月4,000円
  • ファイル:10月2,700円→11月1,500円
  • ボールペン:10月2,160円→11月3,600円

ファイルの落ち込みとボールペンの伸びについて、自分で仮説を1つ立ててみてください。

課題2|12月のCSVを足して、3か月で見る

sales_2026-12.csvを自分で10行ほど作り、monthly_salesフォルダーに足してみましょう。

コードを1行も変えずに、表とグラフが3か月分になれば成功です。

STEP3の仮説が、3か月目でも成り立つかを確かめてみてください。

課題3|自分の仕事のCSVで、3段階をやってみる

最後は、自分の仕事で使っている表データで、同じ3段階をやってみることです。

会社のデータを使うときは、社外秘や個人情報の扱いのルールを必ず確認してください。

列の名前を書きかえるだけで、ほとんどのコードはそのまま使えるはずです。

次に学ぶなら|Courseraのデータ分析講座

3段階を1周できたら、体系的に学び直すのもおすすめです。

Coursera(コーセラ)には、pandasやmatplotlibを使ったデータ分析の講座がそろっています。

講座提供元公式の難易度講座ページの目安向いている人
Python for Data Science & AIIBM初級週10時間で2週間基礎がまだ不安な人
Data Analysis with PythonIBM中級週10時間で2週間この記事の3段階の続きを学びたい人
Introduction to Data Science in Pythonミシガン大学中級週10時間で3週間pandasと統計をしっかり学びたい人

出典|Data Analysis with Python(Coursera)、Introduction to Data Science in Python(Coursera)、Python for Data Science & AI(Coursera)

この記事の続きとして一番近いのは、IBMのData Analysis with Pythonです。

データの読み込みと整形、探索的なデータ分析(EDA)から、回帰モデルづくりまでを学びます。

講座の説明によると、pandasやmatplotlib、scikit-learnなどを使います。

Introduction to Data Science in Pythonは、ミシガン大学の講座です。

pandasでのデータ処理から、t検定などの統計に進みます。

この記事のSTEP1がまだ難しく感じた方は、IBMのPython for Data Science & AIで基礎から固めましょう。

3講座とも英語の講座です。最初のモジュールは無料でプレビューできるので、申し込む前に中身を確かめてください。

出典|Coursera Blog

筆者は、CourseraでGoogleのデータアナリティクス認定を受講しました。

数字と、お客さんの声などの定性的な情報の両面から、改善を提案できるようになりたかったからです。

高度な分析に進むための下地づくりとして、目的にしっかり合った講座でした。

データ分析をどの順番で学ぶかは、次の記事にまとめています。

https://d-cubed-lab.com/coursera-data-science-roadmap

Pythonでのデータ分析を、Googleの認定で学びたい方はこちらもご覧ください。

https://d-cubed-lab.com/google-advanced-data-analytics

まとめ|小さなデータで、3段階を最後までやり切ろう

Pythonの基礎の次にやることは、小さな表データで「集計→図→仮説」を1周やり切ることでした。

この記事のポイントをおさらいしておきましょう。

  • STEP1 集計:pivot_tableで店舗×月の売上表を作り、合計が17,710円になるか確かめる
  • STEP2 図:棒グラフにすると、駅前店の伸びが一番大きいことが一目でわかる
  • STEP3 仮説:「なぜ?」を1つに絞り、「正しければこうなるはず」を決めてから確かめる
  • 今回のデータでは、売上の伸びは注文の増加ではなく、キャンセルの減少によるものだった
  • 1周できたら、商品別、3か月分、自分の仕事のデータへと広げていく

 

「自分の仕事のデータでもできるかな…」

 

という方も、まずはこの記事のCSVで1周してみてください。

もっと体系的に学びたくなったら、Courseraの講座で続きを学ぶのもおすすめです。

当サイトは第三者配信の広告サービス(Googleアドセンス、A8.net、もしもアフィリエイト、Linksahre、バリューコマース、afb、レントラックス、Amazonアソシエイト、楽天アフィリエイト、Adobe アフィリエイト、Wix アフィリエイト、Coursera Affiliate Program)を利用し、紹介料などの収益を得ています。収益はサイト閲覧体験の改善費用やより有益な情報提供のための取材費用に使用されます。

人気記事

CourseraとUdemyはどちらがおすすめ?統合後の違いや料金、選び方を徹底比較【2026年版】 1

オンラインで学び直しをするなら、Coursera(コーセラ)とUdemy(ユーデミー)は外せない選択肢です。 2026年5月には、この2社が統合して1つの会社になりました。 とはいえ、いざ使おうとする ...

JADP認定資格は意味ない?怪しい?キャリカレの評判と、取る価値がある人・ない人を正直に解説 2

資格のキャリカレは、自宅で学べる通信講座として、160講座以上をそろえる人気のサービスです。 その講座の多くで目指せるのが、JADP(日本能力開発推進協会)が認定する民間資格です。 一方で、ネットで調 ...

Adobeの学割(学生・教職員版)とは?対象・値段・申し込み方法と「バレる?」「いつまで?」を解説 3

PhotoshopやIllustratorなど、Adobe(アドビ)のアプリは、デザインを学ぶ学生には欠かせない道具です。 ただ、どれも月額のサブスクリプションなので、学生にとっては大きな出費ですよね ...

X(旧Twitter)分析ツールおすすめ5選|フォロワー分析は無料でどこまでできる?目的別に比較 4

X(旧Twitter)を伸ばしたいなら、今の数字を知ることが出発点です。 ただ、分析ツールを探し始めると、こんな疑問が出てきますよね。   「X分析ツールって種類が多すぎて、どれを選べばいいの?」 「 ...

色彩検定は意味ない?履歴書に書ける?取得するメリットや仕事で役立つ級を解説 5

色彩検定は、色の知識を体系的に学べる資格として、学生から社会人まで幅広い人に受けられています。 2025年度には、1級〜UC級をあわせて4万6,000人以上が志願しました。 一方で、ネットやSNSで調 ...

-Coursera, 学び・資格