StatModeling Memorandum

StatModeling Memorandum

StanとRとPythonでベイズ統計モデリングします. たまに書評.

『先輩データサイエンティストからの指南書』浅野らの書評

タイトルからは「仕事のやり方」「チームビルディング」のようなどちらかというとビジネス本のような印象を受けますが、中身はまったく異なります。大きく分類すればPythonの本です。名著『リーダブルコード』のデータサイエンス版に近いです。『プロダクションデータサイエンス』のようなタイトルの方がしっくりくるし売れそうに思いましたが…先輩データサイエンティストからの小言ですね、すみません(笑)

著者らはブレインパッドという受託分析会社でキャリアを重ねてきたデータサイエンティストたちです。ブレインパッド社は現在において勉強会の開催や資料の公開に最も積極的な会社の一つで、例えば資料はここにまとめられています。このようにオープンであることは技術を高めるのに非常に効果的で、作成者・発表者が緊張感を持つため質が上がりますし、資料に共感した技術力の高い人がさらに集まります。しかし、ただ人が集まれば高品質の成果物ができるかというとそうではありません。誰が担当しても一定以上の品質を保つためには、チーム内で一貫した設計思想、環境やコーディングのルール、モデルの管理、教育などなどが必要と思っています。この本はそういった内容を扱い、データサイエンスの成果物をプロダクションレベルに引き上げるための指南書となっています。データ分析や機械学習モデルそのものを扱うような本ではありません。

以降では簡単に内容を紹介したいと思います。詳しい目次は出版社のページにあります。

  • 第1章 実務で生き抜くためのエンジニアリングスキル
  • 第2章 環境構築
  • 第3章 コードの品質管理
  • 第4章 データの品質確認
  • 第5章 機械学習モデルの実験管理
  • 第6章 プロトタイプ開発

2章

おすすめのリポジトリ構成や、Git・VS Code・Docker・uvの使い方を速習できます。例えば企業で新人エンジニアに対してPython研修をすることがあると思いますが、自分たちで環境構築の資料を一から作るより、この2章を読んで構築してもらった方がほとんどのケースでベターと思います。

3章

Notebookの利点・欠点からはじまり、関数実装のベストプラクティス、クラス実装のベストプラクティス、命名、コメント、コードレビューなどコードの品質に関する話題が幅広く扱われていて、デザインパターンへの言及もしばしばあります。Notebookを量産していてきちんとしたPythonコードに自信がないデータサイエンティストにぜひ読んでほしい章です。

個人的に一番好きな章です。もっと読みたいです。

4章

サンプリング確認、統計量確認、分布確認という基本的だけど重要なことの説明があります。またPanderaというpandasのデータフレームに対するバリデーションツールの使い方の説明があり、僕は存在も知らなかったので勉強になりました。

5、6章

5章は実験管理についてで、HydraとMLflowという実験管理ツールの説明があります。Kagglerが使っていると聞いたこともあり、日々機械学習モデルの試行錯誤を大量に行う人に向いているツールなのだと思います。6章はStreamlitによるプロトタイプ作成の説明があります。

Enjoy!

技術記事はZennで書くことにします

ここ5,6年、技術記事を書くのにはてなブログを使っていましたが、以降でははなるべくZennで書くようにしたいと思います。過去の記事まで移行するわけではありません。

Zennが良い理由は複数あります。大きなところで以下です。

  • はてなブログでは数式が書きづらい。[tex: ] でくくるのが結構つらい。たまに一部の文字のエスケープが必要になる。一方、Zennはふつうの慣れたTeX記法で書ける。ほぼバグらない。
  • 調べた範囲では、はてなブログ・QiitaではGitHubリポジトリにあるコードの埋め込みができない。gistの埋め込みは簡単にできるんだけどね。一方、Zennは簡単に埋め込みができる。
  • 上記のユーザの快適さは頑張ればすぐ実現できただろうけど、はてなブログの新機能はどれも技術記事の方には向いておらず、一般の記事の方に向いている印象がある。一方、Zennは技術者のためを謳っていることもあり、新機能は技術記事に特化している。またGitHubのリポジトリで要望を出せるようになっており、レスポンスもかなり良い。
  • はてなブログでは一定期間記事を書かないと広告が出てくる。急かされているみたいでちょっと嫌…

はてなブログはてなブックマークとの連携も強く、たしかに「バズ」向きかもしれません。しかし、僕にとっては「技術記事を快適に書けること」と「記事が検索でヒットして知りたい人に情報が届くこと」が重要なのであって、バズは二の次三の次です。バズはたしかに楽しい嬉しいこともありますが、そういった承認欲求ドリブンで技術記事を書くようになると技術者としては滅ぶ。滅んでしまった人を何人も見かけている。自戒を込めて気を付ける。

そういうわけでZennを応援する意図もあり、以降はZennで技術記事を書きます。 zenn.dev よろしくお願いします。

Windows11においてWolfram EngineをJupyterで使う方法 (2023年10月時点)

基本的には黒木先生のドキュメントに従えばOK。公開してくださっていて圧倒的感謝。 このリポジトリが一部更新されたおかげで手順通りにいかなかったところをメモ用に書いておきます。

手順

  • ここ からWolfram Engineをダウンロードしてインストールします。
  • サイトで利用者登録をする。wolframscript.exe をダブルクリックして起動してその登録情報を記入してアクティベーションを済ませます。
  • ここ からzipをダウンロードするなりcloneするなりしてコードを持ってきます。
  • 私はPythonのJupyterを使うのでMinicondaで環境作りました。環境名は仮に wolfram とします。
  • その環境に pip install jupyter でjupyterをインストールしました。
  • miniconda promptからリポジトリのコードのフォルダ内まで移動し、.\configure-jupyter.wls help を実行します。 wolfram.exejupyter.exe の場所をaddオプションで指定してね、と読めました。
  • したがって引き続きminiconda promptから、configure-jupyter.wls add "C:\Users\[インストールした場所]\Wolfram Research\Wolfram Engine\13.3\wolfram.exe" "C:\Users\[環境のjupyter.exeの場所]\miniconda3\envs\wolfram\Scripts\jupyter.exe" を実行しました。ただし、Jupyter Notebookのメニューに追加されませんでした。どうやらこの人のエラーと同じようです。
  • そこで、GitHubリポジトリの「Method 2」のほうに従います。すなわち、
  • ここ から最新の WolframLanguageForJupyter-x.y.z.paclet をダウンロードします。 wolframscript.exe と同じフォルダに移動しておきます。
  • wolframscript.exe をダブルクリックで起動し、 PacletInstall["WolframLanguageForJupyter-x.y.z.paclet"] を入力して実行します。
  • 引き続き、Needs["WolframLanguageForJupyter`"] を実行します。
  • 引き続き ConfigureJupyter["Add"] を実行します。
  • miniconda promptに戻って、 jupyter kernelspec list を実行してwolframlanguageみたいなのが表示されれば成功です。Jupyter Notebookにおいても選べるはずです。

Jupyter上でテスト

黒木先生のドキュメントには、数式のTeX形式と画像の解像度の設定の記述が続きますが、TeX形式のほうはすでに対応済みになっていたようで TeXForm 関数を呼べば変換できました。画像のほうはとりいそぎ設定しないで ImageSize オプションで対応しています。

Integrate[Log[Sin[x]], x]  
% // TeXForm
Plot3D[Sin[x y], {x, -Pi, Pi}, {y, -Pi, Pi}, ImageSize -> Small]

Wolfram EngineをJupyterから使っているところ
Wolfram EngineをJupyterから使っているところ