ビジネスと技術の狭間で

データを活用して生きていく

pythonについて

業務で使う必要があったのでpython始めました。

ソースの可読性が高いなと早速感じていて

一人で勉強するのに向いているなと思います。勉強します。

 

CentOSに入れようとしたら依存関係の解決が色々面倒だったので断念して、

Windowsに入れました。

 

本体は本家(http://www.python.org/)から、

パッケージは先輩から教えてもらったところ(http://www.lfd.uci.edu/~gohlke/pythonlibs/)から落として入れました。

バイナリで入れられるので非常に楽でした。裏技みたいな感じ。

たまにここに上がっているバージョンじゃダメだったりするので適宜その場合はアンインストールして入れなおす感じの様です。

 

機械学習の諸々が充実しているのでモデリングの方はpythonに以降するかもです。

近況について

7月末からお盆辺りにかけて担当していた案件が忙しくブログの更新をサボっていました。何となく罪悪感があります。すみません。

 

最近は仕事が落ち着いたので、為替のデータに対して機械学習を行って儲けられないかとか色々やってました。そのうち結果が出たらブログにまとめようと考えています。

なかなか予測精度が上がらないので「どうして予測できないのかについて」語る可能性が高いですが。

 

昨日は恒例のTokyo.Rに参加してきました。

細かい感想や意見などは割愛しますが、アカデミア、ビジネスの各方面で活躍されている方々の話は面白かったです。

彼らの話についていくためには休んでいる暇はないなと感じました。努力を続けます。

 

とりあえず、生きていますということで。

MeCabの辞書編集について

MeCabは以前にも紹介しました形態素解析エンジンです。MeCabを使うと文章を単語に切り分けることができます。

デフォルトの辞書でもそこそこ上手く行くのですが、

固有名詞やあまり一般的でない語句などは変な場所で切ってしまったり、単語と単語を切り離しすぎてしまう場合があります。

例えば、「データサイエンティスト」で抽出したいのに

データ  名詞,一般,*,*,*,*,データ,データ,データ
サイエンティスト        名詞,一般,*,*,*,*,サイエンティスト,サイエンティスト,サイエンティスト

の様に分かれて出てしまうなど。

 

そこで、辞書の編集が必要になります。

システム辞書とユーザー辞書があるのですが

今回はユーザー辞書の編集について説明します。

ウェブ上に同じことを説明している資料はたくさんあったのですが、

バージョンの違いなどからそのままでは上手くいかなかったので再編という感じです。

因みに私が使っているMeCabはWindows版、バージョンは0,996で

インストール先はC:\Program Filesです。

 

以下手順を書いていきます。

[1]ユーザー辞書を作成します。

デフォルトの設定ではMeCabの辞書は以下のディレクトリに置かれています。

C:\Program Files\MeCab\dic\ipadic

ここにuser.csvというファイルを作成します。

このファイルに下のフォーマットに従って単語を書きます。

「表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音」

例えばこんな感じです。

データサイエンティスト,-1,-1,1000,名詞,一般,*,*,*,*,データサイエンティスト,データサイエンティスト,データサイエンティスト

 

表層形:文章の中に出てくる形です。

文脈ID、コスト:説明すると長くなるので割愛しますが

 とりあえず-1,-1,1000で書いておいて問題ないです。

品詞:下のリンク先の一番下の部分を参考に入力してください。

 http://mecab.googlecode.com/svn/trunk/mecab/doc/posid.html

活用:名詞などの場合は入力する必要はありませんが、

 動詞など活用がある場合はデフォルトのVerb.csvを参考に

 活用の情報も入力してください。

 

[2]コンパイルします。

辞書があるフォルダへ移動して

>cd C:\Program Files\MeCab\dic\ipadicコンパイルします。

>mecab-dict-index -f SHIFT-JIS -t SHIFT-JIS  -u user.dic user.csv

-f:コンパイル前のファイルの文字コード

-t:コンパイル後のユーザー辞書の文字コード

-u:コンパイル後のユーザー辞書のファイル名

 

done!が表示されれば成功です。

念のため編集した単語が上手く切れる様になっているか確認します。

>mecab -u user.dic
データサイエンティスト
データサイエンティスト  名詞,一般,*,*,*,*,データサイエンティスト,データサイエンティスト,データサイエンティスト

-u:使うユーザー辞書の指定

 

今度は「データサイエンティスト」で抽出できていますね。

 

[3]毎回ユーザー辞書を指定するのが面倒であれば、デフォルトで使う様に登録をします。

同じディレクトリにあるdicrcというファイルに

userdic=C:\Program Files\MeCab\dic\ipadic\user.dic

と、一行書き足します。

 

以上で辞書の編集は終了です。

 

 

(参考)MeCab/CabChaによる 言語解析演習

http://chasen.naist.jp/chaki/t/2008-09-09/doc/mecab-cabocha-nlp-seminar-enshu-2008.ppt

ビッグデータについて

ビッグデータについて何を今更言うんだって感じですが

自分の考えをまとめるために書いておきます。

 

ビッグデータとは3Vと言われるVolume(大量)Variety(多種)Velocity(高頻度)の3つのうち1つ以上の概念を持つデータです。

上記の3つにVeracity(正確さ)を足して4Vと言う場合もあるそうですが、

個人的に意味が分からないです。レイヤーが違いますよね?って感じです。

 

要するにビッグデータとは「ちょっと前までは扱うのが絶望的に難しかったデータ」というものなのです。

それが、テクノロジーの進歩によって比較的容易に集計したり分析したりすることが可能になりました。そして、大手ITベンダー様の営業の甲斐もあり、国内でも意識の高い企業がビッグデータ分析に取り組み始めたというのが現状なのではないでしょうか。

 

個人的に、「ビッグデータ」が盛り上がることによって、データドリブンな考え方が啓蒙されるのであればそれは嬉しいことだと思っています。しかし、その一方で危惧していることもあります。

まだデータドリブンな考えが根付いていない企業が「ビッグデータを溜める箱」や「ビッグデータを分析できるソフト」を導入しても、その費用に対する効果を上げられないのではないかということです。

「高いお金を出したけれど、ビッグデータって思ってたより使えないし、データ分析とか意味ないね」なんてことになっても誰も幸せになりません。だから、ビッグデータを扱う環境を構築しようとしている企業はまず「データを何に使うのか?どう使うのか?」を社内で議論していただくのが良いのではないかと思っています。

ここで言うデータとは「ビッグデータ」に限りません。ビッグデータを分析しないと分からないこともありますが、スモールデータでもデータを利用する目的を達成できることは少なくないので。

 

以上などなどにより、市場で流行って欲しい言葉は「ビッグデータ」よりも「データドリブン」とか「データサイエンス」だよなぁと感じています。

データマイニングの方法について

最近知ったデータマイニングフレームワークについて説明します。

「データサイエンティストって何やってるの??」って方には、彼らの仕事の理解の助けになるかもしれませんが、データマイニングの経験がある方にとってはごく当たり前のことなのでつまらないと思います。その点ご了承ください。

 

で、早速ですが、有名なフレームワークは3つあります。

1.The KDD process

2.SEMMA

3.CRISP-DM

 

正確にはそれぞれ違うのですが、根本的にはほぼ同じなので

今回は個人的に一番しっくりくるCRISP-DMについて詳しく説明します。

 

CRISP-DMとはCRoss Industry Standard Process for Data Miningの略で、

以下の6つのステップから成ります。

 

[1]ビジネス理解

[2]データ理解

[3]データ準備

[4]モデリング

[5]評価

[6]展開

 

では、詳細について私の浅い経験と解釈を踏まえて書いていきます。

[1]ビジネス理解:

まず、データマイニングの目的(落としどころ)を決めます。

顧客(社内でも同様)がどのようなビジネスを行っていて

何を求めているのかをヒアリングを通じて把握します。

「データがあるから何とかして!」という無茶振りなケースも少なくないですが、「データから○○が分かる(できる)ようになったら嬉しいですか?」という風に探っていってニーズを引き出します。

 

[2]データ理解:

その次は、顧客からデータを頂いて中身を見てみます。

データの信頼性(欠損や異常値がどのくらいあるか)をチェックしたり、

簡単な集計や可視化などをPerlやR、Excelなどを使って行います。

「説明を見ると、Aのファイルのこの項目とBのこの項目は同じものを差してるはずだけれど、どうして一致しないの?」なんて苦悩したりします。

 

[3]データ準備:

そして、詳細な分析、モデリングを行うための準備です。

外れ値や欠損値を除去したり適正だと思われる値で埋める作業や、値を対数や指数変換したり標準化する作業、複数のファイルを統合したり変数を抽出する作業などを行います。

 

[4]モデリング:

漸く一番データマイニングらしいモデリングです。

RやKNIMEを使って様々なモデルを適用したり色々な分析手法を試します。

モデルのパラメータを変えたり、変数をいじったりして

実際のデータをより適切に表現できるように試行錯誤を重ねます。

 

[5]評価:

モデリングの結果を評価します。

モデルそのものの精度も重要ですが、他に検証すべき点はないか、この結果で顧客に喜んでもらえるかどうかについて検討します。

 

[6]展開:

最後に、顧客に報告してビジネスに適用してもらいます。

行ったモデリング、分析の結果をレポートを作成して報告します。

その後、その結果を実際に顧客のビジネスに落とし込む方法について

顧客と共に検討し、適用いただくという感じです。

 

すでに気付いておられる方もいると思いますが、これらのプロセスは順番に一通りやれば終わるというものではありません。[3]データ準備と[4]モデリングは何度も繰り返しますし、[5]評価を1回でクリアできないことも多々あります。真に求めるものを手に入れるために、以上のプロセスを何度も何度も繰り返します。

巷で言われている様に、求められているアウトプットを最終的に出せるデータサイエンティストはとてもセクシーですが、実際に行っている作業は意外と泥臭いのです。

 

(参考)

Visual Guides to CRISP-DM ,KDD and SEMMA

 http://recipp.ipp.pt/bitstream/10400.22/136/1/KDD-CRISP-SEMMA.pdf

KDD, SEMMA AND CRISP-DM: A PARALLEL OVERVIEW

 http://recipp.ipp.pt/bitstream/10400.22/136/1/KDD-CRISP-SEMMA.pdf

勉強会について

初学者の方々は、「勉強会ってなんだか敷居高そうだし、参加しなくても資料が公開されていたりするので勉強会に参加する意味ってあるのか?」と思ってる人も多いのではないかと思います。

私も初めはそうでしたが、意外と参加してみると自分のレベルでも分かる話だったり、分からなかったら質問すれば親切に色々教えてもらえたりすることが分かって、とても面白いなと思えるようになりました。

それに、社外のデータサイエンティストの方々と交流するのは刺激的で

自分のモチベーション維持に役立っているなと思います。

だから社学者の方も臆せず勉強会に参加しよう!ってな感じで

今日は東京で開催されている勉強会を私が知っている範囲で紹介します。

 

■R勉強会@東京 Tokyo.R

私も何度か参加させてもらっています。

最近は100人規模の人数で開催しており、

比較的敷居も低い様に感じます。

RのパッケージやTipsなどの紹介、

実際に利用されている方の事例紹介など

R使いにはなかなか面白い内容です。

過去の勉強会資料は東京地区以外でも開催されているR勉強会の資料と

共にまとめられているので勉強にもなります。

http://lab.sakaue.info/wiki.cgi/JapanR2010?page=%CA%D9%B6%AF%B2%F1%C8%AF%C9%BD%C6%E2%CD%C6%B0%EC%CD%F7#p15

 

データマイニング+WEB@東京

こちらは毎回少人数開催のためチケットを確保するのが

なかなか難しい勉強会です。

少人数開催でディスカッションの時間をしっかり取っているため

深くて濃厚な議論が繰り広げられます。

興味のある分野のテーマがある際はぜひ参加しましょう。

各回の勉強会のまとめは主催者の濱田 晃一さんのブログにて公開されています。

http://d.hatena.ne.jp/hamadakoichi/

 

以下はまだ参加したことがないので詳しいことは知りませんが、

きっと有益なんだろうなと感じています。

■おしゃれStatistics

■Jubatus Casual Talks

■「はじめてのパターン認識」 読書会

■Tokyo.SciPy

■Deep Learning 輪読会

Twitter研究会

■JMRX勉強会

■Zansa

 

こちらはおそらくもう終了しているものですね。

ググると色々資料が転がっているので勉強用に。

PRML復習レーン

集合知プログラミング勉強会

■さくさくテキストマイニング

 

最後羅列しただけで手抜きですが、今日はこんなところで。

分析環境やツールについて

私が普段の分析で使っている環境やツールについて簡単に説明します。

 

■マシンについて

OS:Windows7 32bit

メモリ:4GB

マシンは一般的なものです。

工夫すればこの程度のマシンでもできることは少なくありません。

 

■ソフトについて

・ActivePerl

Perlスクリプト言語の1つです。

分析対象となるデータから必要なものを抽出して整形するために利用します。

歴が浅いため、新しいことを行う際は色々調べたりするのに時間がかかってしまいます。

 

MeCab

日本語の形態素解析を行うためのソフトです。

テキストを投げると単語に分割して返してくれます。

例えば、このブログのタイトルを投げると

SE    名詞,固有名詞,組織,*,*,*,*
採用    名詞,サ変接続,*,*,*,*,採用,サイヨウ,サイヨー
の    助詞,連体化,*,*,*,*,の,ノ,ノ
新入    名詞,一般,*,*,*,*,新入,シンニュウ,シンニュー
社員    名詞,一般,*,*,*,*,社員,シャイン,シャイン
が    助詞,格助詞,一般,*,*,*,が,ガ,ガ
データ    名詞,一般,*,*,*,*,データ,データ,データ
サイエンティスト    名詞,一般,*,*,*,*,サイエンティスト,サイエンティスト,サイエンティスト
に    助詞,格助詞,一般,*,*,*,に,ニ,ニ
なる    動詞,自立,*,*,五段・ラ行,基本形,なる,ナル,ナル
まで    助詞,副助詞,*,*,*,*,まで,マデ,マデ
EOS
と返ってきます。

デフォルトの設定だとデータとサイエンティストが切れてしまいますが、辞書に手を加えれば切れないようにすることも可能です。

 

・R

今最も流行っている?統計解析ソフトです。

Rはオープンソースなので、様々な分析手法や可視化をサポートするパッケージが世界中で開発されており非常に便利です。

また、勉強会も頻繁に開催されており、その資料が公開されているため

後学にとって勉強しやすい環境が整っています。ありがたいです。

http://lab.sakaue.info/wiki.cgi/JapanR2010?page=%CA%D9%B6%AF%B2%F1%C8%AF%C9%BD%C6%E2%CD%C6%B0%EC%CD%F7

 

・KNIME

こちらもRと同様に統計解析を行うためのソフトです。

ノードをGUIで繋げていくことで解析のフローを実現するので

コマンドを打って解析を行うのに不慣れな方や定期的に定型の解析を行う方にとっては便利かもしれません。

機械学習について全く知らなかった私は

デフォルトで用意されている機械学習系のノードを全て分析対象となるデータに対して適用してみるなんてことをしました。

設定しなければならないパラメータと各アルゴリズムについて調べ、実行してみて精度や実行時間を調べるという感じです。

 

・Excel

皆様お馴染み表計算ソフト。

レポートを作成するためのグラフを書く際に利用します。

 長年使っていますがまだまだ極められそうな気がしています。

 

■番外編

私はなぜだかPerlに足を突っ込んでしまいましたが

新しく始める方はPythonを習得された方が良いかもしれません。

Pythonには機械学習のライブラリscikit-learnなどがあり、

前処理から後の高度な解析までシームレスに行えるそうです。

私もPerlからの乗り換えを検討しながら今後勉強していきたいです。

 

(参考)python機械学習ライブラリscikit-learnの紹介

http://sucrose.hatenablog.com/entry/2013/05/25/133021