派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

第5話 集計と可視化:pandasでデータの加工をしてみよう【漫画】未経験なのに、機械学習の仕事始めました

f:id:itstaffing:20210607110700j:plain
f:id:itstaffing:20210607110703j:plain
f:id:itstaffing:20210607110707j:plain

  サンプルデータをダウンロードしよう  

当記事で利用するデータセットはこちらのサイトからダウンロードできます。
コードはこちらに掲載しています。

f:id:itstaffing:20210607110712j:plain

「Data Folder」をクリックし、次のページで「Online Retail.xlsx」をクリックすることで、データをダウンロードできます。

f:id:itstaffing:20210113102524j:plain
ここでダウンロードできるのは、架空のECサイトの商品購買データだよ!

  データを受け取ったら、まずは「何行何列か」を確認   

データを受け取ったら、まず最初に確認することは「何行何列のデータか」です。このサンプルデータは23メガバイトと比較的小さいため、Excelなどの表計算ソフトで開けます。

▼表計算ソフトでサンプルデータを開いた様子

f:id:itstaffing:20210607110716j:plain

行数の確認をExcel上で実施する場合は、Ctrlキーを押しながら下矢印キーを押すと一番下の行まで移動できます(Macの場合はCmd+↓)。全部で541910行のデータであることがわかります。先頭行は列名なので、データ本体は 541909 行です。

列に注目すると、

- InvoiceNo:レシート番号
- StockCode:商品コード
- Description:商品説明
- Quantity:購入量
- InvoiceDate:購入日時
- UnitPrice:単価
- CustomerID:顧客 ID
- Country:国

8列あります。

Pythonなどのプログラムによる自動化やExcel操作による手動操作のどちらであっても、データの加工はミスが非常に発生しやすい工程です。「行数と列数が意図した通りであるか」を確認すると防げるミスが多いので、データを受け取った直後に確認しておくことが重要です。

f:id:itstaffing:20210113102532j:plain
データ加工の誤りから得られた結果は、全て誤りになってしまいますからね!最初に、行数と列数をしっかりチェックしておきましょう。

  データ加工ライブラリ「pandas」を使ってみよう    

Pythonでのデータ加工では、pandasが用いられることが多いです。

探索的な分析が要求される場合に役立つ機能がある一方で、大規模なデータセットに対してはパフォーマンスで課題が生じる場合もあります。利用している環境によって異なりますが、1GBを超えるようなデータセットを扱う場合は、スペックの高いコンピュータを用意、pandasの高速化テクニックを利用、データベース上でデータ加工を事前にする、NumPyという多次元配列を処理するためのライブラリ(pandasはNumPy を使って開発されている)などの対応が必要になるかもしれません。

・pandas のインストール 
 
$ pip install pandas
 
※ Python の環境構築の手順は割愛します。
 
・エクセル形式のデータを読み込みたい場合
 
$ pd.read_excel(ファイル名)
 
・カンマ区切りのファイルを読み込みたい場合
 
$ ppd.read_csv(ファイル名)
 
読み込んだデータに`df`と名前をつけます。`df`はdata frameの省略語です。
 
f:id:itstaffing:20210113102532j:plain
pandasでは行と列を持つ2次元の表データをdata frameと呼んでいるんだ。では次に、このデータの概要を表示してみましょう。
・読み込んだデータの概要を表示する
 
$ df.info()
 
▼df.info()の出力結果
 
f:id:itstaffing:20210607110721j:plain
 
f:id:itstaffing:20210113102532j:plain
 
さっきExcelで確認したものと、pandasの出力結果はあっていますか?
f:id:itstaffing:20210113102524j:plain
ふむふむ。pandasの出力結果を見るに、541909行(541909 entires)で、8列(8columns)のデータを読み込んでいますね!さっきExcelで確認した数字と同じだ!
f:id:itstaffing:20210113102532j:plain
バッチリですね!Excelでデータを開いた時の、行数 及び 列数と一致しているのがわかりましたね。
f:id:itstaffing:20210113102532j:plain
次に、数値データを集計してみましょう。これも、pandasのコマンドで、一発ですよ。
・数値データを集計する 
 
$ df.describe()
 
f:id:itstaffing:20210607110724j:plain
 
ざっと眺めて、おかしなデータがないか確認しましょう。ここでは、Quantity(購入量)の最小値に注目してください。なぜかマイナスになっています。
 
f:id:itstaffing:20210113102529.j:plain
アレェ、購入量の最小値が、マイナスになってる……?そんなのおかしいですよね?このデータ間違ってるんじゃないですか? 
f:id:itstaffing:20210113102532j:plain
いいところに気が付きましたね!おかしなデータに遭遇したら、なぜそんな風になっているのか、理由を調査しましょう。

ExcelでQuantityがマイナスのCustomerIDを特定して、その日の購買記録を確認してみましょう。

f:id:itstaffing:20210607110731j:plain

購入した量と同じだけマイナスの記録があることから、返品処理がされたと推測できます。

f:id:itstaffing:20210113102524j:plain
Excelで確認してみたら、返品処理でマイナスを使ってました!なるほどね。謎がとけた~!
f:id:itstaffing:20210113102532j:plain
UnitPrice(単価)がマイナスになっている理由は、データを見るだけでは推測できませんでした。自分で調べても意図が不明なデータに遭遇した場合は、取引先や社内の詳しい人にヒアリングしましょう!

こちらの例では、10月末までにおけるRFM分析と11月に購買実績があるかを計算しています。RFM分析とは購買データを分析する際に利用される手法で、

・Recency(直近いつ)
・Frequency(頻度)
・Monetary(購入金額)

を集計して、顧客の動向を捉える方法です。集計結果からグループ分けすることで、優良顧客が全体の何割を占めるか、伸びしろのある顧客は何割いるかなどの分析に用います。

このプログラムでは、RFM分析の結果に加えて、11月に購買実績があるかどうかのデータ(is_visit)を付与しています。recency には 10月31日からカウントして何日前に購買記録があったか、frequencyには1日あたりの購入回数(10日に1回の買い物をしていたら、0.1になる)、monetaryはQuantity(購入量)\*UnitPrice(単価)の合計を計算しています。

f:id:itstaffing:20210607110734j:plain
 
f:id:itstaffing:20210113102524j:plain
これを全部手作業で集計しようと思ったら大変ですよね。それに、Excelで開けないほど重いデータもあるだろうし。pandasで効率的にデータを計算できるんですね!
f:id:itstaffing:20210113102532j:plain
次回は、集計結果を可視化して、グラフにしてみましょう!

次回の第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アカウント

  わかばちゃんが登場する書籍いろいろ   

 
 
f:id:itstaffing:20210113102514j:plain  f:id:itstaffing:20210113102516j:plain
 
f:id:itstaffing:20210113102519j:plain  f:id:itstaffing:20210113102521j:plain


わかばちゃんと学ぶシリーズ(Amazonページ)