追伸:データマイニングの方法論(DSSS)

前回投稿した3つの方法論の他に、日本の「データサイエンティスト協会」がまとめたものがあったので追加メモ。これはCRISP-DMなどを参考にしているとのことで、項目名はそのまま。

参考サイト

DSSS

データサイエンティストスキル標準(DSSS)の意。
CRISP-DMなどを参考にして「データサイエンティスト協会」がまとめたもの

  1. Business Understanding(ビジネス要件定義)

    ~現状把握/課題設定
    ~改善仮設/目標設定
  2. Data Understanding(データの理解)

    ~分析プラン
    ~データデザイン/コレクション
    ~関係性/意味の理解
  3. Data Preparation(データの準備)

    データの加工
  4. Modeling(モデル作成)

    ~手法、アルゴリズム、変数の選択
  5. Evaluation(モデル評価)

    ~精度、頑健性
    ~ビジネス目標からみた評価
  6. Deployment(改善施策の提案)

    効果検証/PDCA

データ分析の方法論を幾つか(CRISP-DMとSEMMAとKDD。ついでにKKD)

「データサイエンティスト養成読本」(技術評論社,2013)にデータマイニングのプロセスとしてタイトルの3つが紹介されていたのでメモ。

CRISP-DM

Cross Industry Standard Process for Data Mining(業界横断型データマイニング汎用プロセス)の略。
SPSSなどが参加するコンソーシアムで開発された方法論。
データ分析から問題解決まで、次のステージに分けて定義している。

  1. Business Understanding

    対象のビジネス全体を理解し、課題・目的を明らかにするステージ
  2. Data Understanding

    関係者からのヒアリングを含め、データの収集・理解をするステージ
  3. Data Preparation

    数理モデル構築のためのデータマート・DWHを構築するステージ
  4. Modeling

    仮説に基づいて数理モデルを構築するステージ
  5. Evaluation

    構築した数理モデルを評価するステージ
  6. Deployment

    評価した数理モデルに基づいて何らかの施策を行うステージ

SEMMA

[Sample Explore Modify Model Assess]の略。
SAS社によって開発された方法論。
データ分析から問題解決まで、次のステージに分けて定義している。

  1. Sample

    大量のデータから重要な情報を含む分析用データを取得するステージ
  2. Explore

    理解を深めるために未知の傾向や例外を探索するステージ
  3. Modify

    モデル選択を意識した、データの作成・選択・変換を行うステージ
  4. Model

    結果に繋がるデータ同士の関係性を得るための数理モデルを作成するステージ
  5. Assess

    結果を評価し、実行するステージ

KDD

データ分析を次の過程に分けて理解する。
この概念を紹介した文章のタイトル「Knowledge Discovery in Databases」(Fayyadら, 1996)にちなんでKDDと呼ばれている。

  1. Selection

  2. Preprocessing

  3. Transformation

  4. Data Mining

  5. Interpretation/Evaluation(解釈/評価)

その他:KKD

古来より使用されてきた方法論。
次のステージの全て、あるいはいずれかを用いて問題解決を目指す。

  1. Keiken(経験)

  2. Kan(勘)

  3. Dokyou(度胸)

D3.js + Google Map API でヒートマップ表示

1. はじめに

“JsonファイルのデータをD3.jsで読み込み、
GoogleMapにヒートマップとして配置する”


8/4の投稿(Google Map Apiで地図にデータを配置する初歩的なメモ)ではGoogleMapApiを用いてGoogleマップ上にピンやヒートマップを描画する方法をメモしました。今回はより実用的に、ヒートマップなどのデータをJsonファイルとして準備し、D3.jsで読込んで描画する処理をメモします。前回のコードと比較すると、最近各所で使われているD3.jsがデータのロードに限ればとてもシンプルに利用できることが分かると思います。

GoogleMapAPIを使用する際の制限などは前回同様。使用許諾を参照してください。


2. データ

次のデータを「heatdata.json」という名前でスクリプトと同じフォルダに配置します。前回スクリプト内で使用したJsonコードはエラーが出たため、変数名などをダブルクォーテーションで囲むなど修正しています。

ファイルを直接開く

3. 実際のコード

上記JsonデータをD3.jsを使用して読み込み、GoogleMap上にヒートマップを描画します。
(コードの説明はソースのコメントを参照してください)

デモを表示する

会社主催で機械学習の勉強会を開催しました。

昨日(08/06)、会社主催の「PHP機械学習フォーラム」第一回セミナー&LTセッションが行われました。

書籍やネットでは難解な数式が並ぶ機会学習のアルゴリズムについて平易に解説する内容で、来場者の方々からも好意的な感想を頂き、実りの多い会でした。


多くの参加者に恵まれました。


ベイジアンフィルタのアルゴリズムを平易に解説する内容でした。


前回の出版記念セミナーとは違い、参加者の多くが技術よりの方という印象で、セミナー後の懇親会でも「高額な自然言語処理システムを入れたけれど使いこなせなかった」「Pythonは気になるけれどこれで受注できるかというと難しい」など実際の利用シーンに近い話題やプログラム言語に関する情報を交換することができました。

Google Map Apiで地図にデータを配置する初歩的なメモ

1. はじめに

GoogleMapApiを用いたコードは何度か書いた事があるのですが、毎回細かい点を検索して調べなおしていたので簡単にまとめてメモします。


データのヒートマップ表示

ここで紹介するサンプルコードはAPIキーを含んでいません。これは非推奨の使い方なので実際に使用する場合はAPIキーを取得して使用したほうがよさそうです。GoogleMapAPIの仕様するにはGoogleの使用許諾に同意する必要があります。


2. まずは地図だけを表示する

ただ地図を表示するだけです。拡大率と中心緯度経度を指定しています。

【Google API読み込み時のURLオプションパラメーター】
sensor(必須): true/false (端末のGPSセンサーを使うか否か)
language: ja (ラベルで使用する言語)
libraries: visualization など(ヒートマップを重ねるなどの処理をする場合に指定**後述**)
デモを表示する

3. 続いて単純なピンを打つ

地図上に既定アイコンのピンを打ちます。ピンをクリックすると吹き出しを表示します。

(コードの説明はソースのコメントを参照してください)

デモを表示する

4. ピンのかわりにサークルを配置する

ピンだといかにもGoogleMapな雰囲気なので、カラーサークルをデータ位置に配置します。また、データ中の値を使用してサークルの大きさを変更して配置します。

デモを表示する

5. ピンのかわりにヒートマップを配置する

データが密集している場合などはサークルだと重なりが多くなって分かりづらくなってしまいます。こんな時はヒートマップを配置します。正確にはヒートマップ用のレイヤーを作成してGoogleMapへ重ねます。

デモを表示する

会社の書籍出版セミナーが盛況でした

7月9日に「PHPによる機械学習入門」の出版セミナーを行いました。
定員一杯の来場者に恵まれ、私自身は誘導など裏方としての参加でしたが機械学習への関心の高さを肌で感じる事ができました。

著者の弊社社員によるベイジアンフィルタを実装したAIサーバーの実演や、弊社社長による機械学習を活用した受託案件の紹介など、技術系からマネジメント層の方までをカバーする充実したセミナー内容で実施しました。
(下の写真はAIサーバーの実演風景)

出版日は7/16となっていますが、書店やAmazonではすでに購入可能です。

私はどちらかというと統計処理を中心に勉強してきましたが、機械学習はビッグデータに限らずデータマイニングを行う際には非常に有効な技術ですので、積極的に勉強していきたいと改めて感じることができました。

会社が機械学習の書籍を出版しました

この度、私が勤務する「学びing株式会社」が機械学習の書籍を出版しました。

書籍名は「PHPによる機械学習入門」!これまでJavaやPythonなど固い言語やアカデミックなイメージの強い言語での実装例が多かった機械学習処理ですが、弊社自身での使用頻度が高いPHP言語での解説となっています。ベイジアンフィルタなどの基本的なアルゴリズムを一から実装しているためアカデミックなバックボーンがない読者の方でも抵抗なく機械学習処理が実装できる良書となっています。



「PHPによる機械学習入門」
著者:斉藤 常治 (著), 高橋 佑幸 (著)
出版:リックテレコム



PentahoのインストールとサンプルBIの起動

オープンソースBIプラットホームとして知名度の高いPentahoのインストールとサンプル画面の表示まで行います。

前提条件

環境:
サーバー:AmazonAWS(m3.medium)
OS:AmazonLinux(amzn-ami-pv-2014.03.1.x86_64-ebs)

JVM:
[user@server ~/]$ java -version
java version "1.7.0_55"
OpenJDK Runtime Environment (amzn-2.4.7.1.40.amzn1-x86_64 u55-b13)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)

Pentahoのバージョン:
biserver-ce-5.0.1
あらかじめセキュリティー設定で8080ポートを開けておきます。
以降の作業はサーバー上での作業ユーザーで行います。

ダウンロード

[user@server ~/]$ wget http://sourceforge.net/projects/pentaho/files/Business%20Intelligence%20Server/5.0.1-stable/biserver-ce-5.0.1-stable.zip

解答

[user@server ~/]$ unzip biserver-ce-5.0.1-stable.zip

実行用ディレクトリを作成し、ファイルをコピー

[user@server ~/]$ mkdir /var/www/pentaho
[user@server ~/]$ cp ./biserver-ce /var/www/pentaho/

デモ用設定のPentahoを起動

プロンプトが出るので、「OK」を入力
!!スクリプト投入後、起動か完了するまでに数分かかります。
[user@server ~/]$ cd /var/www/pentaho/biserver-ce
[user@server biserver-ce]$ ./set-pentaho-env.sh
[user@server biserver-ce]$ ./start-pentaho.sh
/var/www/pentaho/biserver-ce
/var/www/pentaho/biserver-ce
DEBUG: Using JAVA_HOME
DEBUG: _PENTAHO_JAVA_HOME=/usr/lib/jvm/jre
DEBUG: _PENTAHO_JAVA=/usr/lib/jvm/jre/bin/java
--------------------------------------------------------------------------------------------
The Pentaho BI Platform now contains a version checker that will notify you
when newer versions of the software are available. The version checker is enabled by default.
For information on what the version checker does, why it is beneficial, and how it works see:
http://wiki.pentaho.com/display/ServerDoc2x/Version+Checker
Press Enter to continue, or type cancel or Ctrl-C to prevent the server from starting.
You will only be prompted once with this question.
--------------------------------------------------------------------------------------------
[OK]:OK

ブラウザからデモ用画面を表示

http://54.199.202.73:8080/pentaho/
次のテストユーザーでログインします。
User:suzy
Pass:password
(解説には"Suzy"とありますが、誤りのようです)

次の画面が表示されればOKです。


感想:「データを武器にする - 勝つための統計学」(渡辺 啓太)

データ分析のための書籍感想[002]


「データを武器にする - 勝つための統計学」
著者:渡辺 啓太
出版:ダイヤモンド社

一言で言うと、”納得させるためのノウハウ本”


女子バレーボールチームをロンドン五輪で銅メダルに導いた「情報戦略担当アナリスト」によるデータ活用のための指南書。「統計学」とありますが、統計学が何かを多少とも把握している人はタイトルのこの部分は無視して読まなくてはいけません。また、データ分析の手法てきな紹介もほとんどありません。超一流のスポーツ選手という、特殊なキャラクターに対して、データを元にした説明・指導等をいかに行っていくかということを通して、自分の知見を相手に伝えるノウハウを書き起こした書籍です。

例えば、相手の悪いところを説明する場合は、良いところ、悪いところ、良いところ、のサンドイッチで説明せよ。などのように、データや統計とは関係の薄い部分も多くみられる書籍です。データ分析に興味があって自分の技術を磨きたいと考えているような読者は想定していません。データ分析の実例として一番大きく取り上げられているが、選手のプレイシーンを編集したモチベーションアップビデオというあたりも、仮説検定とか手法の正しさとかいった言葉とは無縁の書籍である印象を強くしています。

この書籍の面白いところは、やはりスポーツ選手の指導がモチーフの中心にある点です。業務としてデータ分析を行っている者として、自分の分析結果や分析方法を、それらの知識が無い相手にアピールしなければいけない場面は多いと思いますが、そういった時にどうすべきかという事であれば、参考になるノウハウが多く紹介されています。偏見かもしれませんが、スポーツ選手に対して統計手法の説明や分析結果の意味をくどくど説明しても試合結果に影響するようには思われません。説明相手としては相当難易度が高い相手と思いますが、そういった相手に分析レポートを提出するような困難に立ち向かう場合にはこの本のノウハウが役立つかもしれません。

感想:「現場ですぐ使える時系列データ分析」(横内大介/青木儀充)

データ分析のための書籍感想[001]


「現場ですぐ使える時系列データ分析」
著者:横内大介/青木儀充
出版:技術評論社

一言で言うと、”時系列分析≒以前の自分との相関は?”


2003年にグレンジャー教授とエングル教授がノーベル経済学賞を受賞して脚光を浴びた時系列分析を非常に分かり易く説明した書籍です。私は学術的な部分はまったく門外漢ですが、この書籍で取り上げられている数式は(おそらく意図的に)比較的簡易なものが中心なので、一般的な統計書の数式を読める方であればこの書籍のみで、時系列分析がどのような発想でデータを扱おうとしているかを把握することができます。もちろん実際は遥かに難しく深い分野と思いますが、少なくともそう思わせるほど説明が良くまとまっています。

前半が理論の説明で、後半はRを用いた適用例になっています。例は株の値動きの比較や銘柄の分類です。著者の一人が証券情報サービスの最大手Quick社の人間なので、読んでいて説得力があります。私が大学で勉強した心理系の統計学は複数群の比較が中心でしたので、この書籍で紹介されている時系列分析は興味があって読みましたが、この分野が初めての読者にも十分な難易度と満足度がある書籍です。付録としてRの説明にある程度ページを割いていますが、このあたりは少し冗長な印象があり、できれば適用例の方が良かったと感じました。

R言語のデータフレーム参照をSQLと対応させてみる

RのデータフレームでSQLを使う方法もあるようなのだけれど、SQLならこうやるんだけど、データフレームでは?みたいな例を載せています。

検索

# 全行表示
# select * from data_frame
data_frame

# 行数取得
# select count(*) from data_frame
nrow(data_frame)

# 列指定
# select refer from data_frame
data_frame[,'refer']

# 先頭のみ表示
# select * from data_frame limit 10
head(data_frame, 10)

# 条件指定(数値)
# select * from data_frame where x=1
data_frame[data_frame$x==1,'refer']

# 条件指定(文字)
# select * from data_frame where y='a'
data_frame[data_frame$y=='a','refer']

# 条件指定(部分一致)
# select * from data_frame where z like '%keyword%'
data_frame[grep('keyword',data_frame$refer),]

# 複数条件指定
# select * from data_frame where x=1 and y='a'
data_frame[data_frame$x==1 & data_frame$y=='a','refer']

# 複数条件指定(条件抽出関数使用時)
# select * from data_frame where z like '%keyword%' and x=1
subset(data_frame[grep("keyword",data_frame$z),], x==1)