2017-10-02 - 10-09

三連休旅行のため、あんまり進捗ない

BigQuery

array, unnest, udf,

yukicoder

  • レベル1をひたすらやった
    • やはり繰り上げ下がりに弱い…解けるんだけど、時間かかる
    • コーナーケースでWA/REしてしまった。テストケース確認できるのは本当に良い!
  • 新幹線の中で電池切れたかつ、充電器忘れて途中まで
  • コンテストに初めて出た。難しくて2完に加え、解説中に寝落ちして復習できてない…
  • 上記はニコ生解説で、それとは別に文字での解説があることに気づく
    • atcoderの方が良いと言ってた自分が恥ずかしい

読書

データ解析プロセス実務入門

  • 読み直し終わった
  • 可視化本の方はあまり見なくていいかなと思うようになった
  • 地道にコツコツ当たり前になるように続けていくことが大切なので、実践していく題材を探す

Lean Analytics

  • 読み直し中
  • セグメントや時系列は意識しているけど、コホートは単語として意識できてなかった気がする
  • 読んでいる最中にRFMを意識すれば上記は意識できるのかなと思ったし、探索的にも仮説検証にもなるかな

データ分析関連

これらの読書から下記のように思った

  • コンパクトに読める実例・サンプルが欲しい
  • 探索的データ解析のkernelでも良さそう、英語…

コンペ全てをやるのではなく、一部から吸収できるものは吸収する。それ以上に試したいときは、提出してみよう

まとめ

  • きょうぷろコツコツと続けられてる
  • データ解析の習慣化を目指す

2017-09-25〜10-01 やったことと振り返り

ソシャゲ

担当変更後のゲームをやった。 いろいろ情報を集めて10日間プレイした結果、Lvだけは全体の10%くらいの高ランク帯になっていたのでとりあえずはよかった。 ソーシャル要素がなくて育成がとても大変だったのと、まだまだ最低限の育成ができていない実感がある。

5ch

担当変更後のスレを眺めているんだけど、2chじゃなくなったので違和感がある。まぁ慣れるだろう。

BigQuery

担当変更後もBigQueryを扱うのだけど、構造が複雑なのでstandardSQLでがんばろうとしている。

JSON

複雑な要因の1つ。log生成時にschema気にしなくていいので利点もあるが、Railsのassociationが連なったものがjsonに変換されていて辛い。id/table_name_xxxsとなっていることから勝手にそうだろうなぁと思っているだけで確証はない。 standardSQLで JSON_EXTRACT 系が使えないという記事を昔に見たのだけど、どうやら今は使える。

関数と演算子  |  BigQuery のドキュメント  |  Google Cloud Platform

  • JSON_EXTRACT 系は、stringのjsonからjson_path_string_literal を用いて値を抽出する
  • 対応するkeyがないと1階層では null が返ってくる(もっと深い部分の抽出時にErrorになるかは試してない)
  • 対応するkeyは string中のkeyが "key" になっていないと対象にならないので注意
  • {"x": "str"} からx に対応する値を抽出すると "str"が抽出されるのでquoted状態になり邪魔である
  • JSON_EXTRACT_SCALAR であれば上記をnon quotedな文字列を抽出できる

UDF

UDFをJavaScriptで定義するときにJSON.parse がなぜか使えなかったので、あとで要検証。 またUDFではINT64が返せなくて辛い。SQL UDFではどうなるか試していないので、要検証 or documentを見る。 STRUCTを返すのもめんどうであるのと、UDFを使うと処理が重くなりそう。withで作った疑似テーブルでしか試していないので実テーブルで要検証。

timestamp

  • date_adddateに使えるので、timestamp_addのようにtimestamp専用関数を使う
  • ほかにもいろいろあるけど、それはそれでまとめる

array

配列の操作  |  BigQuery のドキュメント  |  Google Cloud Platform

  • postgresqlのように気軽に配列にアクセスできなかった。offset or ordinal を用いての参照が必要
  • UNNESTに慣れてJSONに含まれる配列を縦持ちにした
  • 上記をCROSS JOINと一緒に使って他のカラムを保ったまま縦持ちにすることに慣れたい
  • ARRAY_CONCAT, ARRAY_CONCAT_AGGを用いた縦→カラム化(横持ちではない)にも慣れたい

日付テーブルと日付分割テーブル

  • 前者はtable名のsuffixにyyyymmddがついてるアレ
    • standardではtable_name_* と `table suffixという特殊カラムを使っていろいろできる
    • legacyのfrom句で使っていたのをよく見るけど、対応はdocumentに詳しく書いてあるので大丈夫そう
  • 日付分割はpartitionを利用。データを入れるときに注意する必要があることもdocumentに詳しく書いてあるので大丈夫そう

運用でいろいろ変わりそう、というのが感想。クエリ叩く側としては、どちらになっているかを意識して金を溶かさないようにする。

yukicoder

level1.5は他の参考書を見て学んだ後に身についたかのテストとしてやるのがよいと思ったので保留。やはり解説がついているatcoderはすごい。 ということでlevel1.0をひたすら解いて頭の体操をしていた。

  • 繰り下がり/上がり系に弱いときがある
  • 文字列系に弱く、indexをうまく使わずに無理やりparseしているときがある

だいたいはすぐに解法浮かんで次に進めるのでcommit logが雑になっている。上記の浮かばなかったときのcommit logをきちんと残しておきたい。

まとめ

なんか特にない

2017-09-19〜09-24 やったことと振り返り

会社勤務4日だと、すごく生き生きできる気がした1週間だった。進捗はあまりない

仕事分析

チーム分析みたいなことをしているんだが、ほとんどうまくできていないような気がする。特に分析のための環境まわり。

  • コードの共有
  • レビュー
  • 目的共有
  • 責任周り

よく分析基盤がというのはあるけど、やっぱり文化があって浸透していればそこはそのうち改善されるはず。それすらないのはいけないねという話に落ち着きそう。

ソシャゲ

仕事担当が変わるらしく、今までつぎ込んだ時間が…。次もゲームなんだけど、前のゲームがぬるすぎたせいかつらい。リセマラ一回したけど、めんどくなってとりあえず進めている。

DP

先週に引き続きQiitaにのっているDPをやった(会社での空き時間)。

qiita.com

ナップサック問題以降の部分和問題とその応用たち。

  • DPは基本を分かったらとにかく考えてぶん回すものだなと理解。
  • その過程で漸化式と初期状態を意識する
  • indexをどう調整するかも問題理解しないと一生解けない
  • なんとなくindexに設定する項目をランダムに当てても経験値にあまりならない

次は、「問題 6: K個以内部分和問題」から続ける。

yukicoder

atcoder ABCがお休みだったので、 初心者のためのガイド - yukicoder の考察が必要な競技よりの問題を解いた。

今度からは、「アルゴリズム寄りの問題を解く(★★)」を解いてみる。

pytest with debugger in vscode

vscodeのdebuggerはpython extensionをinstallすると設定されているのでとても簡単。ただし、あくまでmainが実行されないといけない。

https://github.com/ksomemo/Competitive-programming/blob/4240e18160f3cd8009242ac4302031e4263f9431/.vscode/launch.json#L43

最初はpdbやipdb, pudb, pytest-xxxなどを探して使ってみたけど、codeの変更が必要だし、terminalじゃなくeditor内で使えるほうが楽なので見つかってよかった。他のmoduleでも使いたいものがあれば使えるようになった(はず)。

まとめ

  • 前と比べたらソシャゲ離れできるかも
  • DP慣れてきたので応用に慣れていく。(そのうちグラフで挫折するだろうけど同じように乗り越えたい)

他のことを習慣化するように少しずつ手をつけることを意識したい

2017-09-11〜09-18 やったことと振り返り

昨日の月曜日含めて8日分、休みだし更新でいいかぁと。

ソシャゲ

また時間が溶けた。今回は単純に解けたのではないので、以下理由。

  • 敵が強い
  • 欲しいものがDropするステージを選べないタイプ
  • 欲しいものを集めきった人が開始早々抜ける

仕事分析

  • フルタイムで関われてないのでつらい
  • 分析計画はちょっとできた
    • 深く分析する際の対象期間やセグメントを限定するのが苦手
    • したとしても、目的をもたない限定にしてしまう
      • それは何のためにするのですか、という質問で気づく or 集計後に比較できるもの(仮説含めて)ないため
  • 相手に価値がある分析というのを意識できていない
    • 資料としてのoutputを意識できていないからか、集計だけでなく分析までしているときでも集計っぽくなる
    • 傾向を見るべきなのに、集計で留まっているときがあった…

ABC

074

  • Aは問題なし
  • Bは問題文長かったのでちょっと時間使ったけど、内容は問題なし
  • Cを難しく考えすぎた
  • Dは途中まで問題ないが、最後までできず

Cは砂糖が水に溶け切る範囲での濃度を最大にする回答をする問題。計算量を考えて全探索にするべきだった。 ACしたあとに別の解法を試したとき、0%砂糖水は許容されていることから思い込みで水の最低限使う量を無視して水0gにしてハマってた。制約はきちんと見よう。

Dは地図の経路が実際最短経路になっているか問題。この前覚えたワーシャルフロイド法が役に立った。 距離が他の経路と同じである不要な経由経路を削ぎ落とすために、判定用の2次元配列を作らず何度も不要判定していたので間違っていた。対称行列なのは分かっていたのでもったいない。printでなくprint error, それでもなくdebugger使うように意識+使うまでの時間を短くしたい。

golang

D問題の時、CPython3でTLEしていたのでこの際だしと手を出した。実際はPyPy3で問題なさそうだった。JITコンパイルすごい。 golangをひっさしぶりにやった感想としては、

  • 型推論のおかげで意識的に型付けしなくて良いのは良い、という前にも感じたこと
  • pythonでのloop+四則演算benchmarkより2桁多い数を処理できてすごいと感じた
  • 便利と言われているけど、pythonほどbatteries includedではないと初めて実感(pythonが豊富すぎる)
  • 命名においてsnake_caseは標準ではないらしく、python脳になっていると実感(vscode便利)
  • indentでなくCurly bracesによる書き方が面倒くさく、Python脳にry
  • 正直、競プロとしての第一言語にはならないなぁと思った

structもinterfaceも使っていないしtree系でようやく使うぐらいかなと。goroutineというか並列・並行処理を競プロにおいて使えるかわからないので、本来のgolangとして身につく日は来なさそう。

DP

下記を見た+TwitterPython実装というのが流れてきたので自分でもやってみることにした。

qiita.com

gitへcommitしてなくていつやったか忘れている。とりあえずはナップサック問題までやったのであと10個。

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

久しぶりにアルゴリズムを学ぼうとyukicoder wikiを見ていた。

アルゴリズムを学ぼう

アルゴリズムを学ぼう

実践ばかりしていたのが、ワーシャルフロイド法を覚えてからABCのDを解くために知識を付けている延長なのかもしれない。 前者は久しぶりに見ても表紙のゆるさと違う勉強になる本。後者はBrowserのTabに常に残してある。 見たことをpythonの関数やClassの雛形として定義したので、いつか埋めよう。

まとめ

  • 競プロは順調に習慣づいているのと成長を実感
  • 分析慣れたい。メンタルに来る…
    • Kaggleとは違うだろうけど、データ探索としては役に立つよね
    • 画像や自然言語処理とか置いておいて、Marketing系のを探そう

2017-09-04〜09-10 やったことと振り返り

決定木による予測でない分析

要因?と言っていいかわからないけど、やった。

  • 目的となる行動とそれ用の説明変数
    • 目的を実行するまでの行動のみであり、それ以降の行動は変数には含めない
    • 期間を設定しないと際限なく行動をとれるので、事前に基礎分析をしておく
    • 上記の例
      • その行動をした会員のうち50%は、入会からN日である。などの傾向
      • サービス提供としてここまでには行動してほしいなど
  • すべての変数について深さ2と3までのノードを見る
  • 一番目の分岐に使われた変数を除外して、同様に傾向をみる

失敗したことは、

  • 多分岐でやったので数量データの分岐が多くて解釈しにくかった
  • 上記においてセグメント別にする時どうすればいいか分からない(むしろ分からないからかけてる
  • つまり、深さ数のパラメータだけでなく分岐数のパラメータも意識するべき

各ノードにおいて、傾向(目的変数の割合の偏り)があるかを確認する。上の分岐と比較したときの差分で見ればよい。 傾向があり数が多い場合はデータマートから分岐条件を元に絞り込んでから詳細を見る。データマートにない変数があれば追加する。

まともに分析っぽいことをして感じたことは、以下のとおり。これからも意識してがんばる。

  • 目的と分析の設計、特に期間設定
  • 説明変数の設計、とりあえず入れてからこれ意味なかったと気づくことが多かった(似ている変数)
  • モデルに当てはめた後の解釈
  • モデルに当てはめること自体の意味の無さ

yukicoder

ABCのDで躓くことが多いので、guideに載っている基本的なことを全部やろうと思った。とりあえず以下の2つを解いてた。

どちらも★1つなので問題なし。問題が1つなのでそれに集中でき、AtCoderの補完として利用し続けたい。

AtCoder ABC

073

Cまで問題なく、Dできず。ARCに出るような人たちの早さ…。 最低限経由しないといけない町の順列列挙するというのは思いついたが、その場合その経由距離の合計しかしていなかった。

最低限以外の町を含めたコストを計算にはワーシャルフロイド法というアルゴリズムを使って解けると解説にあった。PDFのコードをみると2次元配列のDPだった。 DP慣れ全然していない問題が浮き彫りになった反面、なるほどなーとすぐ分かる程度にはなってた。

072

Cまで問題なく、DでTLE。最低限N2での解法を思いついた。ちゃんと考えれば分かる問題だったなと思った。

kaggleとAtCoder

時間が短いAtCoderは習慣づいているが、kaggleなどは全然習慣づいていない。 長期的なものがダメっぽいのは本読みだったり、すぐに実感できないものに多いので忍耐力・集中力なのかな。 と思ったが、手を付ければ集中するのはyukicoderの練習でも実感済みなので、まずは始めるのがよさそう。

まとめ

  • 競プロの習慣化順調
  • 長期的なものも手を付ける
  • 仕事分析、つらいけどためになる

2017-08-28〜09-03 やったことと振り返り

ソシャゲ案件は(時間が溶けるから)もうやりたくない。  

ソシャゲ

イベント参加して3日で終わらせた。残りは他のことに当てるつもりだった。ここまではよかったのだが、週末に装備強化に意識が向いてしまい時間が溶けた。

データ解析プロセス

まともに分析開始となったので改めて読み直し中。全然意識できてないことを確認できた。

仕事で分析

手伝ってもらってる人とのレベルがとても離れているので、その人を目標にその水準まで分析力を上げる。 具体的には、課題のヒアリングと分析計画を明確にする。そこからは探索的か仮説検証になるので地道に行う。深掘りするときのセグメントや期間などを意識する。  

確率的プログラミング

実際には触ってないが、PYMCとEdwardのチュートリアルを眺めてた。PYMCの訳書に書いてあったリポジトリのnotebookを試したらpackageがなかった+ネットワーク制限があるので、仕方なくconda install .bz2デビュー。

踏み込めない理由として、まだベイズのすごさを実感できてないのと感覚でも分かってない。

PYMCで使ってるtheanoで消耗しそうなので、Edwardでtensorflow使いたい。ただし伝統的ベイズ成分が少なめらしい。stanはrstanから使う方がよさそう。宣言的と計算グラフはどっちがいいのだろうか。

 

まとめ

  • 地道に分析がんばろう。新しいことに挑戦もしたいけどね。
  • 合間を見つけてkaggle、競プロ、数学、英語をやる。習慣づけたい。

 

2017-08-21〜08-27 やったことと振り返り

たいしてなにもしてない(´・ω:;.:…

Rによるやさしい統計学

読み終わった。途中からだるかった。 最後の章の検出力関連が他の本で読んだことのない内容だったが、実際どれくらい使われてるのか不明。この本が検定関連に注力していて、回帰分析にはあんまり力を入れていないため、そちらの方面における検出力ってどうなの?(線形回帰における変数の検定)という疑問が残った。

情報検索アルゴリズム

情報検索アルゴリズム

情報検索アルゴリズム

次に読んでいる移動中の本。テキスト情報に関する本で、tf-idfとかが出てくる3章まで読んだ。説明が丁寧なので読みやすい。実際に活かせるかというと、実務とのジャンルが違うので他の本を探したい。

ソシャゲ

相変わらず時間が溶ける。鬼畜イベントの見定めをきちんとすること。

  • 単位時間あたりのポイント
  • 報酬の取得と限界までレベルをあげるかの判断
  • 一気にやるくせをつけて、細切れに時間を使わない

書いているとTwitterで浪費しているのとあまり変わらないと思った。

kaggler-ja slack

開設というよりpublicになった感じ。人がめっちゃいる+owner達の気軽さがいい感じ。 再びやろうかなと思い始めた。

英語

上記のために結局必要になるのが英語。学ぶための時間をかけたくないと潜在意識が働いていそうなのでどうするべきかが問題である。

データチェック

privateではなく仕事。初めて見るデータに対して業種とサービス内容だけを知った状態で基本的な分析をするために足りているか+どんな分析ができるかをチェック。これはとても楽しかったので、サービス内容を知っているとデータに対する理解が早まるのは英語が苦手でデータに対する理解が深まらないのと反対だなと思った。

dotfilesの整理

設定ファイルのrepositoryがghqのフォルダになかったので移動。

  • 移動後にsymbolic linkの整理と不要なファイルの整理
  • gcloudをmacにインストールして、その設定を追加

まとめ

データ分析関連の行動がまったくない。

  • 移動中の本を見つける
  • kaggleしようを実践する
  • ソシャゲ対策をする