「この商品を買った人はこんな商品も買っています」を実装したい

この商品を買った人はこんな商品も買っています をやりたい。割とマジで。
テンション・リダクション効果があるらしい。Amazonの商品レコメンドやYoutubeの動画

yahoo shopping: この商品を見た人は、こんな商品にも興味を持っています
楽天: この商品を見ている人はこちらもチェック
amazon: この商品に関連する商品, よく一緒に購入されている商品

アルゴリズム
L 協調フィルタリング -> 好みが近い人が好きな商品をオススメする

{ “Aさん”:[ “商品A”, “商品B”}, “Bさん”: [“商品C”, “商品G”, “商品H”], … }
レコメンド対象との共起数をとり、共起数が高い順にオススメとして表示する
お客さんごとに、「Aさんの買った商品の集合」と「そのお客さんの買った商品の集合」の積集合の長さを取る

### ロジックのイメージ
自分の買った商品 a b c
Aさんの買った商品 b c d
Bさんの買った商品 d
Cさんの買った商品 f g
Dさんの買った商品 a e

自分の買った商品と近いのはAさん -> dをレコメンド
次に自分の買った商品と近いのはDさん -> 次にeをレコメンド
まだ購入してない時は売れ筋商品をレコメンド

こんな感じ?

### 配列の持ち方
一緒に買われている商品を配列に持って、カウントしていく

こういうデータがあるとする。
山田 a
山田 b
山田 c
田中 b
田中 f
佐藤 a
佐藤 g
後藤 e
後藤 f

一緒に買われている商品なので、同じ人をforループで回して、商品ごとに一緒に買われている商品をkey(商品)とvalue(一緒に買われている類似度)で追加していく
a => [b =>1, c=>1]
b=>[a=>1, c=>1]
c=>[a=>1, b=>1]
b=>[a=>1, c=>1, f=>1]
f=>[b=>1]
a=>[b=>1, c=>1, g=>1]
e=>[f=>1]
f=>[b=>1, e=>1]

つまり、outputを見ると、まず商品ごとの変数が必要

初期データ
$data => [ $山田[a, b, c], $田中[b, f], $佐藤[a, g], $後藤[e, f]]


$山田の中でforeach, $田中の中でforeach, $佐藤の中でforeach

商品一覧の配列から各商品ごとの一緒に買われている商品の連想配列をkey順にソートして出力

これ、別にpythonじゃなくても何の言語でもできそうやな
まず、注文データから初期データを作って、それからforeachをして、次に出力
とりあえず作ってみよう 頭使うからチョコレート食べながらコーディングしたい