hatunina’s blog

メモと日記です

「データサイエンスのための統計学入門」を読んだ

読みました。

www.oreilly.co.jp
だいたい前半が統計学で後半が機械学習の話です。 数式はほぼ出てこずで各手法の特徴や使い所を中心に書いてあります。 「統計学者はこう使うがデータサイエンティストはこう使う」という話がちょいちょい出てきて面白いです。 また、アルゴリズムの説明を箇条書き風にまとめているので他の本で数式を追う際の副読本としてもいいかも。

EDAから始まり最後はブースティングで終わるなど2018年2月初版なだけあって最近の情勢に合わせている気がします。 サンプルコードはRですがモデルを動かすだけなのでほぼ気にならず。

kaggleを通して雰囲気で使っていた手法に関して確認ができたり、「あー、あれってこういうことなんだー」となる部分が所々あり、コンペが終わったタイミングだったのでちょうど良い本でした。

2018年の振り返りと2019年の目標とか

ポエムです。 僕は2016年10月からWebエンジニア(特定派遣)に転生したマンです。 会社では建前上MLエンジニアかデータサイエンティストということになっています。 Webエンジニア転生前は営業マンでした。

2018年

主にkaggleのプライベートリポジトリですが、家に帰ってコードを書くという習慣がついた1年でした。虫食いで汚いですが僕にとってはこれぐらいがストレスなく続けられる水準かなと思います。
f:id:hatunina:20190105044447p:plain

ブログ

あんまり書いていません。
f:id:hatunina:20190105044702p:plain:w150
書いても読書記録だったりStack Oveflowを和訳しただけだったりと有益なことは書いていません。 文章をたくさん書くのは大変なので、今年もウェブから検索できる自分のメモというノリで続けていこうと思います。

振り返り

以下、時系列でざっくり振り返りです。

1 ~ 2月

色々あり社内待機しつつ機械学習の勉強をしていました。 はじぱたに載っているアルゴリズムをnumpyで実装する等していました。 SMOアルゴリズムを実装するのにヒーヒー言っていた気がします。

2 ~ 5月

業務

ECサイトアサインが決まり自然言語処理をやっていました。 システムではCRFを使っていましたが、僕はモデリングはほぼ行わず前処理・後処理、その他ルールベースの便利ツールとかを作っていました。 メンバーとのコミュニケーションが英語だったり初めて業務でPythonを使ったりでヒーヒー言っていた気がします。 ビジネス側とミーティングを行い直接要望を聞く等の経験ができたのは良かったなと思います。

業務外

Pythonの練習でビットコインの約定履歴を取ってくるスクリプトを書いて公開したりしていました。 ビットコインの売買Bot界隈が盛り上がっていたこともあり、ちょっとStarをもらえて嬉しかったり。 github.com

6 ~ 12月

業務

某物流系企業で機械学習チームの立ち上げに関わっています。 まだ機械学習を使えるほど解決すべき課題やデータがなかったりで、アソシエーション分析をやったりBIツールの選定・インフラ構築をやったりしています。 一時期、SparkやDockerを使う機運が高まりAWS EMRやAWS Fargateを使ったりもしました。 だいたいオーバースペックなので本番には乗せられずちょっと残念です。 MLエンジニアというよりデータ基盤エンジニア?っぽい業務が多く面白いけど若干不満だったり不安だったり。

業務外

この辺りから本格的にkaggleをやり始めました。
f:id:hatunina:20190105051519p:plain:w250
7 ~ 9月にHome Creditコンペに参加しましたが、Kernelsをコピペするのに精一杯で7198中1667のTOP24%という結果でした。 色々なモデルや特徴を作ってもスコアが微動だにしなかったりPrivate LBでめちゃくちゃ順位が下がるなど、自分で理解していない処理を加えてもうまくいかないことを痛感しました。
10月はコピペを反省しつつコンペの復習と気分転換にビットコインMACDを通知するBotを作ったりしていました。
11 ~ 12月にPLAsTiCCコンペに参加し1094中43のTOP4%に入りシルバーメダルを獲得できました。 自分なりに特徴を加えたりモデリングしたりしていましたが、「Discussionの内容をひたすら試す」ということが主に効いていたので、あまり自分の実力でメダルが取れたという実感はないのですが、ひとつひとつの処理を理解できるようにはなってきているので、Kernelsコピペマンからは脱却できたのかなと思います。

2018年所感

シェアハウス住まいから同棲して半年で解消したり身内がアレしたりでドタバタした中でよくがんばったと思う。えらい。

2019年の目標とか

・転職する
・kaggle expertになる
OSSにプルリクだす

の3本です。公表する目標は曖昧でちょっと頑張れば届きそうなものにしておくとだいたい実現するというライフハックがある(僕の中で)のでこんな感じです。今年もがんばるぞい!

「データサイエンティスト養成読本ビジネス活用」を読んだ

読みました。

www.amazon.co.jp

「仕事ではじめる機械学習」と合わせて上司に叩きつけたい本でした。 マネジメント的な話が多いので、技術的なことが知りたい人は「仕事ではじめる機械学習」を読んだ方がいいかも。

No space left on deviceが発生した時の対処

自分用メモです。

OSはUbunts 18.04 LTSです。

状況

GCEでkaggle APIでデータをダウンロードしていたら No space left on device と表示されエラー

対処1

おそらくディスク容量に空きがないと思われるので df -h で容量を確認する。
そして、容量を圧迫しているファイル・ディレクトリを適当に削除する。 今回は使っていたインスタンスが10Gしか容量がなかったため余分なファイル・ディレクトリ削除で解決した。

対処2

今回は該当しなかったけど、ついでに調べたのでまとめておきます。
ディスクが空いているのに No space left on device が発生する場合はinodeが枯渇している可能性あり。
inodeは df -i で確認する。
枯渇している場合は下記コマンドでどのディレクトリがinodeを使用しているか調査し不要なファイル・ディレクトリを削除する。

# 現在のディレクトリを調査
for i in `pwd`; do echo $i; find $i |wc -l; done

参考

inodeとは/inode消費が多いディレクトリの確認 – たぐたぐねっと

www.ivankuznetsov.com

docker for windowsでのpostgres永続化

やりたいこと

docker for windowsでdocker-composeを使ってpostgresのデータを永続化したい。
バージョンは以下。OSはWin10です。

f:id:hatunina:20181015202318p:plain

方法

下記コマンドで永続化のためのデータコンテナ作成

docker create --name dbdata postgres

docker-compose.ymlにvolumeを追記しトップレベルでデータコンテナを指定する。 例えば redash だとこんな感じ。

version: '2'
services:
  server:
    image: redash/redash:latest
    command: server
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      REDASH_COOKIE_SECRET: veryverysecret
      REDASH_WEB_WORKERS: 4
    restart: always
  worker:
    image: redash/redash:latest
    command: scheduler
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
    restart: always
  redis:
    image: redis:3.0-alpine
    restart: always
  postgres:
    image: postgres:9.5.6-alpine
      volumes:
        - dbdata:/var/lib/postgresql/data
    restart: always
  nginx:
    image: redash/nginx:latest
    ports:
      - "80:80"
    depends_on:
      - server
    links:
      - server:redash
    restart: always
volumes:
  dbdata:

こうしておけば docker-compose up , docker-compose down を繰り返してもpostgresのデータは dbdata コンテナへ永続化される。

参考

ishikawa-pro.hatenablog.com

qiita.com

github.com