概要
Amazonの注文履歴から、注文金額合計などを集計したかった。
ので、ささっとデータの確認をした方法をメモ。
使ったツール
- Chrome拡張「アマゾン注文履歴フィルタ」
- Tableau(集計できればなんでもいいが万能なので)
- Chrome Dev ToolsのConsole+JavaScript(集計の検算に利用)
Chrome拡張「アマゾン注文履歴フィルタ」をインストールする
ダウンロードURL
※「注文履歴を見る」の項目でも触れるが、参考サイトにもリンクがあるので、リンク切れの場合はそちらを見るかググるかする。
引っかかりポイント
拡張機能はそれなりに更新されているので、疑う余地低し
拡張機能の更新日付は2022/8月現時点で2022/5月だった。
この後のフローでうまくいかない理由は拡張機能の更新が追いついていないからと思ったが、使い方が悪いだけだった。
疑ってごめんなさい。
Amazon(JP)の注文履歴を見る
詳しい手順は参考サイトを確認
引っかかりポイント
注文履歴の初期状態だとChrome拡張が動かない(?)
注文履歴を見る時、初期状態では
「過去3ヶ月に確定された○件の注文」
という日付のフィルタがかかっている。
この状態ではChrome拡張「アマゾン注文履歴フィルタ」はうまく動かないようなので、日付のフィルタは
「2022年に確定された○件の注文」
のような、年単位のフィルタに書き換える必要がある模様。
※数年前に使った時はこのハマりポイントはなかった気がした。
抽出時に表示される謎の「Partial Order Error」
結論、月別の集計に影響は出ていなかったので問題なかったが、下記の状況でエラーメッセージが発生。
2022年の抽出では特に問題なかったものの、2021年の抽出をした際、
Partial Order Error
なるエラーと、
Download error list
なるボタンが表示された。
部分的にちゃんとダウンロードできていない?と思ったため、
Chrome拡張「アマゾン注文履歴フィルタ」でダウンロードしたCSVファイルを集計した値と、
画面に表示される内容をJavaScriptで集計した値をそれぞれ月別に求め、検算することに。
※注文履歴が多かったり、特殊な履歴(例えばAudibleの月額サブスクリプション)など、
元からAmazonにはなかった履歴、かつまだChrome拡張が対応していない場合に起きる?かと思いました。
ちゃんと検証していないので、わかるかたいたら教えてください。
TableauでCSVを可視化
年別にダウンロードしたCSVにユニオンとして接続
今回ダウンロードしたのはデジタルコンテンツ以外なので、以下のようなファイルネームになりました。
amazon-order_non-digital_2021.csv
ので、Tableauでユニオンを作る時は、以下のワイルドカードで指定します。
amazon-order_non-digital_*.csv
引っかかりポイント
ディメンション「商品名」でフィルタする点。
データの内容が下記のようになっているので若干注意。
- 注文番号1つに対して複数の行が作成される
- 商品名には以下のような値が入る
-
(注文全体)
: 商品の合計金額(割引やポイント・ギフト券による決済額の減少分を考慮していない) -
(クレジットカードへの請求)
: クレジットカードに請求される金額 -
(割引)
: 割引額(注文合計フィールドにはマイナスの値が入る) -
Amazonギフト券
: アマゾンギフト券での支払い金額(注文合計フィールドにはマイナスの値が入る) - ...etc.
-
-
注文合計
フィールドには、(注文全体)
、(割引)
、Amazonギフト券
などの行で値が入る
→ つまり、注文合計
フィールドで計算するなら、(注文全体)
だけに絞り込めば良い、と思っていたら間違いだった。
正しくは、(注文全体)
に加えて、(割引)
、Amazonギフト券
などのマイナスの値が入るものも勘案してフィルタをかける必要があった。
Tableauで月別の棒グラフを作成
Tableauを使ったのは単純に手元にあってフィルタとか集計とか万能だからです。
もう一つの理由は、注文番号1つに対して複数行に分かれるデータが出てきたので、LODとか計算するならTableauに任せたいな、と思ったためです。
※すいません、Tableau操作の解説は省きます。。。
月別の値が簡単に出せるはずなので、このデータが信頼できるか、実際の注文履歴画面に出てくるものを集計して付き合わせたくなります。
JavaScriptで簡易的な関数を実行して検算
Chrome拡張表示される月別の注文履歴を集計
やっつけですが下記のようなコードを書いて検算。
let valueElements = Array.from(document.getElementsByClassName('a-column a-span2 yohtmlc-order-total'));
let valueNumbers = [];
valueElements.forEach(function(el){
valueNumbers.push(el.getElementsByClassName('a-row a-size-base')[0].innerText.replace(/(¥|,|\s)/gm,''))
});
let total = valueNumbers.reduce(function(sum, value){
return sum + Number(value);
}, 0);
console.log(total);
CSVで出力されるものを月別で集計したなら、注文履歴を月別で表示させ、上記スクリプトで出てくる合計金額を割り出すのみです。
結論: Chrome拡張を信じてよし。
ただし計算するフィールドは要チェック。