Python入門の次にやること、pandasで表データ集計から
画像出典: konkapo / Pixabay
Python入門を終えた次の一歩は、表データを集計して1枚のグラフにするところまでを一周させることです。pandasのgroupbyで集計し、matplotlibで描く流れを、seaborn組み込みのtipsデータで練習すれば、環境構築もデータ探しも不要で今日から始められます。題材はtips→titanic→e-Statの公的統計、と欠損や前処理のある実データへ段階的に上げていきます。
入門書やオンライン講座を一周した直後に、多くの人がここで足踏みします。文法は分かったのに、その文法を「何に向けて使うのか」が決まらない状態です。
正直なところ、この段階でいきなりWebアプリや機械学習に手を伸ばすと、覚えることが一気に増えて息切れしやすくなります。最初に一周させるべきは、手元の表データを集計して、グラフ1枚にするところまでです。読み込む・数える・描く。この3つだけで、入門で覚えた文法がそのまま「使える道具」に変わります。
ここでは、そのための最短ルートと、練習に使えるデータの入手先を順番に渡していきます。
なぜ次の一歩が「データ分析」なのか?
入門を終えた直後の壁は、実力不足ではなく題材不足であることがほとんどです。文法は覚えたけれど、それを当てる対象がない。だから手が止まります。
表データの集計と可視化は、この題材不足を埋めるのに向いています。理由は3つあります。
- 成果が目に見える。数値の羅列ではなくグラフという形で残るので、進んだ実感が持てる
- 入門で習った文法をそのまま使う。新しく覚えるのはライブラリの使い方だけで、言語の学び直しが要らない
- 題材が無限にある。家計簿、勤怠、部活の記録、公的統計。手元にも公開データにも表はいくらでもある
使う道具は2つだけです。pandas(表形式データの読み込み・集計・加工を行うオープンソースライブラリ。BSDライセンスで公開されています)と、matplotlib(グラフを描くためのライブラリ)。この2つで「読む→集計する→描く」が完結します。
最初の一周は何をすればいい?
いきなり自分のデータを用意しようとすると、ファイル形式や文字コードでつまずいて本題に入れません。最初の一周は、すでに整っているサンプルデータを使って、集計とグラフ描画だけに集中します。
- データを読み込むseabornに組み込まれているサンプルデータを
sns.load_dataset("tips")で読み込みます。ダウンロードもファイル指定も不要で、1行で表が手に入ります。 - 中身を眺める
df.head()で先頭数行、df.shapeで行数と列数を確認します。分析の前に「何の列が何行あるか」を見る癖をここで付けます。 - 1軸で集計する
df.groupby("day")["tip"].mean()のように、ある列でグループ分けして平均や合計を出します。曜日ごとのチップ平均、といった問いに答えられる形です。 - 2軸で集計する
df.pivot_table(index="day", columns="sex", values="tip")で縦横のクロス集計にします。Excelのピボットテーブルに相当する機能で、集計方法の既定値は平均です。 - グラフにする
import matplotlib.pyplot as pltしてplt.plot()→plt.ylabel()→plt.show()。この最小の流れで1枚描き切ります。
ここまでで、コードの分量は20行に届きません。それでも「データを受け取って、問いを立てて、答えを図にする」という分析の骨格を一周したことになります。
この2つは対立するものではなく、集計の軸の数で使い分けます。groupbyは縦方向に分割して集計する道具で、pivot_tableは index と columns の2軸で縦横に集計する道具です。実際、pivot_table で index だけを指定すると groupby とほぼ同じ結果になります。まず groupby で1軸の集計に慣れ、「曜日×性別で見たい」と思ったときに pivot_table へ進む——この順番が迷いません。
練習用のデータはどこで手に入る?
seabornには、名前を指定するだけで読み込める軽量なサンプルデータが組み込まれています。データ本体はGitHubのseaborn-dataリポジトリで公開・管理されており、代表的なものは次のとおりです。
| データセット名 | 内容 | 主な列 |
|---|---|---|
| tips | 飲食店の会計・チップ記録 | total_bill, tip, sex, smoker, day, time, size |
| titanic | タイタニック号乗客の生存記録 | survived, pclass, sex, age, sibsp, parch, fare, embarked |
| iris | アヤメの花の計測データ | sepal_length, sepal_width, petal_length, petal_width, species |
| car_crashes | 米国州別の自動車事故統計 | total, speeding, alcohol, not_distracted, no_previous, ins_premium, ins_losses, abbrev |
| flights | 航空旅客数の月次推移 | year, month, passengers |
| diamonds | ダイヤモンドの価格・品質データ | carat, cut, color, clarity, depth, table, price, x, y, z |
seaborn-data (mwaskom, GitHub)の公表データをもとに作成
上の表は代表例の抜粋で、全件ではありません。手元で全一覧を見たいときは sns.get_dataset_names() を実行すれば取得できます。
難度の上げ方
練習素材は、難しいものから始めても学びが増えるわけではありません。つまずく要素を1つずつ足していく順番が結局いちばん速く進みます。
- ① seaborn tips — 小規模で欠損がなく、集計とグラフ描画だけに集中できる
- ② seaborn titanic — 欠損値(年齢が空の行など)とカテゴリ変数が入り、前処理の入口になる
- ③ e-Stat の公的統計 — 実データの読み込みと整形を伴う。ここから実務に近づく
- ④ Kaggle のデータセット — 発展。実世界の大きめデータで応用に進む
③のe-Statは、総務省統計局が運営する日本政府の統計ポータルです。統計表検索画面から調査を選び、CSV(Shift-JISとUTF-8を選択可)またはXLSX形式でダウンロードできます。国勢調査の時系列データもCSVで公開されているので、「日本の人口推移を自分の手で折れ線グラフにする」といった練習ができます。統計教育やデータサイエンス演習向けの整形済みデータセットも用意されています。
④のKaggleは、CSV形式を中心に無料の公開データセットを多数提供しているデータ分析コミュニティです。各データセットにライセンス情報が明記されており、ブラウザ上のPythonノートブック環境でそのままpandasを使って読み込めます。定番の入口はTitanicやHouse Pricesです。
1日どれくらいの時間を確保すればいい?
可処分時間は立場によってかなり違います。平日フルタイムで働いていれば、確保できるのは通勤時間と夜の1時間程度でしょう。学生なら講義の合間にまとまった2〜3時間を取れる日もあるはずです。同じ「毎日やる」でも中身が変わるので、自分の側に合わせて刻み方を決めます。
- 平日1時間しか取れない場合 — 1日1ステップ。「今日はgroupbyまで」で区切り、翌日にpivot_tableへ進む
- まとまった時間が取れる場合 — 上の5ステップを一気に通し、同じ手順を別のデータセットで繰り返す
- どちらの場合も — 1回のセッションで必ず何かを1つ完成させる。中途半端に終えると翌日の再起動コストが高くつく
費用の面では、ここまでに挙げたpandas・matplotlib・seaborn・e-Stat・Kaggleはいずれも無料で利用できます。有料の講座や書籍に進む判断は、この一周を終えて「自分がどこで詰まるか」が見えてからで遅くありません。
作りたいものがWebサービスやアプリだとすでに決まっている人は、データ分析を経由せずFlaskやDjangoへ直接進んだほうが早く形になります。データ分析はあくまで「次の題材が決まらない人」への提案です。
また、機械学習でモデルを作ることが目的の人も、まずは集計と可視化を通ってからのほうが結局は近道になります。データの中身を見ずにモデルへ流し込むと、結果が正しいのか間違っているのかを自分で判断できなくなるためです。
グラフが描けたら次はどこへ進む?
1枚描けた時点で、進む先は2方向に分かれます。
ひとつは可視化を深める方向です。matplotlibで折れ線・棒・散布図の3種類を描けるようになったら、seabornへ進みます。seabornはmatplotlibの上に構築された統計向けの可視化ライブラリで、箱ひげ図やヒートマップといった、分布や相関を見るためのグラフを少ないコードで描けます。
もうひとつはデータを実物に近づける方向です。整ったサンプルデータから、欠損や表記ゆれのある実データへ移ります。titanicの年齢の欠損をどう扱うか、e-StatのCSVの見出し行をどう読み飛ばすか。この前処理こそが、実際の分析で時間の大半を占める部分です。
どちらへ進むにしても、拠り所になるのは公式ドキュメントです。pandasには「Getting started」ガイドがあり、主要概念の入門から追加チュートリアルへのリンクまで用意されています。matplotlibにも公式のPyplotチュートリアルがあります。詰まったときに検索結果を渡り歩くより、公式の入門ページに戻るほうが速い——これはライブラリの学習では一貫して言えることです。
その一周が終われば、「Pythonで何ができるか」ではなく「このデータで何を知りたいか」から考えられるようになります。問いのほうが先に立つようになると、学習は自走し始めます。
よくある質問
Python入門を終えた直後でも、pandasはすぐ使えますか?
使えます。pandasを扱うのに必要なのは、変数・リスト・関数呼び出し・メソッドの記法までで、入門書の範囲でほぼ足ります。クラスの自作やデコレータなどの知識がなくても、表の読み込みと集計は問題なく書けます。
groupbyとpivot_tableの違いは何ですか?
groupbyは指定した列で縦方向にグループ分けして集計する機能で、pivot_tableはindexとcolumnsを指定して縦横2軸のクロス集計を行う機能です。pivot_tableでindexだけを指定するとgroupbyと同等の挙動になります。集計方法(aggfunc)の既定値は平均です。
練習用のデータはどこで手に入りますか?
seabornに組み込まれたサンプルデータが最も手軽で、sns.load_dataset("tips")のように1行で読み込めます。データ本体はGitHubのseaborn-dataリポジトリで公開されています。日本の公的データを使いたい場合は総務省統計局が運営するe-StatからCSVやXLSXでダウンロードでき、発展的な実世界データはKaggleのデータセットが利用できます。
matplotlibとseabornはどちらから覚えるべきですか?
matplotlibを先に覚えるのが順当です。seabornはmatplotlibの上に構築された統計向けの可視化ライブラリなので、土台のmatplotlibで折れ線・棒・散布図の基本を押さえてからseabornの箱ひげ図やヒートマップへ進むと、グラフの調整も自分で行えるようになります。
※記事で使用した内容・数値は変更される場合があります。最新情報は公式サイトをご確認ください。