文系男子が日和るIT開発~IT知識なしで飛び込んだIT企業

文系男子だからIT企業に就職するなんて考えてもみませんでしたが、日和ながら日々くらいついています。

流行のコンパクトSUV・ミドルSUVをR言語でクラスタ分析してみた

f:id:dreamjourney:20181003231812j:plain

近年流行りのSUV


一昔前は、いわゆるクロカンタイプが主流でしたよね。
パジェロランクル、サーフ、サファリ等々。

それが、CR-V、ESCUDE、RAV4などの登場により、
市街地を中心にファッション感覚で乗れるシティ派のSUVが登場してきて、、、

という流れは、ご存知の通りかと思います。


では、今は?



多様化が進み、一つのジャンルでカテゴライズすることは難しく、
軽四ですらファッション性の高いハスラーとクロカンタイプのジムニーがありますし、
コンパクト~ミドルサイズのSUVであれば、4人がきちんと広々座れるタイプや、
クーペライクなスタイルを意識したタイプ、
ファミリー向けの3列シートのSUVなど、多彩なラインナップとなりました。

結果として、
車に詳しくないけどSUVに乗りたい、でも、どれがいいのかわからない、
町に見かけるかっこいいSUVの候補が3つあるけど、それはどれも似て非なる用途で選びにくい、
ということもあるそうで。


そこで、何種類かの車をもとに類似しているのはどれかを数値化し、
集団にグルーピングしていくために、クラスタ分析を行ってみようと思っていました。


クラスタ分析には、
「階層クラスター分析」と「非階層クラスター分析」の大きく2つに分類されます。
今回は前者の「階層クラスター分析」の『樹形図(デンドログラム)』で分析しようと思います。


理由としては、
分類したい個体の数が多くなく、予めクラスタ数を決めきれないと考えたためです。



利用したデータはこちら。

行が車種。
列が、車のスリーサイズ、エンジンの基礎数値、価格といったスペック(主要諸元)になります。


全長,全幅,全高,乗車定員,排気量,トルク,馬力,価格
C-HR,4360,1795,1550,5,1800,185,170,279
VEZEL,4305,1790,1605,5,1500,156,162,258
CX-3,4275,1765,1550,5,1500,192,148,274
IGNIS,3700,1660,1595,5,1200,118,94,160.5
ESCUDE,4175,1775,1610,5,1400,210,136,259
X-TRAIL,4690,1820,1740,5,2000,207,188,284.5
CX-5,4545,1840,1690,5,2200,420,175,317
FORESTER,4625,1815,1730,5,2500,239,184,313
OUTLANDER,4695,1810,1710,5,2000,190,282,422.5
RVR,4365,1770,1630,5,1800,172,139,230
HARRIER,4725,1835,1690,5,2500,206,152,418.5
PRADO,4825,1885,1850,7,2800,450,177,475.5
HUSTLER,3395,1475,1665,4,660,63,66,154
JIMNY-SIERRA,3555,1645,1730,4,1500,130,102,188.5
JIMNY,3395,1475,1725,4,660,96,64,164.5
JUKE,4135,1765,1565,5,1500,150,114,226
CX-8,4900,1840,1730,6,2200,450,190,369
ECLIPSE-CROSS,4405,1805,1685,5,1500,240,150,281


csvデータを読み込ませて
ユークリッド距離で個体ごとの距離を測定します。
> spec2.d <- dist(carspec, "euclidean")


距離の測定を行う関数distを使用しますが、
書式は、dist(data, "method") になります。

 "method"部分ですが、
 デフォルトは「euclidean」です。
 マンハッタン距離: manhattan
 最長距離 : maximum
 キャンベラ : canberra
 などの指定も行えます。


階層的クラスター分析を行う場合は
書式は、dhclustist(data.d, "method") になります。

 "method"部分ですが、
 デフォルトは最長距離法「complete」です。
 ウォード法: ward
 最短距離法: single
 群平均法: average
 重心法: centroid
 などの指定が行えます。

 
今回は、ウォード法を使用しています。
> carspec.hc <- hclust(carspec.d^2, "ward")
 ※ ウォード法と重心法の場合、
   ユークリッド平方距離を使用することになるため、
   ユークリッド距離を2乗しています。
 ※ ウォード法は、鎖連鎖が発生しにくいという利点があります。
   


最後にplot関数で樹形図を描画します。
> plot(carspec.hc, hang=-1)

f:id:dreamjourney:20181003235239j:plain



こちらは
距離の測定に、「マンハッタン距離」を使用したものです。
f:id:dreamjourney:20181003230030j:plain



> carspec.d <- dist(carspec, "manhattan")
> carspec.d
C-HR VEZEL CX-3 IGNIS ESCUDE X-TRAIL CX-5 FORESTER OUTLANDER RVR HARRIER PRADO HUSTLER JIMNY-SIERRA JIMNY JUKE
VEZEL 473.0
CX-3 449.0 176.0
IGNIS 1701.5 1248.5 1266.5
ESCUDE 744.0 331.0 315.0 1037.5
X-TRAIL 790.5 1153.5 1225.5 2402.0 1370.5
CX-5 1048.0 1411.0 1483.0 2659.5 1622.0 673.5
FORESTER 1267.0 1630.0 1702.0 2878.5 1841.0 644.5 639.0
OUTLANDER 970.5 1333.5 1409.5 2582.0 1584.5 294.0 842.5 851.5
RVR 203.0 472.0 548.0 1578.5 685.0 823.5 1081.0 1300.0 1003.5
HARRIER 1423.5 1770.5 1822.5 2999.0 1969.5 771.0 823.5 330.5 725.0 1420.5
PRADO 2325.5 2688.5 2760.5 3937.0 2899.5 1557.0 1277.5 1072.5 1565.0 2358.5 938.0
HUSTLER 2892.0 2419.0 2457.0 1190.5 2198.0 3452.5 3710.0 3929.0 3632.5 2699.0 4049.5 4987.5
JIMNY-SIERRA 1649.5 1176.5 1214.5 644.0 1155.5 2080.0 2417.5 2556.5 2300.0 1456.5 2757.0 3615.0 1372.5
JIMNY 2910.5 2437.5 2475.5 1217.0 2216.5 3351.0 3678.5 3827.5 3561.0 2717.5 4018.0 4886.0 105.5 1271.0
JUKE 714.0 321.0 279.0 987.5 310.0 1474.5 1732.0 1951.0 1654.5 651.0 2071.5 3009.5 2178.0 935.5 2196.5
CX-8 1541.0 1904.0 1976.0 3152.5 2115.0 770.5 493.0 874.0 861.5 1574.0 852.5 960.5 4203.0 2830.5 4101.5 2225.0
ECLIPSE-CROSS 567.0 314.0 362.0 1538.5 501.0 929.5 1121.0 1342.0 1143.5 560.0 1528.5 2398.5 2589.0 1306.5 2567.5 611.0
CX-8
VEZEL
CX-3
IGNIS
ESCUDE
X-TRAIL
CX-5
FORESTER
OUTLANDER
RVR
HARRIER
PRADO
HUSTLER
JIMNY-SIERRA
JIMNY
JUKE
CX-8
ECLIPSE-CROSS



マンハッタン距離で描いた樹形図のほうがわかりやすいので、
そちらで考察します。

・軽四とそれベースの分類(ミニマム)、
 クーペスタイルやコンパクトカーベースのSUV(コンパクト)、
 空間に余裕のあるミドルレンジのSUV(ミドル)
 の3カテゴリに分類できた。

・分類方法によっては、
 クーペスタイルのC-HRやVEZEL、CS-3などは
 ミニマムに近い分類がなされているため、室内空間は気にしたほうがよさそう

・さすがにCX-5CX-8は近い存在。

・サイズ感やエンジンスペックによる分類はうまくなされているが、
 高級感を打ち出しているのか、スタイリッシュな雰囲気なのか、
 アウトドア向きなのかなどは、読み取れない


Rで学ぶクラスタ解析

Rで学ぶクラスタ解析