somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

2015年のまとめ

目次

長くなるので3行

  • 目標がないと比較できないので目標つくろう(分析は比較ってIssueからはじめよに書いてあるらしい)
  • 分析+基盤関連にかかわらず、もっと自分にとって手を付けやすいところから手を出して経験を得る
  • 時間を有効に使ってアウトプットを行い、目標との差分を得る

此処から先、ダラダラ書いた自分用

ぱっと思い出すほど記憶に残ってない(´・ω・`)

Twilogくらいでしか記録に残してないので見てくる

月別Tweet

  1. 1151
  2. 865
  3. 942
  4. 913
  5. 837
  6. 878
  7. 916
  8. 958
  9. 1024
  10. 1009
  11. 1117
  12. 1155

12月は31日3:30まで

ここから、各月のツイートを見ようとしたけどさすがに挫折…。来年からは週次でいいのでまとめてみようと思った。

よかったこと反省点など

難しい系

どうしても気になってしまうが深くは突っ込んでいけてないものたち。多分ずっとこのままだと思うけど、メインでやっていることの根幹なので余裕が有るときにやりたい。優先度を考えること。

英語

一昨年iPhoneになってから、純正マイクイヤフォンのおかげかなにかしら聞いているようになった。英会話CDとPodcastはとにかく聞いている。耳はなれたけど、話すのはなれないので人目を気にしなければ、shadowingしてた。

単語面はDuolingo2ヶ月位やってたけど飽きてしまった…。やっている内容自体は中学校の単語が多いが、自分から選ぶ場合はつまづいていて、読むだけの時は問題なかった。最近、電車でTwitterばかりになってしまっているのでまたやってみようと思ったが、Podcastが聞けなくなる。

PCではWeblio Chrome Extensionで単語登録するようになった。実はEC2上で開発をするという奇抜なことをしなくてはいけなく、言語が英語デフォルトのためStackoverflowを見ることが増えた。これのおかげか、英語記事を避けることが少なくなった。避けなくなっても英語で躓くとつい日本語記事に頼ってしまうので入れた。本当は、1次情報というDocumentationを見なくてはいけないし、TwitterやQiitaなどにDocumentation見ようと言うのが流れていたので来年は気をつけたい。

Podcast

  • 技術系のEnglishOnly
  • Rebuild
  • Mozaic
  • CodeLunch
  • Wadafm
  • Talking Machines

英語のところでもあげたPodcast、The Change Logやその他英語発信のをよく聞いて英語慣れした。結果、知っている単語や言い回しは聞こえてくるとわかったので語彙力あげたい。

他も技術系。中4つは有名。その中でもCodeLunch14(機械学習)とMozaic10をめっちゃ聞いてた。やっぱりSlideより文脈がわかりやすいというのがいい。最後の1つは機械学習Podcastでこれも英語慣れと機械学習における英語情報のIndexになるようにと聞いている。来年は聞いたことをまとめてみようと思う。

プログラミング言語

Rはdata.tableとdpyrに触れたことが一番の収穫。通常のファイル読み込みよりも速く、SQL脳のまま集計ができるので便利だった。分析関連のPackageは余り使っていない…。唯一Clusteringと年末に決定木の描画まとめをした。

Pythonは自動化、たまにJupyter notebookを使っていた。使ったmoduleは標準のものは備忘録として含めて以下のとおり。

  • 標準
    • argparse
    • zipfile
    • os
    • glob
    • re
    • sys
    • yaml
    • logging
    • subprocess
    • multiprocessing
    • shutil
    • datetime
    • collenctions
  • paramiko
  • pandas
  • SQLAlchemy
  • jinja2

Pandasは言わずと知れたもの、SQLALchemyはマスタファイルへのInsert用に使い、jinja2はSQL templateとしてtable名の動的変換に使っていた。Cookpadの青木さんの本にあった簡単なShellを見てこれでいい+Prepared Statementとしても有効に使えている。

ただ、Scikit-learnは全然使ってない(´・ω・`)…。どうも知らないものに手を出せないところがある。Python自体、そんなに知らなかったけど自分の知識の範囲内では使えたんだけどなぁ。いろんな情報源があるのでとりあえず、使うことを来年は頑張る。

Scala/Haskell関数プログラミングとのつながりというかモナッが気になってた…。Scala自体あまり知らなかったなぁ+ScalazがHaskellかというのが印象的。そもそも、Sparkの影響でScalaちょっと触ろうと思ったけど、Spark(使っていない+概要知っている)ユーザーとして見るとScalaそんなに関係ないなという感想。

Scalaを知れば知るほど、BetterJava+For式が特別だとわかり、Scalazも頑張ってHaskellのような型の力を生み出していた。それでも簡単なわけではなく、sbtのような型型したBuildツールMonadが出てくるWebFramewrokなどBetterJavaだけでは部分も知れた。

Haskell自体は久しぶりにすごいHaskellを読みなおしてMonadという型クラスにとらわれすぎて各インスタンスの便利さに気付けていなかったなと思った。そこから進んでみると、FreeやArrowにFunctorが自然に導出できるDerivingFunctorなど本だけでは知らなかったことが次々に出てきてほんの入口しか見てなかったと気付かされた。

分析

さきのR/Pythonでも述べたとおり、機械学習関連はほぼ使ってない…。が、基本は分類・回帰を行うっていうのを改めて意識できた。統計モデルにしてもそういうところは変わらず、いかにさらなる価値を生み出すかと今あるデータでいかに説明するかが機械学習と統計モデルさらには分析なのかなと思う。そのためにも、統計学だけで消耗せず、手を付けやすいところから頑張りたい。

SASは、ちょっと触ったけどモジュールを使っていないので微妙なプログラミング言語だなーくらい。ただし、SASのecosystemすべてをあわせると強そうと思った。

SPSSについては、使ってはいないが、新しく入ってきた未経験の人たちがModelerを使ってるのを見ると情報が少ないのは置いておいて、とっつきやすくしているなと感じた。こういうところから素直に吸収できないのが自分はとても悪いと思う。ツールに扱われてる感とかをすぐ考えてしまう…。こちらは単体でも使えるけど、拡張機能を使ってテキストマイニングや他のIBM製品(CognosなどのBIツール)と合わせると(お金を出せる企業にとっては)強いなーと感じる。使えるな使って学び、あのGUI操作をどうやったらR/Pyhonのコードに対応付けられるかが大切だと思う。

SQLは、Pythonよりずっと書いていた。前前職と前職はMySQLを使うことが多かったので、SQLServerになってもWindow関数を知っていてもなかなか使うことができなかった。しかし、累積和を使ったヒートマップや順位付けによるランキング、前回行動との差分日数をとるなど分析のデータ作りなど欠かせないものであるので、さっさとみにつけてしまったほうがいい!

SQLServerのEditionが微妙でPartition/列ストアIndexが使えなくてRedshiftいいなーと思った反面、SQLServerばかにしてたけど、Editionしだいではこれらに加えてデータマイニングもできるし本当にすごいと思うきっかけになった。AzureでのDBについては調べきれてないが、PowerBIなどMicrosoft製品と合わせて力を発揮するのがBestであり、C#とか使ってGUIツールを簡単に作れたりする環境に加えてRとも連携できるので、Pythonなんて使ってる場合じゃないと正直思った。Microsoft以外ではOracle/SPSSなどもRとの連携に力を入れているのでRの需要も大きそう。

分析としてのExcelと業務でのAccessを使ってた。分析としてのExcelというより、ピボットテーブルは本当に気軽にできるな~と感心しっぱなしだった。けど、慣れるにつれて、多変量解析の重要さを思い知ることになる(´・ω・`)…。それは、データ量が多いと開けない、人の目で単変数間の分析をするのは面倒すぎるし、判断できなくなることもあった。あとは、ヒストグラム・散布図・箱ひげ図を気楽にできないのは微妙で、それにようやく気づいた頃からJupyter noteboo + pandas + matplotlib でなんとかした。

分析基盤

  • EC2
  • S3
  • Git
  • Jenkins
  • Luigi
  • Airflow
  • Redshift
  • Tableau

AWS使ってた。特にEC2をAutoScaleしたりSpotインスタンス使うような重い処理などなしで、自動化したのはS3へのUpload/Downloadだけだった。boto3の一部を使いやすいようにmodule/クラスにして使うくらいだった。

JenkinsはWeb Cronとして使っていただけで、Gitとは連携してない。自分一人しか開発してないのでGitログをたまに見る程度だった。GitはPythonのFlake8でLintするようにして事故を防いでいた。テストはちょっとしたモジュールに書く程度だったので、ScrumでいうSplint0段階で基盤を整えて後につなげないとズルズルやらなくなってしまうという経験をした。

Luigi/AirflowなどのWorkflowは使わずにやってしまいました(´・ω・`)…。冪等性!冪等性!ですよほんと。古橋さんの記事を100万回読んだほうがいい。ほかには、祝日のインスタンス起動を抑えるためにCronだけではバッチスケジューリングがむずかったので、それ用のプログラム書いたりしてた。この2つのModuleからDAGとTopologicalSortを知り、それがTezなどのHadoop方面でも使われてるのを知った。ちなみにAirflowはWindowsでは動かなかったものの、Luigiのクラスベースとは異なり、インスタンスベースでDAGを作れるのは面白かったし、どちらもPickleを使っていてSerializerの使いみちを知れてよかった。

娯楽

クロノトリガークロノクロス見てた。あとはDwango録画のScala動画をよく見ていた。無料会員でもタイムシフト使えることを10月くらいに知ったので損してた。JOJOが気になって仕方なかったので、アニメとニコニコで見てた。昔は最新アニメとかチェックしてたけど、流行ってるものを見て面白がる傾向があることが分かった。

まとめは上に書いたけどまとめ

  • まとめるっていいなと改めて意識できた
  • 語彙力・パーツの理解を深めたい
  • 経験によりそれらをつなげたい
  • なんというかニューラルネットを思い出すので、人間こそ学習しろって自分に言いたい
  • おわり