サンプルデータをダウンロードしよう
当記事で利用するデータセットはこちらのサイトからダウンロードできます。
コードはこちらに掲載しています。
「Data Folder」をクリックし、次のページで「Online Retail.xlsx」をクリックすることで、データをダウンロードできます。
ここでダウンロードできるのは、架空のECサイトの商品購買データだよ!
データを受け取ったら、まずは「何行何列か」を確認
データを受け取ったら、まず最初に確認することは「何行何列のデータか」です。このサンプルデータは23メガバイトと比較的小さいため、Excelなどの表計算ソフトで開けます。
▼表計算ソフトでサンプルデータを開いた様子
行数の確認をExcel上で実施する場合は、Ctrlキーを押しながら下矢印キーを押すと一番下の行まで移動できます(Macの場合はCmd+↓)。全部で541910行のデータであることがわかります。先頭行は列名なので、データ本体は 541909 行です。
列に注目すると、
- InvoiceNo:レシート番号
- StockCode:商品コード
- Description:商品説明
- Quantity:購入量
- InvoiceDate:購入日時
- UnitPrice:単価
- CustomerID:顧客 ID
- Country:国
と8列あります。
Pythonなどのプログラムによる自動化やExcel操作による手動操作のどちらであっても、データの加工はミスが非常に発生しやすい工程です。「行数と列数が意図した通りであるか」を確認すると防げるミスが多いので、データを受け取った直後に確認しておくことが重要です。
データ加工の誤りから得られた結果は、全て誤りになってしまいますからね!最初に、行数と列数をしっかりチェックしておきましょう。
データ加工ライブラリ「pandas」を使ってみよう
Pythonでのデータ加工では、pandasが用いられることが多いです。
探索的な分析が要求される場合に役立つ機能がある一方で、大規模なデータセットに対してはパフォーマンスで課題が生じる場合もあります。利用している環境によって異なりますが、1GBを超えるようなデータセットを扱う場合は、スペックの高いコンピュータを用意、pandasの高速化テクニックを利用、データベース上でデータ加工を事前にする、NumPyという多次元配列を処理するためのライブラリ(pandasはNumPy を使って開発されている)などの対応が必要になるかもしれません。
・pandas のインストール
※ Python の環境構築の手順は割愛します。
・エクセル形式のデータを読み込みたい場合
・カンマ区切りのファイルを読み込みたい場合
読み込んだデータに`df`と名前をつけます。`df`はdata frameの省略語です。
pandasでは行と列を持つ2次元の表データをdata frameと呼んでいるんだ。では次に、このデータの概要を表示してみましょう。
・読み込んだデータの概要を表示する
▼df.info()の出力結果
さっきExcelで確認したものと、pandasの出力結果はあっていますか?
ふむふむ。pandasの出力結果を見るに、541909行(541909 entires)で、8列(8columns)のデータを読み込んでいますね!さっきExcelで確認した数字と同じだ!
バッチリですね!Excelでデータを開いた時の、行数 及び 列数と一致しているのがわかりましたね。
次に、数値データを集計してみましょう。これも、pandasのコマンドで、一発ですよ。
・数値データを集計する
ざっと眺めて、おかしなデータがないか確認しましょう。ここでは、Quantity(購入量)の最小値に注目してください。なぜかマイナスになっています。
アレェ、購入量の最小値が、マイナスになってる……?そんなのおかしいですよね?このデータ間違ってるんじゃないですか?
いいところに気が付きましたね!おかしなデータに遭遇したら、なぜそんな風になっているのか、理由を調査しましょう。
ExcelでQuantityがマイナスのCustomerIDを特定して、その日の購買記録を確認してみましょう。
購入した量と同じだけマイナスの記録があることから、返品処理がされたと推測できます。
Excelで確認してみたら、返品処理でマイナスを使ってました!なるほどね。謎がとけた~!
UnitPrice(単価)がマイナスになっている理由は、データを見るだけでは推測できませんでした。自分で調べても意図が不明なデータに遭遇した場合は、取引先や社内の詳しい人にヒアリングしましょう!
こちらの例では、10月末までにおけるRFM分析と11月に購買実績があるかを計算しています。RFM分析とは購買データを分析する際に利用される手法で、
・Recency(直近いつ)
・Frequency(頻度)
・Monetary(購入金額)
を集計して、顧客の動向を捉える方法です。集計結果からグループ分けすることで、優良顧客が全体の何割を占めるか、伸びしろのある顧客は何割いるかなどの分析に用います。
このプログラムでは、RFM分析の結果に加えて、11月に購買実績があるかどうかのデータ(is_visit)を付与しています。recency には 10月31日からカウントして何日前に購買記録があったか、frequencyには1日あたりの購入回数(10日に1回の買い物をしていたら、0.1になる)、monetaryはQuantity(購入量)\*UnitPrice(単価)の合計を計算しています。
これを全部手作業で集計しようと思ったら大変ですよね。それに、Excelで開けないほど重いデータもあるだろうし。pandasで効率的にデータを計算できるんですね!
次回は、集計結果を可視化して、グラフにしてみましょう!
次回の第6話では、集計結果をグラフにして可視化するPlotlyというライブラリを紹介します。お楽しみに。
第1話 機械学習の仕事内容って?実はコードを書くだけじゃない!
第2話 人工知能、機械学習、ディープラーニングの違いとは?
第3話 機械学習の活用事例!建設機械や回転寿司屋でも活用されている!?
第4話 機械学習したいのにデータがない!?
【筆者】
早川 敦士さん
株式会社FORCASの分析チームにてリーダーを務める傍らで、株式会社ホクソエムで執行役員として従事。新卒でリクルートコミュニケーションズに入社しWeb広告やマーケティングオートメーションなどのB2Cマーケティングを経験し、FORCASではB2Bマーケティングプラットフォームのデータ分析および開発を担当している。大学在学中に『データサイエンティスト養成読本』(技術評論社刊)を共著にて執筆。その後も『機械学習のための特徴量エンジニアリング』(オライリー・ジャパン刊)や『Pythonによるはじめての機械学習プログラミング』(技術評論社刊)などで執筆活動を続けている。国内最大級のR言語コミュニティであるJapan.Rを主催。Youtubeチャンネル『データサイエンティストgepuro』で動画を投稿。
・Twitterアカウント
湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。 著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』『わかばちゃんと学ぶ サーバー監視』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。
・Amazon著者ページ ・Twitterアカウント
わかばちゃんが登場する書籍いろいろ
わかばちゃんと学ぶシリーズ(Amazonページ)