astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

Pythonでコレスポンデンス分析をやってみた

ご挨拶

はじめまして。
このブログで初登場となります、エンジニアのaranです。
今年の1月よりアスタミューゼにジョインしました。
どうぞよろしくお願いします。

ここ4ヶ月間ぐらい、水素水にハマっていましたが
水素水生成機のフィルタ交換作業にちょっとだけ疲れ
次なる健康食品を探しています。
体にいい健康食品などありましたら、是非教えて下さい。

それでは、はじめさせて頂きます

前書き

先月、お世話になっている方とお会いした際に
アンケートから顧客の好みを視覚化できないかなぁ?
って悩んでいたので
コレスポンデンス分析ならできるかもって安易に答えたら
「じゃ、よろしくね!」って言われ、知らぬ間にやることに。。
言ったことをほんの少しだけ後悔しつつも
対応した内容を今回のブログにまとめました。

コレスポンデンス分析とは

細かな定義はwikiや各書籍にお任せするとして
クロス集計結果を散布図で視覚化すると分析手法と解釈しています。

大学院時代の恩師には

評価対象な質問の選択肢の関係をわかりやすく可視化し
アンケートから顧客の好みを分析する際に使える

と教えて頂きました。
間違えって覚えていたら、ごめんなさい

ここで、ちょっと話が脱線しますが、
コレスポンデンス分析って検索すると対応分析もヒットするので
何が違うの?と思って調べたところ同義語として使われているみたいですね。

今回の実行環境

コレスポンデンス分析は、Windows7 on R言語で試したことはあったのですが
今回はMacBook Pro on Python 3.6で挑戦したいと思います。
因みに.. Pythonは hello worldを書いた程度の初学者です。

では、早速はじめたいと思います。

下準備

コレスポンデンス分析を行うために、
mcaライブラリーを利用します github.com

このライブラリーはチュートリアル用データも用意されているので
大変・大変便利です!
ありがとうございまーす

まずは、新品のファミコンカセットに息を吹きかける儀式のごとく
mcaライブラリーをインストールしまーす

pip install --user mca

その他 matplotlibpandasライブラリーも併せてインストールします

pip install matplotlib
pip install pandas

データ準備

下準備が終わりましたので
次に分析対象のデータを用意します。

実際にはデータクレンジング等を行いますが
今回は、この部分は割愛させていただき
チュートリアルのデータをそのまま利用します。
https://github.com/esafak/mca/blob/master/data/burgundies.csv

実装

分析できるデータがそろいました。
それでは、コーディングに入りたいと(ドキドキ)

https://github.com/esafak/mca/blob/master/docs/usage.rst ここのチュートリアルは、サンプルコードも丁寧に書いてありますので
いろいろ試すことができます。

Pythonのお作法に四苦八苦しつつ
チュートリアルにそって、書いたコードをがこちらです

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import mca
import matplotlib.pyplot as plot
import pandas as pd

cross = pd.read_table('data/burgundies.csv', sep=',', skiprows=1, index_col=0, header=0)

mca_counts = mca.MCA(cross)
rows = mca_counts.fs_r(N=2)
cols = mca_counts.fs_c(N=2)

plot.scatter(rows[:,0], rows[:,1], c='b',marker='o')
labels = cross.index
for label,x,y in zip(labels,rows[:,0],rows[:,1]):
    plot.annotate(label,xy = (x, y))

plot.scatter(cols[:,0], cols[:,1], c='r',marker='x')
labels = cross.columns
for label,x,y in zip(labels,cols[:,0],cols[:,1]):
    plot.annotate(label,xy = (x, y))

plot.show()

サンプルデータを実行するとこんな感じになります。

f:id:astamuse:20190612002433p:plain
実行結果

巨人に肩を乗っかると、ちょっとコード書くだけで
コレスポンデンス分析ができちゃいました。

R言語とは違い
Pythonでのコレスポンデンス分析は
情報量が少なく感じるので敬遠しがちかもしれません。

でも、チュートリアル読めば、Python初心者の私でも使えますので
皆さまも是非利用して、データ分析ライフをエンジョイして下さい。

お願い

最後になりましたが、アスタミューゼでは現在、エンジニア・デザイナーを絶賛募集中です!
興味のある方はぜひ下記バナーからご応募ください!!


参考にしたURL
http://vxy10.github.io/2016/06/10/intro-MCA/
https://qiita.com/nabesaan/items/f88bbacdd4f9217cd802

Copyright © astamuse company, ltd. all rights reserved.