2014年10月20日月曜日

Kobe.R #11 データ分析コンペに挑戦

Kobe.R #11を開催しました。
URL: http://kobexr.doorkeeper.jp/events/15769
日時: 2014/10/4 Sat. 14:00-18:00
場所: 三ノ宮駅周辺

Kobe.Rは関西で毎月定期的に開催している、統計用プログラミング言語 R の勉強会です。

この日は午前中の Kobe.R #10 が無事に終了した後、とあるデータ分析コンペティションに挑戦するために午後から引き続いて Kobe.R #11 を開催しました。カフェでコーヒー飲みながら、ノートパソコン拡げてデータ分析。楽しそうでしょ?




次回 Kobe.R #12
日時: 10/26(土)10:00-12:00
場所: 大阪市立 福島区民センター 302号室
http://kobexr.doorkeeper.jp/events/16101

2014年10月19日日曜日

Kobe.R #10 MS Excelの最新データ分析機能

Kobe.R #10を開催しました。
URL: http://kobexr.doorkeeper.jp/events/15060
日時: 2014/10/4 Sat. 10:00-12:00
場所: 三ノ宮駅周辺

Kobe.Rは関西で毎月定期的に開催している、統計用プログラミング言語 R の勉強会です.

この日最後の発表は、マイクロソフトのオフィスソフトが提供するデータ分析環境について紹介していただきました。その中でも特にPower BI for Office365によって拡張されるExcelの強力な分析機能 PowerPivot と、 PowerMap による可視化をデモをまじえて解説していただきました。


Power BI for Office 365

使い慣れたExcelをベースに、データ分析できる環境です。Excelに検索、分析や可視化の機能を追加してくれます。
- Power Query 社内の情報も社外の情報も検索し、アクセスして変換する
- Power Pivot 簡単にデータをモデル化し、インメモリで素早く分析
- Power View 簡単操作でインタラクティブにデータを可視化
- Power Map 地理的情報、時間的情報を地図上にプロットし 3D でアニメーション表現

「ビジネスの主役である現場の社員が自らデータ分析することが成功の鍵である」というコンセプトです。試用版も提供されています。
http://www.microsoft.com/ja-jp/office/2013/business/powerbi/default.aspx

Power Pivotのデモ

まずはデータを取り込むところからです。取り込めるデータソースは様々ありまして、SQLサーバー、Access、Oracleから、SharePoint、Hadoopなどいろいろ選べます。面白いことにFacebookからもデータを取ってくることができます。友達の一覧や、どの記事に「いいね!」を押したかがExcelのワークシートにずらずら出てくる様子にはショックを受けました。

取り込んだデータは自由自在にクロス集計できます。軸をドラッグ&ドロップで入れ替え放題です。Excelはこれが本当に便利ですね。

Power Mapのデモ

ECサイトの売上データにある住所を日本地図にプロットするデモを披露していただきました。
発表者がExcelをちょいちょいと操作すると、あっというまに地図が表示される様子に、会場からどよめきが起こります。なんという強力なツールでしょうか。私も使ってみたくなりました。


正直に言いますと私は住所という情報を扱うのが苦手です。データに住所が含まれていても基本的には無視しています。住所別に集計してみようなどということは無意識に避けてきました。しかし、Power Mapならできそうだ。そう思わせてくれる大変興味深い発表でした。



全ての発表が終わり、この後みんなでお昼ご飯を食べにいきました。

次回 Kobe.R #12
日時: 10/26(土)10:00-12:00
場所: 大阪市立 福島区民センター 302号室
http://kobexr.doorkeeper.jp/events/16101

2014年10月18日土曜日

Kobe.R #10 疲労の見える化

Kobe.R #10を開催しました。
URL: http://kobexr.doorkeeper.jp/events/15060
日時: 2014/10/4 Sat. 10:00-12:00
場所: 三ノ宮駅周辺

Kobe.Rは関西で毎月定期的に開催している、統計用プログラミング言語 R の勉強会です。続いては疲労を見える化しようという研究について発表していただきました。

疲労を見える化する

質問紙を配り、回答してもらいます。
質問紙には例えば
- 不安で落ち着かない気分である
- 居眠りが多い
- 微熱がある
- よく眠れない
など、臨床で聞き取ってよく出てくる症状を並べています。
ほとんどの質問はこのように症状ですが、中には
- すごく仕事が忙しい
のように状態をたずねる質問もあり、全部で38個の質問を用意しました。
これらの質問に対し、「まったく無い」から「非常にある」までの5段階で答えてもらいました。

質問どうしの関連を調べ、グループ化、集約することで、この人はこういう原因で疲れている、ということを可視化しようという研究です。今日の発表では質問表のデータから因子分析をやって、因子分析結果の妥当性をとりました、というところまでをご紹介します。

[発表資料は後日掲載]

因子分析の流れ

データは適切か?

因子分析をするにはデータがどれくらいの件数あるかが大切です。
質問の数の10倍から20倍くらいはないといけません。今回は質問38に対して1000人弱の回答がありますので、そこそこよいでしょう。

そして、質問どうしにある程度の相関がないと、質問をうまくグループ分けできません。例えばまったく無相関な質問ばかり並んでいると、因子分析をする意味がありません。そこで、事前に因子分析をする価値があるデータなのか調べます。このことを調べる指標としてKMO, MSAがあります。また、バートレットの球面性検定という方法もあります。詳しくは「中澤 港、Rで因子分析:入門偏」を参照してください。

何個の因子にわけようかな

因子分析やる価値のあるデータだと判断したら、今度は何個くらいの因子に分けることができるかなということを見ていきます。いくつかの方法を紹介します。

- スクリープロットを見る方法 因子行列の固有値を大きい順にプロットしますと、あるところでカクンと落ちるところがあります。落ちる手前までが意味のある因子でしょうねという決め方です。
- 固有値が1を超えていれば、1個分以上の価値がある因子なのだから、そこまでを含めたらいいでしょうという決め方
- 平行分析 自動的に決めてくれます。こちらも詳しくは「中澤 港、Rで因子分析:入門偏」を参照してください。

因子分析で質問をグループ分けしよう

どの項目がどのグループに入るかを計算していくのが因子分析です。今回は38個の質問の項目をを10グループに分けていきます。

この時にどのグループに入るか推定する方法として、最尤法や一般化最小自乗法があります。データの分布が正規分布に近ければ最尤法がよいのですが、今回のデータの場合、普通の方がそんなに症状がいっぱいあるということが本来無いので、つまりどれもこれもあてはまるという人はほとんどいなくて、「まったくない」、「ほとんどない」に回答が集まってしまいました。質問紙の設計を見直すべきだったかもしれません。

データの分布があまりきれいじゃない場合には一般化最小自乗法のほうがロバストでよいとされており、今回の研究では一般化最小自乗法を使いました。

因子の軸を回転する

因子の解釈がしやすくなるよう、回転を行います。この時、因子間の関係性が完全に独立だと仮定して直行した成分とみなして、計算させる方法か、斜行といって因子間に、ある程度は相関があってもいいよねっていう前提で解析するか、決めなければいけません。
この研究では、因子間にある程度関係はあるもんだという前提の回転を選びました。

因子を解釈する

因子分析を行うと、質問項目に対して因子負荷量が出てきます。この数字を見て、どの質問項目がどの因子に入るのかを見ていくわけです。この因子にはこの質問が含まれているというのを見て、因子に名前をつけていきます。例えば、不安、過労、不眠、感染症、慢性疲労などです。


2014年10月13日月曜日

Kobe.R #10 xts 時系列の簡単操作

Kobe.R #10を開催しました。
URL: http://kobexr.doorkeeper.jp/events/15060
日時: 2014/10/4 Sat. 10:00-12:00
場所: 三ノ宮駅周辺

Kobe.Rは関西で毎月定期的に開催している、統計用プログラミング言語 R の勉強会です。最初の発表「dplyr & xts を使った時系列データの簡単集計」についてご紹介します。

xtsは時系列データの操作に便利

株価や売上のような時系列データには、日付や時刻が記録されています。このようなデータから特定の期間を抽出したい、もしくは、月ごと、週ごとの集計を求めたいという時に便利なパッケージが xts eXtensible Time Series です。

データフレームをxts型に変換する

まず、データフレーム型のデータをxts型のデータに変換します。 例えばこんなデータフレームがあるとします。

> head(data)
              time user_id item_code price
1 2013/11/14 19:39       0       s93  2000
2 2013/11/4  22:39       0      s191  1001
3 2013/11/5  13:15       0       s63  2300
4 2013/11/5  13:15       0        35     0
5 2013/11/6   0:20       0      s001  2800
6 2013/11/6  17:37       0    s80001  2300




このデータをxts型に変換します。

> library(xts)
> data.xts <- as.xts(read.zoo(data))

パイプ演算子を使ってこのようにも書けます。

> library(xts)
> library(pipeR)
> data.xts <- data %>>% read.zoo() %>>% as.xts()


こうしてxts型に変換しておくと、こんな操作ができるようになります。


期間を指定してデータを抽出する


data.xts['2013-05-01::2013-05-08']
data.xts['2013-05']
data.xts['2013-05::']


期間を指定して集計

例えば週別の合計を求めてみましょう。

> weekly <- apply.weekly(data.xts$price, sum)
> head(weekly)
            price 
2013-04-07 704402
2013-04-14 246364
2013-04-21 306163
2013-04-28 246358
2013-05-05 582423
2013-05-12 780918

他にもapply.daily、apply.monthlyで日別、月別の集計ができます。

2014年10月10日金曜日

Kobe.R #10 パイプ演算子

Kobe.R #10を開催しました。
URL: http://kobexr.doorkeeper.jp/events/15060
日時: 2014/10/4 Sat. 10:00-12:00
場所: 三ノ宮駅周辺

Kobe.Rは関西で毎月定期的に開催している、統計用プログラミング言語 R の勉強会です。最初の発表「dplyr & xts を使った時系列データの簡単集計」についてご紹介します。

簡単集計dplyrではパイプ演算子 %.% を使って、左から右へ流れるようにコーディングすることができます。
このパイプ演算子を強化してくれるパッケージとして magrittr が人気があるそうです。
magrittr のパイプ演算子は %>% です。シフトキーから指を離さずにタイプできるのが評判いいみたいですよ。

他に magrittr より速いという pipeR というパッケージも最近人気のようです。こちらのパイプ演算子は %>>% です。

Kobe.R #10 dplyr データの集計に便利なパッケージ

Kobe.R #10を開催しました。
URL: http://kobexr.doorkeeper.jp/events/15060
日時: 2014/10/4 Sat. 10:00-12:00
場所: 三ノ宮駅周辺

Kobe.Rは関西で毎月定期的に開催している、統計用プログラミング言語 R の勉強会です。最初の発表「dplyr & xts を使った時系列データの簡単集計」についてご紹介します。


dplyrはデータの集計に便利なパッケージです


基本的な使い方

library(dplyr)

data(iris)

iris.sum <- summarise(group_by(iris, Species), 
                      avg_SL=mean(Sepal.Length), 
                      avg_PL=mean(Petal.Length)) 

head(iris.sum)

Source: local data frame [3 x 3]

     Species avg_SL avg_PL
1     setosa  5.006  1.462
2 versicolor  5.936  4.260
3  virginica  6.588  5.552


pipe演算子を使うと

summarise(group_by(data, A, B), sumA=sum(A), sumB=sum(B))
と書くところを
data %.% group_by(A, B) %.% summarise(sumA=sum(A), sumB=sum(B))
と左から右へ流れるように書けます。

irisをdplyrで集計してみるとこのようになります。

data(iris)
iris.sum <- iris %.% group_by(Species) %.% 
  summarise(avg_SL=mean(Sepal.Length), avg_PL=mean(Petal.Length))