そぬばこ

備忘録とか、多分そんな感じ。

学内教育系サーバsol, cedにPython 3.xを管理者権限無しで入れて、Jupyter Notebookを手元のブラウザで使えるようにするまで

この記事は、UEC Advent Calendar 2018 - Adventar 17日目の記事です。前日はid:takadanobabauecさんの「カモノハシの支離滅裂な文」でした。


追記 (2021/1/4)

とある筋により、この記事が未だに参照されていることを知りました。 しかし、絶妙に情報が古いため、若干新しいことが書いてあるところに誘導しておきます。

try_datakobo/installing_python3.md at master · nersonu/try_datakobo · GitHub

try_datakobo/installing_jupyter.md at master · nersonu/try_datakobo · GitHub

ちなみに、今ではcedも Anaconda ベースの Python 3系が入っています。


さて、なんやかんやでUEC Advent Calendarも3年目です。まともな記事を一つも書いた記憶がないので、少しはまともな記事を書けるようにやっていきたいと思います。ただ、今年はNimに関する記事が多い中恐縮ですが、Pythonの環境構築の話をしていきます。

経緯

私は、情報工学工房という授業の1テーマである「データ解析と機械学習」に参加しています。このテーマは経営科学系研究部会連合協議会主催のデータ解析コンペティションに出場し、やっていきを出しながらやっていく感じです(わからん)*1。学内の教育系サーバであるsolにコンペ使用するデータを置いてもらったはいいものの、基本的に外部持ち出しが禁じられているので、sol or ced*2で作業せんといけんのう、となりました。

pipのインストール先でも変えてやればなんとでもなるんかなと思っていましたが、solで python3 を叩くと

$ python3 -V
python3: Command not found.

そもそも入ってへんやんけ。といった調子です。一応2系は入ってますよ。めでたいですね。

$ python -V
Python 2.7.5

solには期待しね―わ。とか思っていると、我らがcedには入っていました。めでたい。

$ python3 -V
Python 3.4.5

おっ、まあ3.4.5やと3.5から使えるようになったnumpyの@が使えへんくらいしか困らんし、なんとかなるやんけ。

ところが

$ pip -V
pip 18.0 from /usr/lib/python2.7/site-packages/pip (python 2.7)
$ pip3 -V
/usr/bin/pip3: Command not found.

くぅぅ。面倒くさいのう……。

前置きが長くなりましたが、そんなこんなあり、自分とこのホームの下にpython3の環境作ったほうが早いんちゃう?ということで、やりました。

Linuxbrew を入れる

python3をソースからビルドするんちゃうんかい。と思った方がいるでしょう。solだと問題なかったらしいのですが、cedで試しにビルドしたところ、pipがうまくいかず*3、パッケージ管理システム的なそれを使うほうがええんちゃう?となりました。

別にHomebrewを常に使っているわけではありませんが*4、その時はなんとなく、これを採用したわけです。

念の為、プロキシは通しておきます。.cshrcにでも書いておくと良いでしょう。

$ setenv http_proxy http://proxy.uec.ac.jp:8080
$ setenv https_proxy http://proxy.uec.ac.jp:8080
$ setenv ftp_proxy http://proxy.uec.ac.jp:8080
$ setenv HTTP_PROXY http://proxy.uec.ac.jp:8080
$ setenv HTTPS_PROXY http://proxy.uec.ac.jp:8080
$ setenv FTP_PROXY http://proxy.uec.ac.jp:8080

git cloneでLinuxbrewを入れていきます。好きなところに入れればいいと思いますが、私は$HOME/local/にぶち込んでいます。入れたい場所に事前にディレクトリを作っておきましょう。

$ cd ~/local/
$ git clone https://github.com/Linuxbrew/brew.git

入ったらbrewにPATHを通すのと、cacheの指定をしておきます。.cshrcにでも書いておいてください。

setenv HOMEBREW_CACHE $HOME/local/brew/cache
setenv PATH $HOME/local/brew/bin:${PATH}
setenv LD_LIBRARY_PATH $HOME/local/brew/lib:${LD_LIBRARY_PATH}

ほんでsource ~/.cshrcしときましょう。 特に私の抜けがなれけば、これで任意のパッケージをインストール出来るようになっているはずです。

python3を入れる

brewが使えればこっちのものなので、python3を入れていきます。

$ brew install python3

いつもの🍺が出れば、とりあえずお疲れ様でした。という感じです。

$ python3 -V
Python 3.7.1
$ pip3 -V
pip 18.1 from ...

ced(sol)で入れたbrewのパッケージをsol(ced)でも使えるようにするには?

sol(ced)のほうでもPATHを通せばいいだけです。

cedのホームはsolのホームにある.ced_centosなので、それを考慮してPATHを通してください。

Jupyter Notebookを手元のPCのブラウザで使えるようにする

学外からssh出来る関係上、ここではsolでやることを前提にお話します。

前提としてまずはsol(ced)にIPythonとJupyterを入れましょう。

$ pip3 install ipython jupyter

そうしましたら、後で使うSHA鍵を生成します。passwd()後に任意のパスワードを入力してください。

$ ipython
In [1]: from IPython.lib import passwd
In [2]: passwd()

SHA鍵が生成されたら、次はJupyter Notebookの準備です。~/.jupyter/jupyter_notebook_config.pyを作り、以下のような内容を書いておきます。{生成されたSHA鍵}の部分は先程生成されたSHA鍵に置き換えてください。

c = get_config()

# plot
c.IPKernelApp.pylab = "inline"
# IP
c.NontebookApp.ip = "*"
# password
c.NotebookApp.password = 'sha1:{生成されたSHA鍵}'
# browser
c.NotebookApp.open_browser = False
# port number
c.NorebookApp.port = 8888

ここでのc.NorebookApp.port = 8888は後で行うSSHトンネルで使うポート番号にしておきます。今回は8888にしました。

設定は以上です。そうしましたら、手元のPCからSSHトンネルを使ってsolにアクセスします。<username>は自分のものに置き換えてください。

$ ssh -L 8888:localhost:8888 <username>@sol.edu.cc.uec.ac.jp -Y

そして、Jupyter Notebookを起動します。

$ jupyter notebook

これでsshしている手元のPCのブラウザからhttp://localhost:8888にアクセスし、passwd()の時に入れた任意のパスワードを入力すれば、solで動かしているJupyter Notebookが無事使えるようになります。

もちろんのことですが、先に誰かが8888を使っている場合は、別のところにJupyter Notebookが立つので、注意してください。

役に立つかどうかはわかりませんが、以上になります。たまにsolでの作業中にtopコマンドを叩くと一番上に自分のユーザー名が来ていたりして、情報基盤センターから怒られないかビクビクしながら作業をしています。皆さんも学内の計算機資源を使って(あくまでも教育的目的に限りますが)、プログラムとかをガンガンぶん回していきましょう。

明日はshilfolさんです。

*1:情報工学工房について、詳しくは11日目の記事であるid:reflection4さんのACM-ICPC2018 アジア地区横浜大会 参加記 - りふれろぐを読むと幸せになれるでしょう。

*2:I類、I科の教育系サーバ

*3:OpenSSL周りのエラーで躓く。こっちもローカルビルドとかしてみたけどダメ。ココらへん詳しくなくて解決できなかった。

*4:そもそもMacをメインで使ったことがない

11/29はwhywaitaさんの誕生日でしたが、11/28はえのぐのメジャーデビューシングル発売日でした

この記事は、whywaita Advent Calendar 2018 - Adventar 10日目の記事です。前日はotofuneさんだったようです。

みなさんは、11/29と聞くと何を連想しますか。そうですね、いい肉の日ですね。私はいい肉の日にいい肉を食べるという習慣はありませんが、某チェーン店に行けば、なんとか丼が安くなったりといったキャンペーンをやっていることでしょう。私が知っている中では、確実にこの日にいい肉を食べている方がいらっしゃいます。

id:whywaitaさん誕生日おめでとうございます🎉🎉🎉

しかしよく見ると

これは昨日の画像なんですが、良い肉の日に産まれたデブは今年も良い肉を食べられました

とのことで、これは11/29の前日で11/28であることがわかります。

11/28……🤔🤔🤔

11/28はえのぐのメジャーデビューシングル発売日!

kawaii!!!

唐突過ぎて全然わからないと思いますので、以下のQAリストを読んで、動画を見てなんとなくわかった気になると良くなると思います。

Q. 「えのぐ」ってなんですか?
A. 岩本町芸能社所属のVRアイドルです。鈴木あんず、白藤環、日向奈央、栗原桜子、夏目ハル、の5名で構成されています。

Q. VRアイドルってどんな感じなんですか?
A. こんな感じです。

youtu.be

Q. ライブってどうなってるんですか?
A.こうなってます。

youtu.be

Q. えのぐを知りたい!
A. まずはココらへん見て、もっと彼女達を知ってください。気になったら各動画を見ましょう。

youtu.be

🙆🙆🙆

デビューおめでとうございます🎉🎉🎉

と、いうことで、これはきっとご縁があると思いましたので、id:whywaitaさんに誕生日プレゼントとして「ハートのペンキ」を投げつけ贈りました。 f:id:nersonu:20181209155727p:plain これを読んでいる皆さんはちゃんと、厄介なオタクにならずにwishlistからプレゼントを贈りましょうね。

明日はid:morimolymolyさんです。

ベースボールデータハッカソンのプレイベントと、ハッカソン当日に参加しました

パ・リーグ×パーソル ベースボールデータハッカソン というイベントに参加してきました。

techplay.jp

techplay.jp

概要

私は、分類器に関する研究をしている調布の大学の学部4年生です。野球観戦が好きで、現在、経営科学系研究部会連合協議会主催のデータ解析コンペティションに参加していることもあり、このイベントに興味を持ちました。

雑にイベントの概要をまとめますと、パ・リーグのデータを提供するから、そのデータを使ってハッカソン的な事やっちゃおうぜ!という感じのイベントです。私はそのプレイベントとハッカソン当日2日間分の計3日、渋谷に足を運びました。プレイベントは、元楽天のボブ(川井 貴志さん)がゲストとして登壇されたこともあり、楽天ファンの私としては非常に興奮しましたし、ハッカソン当日では、普段データ分析やKaggleをやっていない私からすると気付きや学びが多く、非常に充実した時間を過ごすことが出来たと思っています。この記事では、ハッカソン当日の2日間について書きたいと思います。

データハッカソン

ハッカソンの概要

日程としては、1日目が10:00 〜 19:00、2日目の10:00 〜 14:30の約1日半で行われました。なお、部門が以下の2つに分かれており、私は「エンジニアリング部門」で同大学の先輩と2人で参加させていただきました。

  • エンジニアリング部門
    • データから決められた部分のデータを予測し、予測精度を競う。
  • コンサルティング部門
    • データから新しい提案を考え、プレゼンする。

エンジニアリング部門で予測したのは、「ある球団のファンクラブの会員が特定の試合に来るか否か」です。

約14万人の会員について、球団主催試合のgame1から42に行ったかどうかが事前にわかる状態となっており、game43, 44, 45に行ったかどうかを予測するといったものでした。

f:id:nersonu:20181008125758p:plain

さらに、1日目途中に半分である約7万人がgame43, 44, 45に行ったかどうかが公開され、元々公開されていたベースボールオペレーションの以下のデータを用いて、予測モデルを考えていくといった感じです。

  • 各投手それぞれの試合毎の成績
  • 各野手それぞれの試合毎の成績
  • 試合の中身が各打席ごとにわかるようになっている時系列データ

f:id:nersonu:20181008131312p:plain f:id:nersonu:20181008131515p:plain

データは基本外部に公開しちゃダメなのですが、ここらへんはプレイベントでも撮影が許可されていたので大丈夫なハズ……

やったこと

私も先輩もデータ解析やKaggleといった経験はなく、私の研究領域の知識とその場しのぎのアイデアでいろいろと考えました。データ整形に慣れていないのもあり、あまり特徴量は増やすことは出来ないのがわかっていたので、何か1つの仮説をもとにすすめることになりました。

その中で出てきた疑問が「野球ファンは何日前にチケットを買って、何を動機にするのか」というところで、私達はそれを「 大体1週間前にテレビやネット配信で観た試合が盛り上がっていれば買うんじゃないか? 」と仮定しました。

そもそも盛り上がってるってなんだ……という話なのですが、せっかくだしこないだのプレイベントで聞いたセイバーの指標を使ってみるか、ということになり、以下のようなデータを用いることにしました。

  • 会員が観た試合の1週間前の試合の、選手のFIPの値の合計
  • 会員が観た試合の1週間前の試合の、選手のwOBAの値の合計

結果、何位だったかわかりませんでした(入賞してないので)ので、どこまでそれが効いたかわかりませんが、オリジナリティは少し出せたか?と思ったり思わなかったりしています。あと、そもそもFIPとwOBAの本来の使い方とは離れているので、正しく効く保証もありませんし、 n日前というのはもうすこし検討するべきでした。

うまくいかなかったこと

そもそもデータ整形に慣れていない、scikit-learnの分類器のパラメータチューニングがうまくいってないといったようなことは、経験で明らかなので省略します。今後のデータ解析コンペで鍛えていければと思います。

研究室の同期が、不均衡データに関する研究をしていたので、彼が教えてくれたSMOTE(Chawla et al. 2002)を今回使ってみることにしました。使ったのはPythonライブラリimbalanced-learnのSMOTE1です。

レーニングデータにそのままSMOTEを使ったのですが、結果としては分類器の結果にも偏りが無くなってしまい、精度が残念なことになりました。今後はデータの特性を理解して、データに対する処理も考えていきたい所ですが、使うにあたってSMOTEに対する理解が深まったのは良かったです。

勉強になったこと

表彰の前に入賞者による用いた特徴量やモデルの解説があり、今後どのように処理していけばいいか非常に参考になる点がありました。XGBoost流行ってるし、やっぱ良さそうということもわかりました。

感想

好きな野球に関するデータを扱えたことは、純粋に楽しかったです。こういった実データを用いた予測ということをなかなかやっていないこともあり、そういったことそのものが新鮮でしたし、普段の研究で私の提案モデルを既知のデータでValidationしてるだけなのとは大きく違うなと思いました。

また、やはり他チームの解説で学びや気付きがあったことが一番の収穫でした。学んだことを、データ解析コンペやこういったイベント等で活かせていければと思っています。

参考文献

Chawla, N. V., Bowyer, K. W., Hall, L. O., & Kegelmeyer, W. P. (2002). SMOTE: synthetic minority over-sampling technique. Journal of artificial intelligence research, 16, 321--357.

3月に読んだ小説

先月全然働いてないなってのを、読書量で知ることが出来る。
二冊とも実家から持ち帰ってきた本で再読。

以下、読み終わった時期が早い順


儚い羊たちの祝宴 (新潮文庫)

米澤 穂信

bookmeter.com

短編集。話の主役となる人々は、どれも不気味で、米澤作品にしては終始暗い印象。
往来のミステリーのリスペクトを終始感じさせつつも、先述の不気味さで独自の世界観を構築している。
人間の悪意が巧みに描かれている。ぜひ、一読を。

蹴りたい背中 (河出文庫)

綿矢 りさ

bookmeter.com

言わずと知れた第130回芥川龍之介賞の受賞作。
青春小説であるにも関わらず、弄れ拗らせた登場人物を描かれている。綿矢先生の主たる特徴が表れている代表的な作品だ。
この拗らせ加減が賛否を生む一つの要因であるのだろうが、それもまた一興である。


以上2冊。
無事、4年次に進級いたしました。これからも、よろしくお願い致します。

大学の実験レポートにおけるあれこれ

3年間大学でレポートを書いてきて思ったことを、なんとなくまとめておきたくなったからまとめる。

過去レポートの扱い

Twitterやサークル等で、1年次実験の過去レポート(以下、過去レポ)をもらうことがあった私は、ここらへんの扱いについて気をつけていたことがいくつかある。
一つは、中身を参考にしないこと。ここでいう中身とは、実験の考察内容といった具体的なレポートの内容を指す。そもそも考察事項なんかは、自分や実験のペアとで考えたことを書く場であって、写してどうこうなるようなポイントでは無いと思う*1
じゃあ過去レポって何を参考にしているんですか?という話になる。私の場合、大学入りたてのポンコツで、しかも、高校の化学等で実験とかをやってこなかったのでレポートの書き方なんて全然知らなかった。体裁だけでもなんとか……、ということでなるべく多くの人間が書いたレポートを欲しがったという感じ。
ちなみに、体裁を参考にするときに見ておきたいポイントが2つある。レポートの大きな流れと、文章そのものの書き方だ。前者は、いわゆる型のことで、1年次に弊学*2*3で行う基礎科学実験ならば、「目的」「原理」「実験方法」「結果」「考察」(「参考文献」)辺りを書くという流れを書くということを理解したいということだ。
後者はレポートを書くにあたっての文章の書き方で、例えば、原理は現在形を使って、方法・結果は過去形を使うといったようなことから、理系文書特有の言い回しが挙げられる。
近年世間を騒がせた改竄や、剽窃の問題もある。不正における信頼の失墜は底知れない、十二分に取扱いには注意すべきだろう。

実験レポートの執筆環境

手書き等の強制や指定があるものを除けば、学生には実験レポートをどのようなスタイルで書くかを選択する権利がある。
ある人はこう言うだろう
「やっぱり大学生たるものOfficeは使えて当たり前、パソコンでWordを使えばサクサクレポートを書けるよ!」
またある人はこう言うかもしれない
「情報系なんだったらLaTeXが当たり前!数式が簡単に書けちまうぜ!」
もしかするとこう言う人もいるかもしれない
「レポート、scrapboxで良くないですか?ダメ?あの先生だと許してもらえなさそう」
これに関する話を私はうんざりするほど聞いた。そして昔は私もLaTeX至上主義派だった。LaTeX至上主義派、つまり、LaTeXが一番!レポートを書くなら絶対こっちのほうがいい。と、本気で思っており、一部の過激派は「まだWordなんて使ってんのダッサ~イ」と言って……
そもそもよく考えてみて欲しいのだが、大まかな形式を守っていれば、大事なのはレポートの中身だ。WordとLaTeXの機能面での優劣はいろいろとあると思うが、簡単にある程度整ったレポートを書きたいならWordのほうが完成が速いし楽だ。プログラムのソースコードを添付するならLaTeXの機能を使えばファイル位置の指定だけで済む。もっと言えば、数学の課題レポートだったら手書きのほうが速い。
つまり大事なのはケース・バイ・ケースだと思う。固定観念に囚われないで、実験や課題にあった環境を選択したいところだ。

実験レポートにどれくらいの時間をかけるべきなのか

弊学*4では、合格すれば、講義は1コマにつき2単位、演習や実験科目は1コマにつき1単位認定される。大抵の人間は、講義におけるテストよりも、レポートを書いている時間のほうが長くなる。私も実際そうだった。そして、思う。
コスパ悪くね……)
テストと違って実験レポートの良い所は、こだわればこだわるだけ、課題をこなせばこなすだけ加点がつくので、点数を稼ぎやすいところだと思っている*5
しかし、先に述べたようにコスパが悪すぎる。時間かけてやっても、2コマで2単位しかつかない。悲しいね。
手を抜けと言っているわけではないが、必要以上に実験レポートに凝りすぎないことは大事かもしれない*6。やるべきことを簡潔に、わかりやすくまとめてさえすれば、教員の方々にちゃんと評価してもらえるのだから、もし、レポートを書くのが楽しくなってきたとしても、少し冷静になることを勧める。

おわりに

本当は、新入生や、これからレポートをまだまだ書く後輩たちに読んでもらえるような記事にすべきなんだろうが、この記事はただの自己満だ。そもそも新入生や17生はあまりフォローしていないので、もしこれを読む機会がなんらかの形であって、なにか聞きたいことがあればTwitter等で気軽に聞いてくれると嬉しい。


*1:そう思うんだけど、全く会ったことのない後輩が、「再レポ食らった!」って言っていて、Twitterにあげてる画像の一文をよく見ると、ぼくが過去に書いたレポートの文章があったので笑ったことがある

*2:電気通信大学のこと

*3:どこかの講義で「弊学」と使ったらへりくだりすぎなので、「本学」で良いと正された

*4:「本学」って書かないとまた怒られるかもしれないけれど、とりあえず「弊学」ってしておく

*5:「そんなことねーよ」とツッコミを受けたことはある

*6:私は、基礎科学実験B(化学実験)において、必要以上に図書館で文献を漁って、評価されない「原理」の部分を特に凝っていた。もちろん、骨折り損のくたびれ儲けである

2月に読んだ小説

2月に読んだものを軽くまとめる。最近ハヤカワ多い。

以下、読み終わった時期が早い順


僕が愛したすべての君へ (ハヤカワ文庫 JA オ 12-1)

君を愛したひとりの僕へ (ハヤカワ文庫 JA オ 12-2)

乙野四方字

bookmeter.com bookmeter.com

これはセットで一冊みたいなものなのでまとめて。
並行世界という概念の存在で起こる、不器用な天才が主人公の話。
設定も凝っていて、SFとしても、恋愛小説としても楽しめる。
けっこうサッと読めるので、本を読まない人にもオススメしておきたい。

最後にして最初のアイドル (ハヤカワ文庫JA)

草野 原々

bookmeter.com

短編3作。パンチの効いた文章で殴りかかってくる。
何かと話題になった一作だったらしいが、読めば雰囲気でわかる。
SF好きなら嫌いになれないとは思う。

そして僕等の初恋に会いに行く (角川文庫)

西田 俊也

bookmeter.com

初恋を精算する話。
終始うまくいかない辺りが、現実的でちょっぴりほろ苦い。


以上4冊。
3月は花粉の季節。やっていきじゃどうしようもないこともある。

1月に読んだ小説

1月に読んだ(読書メーター上読了日が1月となっているもの)を軽くまとめておく。本を読むためにしっかりとした時間を確保することは無くて、いつも通り、新宿調布間の京王線で読んだ。

以下、読み終わった時期が早い順


雨の降る日は学校に行かない (集英社文庫)

相沢 沙呼

bookmeter.com

中学時代、学校に行くのは楽しかったか?
カーストを気にして、取り繕っていた自分はいなかっただろうか?
現実として、そこにある。 誰もが気づいても気づかないフリをしているだけ。
6編からなる短編集。

Just Because! (メディアワークス文庫)

鴨志田一

bookmeter.com

dアニメストアで最終回を見た後すぐに読んだ。
読了後の率直な感想としては、物足りない終わり方ではあったが、アニメと合わせて楽しむのが良いと感じた。
アニメとは違い、瑛太と美緒二人のみの構成になっていて、心情描写の補完と考えて読むのを奨めたい。

君は月夜に光り輝く (メディアワークス文庫)

佐野 徹夜

bookmeter.com

第23回電撃小説大賞、大賞受賞作。
月の光を浴びると体が光る発光病で入院している女の子と、主人公である僕とのラブストーリー。
主の展開はよくあるので、どうなるかは読める。しかし、心情描写がうまく、ラストが感動した。

繕い屋 月のチーズとお菓子の家 (講談社タイガ)

矢崎 存美

bookmeter.com

飯テロ小説。料理の表現がとてもおいしそう。
自分の夢を喰らうちょっと変わった話。夢喰いだとバクを思い出すように、他人にどうにかしてもらうのがよくある話だと思うので、気になった人は一読して欲しい。

ポスドク! (新潮文庫)

高殿 円

bookmeter.com

非常勤講師が主人公。
ポスドクの話と一緒に暮らす甥っ子との話が二重で楽しめた。
「派閥争い」や「家族」といったテーマが好きな人も楽しめる内容だと思う。
設定の甘さや、この登場人物は必要なのか、といった部分が少し残念。


以上5冊。
2月はあまり読めないような気がする。なんとなく。