2019/09/18

Pythonのライブラリ「scikit-learn」で非階層クラスター分析によるAPS-Cのαシリーズの分類をやってみた

SONYがAPS-Cの新機種「α6100」「α6600」を発表したと聞いて最初に思ったのは「SONYのAPS-Cシリーズ,知らないうちに増えててわけわかんね……」だった.α6000を使っていた頃はせいぜい入門機の5000シリーズ,中堅の6000,上位機の6300という単純な構成だったはずが,いつの間にやら6400,6500が出ていて,今回6100と6600が出るという.

RX100に見られるようにSONYのカメラは旧機種の併売が多い(今回がどうなるかは知らないけど).結果的にラインナップが重厚になり選択の幅は広くなるのは喜ばしいことだけど,反面多すぎてよくわからないということにもなりかねない.

EXCELか何かでスペックの表でも作って見比べれば分類は可能だけど,その辺りを機械的にやれないのか?と思い立った.

Sponsored Link

Pythonによる非階層クラスター分析

マーケティング的にはこれはセグメンテーションと呼ばれるもので,分析手法としてはクラスター分析が採られる.

学生時代,この手の分析は統計プログラミング言語「R」でやっていたけど,最近はデータ分析のメインストリームはPythonに移りつつあると聞く(あるいはもう移り変わったかもしれない).Rなら当時使っていたソースコードも探せばあるので楽だけど,今後のことも考えてPythonでやってみようと考えた.

調べてみたら,Pythonにはありがちなことだけど簡単に実現するライブラリ「scikit-learn」があった.クラスター分析に限らず機械学習で使うデータ分析手法を簡単に使えるようになるもので,Pythonでの機械学習のデファクトスタンダードの1つになっているっぽい.

今回やりたいことはいわゆる「分類」で,そのためのアルゴリズムはいくつかあるけど,今回は馴染みのあるk-meansを使うことにした.

ライブラリがあるだけあって超速でk-meansを使えるようになる.

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans

df = pd.read_csv("data.csv")
df = df.drop("name", axis=1)

array = df.to_numpy()

pred = KMeans(n_clusters=4).fit_predict(array)
print(pred)

CSVを読み込んで分類して表示するまでわずか5行.うち1行はデータのいらない列を削り落としているだけなので,4行でも実現できちゃう.

Rだともう少しコーディングが必要になっていたと記憶していて,改めてPythonのパワーを思い知った.scikit-learnもさることながら,それを支えるpandasやnumpyがデータの扱いを超容易にしているところに強みの源泉があるような気がする.

分析の結果

今回はSONYのAPS-C機に限った分類なので機種数も限られるし,Pythonに食わせたデータを見ればなんとなくわかるレベルなので結果に面白みはない.「やってみた」といいつつ結果を出さないクソブログ.

ただ,対象を増やし,データ項目を増やしてこれをやってみたらどういう結果が得られるのかなあ,ということには興味を持った.もしやるとしたら,ご覧の通り分析の実装は一瞬なので,データ集めがひたすら大変になると思うけど……

Cluster analysis for SONY alpha series. Contribute to retore404/alpha-kmeans development by creating an account on GitHub.

今回のコード.

0 件のコメント:

コメントを投稿