Python Setup for Data Science without Any Distributions

Pythonは書けるが、データサイエンスを囓ってみようと思ってセットアップをしようとすると、立ちはだかるのがAnacondaを始めとするdistributionである。適当に調べていると、いずれかのdistributionを使わないと本当にデータサイエンスが出来ないわけでは無さそうなのに、よく分かっていないにも関わらずとにかく何も考えずに入れろというような風潮が強い印象を受ける。includeをおまじないと言って誤魔化すような類の人達なんだろうか。よく分からないまま入れた挙げ句にdistributionに依存したトラブルが起きて、当然これを解決出来ず、そういうdistributionの現状に対する批判も出てたりするという、ドロドロとした界隈を覗き見ることが出来る。

ということで、pipと打てば済みそうなのにわざわざcondaとタイプさせる意味が分からないし(どうでもいいところで自己主張しなくていいよ。タイプ数増えてるし…)、使いもしなさそうなモジュールをてんこ盛りで入れられて汚染されるのも嫌だし、distributionへの依存性が高くなりすぎるのも嫌だったので、全部自力でセットアップしてみることにした。
言うまでもないけれど、Windows。

Python

3.6.3使用。インストーラでは、他にPython環境が入っておらず、今後もそんなに沢山入れるつもりが無いのならpath追加にチェックを入れる。組み込みとか他のソフトウェアでよくPythonをねじ込まれるので判断が難しいところだが。あとはお好みで。

Pythonは、バージョン間での互換性は重視しないくせに、バージョンが複数混在する場合の選択は、プロジェクト毎の設定を定義するものが無く、環境変数のみに強く依存する。そのため、仮想環境のような回りくどい方式が用いられる。これもdistributionと同じようにゴチャゴチャと乱立しているのだが、最小限の自力セットアップを目的とするのであれば、3.6に標準でパッケージされているvenvコマンドで良いと思う。

pathを追加した場合は、PCの再起動が必要。改めて自力でpathを追加したい場合は、Pythonインストール直下とそこにあるScriptsディレクトリを追加する。追加しないで、実行したい場合は、パス込みで実行すれば良いだけなのだが、pathに追加されていることが前提な処理が結構あるので、pathに足してしまうか、仮想環境を用いる方が良い。

Jupyter

なんでもいいが、この手の実行環境が無いと、グラフの確認すら困難なので入れる。

chcp 65001
pip install jupyter

最初のchcpコマンドは超重要で、コマンドプロンプトのコードページをUTF-8に変更するものだ。これを最初に実行しないとJupyterのインストールに失敗する。コマンドプロンプトのデフォルトの文字コードがSJISなのが駄目なのだが、その辺のプラットフォーム間の違いを吸収して適切にインストールするのはpipの役目ではないのか。

これは予備知識無しにやるとまず失敗するが、失敗した場合はコードページを正しく設定してインストールし直しても、それ以前の駄目なデータが残ってしまっていてまともに動作しないので、一旦Jupyterをアンインストールする必要がある。正しくインストール出来たなかったら元通りに戻すのはpipの役目ではないのか。
また、Jupyterは多数のモジュールの依存から成るのでただuninstallコマンドを入力するだけでは除去しきれない。手動で一つ一つ消して回るのは大変なので pip-autoremove を用いると楽である。依存性も考慮して完全なアンインストールを行うのはpipの役目ではないのか。

pip install pip-autoremove
pip-autoremove jupyter -y

で、再インストールはキャッシュを無効にしてやる必要がある。デフォルトのままキャッシュを有効にしていると、再び不完全なファイルを使用してインストールしやがるので失敗する。キャッシュデータの整合性を確認していないpipはゴミだと思う。

pip install --no-cache-dir jupyter

これでようやく、jupyterが動作する。

jupyter notebook

さて巷では、もてはやされているjupyter notebookだが、私はウェブベースの貧弱なエディタでコードを書かされるのは大変苦痛だと感じた。最低でもVSCodeで書きたいところである。

ということで、VSCodeでextensionをJupyterで検索するとそのまま出てくるのでそれをインストール。このextensionはpylintを要求するのだが、VSCodeの言うがままにインストールしようとすると、こいつもコードページがUTF-8前提なので失敗する。最早pipの欠陥じゃないか?
そのため別途インストールしてやる。

chcp 65001
pip install pylint

pylintを入れると、どうでもいいだろとか、個人の流儀だろみたいな書き方までケチをつけてきてとても五月蠅いので、適当にdisableする。
これで、VSCode上でjupyterを実行できるようになる。仮想環境上で実行する場合は一工夫いるのだが、後述。

Modules for Data Science

この辺は、必要になったタイミングでひたすらインストールするだけ。

pip install requests
pip install numpy
pip install pandas
pip install matplotlib
pip install scipy
pip install -U scikit-learn

上から順に…

  • HTTP通信。データサイエンスと直接的に関係ないのだが、ウェブデータをスクレイピングするときに使う。
  • 算術。Cでネイティブ実装されているのでパフォーマンスが悪くないらしい。
  • データフレーム。今のところ扱いやすいとは思わないのだが…
  • グラフ描画。
  • 科学演算。今のところ必要性を感じていないが、下のscikit-learnが要求する。
  • 機械学習フレームワーク。-Uをつけるのは何故…

venv with VSCode

仮想環境そのものは、適当に作ればいいが、VSCode上ではどの仮想環境を使うかという指定はできない。精々使用するpython.exeの場所を選べるくらいで何の役にも立たない。
以下のように、仮想環境を有効にしたコマンドプロンプト上でVSCodeをコマンドラインで起動させる。

activate
code

仮想環境を有効にすると、コマンドプロンプトウインドウが作り直されるので、バッチファイルを用意して叩くだけというのが出来ず不便である。

仮想環境上だとJupyterもVSCode上から適当に実行(’Jupyter: Start a new Jupyter Notebook’)させても動作しなくなる。自前でJupyter Notebookを起動しておいて、出てきたURLをトークン込みで ‘Jupyter: Enter the url of local/remote Jupyter Notebook’ に入力してから実行する。

VSCode settings

余談。
Jupyterは、以前のセルに入力した内容やimportが何時読み込まれるのか分かり難い。

"jupyter.languages": [
    {
        "languageId": "python",
        "startupCode": [
            "%load_ext autoreload",
            "%autoreload 2",
            "%matplotlib inline"
        ],
        "cellIdentificationPattern": "^(#\\s*%%|#\\s*\\<codecell\\>|#\\s*In\\[\\d*?\\]|#\\s*In\\[ \\])(.*)"
    },
    {
        "languageId": "javascript",
        "cellIdentificationPattern": "^(\\/\\/ %%|\\/\\/%%|\\/\\/ \\<codecell\\>|\\/\\/ In\\[\\d*?\\]|\\/\\/ In\\[ \\])(.*)"
    }
]

参考:IPython: autoreload

VSCodeの、startupCodeにこう書いておくと毎回リロードされそうなのだが、プラグインのバージョンで設定のフォーマットや挙動が変わったりするのでよく分からない。

Getting Over It with Bennett Foddy #1 Got Over It.

OS上のマウス感度は最大にしているのだが、それよりも圧倒的に感度が低く感じられる鈍さなので、DPI依存(私のマウスは古いのでDPIが低い)のraw inputを使用しているんじゃないかという印象がある。あるいは意図的に鈍くしているか。
なので、いつもの感度なら手首のスナップで済ませられるような動きでも、腕全体とマウスパッド全体を使ってハンマー操作しなくてはならない。疲れるし、慣れないうちは肩が痛くなってくる。逆に、感度が低いことによって繊細な操作は行いやすい。

ハンマーは一対一でマウスに追従した動きでもなく、おっさんの腕の可動範囲的な制約を持ちつつも、体に対して常に相対位置をキープしてくれるわけではなくカーソルの位置を維持しようと動くので、未プレイの状態で想像するよりも操作性はずっと劣悪に感じられる。ゆえに、難易度は高い。

失敗して遙か地表に落とされてもひたすらに諦めない忍耐力と、どうやったら先に進めるかを考える洞察力、ミスをしたときの咄嗟の判断力、それらを実行するハンマー捌きが要求される。
ふと、落とされたときに以前苦戦した地点をあっさりと超えられるようになっていたりすることで、腕前の上達を実感できる。一般に難所と呼ばれるような場所は、何時まで経っても難しかったりもするが、それでも以前ほど苦戦はしないはずだ。

続きを読む →

Invisible, inc. #1 Stealthy X-COM

リブート前X-COMライクなアクションポイント制のステルスゲーム。

一番最初にアビリティ選択があったり、ミッション開始前にはアイテムを選択していったりするので、その辺の組み合わせで詰め将棋的に最適解を探していくゲームデザインなのかなと思った。
一方で少し進めてみると、ミッションの詳細なブリーフィングは無いし、ミッションが始まったらオートセーブだし、ミッションは最初からやり直すことも出来ないあたり、ぶっつけ本番の緊張感と今あるリソースで直近の困難をなんとかしていくゲームデザインで、どちらの舵取りで楽しめばいいのかなと最初は困惑してしまった。
セーブデータを消してやり直すと、ミッションのレベル構造はランダム生成かいくつかのパターンから自動生成されていて、本当にやり直しが効かないように出来ているということが分かった。どうやら後者の方向性で楽しむゲームらしいと分かってからは、随分と進めやすく感じるようになった。

セーブ/ロードでのやり直しが効かない代わりに、回数制限のある一つ前のターンからやり直すRewindは用意されていて、この回数制限の範囲で軌道修正をすることが出来る。しかし未確認であるが、それを超えてミッションの目的を幾つか達成出来なかったり、そもそもミッションそのものに失敗したとしても、ゲームは続行するようだ。流石に全員死亡してしまったらゲームオーバーかもしれないが。

そんな感じで、BeginnerのDay 4最後の主要となるミッションをクリアしてみたところまで。主要ミッションまではBeginnerなりに簡単だなあという印象だったのだが、このミッションは初回プレイヤーにとっては相当難しくて失敗する可能性の方が高いんじゃないかと思った。周回時にはミッションのメカニックが分かっているはずなので、それに備えた対策を最初から進めていけるので何とかなりやすいだろうけれど。


犠牲者もなく無事にミッションクリアしているが、Net Worthというよく分からないものが下がってしまった。

続きを読む →

The Sims 4 #1 Less Than 3

発売日(2014年)に意気揚々と7時間プレイして、「うんこだこれ!」と、それきり起動することが無かったThe Sims 4。コンソール版の発売以外特に話題も聞かないし、開発もとっくに再建させることを諦めていているんじゃないかと思って覗いてみたら、いつも通りのexpansionが沢山リリースされていた。
ということで、発売から3年経った今がどうなのか気になって再開してみる。

CAS

  • LGBTに配慮しているのか、デフォルトでゲイ、レズ、男性の格好をした女性、女性の格好をした男性が作れるようになってる。バイは無いらしい。それは別にいいのだが、妊娠する/させられるまでを選べるのはオフィシャルがやることじゃないんじゃないかな。
  • 特質が少ない…
  • 衣装も少ない…この辺は拡張を買えば増えるのだろうか?
  • 顔や体系は、どこがどのようにどれくらいまで弄れるのか全容が相変わらずよく分からん。直感的だと言いたいのは分かったから、スライダーも用意しておいてくれ。筋肉や脂肪はスライダーなんだから。

 

ワールド

  • 3個しかない…
  • 一枚絵から選択するので、3Dのワールドを自由に見渡せる3に明らかに見劣りする。解像度も1080p以下なので、それ以上の画面解像度でプレイしていると不足していて安っぽい。
  • 都会らしきマップは、出来合の家がなく空き地だけ、NPCも殆ど居ない?手抜きだろこれ。
  • 住む先の家のプレビューが出来ない。博打を強いられる。
  • 3人作ったのに2人用の小さい家までしか買う金を与えられない。

 

開始

  • 最初に放り出された地点からの立ち話で、いきなりグリッチで腕が軟体生物のようにあらぬ方向に動く。家の外から家の中のやつと話してる。3年経ってるのにこれかよ、といきなり不安になる。
  • 近所の人の往来が増えた気がする。近所の人が歓迎に来ても、自発的に出迎えない連中。キュー入れても2回くらい無視される。
  • 会話は、それが成功したのか失敗したのかわかりにくい。特にキューを入れて喋らせた場合。時間を浪費しているように感じられる。
  • 部屋が暗くて薄気味悪い。ダサイ日本家屋のようにシーリングライトを配置しまくらんと駄目。とてもダサイ。
  • 特質らしさがあまり発揮されない気がする。善人と悪人持ちが仲良くしてるんだが。
  • 水回り壊れたから修理業者を呼んだけれど、業者が外の近所で立ち往生したまま金だけ取って帰る。3はそんなこと無かった気がするぞ。
  • 22時過ぎにも関わらず電話して尋ねてくる隣人…サイコかお前は。
  • 相変わらず自発的に外に出ようとしない住人。4はシームレスマップを捨てたのでその辺はもう完全に割り切った感じだが。
  • 職場はrabbit hallではなくなったので、一定時間simを完全に消し去って人生の半分を奪うだけの浪費装置。帰宅時にちょっと寄り道させることで、自発的に外に出ないのを補うことも出来ない。
  • 仕事から帰ってきたとき、外でその場で数時間立ち尽くして時間を浪費している。なにこれ…
  • カメラのスクリーンエッジ移動を有効にしていると、左下にあるsimのアイコンを右クリックすることでできる自動追跡が即座に解除される。エッジ移動の判定処理と競合しているようだ。初歩的すぎるバグで、3年放置していいバグではない。QAは何やってんだ?
  • マルチタスクが出来るようになったとは言うが、結局何かしながら「会話する」以外が無く、その会話が特に手応えがあるような感じがないのであまり必要性が感じられない。
    流石に発売当初にあった、立ち話すればいい位置関係なのにコンピュータを弄りにいってから喋る、といった何でもかんでも何かしながら話そうとするというグリッチは解消された気がする。
  • 友好関係の上昇が極めて鈍いので、プレイヤーがキュースパムでもしないかぎり友人関係すらまともに構築できずに死んでいくようだ

毎日仕事から帰ってくるともぬけの殻のように数時間立ち尽くすsim

建築

  • 部屋ごとプリセットを買って配置できるのは便利そうだが、出来合のとテイストが合わない。結局自力で揃えるのか…
  • 屋根自動で良い感じに設置する機能が無くなっている。
  • 3のように色やパターンを自由に変えられない点は劣るが、建築は概ね4の方が便利。しかしこのゲームは建築ゲームではなくて、Simsだ。

そんな感じで数時間やって、相変わらずクソゲーだと判断してアンインストールした。

Getting Started with GitHub

GitHub をはじめました。手始めに過去のツールのソースコードなんかを順次置いていっています。

過去に何度かツールのソースコードを公開してくれないかという要望が、特に海外ユーザからあったものの、”諸事情”によって敢えてしないという状態でした。最近では時間が経過したことや、BioWare Social Networkが停止したこともあり、構わないだろうという判断によって公開に至りました。

余談ですが、Dragon Age Conversation Readerは、当時韓国で非公式なローカライズツールとして利用されていたようで、その際にデコンパイルして韓国語対応するわ、敢えてつけなかった編集機能もつくわ、バージョン管理機能もつくわと魔改造をされていたのを、ソースコードを整理している最中に思い出しました。一から作った方が早いんじゃないかな。