チョコレート中毒

日々の備忘録とお勉強の記録など

データサイエンティストはじめてそろそろ1年が経つ

メリークリスマスイブ!

実はブログも勉強会への参加もしばらく滞っているほちょやです。これを気に勉強会にも復帰するぞ!(来年から本気出す)という気持ちで書いてます。

 

言い訳になりますが、今年は年明けから業務内容が変わったり、社内教育のETロボコンに参加した(させられた)り、急遽アメリカ出張行ったりとバタバタの1年でした。もろもろの話はまたの機会にして、今日は最近の私の仕事について話したいと思います。

 

最近のお仕事

もう5年以上前から、ビッグデータ利活用だの何だの言われてますが、昨今はIoTだの機械学習だのAIだので、あらゆる業界でデータ自体の価値や活用方法が見直されてますね。今の私の業務の半分は、いわゆるデータサイエンティストみたいなことをしていて、実際のデータを解析しながら、お客様にデータの活用方法などを提案したりしてます。

 

データサイエンティストって?

出先のためスマホでコチコチ打ってるのでソースは後で載せます(たぶん)が、何かの協会では、データサイエンティストには以下の3つのスキルが必須と言われているそうです。

  1. 論理的思考能力
  2. 統計知識
  3. プログラミング

2. は、データを扱う上で必須と言われて納得ですね。3. についてもまぁわかります。分析手法のアルゴリズムを自分で実装できる能力が求められてるってことでしょう。では、1. の論理的思考能力とは?これって何につけても必要とか言われるやつじゃねーの?

 

データサイエンティストの腕の見せ所 その1

その答えは、1年くらいデータ解析してみて感覚的にわかってきました。統計の世界には、先人たちの確立された手法が、数学者たちによって証明されたあらゆる理論はありますが、「どのデータにどの手法を当てはめたら、知りたい答えが出てくるのか」というのが非常にわかりにくい。体系的にまとめてる書籍もありますが、結局は「データ次第」だったりします。

データ次第というのは、データの性質(量的データor質的データ、取得周期ナド)という側面もあれば、実データの綺麗さ(欠損/異常値を含むか、ばらつき具合ナド)という側面もあります。一見良さそうなデータでも、分析かけてみたらあんまり良い結果が出ないこともしばしば…。なので、実データ眺めつつある程度当たりをつけたら、あとは「えいや!」でとりあえず分析→結果見てみる→イマイチならやり直し…みたいなトライ&エラーな世界です。

 

このトライ&エラーをいかに少なくできるか、というのが、データサイエンティストの腕の見せ所なんじゃないかなと思ってます。そのためには、データとそこから得られる基本統計量(平均、分散、ヒストグラムなど)、あとはデータの素性や業務特性などのあらゆる情報を駆使して、論理的に分析を進める必要があるなと感じてます。

 

データサイエンティストの腕の見せ所 その2

もう1つ、データ解析してて困ったのは、分析結果の解釈方法です。結果の見方はWebや書籍などであっても、それをどう解釈、つまりお客様に納得してもらえるよう説明するかって、すごくすごーーーく難しいです。

その理由の1つは、分析結果の精度等を表す指標には、絶対的な基準がないからだと思ってます。例えば、相関分析で相関係数が0.7だった場合、相関が高いか低いかは、それだけでは判断できません。他と比べてどうとか、やや相関があるとか、曖昧な表現になりがちです。

結果の解釈についても、同じようにデータの素性や業務特性を考慮したり、分析目的に沿った形で結論付けないと、統計に詳しい人・詳しくない人のどちらにも納得してもらえないと感じてます。

 

こういった、分析対象のデータだけではない様々な情報を俯瞰し、冷静に判断する能力が、データサイエンティストに必須の論理的思考能力だと私は思います。

 

まとめ

データサイエンティストは1日にしてならず、1年にしてまだまだこれからです。正確に言うとデータサイエンティストというよりデータエンジニアに近いのですが、その話はまた今度。日々精進します。

 

次はもう少し解析の方法について書きたいですね。あと、読み手を意識して文章書くのは疲れました。

 

みなさんよいクリスマス&年末を〜!

Enkiを使うと毎朝5分英語とJSが勉強できて一石二鳥

去年の冬くらいから、モバイル学習サービスのEnkiを利用している。

 

Enkiは1日5分でプログラミング言語などのソフトウェア技術を学べるサービスで、スマートフォンアプリから利用することができる。ソフトウェア技術にはJava, JS, rubyなどの言語もあれば、Linux, CSS, Gitなどなど多岐にわたる。さっきみたら、python, ruby, ios, dockerなどが今後追加予定とあったのでリクエスト投げてみた。

使い方は簡単で、あらかじめ関心のあるトピックとスキルレベルを登録しておくだけで、workoutを5つ/日提供してくれる。1日に選択できるトピックは1つだが、トピック内容に応じたミニゲームは制限なくいつでも遊べる。なぜか私のミニゲームはJSばかりだ。

使い方は簡単だが、本文はすべて英語なので慣れないと1日5分以上かかる。

Enkiについては下記記事を参照。

jp.techcrunch.com

 

当時のEnkiはベータ版で(今もか?)、メールアドレスを登録して招待コードを受ける必要があった。さっそく登録するとすぐに返信があり、テストユーザの登録する必要があるとか。う、ちょっと面倒くさいけど、慣れない英語に戸惑いながらも登録(これが本当に面倒くさい!自由記述式のアンケートは雰囲気で答えた)。ちなみに私は、2015/12/15の時点で10,979人目のテストユーザだったようだ。

勢いでえいっと登録したものの、一向に招待コードが送られてくる気配なし。

なぜだ。やはり自由記述の英語が支離滅裂だったからか。

と、諦めかけていたら年明けにEnkiから招待コードが送られてきた。Enkiはロンドン生まれなので、きっとクリスマス休暇でも取っていたのだろう。

 

Enkiの素晴らしいところは、日々バージョンアップしていくところだ。はじめの頃はworkoutの途中でアプリを中断するとアプリ再起動しないと操作できなくなったり、本文中のソースコードの右端が切れて読めなかったりしていたが、今は大分改善された。iPhoneアプリのアップデートは特にしていないので、Enki自体はJSで書かれててアプリは単なるブラウザみたいなものなのかなと勝手に思っている。Cordovaとか使ってるのかな?

 

毎日欠かさず、、、とはいかないものの、3日坊主にはならずに細々続けているのでおすすめ。

JavaScriptを勉強しはじめる

仕事ではJavaを使ったソフトウェア開発とかしてたけど、

前々から気になっていたJavaScriptについて0から勉強しようと思った。

 

以下、とあるサイトのコメントから引用してきた道のり。

Lv1
まずビルドインのオブジェクトに何があるか理解する。
JavaScriptの奇妙なスコープを理解する。
JavaScriptの暗黙の型変換を理解する。

Lv2
JavaScriptにおけるオブジェクトとは何かを理解する(関数含めてすべてオブジェクト)
JavaScriptコンストラクタを知る(コンストラクタをfunctionで作る)。
thisの特殊なふるまいを理解する。
JavaScriptのprototypeを理解する(自分はここで苦労しました)
JavaScriptメソッドチェーンの作り方とは?と疑問を持つ。
JavaScript特有のシンタックスシュガーや特殊な機能(?)を知る。
callメソッド、applyメソッド、bindメソッドを使える。
DOM、StyleSheetなどをJavaScriptで操作できる。
ブラウザ間の実装に差異があることを理解する。(特にIE。凄くIEを気にする)

Lv3
prototype、コンストラクタ(JavaScriptでは関数)を用いた継承を完全に理解する。
DOMやCSSの操作を行うコードに関して適切なリファクトができる。
(もしくはそれに特化したライブラリなどを使用できる)
ブラウザ間の互換性を持たせることができる。
(もしくはそれを補完するライブラリのコードを理解できる)
OOP的設計(プロトタイプベース)を完全に理解し作成できる。
MAX
デファクトスタンダードと呼ばれるレベルのライブラリを自作する

引用元:JavaScript - JSの王道かつ効率的な勉強順番を教えてください(7825)|teratail

 

まずはビルドインのオブジェクトに何があるか理解するところかららしい。

道のりはながい。