@m_seki の

I like ruby tooから引っ越し

ポケモンカードの5月のシティリーグの500デッキを類似度計算してグラフにする練習

デッキ間のcos類似度を計算したものを可視化する練習1

@rick36i にシティリーグの結果がプレイヤーズのサイトで見れるということを教わったので早速データを集めてみた。

event.pokemon-card.com

ここから使用されたデッキと使用された日をメモしたので、JSONgithubに保存した。

github.com

できたもの

とりあえずできたデンドログラムはこれ。見やすくするのは続編であとで書く。

http://www.druby.org/city-2022-05-29.pdf

中央の横長のクラスタパルキアです。(色は適当かも) PDFを拡大表示するとデッキのIDが見えると思うけど、これじゃあどんなデッキかわからないので、あとで可視化を工夫する。

類似度の計算

以前からデッキ間のcos類似度は計算できてて、それを使って似ているデッキの比較ができる検索システムを作ってあった。

hamana.herokuapp.com

同じ意味のカード(ホイルとかレアリティ違いとかそういうの)を正規化する仕組みがあるので、見た目が違うカードでも 意味が同じなら同じカードとみなして計算する。なのでデッキIDが違うけど同じデッキ、みたいなのもわかる。

github.com

1要素目がカードのID、2要素目が正規化先のカードのIDまたはオリジナルなら名前。RubyのArrayのppだけど、JSONとしても読めるような...。

距離行列

要素間の距離からなる要素数x要素数の行列を距離行列というらしい。今回は500デッキあったので500x500。 距離は1-cos類似度で計算しました。

これを元に階層型のクラスタリングするぞ。(こちらを参考にしました)

chokkan.github.io

(2n + 1 x 2n + 1行列で解くのがかっこ良さそうでしたが、Rubyなので雑にHashでやりました)

なお最初のPDFは最短距離法で求めたものです。

デンドログラム

んで、デンドログラムが描きたかったんだけど自分でやるのは相当めんどくさいのでobervableの例を参考にしました。

observablehq.com

サンプルをWebページで触るのまでは簡単だけど、自分用のなにかを作るといつもハマるのね。

スクリプト

解きながら・実験しながら改造していったので、スクリプトが断片的にしか残ってない...。もうちょっとかっこよくしたらgithubに載せます。

読んでたけど今回は使わなかった本

AmazonのPAAPIが使えなくなっちゃうのでなにか買っていって!

Apple Watch奇譚

偶々生きている感

人間ドックを利用するようになって計測結果を定期的に見せられると、ああ偶々生きてるんだな、って気がしてくる。いろんな計測値がね。 そういうわけで、むしろ自分の計測するのを楽しむべきだ。それでApple Watchですよ。でも高いんだよな..。と迷ってると目の前で躊躇なくHermesを買う人がいて心臓がバクバクした。

Apple Watch 4

冷静に迷うのはやめにして、自分も買うことにした。まず、心電図が測れるようになったApple Watch 4(Nike)を導入。画面も少し広いぞ。アルミとステンレスはずいぶん雰囲気が違うな、と思ったりしながらも満足してた。シルバーアルミにブラックのスポーツバンド(同時に買った)の組み合わせはかっこいい。 そういえばSKAGENのスマートウォッチを使った時期があったけど、全く違うのね。自分に必要なのはApple Watchだった。最初からApple Watch買っておけばよかったよ。

睡眠中も記録したい

しばらくして寝てる間の異常を知りたい気がしてきた。でもその寝る時は充電中なんだよね。 小飼さんか誰かのツイートで2台持ってれば充電中も記録できるよ?と書いてたのを思い出して、2台目を買うことを決意。2台買ってもHermesより安い。Nikeはお買い得。

それで、画面がさらに広くなったApple Watch 7(Nike)を導入。Apple Watch 7は高速充電できるケーブル?がついてくるけど、充電器は付いてこない。それでAnkerのこれもまとめて購入。

これと新しい充電ケーブルだとお風呂入ってる間に充電が終わるぞ。速い。

これで一日中自分のバグを計測できるぞ。

nanaco

最近、nanacoiPhoneで使えるようになったじゃん。早速導入してApple Watchセブンイレブンで払えるようにした。オートチャージと組み合わせると便利すぎる。 いつでもセブンカフェでコーヒーが飲めるの最高だ。

と、その時は思っていました...

事件

nanacoSuicaApple Watchというかデバイスに登録(?)するので、一度に一台にしか入らない。つまりApple Watch 7にいれたら4には同時に入らないのだ。(移動することはできる) そうするとなにが起きるか。睡眠中につけていたサブ機のApple Watchをしたまま外出してしまい、セブンイレブンのレジの前で支払えないことに気づく事件が頻発。覚えてるだけで4回発生。これはやばい。

サブ機放出

この問題の解決策は...結局一台運用に戻すことでした。ちぇっ。Apple Watch 4は手放して、7だけにしました。 よく考えたら新しい機種は充電速いから長い時間記録できるんだよね。

というわけで、結局一台持ちに戻りました。贅沢に慣れないな。

おすすめ

ミラネーゼループはかっこよくて涼しくて調整しやすくて、服にも合わせやすいのでおすすめ。

シルバーアルミとブラックの組み合わせがよかった。アルミのちょっとマットな感じと合う。黒いボデイと黒のバンドよりも好き。

M1 Macに雑に移行した

MBP14買いました

よくRubyKaigi直前のマシンが壊れたりする。 たいてい焦ってPCを買い替えることになるんだけど、今回は10年ぶりくらいに壊れる前に買い替えたよ!

MBP14にしたのはmrknのツイートが決め手になった。

2022年の3月に発注して5月に届いた。

移行でやったこと1

いつもはTimeMachineのHDDから転記して移行を終わらせてる。 今回はIntelからM1への移行なのでなにか特別なことがあるだろうか、と思ってググるとCPUちがうし旧マシンから移行しない方がよい、という記事が多い。

じゃあ、そうするか、と思って奥村先生の記事を参考に始める。

M1 Mac

HomeBrewくらいまで進んだところで、ホームディレクトリとかメールとかAdobeの諸々の設定があるんだよな...と思い出して急にめんどくさくなってきた。

移行でやったこと2

もういいや。めんどくさい。 Qiitaなどの記事の教えを無視して、TimeMachineからの移行に切り替えることにする。まあなんとかなるだろ。

  1. 移行アシスタントでTimeMachineから移行を選ぶ*1
  2. 4つくらいのチェックボックスが出てくるので、「アプリケーション」のチェックを外す。

これで待つこと数時間。ホームディレクトリ復活した!Apple製アプリは勝手に入ってる。AdobeのアプリとExcelをインストール。これで普通に使えるようになった。 開発環境に関して、自分は仮想マシン使って作業してないせいか、ほんとにスムーズに移行できてた。 IntelのHomeBrewのものが残ってるんだけど、そのまま動くようだ。すげーな。Intel MBP13で稼働していたPostgreSQLのデータベースもそのまま残ってた。 *2 ただ、まだruby-3.1.2のネイティブ版のビルドに成功していないのであった。opensslのリンクを切り替えればうまくいくのかな。

おまけ

MBP14用にスリーブを買いました。最初の納期が4/1くらいだったので慌てて注文。安い。

レビューにもある通り、臭いが強い!でもほぼ二ヶ月間ハンガーにかけて干しておいたので、使用するころには臭いが消えていました。納期遅延すばらしい! MBP14にはサイズがぴったりなので、全面にあるポケットには薄いものしか入らないと思う。(試してないけど)

*1:ここでmacOSのアップデートが必要になったのでアップデート後に1.からやり直す

*2:奥村先生の記事を見ながらbrewの更新もしたんだけど、M1とIntelが混じってしまった。でも特に困ってない