Fire Engineering

化学の研究者→消防士→ITエンジニア(2016年11月〜)

データサイエンスを始めました!

 この度、データサイエンスの勉強を本気で始めようと決意しました!今回は、なぜやるか、なにをやるかなどをつらつらと書いていきます。

 勉強を始めて改めて実感しましたが、IT関連の分野ってほんとに広大ですね。そんな中で、それなりの結果を出そうとしたら、ある程度本気で取り組むものを絞った方がいいはずだ、とわかってはいるのですが、私は勉強に関してはやりたいことが溢れて止まらなくなります。すでにいろんなものに手を出してしまい収拾がつかなくなってきました。

 そこで、これからの方針としてWebアプリケーション開発(主にRubyRails)とデータサイエンスの二本柱でいくと決意しました!

目次

データサイエンスとデータサイエンティスト

 そもそも、データサイエンスとは何か。以下、Wikipediaからの引用です。

 データサイエンス(data science)とは、データに関する研究を行う学問である。 使用される手法は多岐にわたり、分野として数学、統計学、計算機科学、情報工学パターン認識機械学習データマイニング、データベース、可視化などと関係する。

 データサイエンスの研究者や実践者はデータサイエンティストと呼ばれる。データサイエンスの応用としては、生物学、医学、工学、社会学、人文科学などが挙げられる。

 うーん、難しそうですね。次に、データサイエンティストについて調べてみました。しかし、データサイエンスティストはその業界内でも定義が曖昧で、統一的な見解がないみたいです。参考までに一般社団法人データサイエンティスト協会というところのデータサイエンティストに対する解釈を下記に示します。

 データサイエンティストとは、データサイエンス力、データエンジニアリング力を ベースにデータから価値を創出し、ビジネス課題に答えを出すプロフェッショナル

また、この協会はデータサイエンティストのミッションについても明記しています。

   現在、情報技術革命が進む中にあって、センサの数が激増し、人類の計算キャパシテ ィは幾何級数的に拡大しております。また、ブロードバンド化に伴い、ネットワークの 接続スピードは劇的に高まり、情報トラフィックも激増しております。携帯電話、WiFi などのワイヤレスネットワークが広がることに伴い、これまで拾い上げられることが できなかった粒度の情報もリアルタイムで拾い上げることが可能となりました。 このような時代に求められるのは、人間を数字入力や情報処理の作業から開放する プロフェッショナル人材であり、「データの持つ力を解き放つ」ことが新しい時代に おけるデータプロフェッショナル、すなわち「データサイエンティスト」のミッション だと考えます。

 なんかめっちゃくちゃかっこいいですね。ただ、ここでわかったことは、データサイエンティストには、とにかく幅広い知識が必要だということ。また、データサイエンティストは、さまざまな手法を駆使してデータを分析することで世の中に存在する問題を解決する知見を導き出すプロフェッショナルだということです。プログラミング初心者の私がいきなりここを目指すのはおこがましいですが、膨大な知識が必要なら志すのも早い方がいいかなってことで、このデータサイエンス分野の勉強に本気で取り組んでいこうと思います。

 

なぜやるか

あらゆる業種・分野でデータ分析へのニーズが高まってきている。

 本格的なビックデータ時代を迎えた今日、データ分析はこれまでとは異なる局面を迎えています。例えば、Amazon楽天といったEC業界では、業務やサービスの中で自社で蓄積した顧客に関するあらゆるデータを分析することで、顧客の「行動パターン」を見つけていき、「いつ」「誰に」「何を」「どうやって」提案すれば最大の効果を生み出せるか、その組み合わせを改善し続けています。このようにデータをいかに上手く活用し、ビジネスにフィードバックするかが、未来の成功には必要不可欠となってきているようです。

 また、データ分析を活用したいと考えているのはIT業界だけではありません。私はもともと大学・大学院で実験化学を専門に研究してきたのですが、学術分野では膨大なデータの分析が求められます。私自身も研究時代は多くの実験データを取り扱っていました。しかしながら、私を含め、化学の世界にデータサイエンスに精通した人材は見たことがありません。データサイエンスを取り込むことで、実験データからこれまでは到底知りえなかった新たなルールやパターンを抽出できたり、解析が短時間で行えるようになりロジカルシンキングの方に多くの時間が割けるようになったり、そんなことができたらとても幸せなことだなーと思います。ただし、実際に化学者が自分の専門の勉強や研究だけでも手一杯な中で、膨大な知識が必要なデータサイエンスをやることはあまり現実的ではないように思えます。なので、一度化学をリタイアした私がやります。もしデータサイエンスに精通した人間になれれば、必ずどんな分野にでも大きな利益をもたらすことができると思います。

わりと向いてそうな気がする。

 化学で修士号を取得し、博士課程に進学した私は、そこそこ数字に強いです。また、化学、ひいては科学でデータサイエンスがどういかせるかといったニーズは実経験で何となくわかります。そのような理由から、勘違いかもしれませんが、私はデータサイエンスに向いてそうな気がします。そもそも、大量の数字の羅列を見たり、複雑なグラフを見たりすると何となくワクワクするので、それだけでも適正があるのかもしれません。

 

なにをやるか

 さて、それでは具体的に何をやるかです。少し前だと「マイクロソフトAccessExcelでデータ分析を」なんてことがやられてたみたいですが、それでは膨大かつ複雑なデータは扱えない。ということでPythonを使ってみようと思います。データサイエンスでよく用いられる言語としては、pythonの他にRっていうものがあり、統計解析向けのプログラミング言語として有名なようです。実際に「データ分析 R python」などと調べたら、両者を比較しているサイトが数多く見られます。それらを読んだところ、総じて「現時点ではRの方が機能が充実しているが、これからはpythonが熱い!」的な内容が多かったように思えます。

  readwrite.jp

   正直、どちらの言語が優れているかや、将来性があるかなどは私なんぞにはわかりませんが、pythonの方がとっつきやすそうだなっていう単純な理由でpythonにしました。実際にpythonを始めてみて、いろいろ調べてみるとNumPy, pandas, matplotlib, IPython, SciPyといったデータ分析に有効なライブラリが充実しているみたいなので、そのあたりを一つ一つ触っていきたいと思っています。

実際に少し触ってみた

 実際にPythonを少し触ってみました。まず、Jupyter(旧iPython Notebook)というPythonインタラクティブ実行環境をブラウザ上で実行するためのツールをインストールしました。

  jupyter.org

   Jupyterをインストールしたらterminalで「ipython notebook」とコマンドを打つだけで、ブラウザが立ち上がりJupyterが起動します。

  f:id:hirotsuru314:20160507210532p:plain

  実際に簡単な計算やprintメソッドを使ってみると、こんな感じです。

  f:id:hirotsuru314:20160507215907p:plain

これがインタラクティブ(対話的)ってやつですね。ただ、これだけではRubyirbと何ら変りない。そこでPython特有のライブラリを使ってみます。NumPyというライブラリをインポートして、2行4列の配列を作り、掛け算をしてみました。

  f:id:hirotsuru314:20160507215826p:plain

 非常に簡単ですね。さらにPythonにはSciPyという科学技術計算のためのライブラリもあるようなので使ってみます。

 

SciPyでポアソン分布を描いてみる

 ポアソン分布とは確率分布の一つです。以下Wikipediaから

 所与の時間間隔で発生する離散的な事象を数える特定の確率変数 X を持つ離散確率分布のこと。

 式で表すと、

f:id:hirotsuru314:20160507210612p:plain

となり、これは「ある期間に平均してλ回起こる現象が、ある期間にちょうどk回起きる確率の分布」です。

 なんか難しそうですね。もっとざっくり言うと、「ある時間の間に、あるイベントが起きる回数」についてのグラフです。ただし、いくつか条件があります。例えば、イベントがあまり頻繁に起こらないこと、それぞれのイベントは独立していることなどです。(ちなみに化学では、ポアソン分布は高分子の分子量分布のところで登場します。)

 ここで一つ簡単な例を示します。「ある定食屋さんはこれまでの経験から昼のピーク時に1時間で平均15名のお客さんが来ることがでわかっている」この条件のときのポアソン分布を描いてみたいと思います。

 最初は上に書いた式をもとにグラフを書こうとしましたが、scipy.statsの中にpoissonというそのままのモジュールが用意されていました。したがって、非常に簡単にグラフの描写ができます。

f:id:hirotsuru314:20160507215028p:plain

 簡単にポアソン分布が描けました!

 これによって、例えば、ピーク時にお客さんが10名だけ来る場合の確率を求めるといったことができます。(あくまで理論値ですが、)

終わりに

 今回はデータサイエンスを本気で勉強するという私の決意表明です。(自分へのプレッシャーです。)実際に、Pythonを触ってみましたが、いろんなことができそうで、ワクワクしています。

 次回から私がデータサイエンスで学んだことをどんどん発信していきますので、興味がある方は見てください!