純粋数学専攻がデータサイエンティストに転身してからの半年間を振り返る

 こんにちは。データサイエンスチーム tmtkです。
 この記事では、新卒社員として今年NHNテコラスに入社したtmtkが、入社からの約半年間を振り返ります。
 この記事は、NHN テコラス DATAHOTEL:確率統計・機械学習・ビッグデータを語る Advent Calendar 2017 19日目の記事です。

学生時代

 学校では数学を専攻していました。趣味としてときどきゲームを作ったりしてプログラミングをしていました。
 統計や機械学習はほとんど何も知らない状態でした。

3月

 3月は学校の卒業直前の春休みだったため、やることもなく暇でした。そこで、当時内定先であった当社に相談し、インターンとして働かせていただきました。
 インターンでは、ビッグデータと機械学習の入門として、Twitterのツイートを分析しました。技術的には、Python、Apache Spark、MeCab、Naive Bayes Classifierなどを使いました。また、accuracy、precision、recall、F-measureなどの評価基準を学びました。
 プライベートではLinuxと英語を勉強し、LPIC レベル1とTOEIC L&R 920点を取得しました。

4月

 4月には正式に社員として入社しました。同期約10人と一緒に新入社員研修を受けました。研修の内容は、

  • 会社の組織理解
  • インフラ研修
  • 開発研修
  • ビジネスマナー研修

などでした。開発研修ではサンプルとして与えられたWebアプリケーションに機能を追加せよという課題に取り組みました。JavaもMyBatisもよくわからない中でプログラムを解読し、雰囲気で開発を進めていくのが大変でした。技術的には、JavaやMVCパターン、DAOパターンについて学びました。

5月

 新入社員研修が終わり、データサイエンスチームに配属されました。
 Spark MLlibのラッパーを作ろうということで、Spark MLlibのGaussian Mixtureのラッパーを作成しました。
 新入社員として情報セキュリティEXPOの手伝いもしました。
 会社のオフィスの引越しがあり、ゴールデンウィークの休みが2日間増えました。毎週オフィスが引っ越したらいいのにと思いました。
 K Means, Gaussian Mixture, LDAなどについて勉強し、チーム内勉強会で発表したりしていました。
 チーム全体としてPythonからScalaに移行しようという流れになり、Scalaを覚えました。
 チームで開発するためにGitの使い方も覚えました。

6月

 画像処理に関するソフトウェアを開発しました。
 技術的には、OpenCVという画像処理ライブラリを学びました。OpenCVはJavaラッパーがあるためScalaから呼び出せるのですが、そのJavaラッパーが共有ライブラリを呼び出すため、Sparkで分散処理をするのには使えないという欠点にハマりました。
 プライベートでは平井有三『はじめてのパターン認識』などを読み、機械学習に入門していました。 また、会計の勉強に誘われて日商簿記3級を取得しました。
 また、少しずつアルゴリズムとデータ構造を勉強し、本を読みながらC言語でアルゴリズムとデータ構造を実装していきました。

7月

 Scala開発用にデスクトップパソコンを受け取りました。Core i7、メモリ16GB、SSD、Quadro M2000、デュアルディスプレイの開発環境が整いました。Ubuntuをインストールしようと考えましたが、セキュリティの問題もあり見合わせることにしました。
 開発のため、ZooKeeperを学びました。非同期処理やマルチスレッドプログラミングがよくわからず苦労しました。
 Selenium IDEでテストの自動化などをしました。
 チームで開発する上で設計の大切さを痛感しました。

8月

 開発していたアプリケーションで機能テスト・シナリオテストを行いました。自分はテストが苦手で苦戦していた一方で、チームメンバーは涼しい顔でテストを進めていたりして、適正の差を感じました。
 お客様から預かっていたデータの分析を行いました。OpenCVで顔や目を認識したりしていました。
 こつこつ進めていたアルゴリズムとデータ構造の勉強がひと段落して、かわりにOCamlの勉強を始めました。OCamlは関数型言語で、きれいなプログラムがかけ、しかも実行速度が高速で魅力的な言語だと思いました。

 ボーナスが出たのでPS4とアーケードコントローラーとストリートファイター5を買いました。学生時代にはウルトラストリートファイター4をずっとやっていたのですが、念願のストリートファイター5を手に入れたのに、社会人になると時間がぜんぜん取れず、すぐにやらなくなってしまいました。
 入社1年目ということで、査定期間が通常の半分しかなく、ボーナスが規定額の半分しか出なかったことに落ち込みました。あとで周りの人に聞いたらそれが常識だったと知りました。(社会人は厳しい。)

9月

 QwiklabsとA Cloud GuruでAWSを勉強してました。
 会社のGPUつきサーバにCUDAやTensorflowを入れてディープラーニングをはじめました。
 先輩が退職するので彼が抱えていたデータ分析案件を一件引き継ぎました。お客様との連絡が増えてきたため、プライベートでビジネスメールの本とプレゼンの本を3冊ずつ読み、勉強しました。
 OCamlの勉強がひと段落したので、かわりにAtCoder Beginner Contestを073から1日1コンテスト解き始めました。

10月

 データ分析の結果をお客様にインタラクティブに見せるために、Flaskでウェブアプリケーションを作成しました。
 お客様のデータ分析を自動化するために、AWS上に自動分析システムを構築しました。システム構築にあたって、Docker、Amazon Batchなどを身に着けました。
 開発を進行させるために開発方法を勉強しようと、開発プロセスについて勉強しました。
 広報のためにテックブログを書こうというチーム全体へのお達しがあったので、テックブログを書き始めました。
 Spectral Clusteringというアルゴリズムについて調べ、テックブログに書き、チーム内勉強会で説明しました。Spectral Graph Theoryというのでグラフの連結成分分解を固有値問題に還元できることを知り、面白いと思いました。

11月

 本Advent Calendarの記事を執筆していました。
 また、R言語の社内勉強会に参加して、R言語の使い方を勉強していました。
 トピックモデリングやディリクレ分布について勉強しました。
 プライベートでは統計学を勉強し、統計検定2級に成績優秀者 評価S合格をしました。

まとめ

 この約半年間で学んだことを改めて列挙すると、以下のようになります。

計算機科学

  • アルゴリズムとデータ構造

プログラミング言語

  • Python
  • Scala
  • Java
  • OCaml

開発ツール

  • Git
  • Docker
  • Selenium IDE
  • AWS

機械学習

  • accuracy, precision, recall, F-measure
  • Naive Bayes Classifier
  • Spectral Clustering
  • K Means
  • Gaussian Mixture Model
  • Topic Modeling

ソフトウェア・フレームワーク

  • ZooKeeper
  • Apache Spark
  • Keras
  • MeCab
  • OpenCV
  • Flask

ビジネス

  • ビジネスメール
  • プレゼン資料のデザイン
  • 会計の基礎

 やることなすことすべてが初めての連続だったので、たくさんのことを身につけることができました。来年もさらに躍進したいです。

あなたにおすすめの記事