longcatにデータ分析PJの危機を救ってもらった話【クラスタリングの可視化】

# はじめに
こんにちは。
[zaicoban](https://zaicoban.jp/)というサービスのプロダクトオーナー&データ分析を担当している、なかしです。
突然ですが、この猫ネットで見たことありませんか。
![nobiru.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/0adb9402-2244-8673-3e87-fdfcf0e1b5dd.jpeg)


可愛いですよね。
のびーるたんとかlongcatとか呼ばれています。
実は、今年とあるPJのデータ分析案件でこのlongcatにギリギリの窮地を救われたことがあり、
その時のノウハウを共有したいと思います。


# ある日、あるPJにて
事のはじまり
上司：「300店舗を売上構成が近い店ごとで、いい感じにくくりたいんだけど」
私　：「クラスタリングですねー。樹形図的なやつがよさそうだなあ。。」

〜〜作業〜〜

```
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd

# サンプル
df = pd.read_csv('longcat_sample.csv')
labels = df['id'].astype(str).values

plt.rcParams['font.family'] = 'AppleGothic'
plt.rcParams['font.family'] = 'MS Gothic'
 
plt.figure(figsize=(80,5))

result1 = linkage(df.iloc[:,1:5], 
                  metric = 'euclidean', 
                  method= 'average')
dendrogram(result1,labels=labels)
plt.show()
```
![result_sonomama.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/c6ca6130-c1f4-62e1-ad28-c0b5cb5e5401.png)

私　：「とりまペロッとできましたー」
上司：「お。でも見にくいからなんかいい感じにして。」
　　　「なんか、こう丸くするとかさー。後２時間位で資料として使いたいからよろしく。」
私　：「ふぁー:innocent:」


超困りました。
クラスタリングの結果って、横に長いと見づらいというのはたしかにそのとおりです。
作るべきイメージはわかるのですが、ライブラリの中にそんなもの無さそうだし、
ググってもなんかちょっと方向の違うものしか出ないし。。。
どうすんだこれ。。。

焦って色々ググりまくっても、サクッとできる方法が見つからず、
ただただ時間がなくなっていき。。。


そのとき、ふと脳裏をよぎる去年のアドベントカレンダー（@yami_butaさん）。
https://qiita.com/yami_buta/items/fafb8c3dfb8057266ee5
![スクリーンショット 2020-12-21 15.42.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/19d01ad6-4fe0-0b4d-fda0-e28b2790cd58.png)

去年のアドベントカレンダーの中でも、個人的最優秀賞の記事です。
その時は、ただただ超ウケる！っておもっていただけだったのですが、
ふと、
**「クラスタリングも横に長いんだから、もしかしたら「回る長い猫」なのでは。。。？」**
という天啓が。

おそるおそるやってみると。。。

```
convert  ~/Downloads/result_sonomama.png -flatten -rotate -180 -distort arc 360  ~/Downloads/result_sonomama_test.png
```
![result_sonomama_test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/4468e8d8-a88d-03e2-2ccd-3ec2ee9e5b08.png)




あ、これきたんじゃないか。。。
線とか枠とか調整すれば。。。

```
matplotlib.rcParams['lines.linewidth'] = 5 
plt.figure(figsize=(80,5))
result1 = linkage(df.iloc[:,1:5], 
                  metric = 'euclidean', 
                  method= 'average')
dendrogram(result1,labels=labels,leaf_font_size=12,leaf_rotation=90,)
plt.tick_params(labelleft=False, labelright=False, labeltop=False,left=False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['left'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.gca().xaxis.set_ticks_position('bottom')
plt.show()
```
![result_longcat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/ae7b24d4-8d58-5622-64c1-6f8c630b714e.png)

これを！
![result_longcat_sugoi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/8f49e2f9-131f-9bb4-2b20-ac65ec0b2641.png)


きたああああ



しかもクラスタリングが回せる！すごい！！意味ない！！！超ウケる！！！

```
eval "convert -delay 10 ~/Downloads/result_longcat.png -flatten -rotate -180 -write mpr:a +delete `for i in {230..4485..230};do echo -n "\( mpr:a -roll -$i+0 -distort arc 360 \) ";done`yattaa.gif"
```

![yattaa.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/12e2c95c-959f-8d43-86e4-dae7ab857d39.gif)



上司：「longcat神じゃん」

クラスタリング結果をパワポの中に貼ることができて、
資料もいい感じになり、なんとか事なきを得ました。

![スクリーンショット 2020-12-21 17.11.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236258/5f6ba63e-864d-45b7-63a4-b4de91fbb264.png)


いまでは、クラスタリングの結果を出すことをlongcatするってよんでます。
もうlongcatと@yami_butaさんには足を向けて眠れません。

# ありがとうlongcat、ありがとうyami_butaさん
悲しいことに、今年の9月にlongcat（本名シロさん）[亡くなってしまった](https://petomorrow.jp/news_cat/125997)とのことです。
そのにょ～んと伸びる長さと、ただただ回る勇姿にたすけられました、ありがとう。。。
（全ては@yami_butaさんのおかげですありがとうございます）

皆さんもデータ分析のアウトプットで困ったらlongcatしてみてください。

まあ、よく考えたらopencvでいい説はある。