2013年9月24日火曜日

因子分析とクラスター分析のやり方~分析報告書作りのポイントもあわせて~

最近は、SASとか難しい記事が多くなっていたので志向を変えて。。
今回は報告書の作り方というか、ポイントをメモしておきます。
報告書を作る作業が減ったもので、忘れそうということもあり。。

で、本題に。。
リンク先PDFの大広さんの資料は報告書のポイントが詰まっていると関心してしまいました。。

「スマート主婦」調査分析レポート
http://www.daiko.co.jp/ja/portfolio/database/life_report/report_130212.pdf
http://daikodmsoken.jp/wp-content/uploads/2013/02/reserch_vol2.pdf
https://www.daiko.co.jp/dwp/wp-content/uploads/2014/02/report_130212.pdf

リンク先のレポートを参考にしてしまえば、
調査報告書を、マーケターとして一人前にかけてしまうと思われるくらい
参考になるかと思います。

PDFに詰まっている報告書のポイントと
あわせて、因子分析→クラスター分析のやり方も簡単に解説します。

<以下解説>--------------------------------------------

リンク先PDFと対応させてご覧いただければと思います。

■2P<はじめに>
・背景
・課題
を記して、報告書が何に役立つかを提示します。

■3P<調査概要>
・調査目的
・調査概要
を記して、報告書(調査)で何をやったを提示します。

■4P~7P<サマリー>
調査目的に対応する形で、
分析結果を分かりやすくまとめます。

■8P<因子分析>
アンケートデータを因子分析にかけて、
因子を抽出しています。

【因子分析の流れ】

-データ-
このレポートはどんなデータわかりませんが
分析するデータは、だいたい各設問を5段階で評価しているものを使います。

設問例)
問1:果物が好きですか。
1:とてもよくあてはまる 2:だいたいあてはまる、・・・

データ例)
Aさん 問1:3 問2:5
Bさん 問1:1 問2:3

-計算-
で、5段階評価のデータを
SPSSとかで因子分析をかけると、

・固有値
・因子負荷量 ・・・8Pにあるもの
・因子得点

などが出てきます。

-結果の解釈-
計算結果がでてきたら、
まず因子として採用するものを選びます。
選び方は、固有値がだいたい1以上のものか、
累積寄与率が60%以上になる因子までを採用します。

で、採用する因子が決まったら、
因子負荷量を8Pのようにならべます。

※リンク先のPDFでは、
 黄色く記載されているところ以外は空白になっていますね。。
 0なのか、見づさの軽減のためなのかわかりませんが。。

次に因子負荷量をみながら、
それぞれの因子に名前を付けていきます。
だいたい数値が大きいものに○をつけていって、
因子の特徴を理解し、因子の名前をつけます。

この辺りが、マーケターのセンスが光る部分ですね。笑
ただし、特徴が理解できなければ、外してしまってもいいかと思います。
理解できないと、報告書として説明することができないので。。。

■10P<クラスター分析>
因子分析の結果をもとにクラスター分析をして、
クラスターごとの因子得点をレーダーチャートで表しています。

【クラスター分析の流れ】

-因子分析の結果の引き継ぎ-
採用した因子で、
モニターごとの因子得点を計算します。

データ例)
Aさん 因子1:3 因子2:5
Bさん 因子1:4 因子2:1


-クラスター分析の計算-
因子得点が計算できたら、クラスター分析をします。

 出したいクラスターの数が決まっていなければウォード法を、
 決まっていればk-means法を

使えばいいかと思います。

ウォード法をやると、
デンドログラムというトーナメント表のようなグラフが出力され、
クラスターを最小限に細かく分けるパターンから、
最大限にくくってしまうパターンまで表されます。

最初は、ウォード法などでデンドログラムを見ながら
どれくらいにまとめようかと検討するのがいいかと思います。

-クラスター分析の解釈-
で、どこできったらよいかというところは、

 ・デンドログラムの直線が長くなっているところ

がだいたい良いかと。

-クラスターごとの特徴の抽出-
クラスターが抽出できたら、
それぞれの因子得点の平均で比較分析(コメントづけ)を行います。

■12~14P<クロス集計表>
・必ずクロス集計表にはN数を表記する
・N数が30未満の場合には注釈で参考情報であることを表記する
・構成値が極端に多い部分や、少ない部分に着目してコメントする
 (=データの特徴がなるべく浮き彫りになるようにコメントする)

・表頭がSAのときは帯グラフ:12~14P
 (SAというのはシングルアンサーの略です。
 すべての人がダブらないので、帯グラフで表すことができます。
 例えば、年代とかはSAです。年代は1人で2つの値をとることはできません。
 ※サバを読んでるとかはまた別の話です。)

・表頭がMAのときは折れ線(or縦棒):15~17P
 (MAというのはマルチアンサーの略です。
 人によって解答が重複することがあるので、折れ線で表すことが多いです。
 また、15Pのように、見やすさ向上のため多い順に表頭を並べることがあります。)

--------------------------------------------

以上が、因子分析とクラスター分析を使った調査報告書のポイントです。



2013年9月3日火曜日

SASデータセットを高速でRに取り込むときの流れ

前回sas7bdatをRに入れるという記事を作ったのですが、
こんなのがありました。

■Macros communicate SQLite and SAS without ODBC
http://www.sasanalysis.com/2011/05/macros-communicate-sqlite-and-sas.html

SASから、直接SQLiteを吐き出してくれるマクロです。
その逆も出来るみたいですよ。
こんな便利ものを無料で提供してくださるのは本当にありがたいですね。
ということで、SAS(SQLite)→Rと1回で取り込みができちゃいます。

手順は下記の通りです。
※いつもなら、Macなのですが
 SASということでWindows環境下での作業手順です。

0.sqlite3.exeのあるファイルへパスを通す。
 #環境変数でググるとパスの通し方が書いてあります。

1.上記リンク先のマクロを読み込む。
 #sqlite3へのパスが通ってないとちゃんと動作してくれないので注意。

2.データセットを作ってマクロを実行。
 #SASでのマクロの呼び出し方は、こんなかんじかと。
 
 %sas2sqlite(sastable = 【吐き出すデータセット名】, path = 【吐き出す先のパス】, database = 【sqliteデータの名前】)

あとはR側で、RSQLiteパッケージを使って取り出すだけです。

念のため,R側での操作方法を記載しておくと、

 
library(RSQLite)
drv <- dbDriver("SQLite")
con <- dbConnect(drv, dbname="【吐き出す先のパス】/【sqliteデータの名前】")
x <- dbGetQuery(con, "select * from 【吐き出すデータセット名】;")
head(x)  #表示して確認

2013年9月2日月曜日

SASデータセットをRに取り込むときの流れと注意

頻度はそんなに多くないかとおもうのですが、
SASデータセットをRに移す作業をしたのでメモしておきます。

※下記の方法よりも早く取り込む方法があります。
http://daaataaa.blogspot.jp/2013/09/sasr_3.html

■SAS側でのデータ作成について

SASデータセットを作るときに圧縮をかけるのが通常なのですが、
Rに取り込むときに圧縮をかけていると、
読み込みがエラーになるので注意が必要です。

⇒SASにて、データを取り込むときに「compress = no」とオプションをつける!

■R側でのデータ取り込みについて

①パッケージ「sas7bdat」のインストール
とくに注意点なし

②sas7bdatの読み込み
作業効率的に、小さいデータから順に確認しながら取り込みます。
500MBぐらいのデータだと、測ってはいませんが1時間以上はかかります。

#使ったマシンはMacBook Air
 メモリ:4G CPU:Intel Core i5

③データの確認
日本語の変数要素が入っている場合は
文字化けしている可能性があります。

■データのクレンジングについて

すごく効率の悪いやり方なのかもしれませんが、
一回データを取り込んだものをCSVで吐き出して、
シェルで一気にエンコードしました。
#R内での処理<sas7bdatのcsv化>
 

insatall.packages("sas7bdat")
library(sas7bdat)
x <- read.sas7bdat("sample.sas7bdat" )
write.csv(x,"sample.csv")

#シェル(ターミナル)での処理<全角文字のエンコード>
 

nkf -w sample.csv > sample_utf.csv

■クレンジングしたCSVのDB化
sqliteでデータベース化して、Rに取り込みます。
なおCSVを、わざわざSQLにした理由ですが、
管理したりSQLでちょっとした作業をする時用です。
※場合によって、SQL化の作業は省いても問題ないです!
#sqlite3でcsvをデータベース化
 

sqlite3

create tabele sample(rowno,V1,V2,・・・・,Vn);
#Rから吐き出した際に、CSVの最初のカラムに行数が挿入されているので、
#「rowno」+「sas7bdatのカラム」とカラムがひとつ増えることに注意。

.separator ,
.import sample_utf.csv sample

■DBをRに取り込む
このあたりはRwikiが詳しいです。
■おわりに
※まあ、MacBook Airでやるなとか、
 SASデータセットをわざわざRに取り込むなって話ですが、
 どーしても、やむにやまれずにSASデータセットを
 Rで分析するときのための参考情報です。
※そもそも、SASデータセットを圧縮せずに作っている人はごくまれですし。。。
※というよりかは、最初からCSVデータがあるのであれば、
 SASデータセットよりも、CSVデータをもらった方が早いよ。
 という話なのかも知れません。。