nyaaaaaam’s

データサイエンスの技術のこと,仕事のこと,育児のこととかを書いていきます

普段の時間の使い方と研究の記録

f:id:nyaaaaaam:20180914230525p:plain

僕は普段会社員として働くかたわら,2年前からとある大学の博士課程に入学して,博士学生として研究もやっています.そのような二足のわらじを履いてはや二年,いろいろ試行錯誤しつつたどり着いた時間の使い方などについて書きたいと思います.

一日の流れ

だいたいこんな感じで仕事と研究を両立させています.

  • 7:00 起床(たまに早く起きてジョギングなど運動)
  • 8:00 出社
  • 18:00 帰宅
  • 21:00 食事や入浴を済ませ研究開始
  • 23:30 研究終了
  • 24:00 一日のまとめなどして就寝

割とホワイトな会社かつ「遅くまで会社にいないやつ」と周囲に印象づけることに気をつけて会社員生活を歩んできたので,結構早く帰宅しています.また,専攻は多変量解析法の理論的研究(主成分分析や因子分析などの多変量解析法をいろいろ魔改造する研究)なので,基本的に自宅で研究できます.先生とはたまに連絡を取りつつ,主に論文を書いたりしています.

今はこんな感じの時間の使い方で落ち着いているのですが,こういうパターンを発見するまでにいろいろと紆余曲折がありました.その中で学んだことを以下にまとめます.

遅くまで研究しすぎない

院生になりたての頃は「研究頑張るぞ」と息巻いて,深夜2時や3時まで研究をがんばる夜も多くありました.しかし今年で30代に入った事もあってか,遅くまで研究すると次の日の仕事にかなり響きます.何日か繰り返すと慣れるかなと思ったのですが,全く慣れず,それどころか次の日の夜は早く寝たい気持ちになってしまうので,結局研究に避ける時間が少なくなる事に気づきました.そんなこともあって,最近は(よほど何かの締切に追われていない限りは)24時までには研究を終えて床につくようにしています.「細く長く」続けていくスタイルが僕にはあっているようです.

子供が生まれると研究に割ける時間が増える

子供が生まれる前は,夕食後妻とダラダラしていたので,結局研究を開始できるのは妻が眠って以降の22時頃からでした.しかし子供が生まれて以降,妻と子供が遅くとも21時頃には,規則正しく就寝するようになったので,その分長く研究時間が取れています.周囲には「子供が生まれると自分の時間がなくなるよね」と言われていましたが,実際生まれるとそんなことはないなぁと思いました.もちろん,夜泣きがひどいときにはあやすのを手伝ったりもします.

ちゃんと研究してると仕事にもいい影響が出る

夜やっている研究と昼の仕事とが比較的近いせいもあり,夜しっかり研究していると,その時の気づきを仕事に応用したり,反対に仕事の気づきを研究に応用したりと,二足のわらじならではのメリットも大きいなと思います.頭も切り替わっていい感じです.

記録を取ることは大事

研究生活を始めた当初から,画像みたいな感じで研究ノートをEvernoteにつけています.ほぼ日記みたいな感じです. f:id:nyaaaaaam:20180914231047p:plain 毎日やったことや,やり残したこと,感想などを書き付けておくと,達成感もあるし,タスク管理も簡単にできるので,重宝しています.1年前の研究ノートとか見ると,結構懐かしい気持ちになります.WunderlistとかAsanaとか,タスク管理やプロジェクト管理のアプリを使ってみたこともあったけど,結局めんどくさくてあんまり使わず,Evernoteに落ち着いています.


また思いついたら書きます(ブルーライトカットメガネを会社に忘れてきて,目がしょぼしょぼして疲れる...).

【GCP+Bitbucket】kaggleのための環境構築

先日,kaggle(http://kaggle.io)のための環境を構築しました.その時の作業をまとめておきます. 計算機環境としてのGoogle Cloud PlatformGCP)と,バージョン管理のためのBitbucketを使っています.これらは

  • GCP : 見た目がおしゃれ,300USDのクレジットがついててしばらく無料で使える
  • Bitbucket:プライベートレポジトリが無料で使える,こちらもおしゃれ

ってことで選びました.

構築にあたっては,Takumi Satoさんの動画を参考にしました.Youtubeで説明してくださっていて,とてもわかりやすかったです.

細かい手順は上の動画を参考にしてください.

GCPを準備する

上のGCPのリンクから,VMインスタンスを作成します.けちってあまり豪華な構成にはしていないです. f:id:nyaaaaaam:20180903163952j:plain

OSは仕事でも使うことの多いUbuntuを使ってみました.セキュリティは大事なので,公開鍵認証にしています.

Bitbucketを準備する

Githubを使うと,kaggleの利用規約には「チーム内の情報シェアなどを除き,kaggleのフォーラムを通して情報をシェアしなければならない」というものがあるらしく,Githubの公開レポジトリを使うと,この規約に違反する可能性があります.そのため,無料でプライベートレポジトリが使えるBitbucketを使います. 普通にIDをを取得してレポジトリを作成しておきましょう.

GCPへの接続

毎度GCPのページにアクセスして,そこからターミナルを立ち上げてログインすることもできますが

  • 微妙にレイテンシがある
  • ログインに時間がかかる

といった理由があるので,ターミナルから接続することをおすすめします.ターミナルでつぎのようにしましょう.

ssh -i (秘密鍵のパス) (ユーザ名)@(VMインスタンスの外部IPアドレス) -p (ポート番号,あれば)

こうすれば,ターミナルから接続できて便利です.

Jupyter notebookを使えるようにする

データサイエンスでは,対話的にコードが書けるJupyter Notebookを使う人が多いんじゃないかと思います.僕もそうなので,kaggle用の環境には,Jupyter notebookが必須です.

GCPインスタンスを立ち上げたあと,Anacondaを以下のようにしてインストールします.

wget = https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh
sh Anaconda3-5.2.0-Linux-x86_64.sh

これでJupyter notebookのインストールは完了です.

あとはこの記事に従って,ポートを開放したりすれば,Jupyter notebook環境の出来上がりです.

ディレクトリ構成

データサイエンスプロジェクトのディレクトリ構成をどうするか問題に関して,今回は以下の様な構成をとっています.

├── README.md
├── input: データセットを入れておく.ファイルは絶対に編集しない.
│   ├── train.csv
│   ├── test.csv
│   └── ...
├── notebooks: 実験したnotebookを入れておく
│   ├── 20180901_EDA.ipynb
│   └── ...
├── results: 予測結果とか,submit用のcsvを入れておく
│   ├── 20180901_predict_LASSO.csv
│   └── ...
└── trained_models: 訓練済みのモデルを.pklで入れておく
    ├── 20180901_LASSO.pkl
    └── ...

まずinput/には,kaggleなどからDLしたデータそのものを入れておきます.特徴量エンジニアリングなんかでいろいろとデータを弄る場合は,このファイルをいじるのではなく,別のディレクトリを作って編集して,もとのデータセットを編集しないことをおすすめします(あとで元データが何なのかわからなくなるため).また,trained_modelsには,joblib.dumpで保存したモデルを入れておきます.CVなどですごく時間がかかる場合,結果を保存しておくといろいろとあとで時間の節約になるので.

こういったディレクトリ構成ではcoockiecutterというモジュールを使うと良いっぽいですが,そこまで細かいディレクトリ構成は必要ないと感じたので(今のところは),今回はオリジナルの構成で組んでいます.

github.com

今取り組んでるコンペ

今は,不動産の特徴からその価格を予測する,House Pricesというコンペに取り組んでいます.データセットはある程度構造化されていて(欠損値などはもちろんありますが),回帰をいろいろと試してみる問題です.なにかいい結果が出たら,Kernelでも書こうかなと思っています.

https://www.kaggle.com/c/house-prices-advanced-regression-techniques

追記

GCPのストレージからVMにファイルを転送する.

gsutil -m cp gs://ストレージ上のパス VM上のパス

はじめてのエントリー

f:id:nyaaaaaam:20180902153232p:plain

はじめまして,はてなブログでブログを始めてみました.

ブログで書いていくこと

以下のことについて,不定期で書いていきます.

  • データサイエンス関連の技術の話:Python, R, Kaggle...
  • 仕事の話:研究や開発,転職のことなど
  • 育児の話
  • 趣味の話 今後追加したり削除したりするかもしれません.

ブログを書こうと思い立ったきっかけ

現在僕はとあるメーカーの研究所で働いています.研究所内でデータサイエンティスト的なことをしています.しかしいろいろと思うところもあり(この辺の事情はまた別のエントリーで書こうと思います),2019年の1月からテック系に転職して,本格的にエンジニアとして仕事を始めることにしました.

「エンジニアってなんとなくブログを書くもの」とぼんやり思っていたのですが,セルフブランディングとか,アウトプットの場を持つことで勉強が捗るなど,いろいろとエンジニアにとっていいことがあるということなので,これを機にはじめてみることにしました.

続くかもしれないし続かないかもしれませんが,よろしくおねがいします!