Pythonの環境構築とか

Jupyter-notebookを去年のソフコンのときに脳死状態で入れたっきりだったので、改めて環境構築した(こちらのPCはMacBookPro)。

環境方針

  • pyenv,pyenv-virtualenvでバージョン管理と仮想環境の下地を作る
  • pyenvpythonのバージョン違いを入れたり、Anacondaをぶち込む
  • Anacondaで仮想環境を作成(ここにJupyterをぶち込む)
  • 仮想環境はローカル内でのみ使用

こんなもんか

実装

詳しくはこちらで確認を

github.com

github.com

  1. pyenvpyenv-virtualenvのインストール
    インストールはhomebrewで行なっていく(pipはインストール済み)。

    brew install pyenv
    brew install pyenv-virtualenv
    インストール済みだったらそれぞれバージョンのアップデートを忘れずに。

  2. パスを通す
    pyenv install --listでインストールしたいpythonのバージョンを確認して (| grep <バージョン名の一部>追加した方が楽か)pyenv install <バージョン名>でインストール。
    pyenvでインストールしたバージョンを使うにはパスを通しておかないと、Macに最初から入っているものが使用される。 というわけで.zshrcにパスを記述する。

    pyenvに関する設定
    export PYENV_ROOT="$HOME/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init -)"
    export PATH=$PYENV/shims:$PATH
    pyenv-virtualenvの設定
    eval "$(pyenv virtualenv-init -)"

  3. pyenvでバージョンの設定
    今の状態だとインストールしたバージョンが使えないため、pyenv global <バージョン名>で設定を行う(この場合は全ての場所で設定したバージョンが使用可能)。
    今回は実際に開発するディレクトリ内でpyenv local <Anacondaのバージョン名>を設定する。これによって、コマンドを入力したディレクトリ内に.pyenv-versionが作成される(この中にpythonのバージョンが書かれている)。pyenv localを設定したディレクトリ以下ではglobalで設定したバージョンとは違うものを使用できる。
  4. Anacondaの仮想環境作成
    Anacondaを使用できる環境に移動して仮想環境を作る。
    conda create -n <仮想環境名> python=<使用するpythonのバージョン名> anaconda jupyter
    これで、Anaconda内のモジュールとJupyterが仮想環境で使える。
  5. 仮想環境のアクティベート
    Anacondaの仮想環境をアクティベート(使用可能)にするには去年は
    source ~/.pyenv/versions/anaconda3-4.3.1/bin/activate <仮想環境名>
    のようにパスの指定をしないとできなかったが最近はcondaのコマンドでできるようになったらしい。
    condo activate <仮想環境名>
    仮想環境を止めたいときは
    conda deactivateとすればいい。

JupyterはJupiter-notebook &のようにバックグラウンドで動かしてます(ターミナルを閉じたい人はnohup jupiter-notebook <ログファイルの書き込み?>をしてるらしい)。

余談

pythonのバージョン3.7にTensorFlowをぶち込んだらボロクソに怒られて初手で詰んだ。

gitに関するあれやこれ

enpitのあたりからgitを使い始めてから結構たったので、なんか書いとく

とりあえず、gitやGitHubが使える環境になっている前提で書きます。 (環境構築は下の見ればできるんじゃない?)

qiita.com

gitの基本的な使い方

gitの使い方は基本的に以下の通り

  1. git add <ファイル名> 変更を登録したいファイルを指定する(全ファイルを指定する場合は*でOK)。
  2. git commit -m <コミット名> 先のコマンドで登録したファイルの変更を確定する。
  3. git push <ブランチ名>

gitでのファイル変更はファイル内の内容の変更だけでなく、追加や削除も含まれている。
git commitの場合は-mを指定しないとコミット名を設定できない。 また、コミットするときは機能ごとに分けて行なった方がいい (ページ作成なら、レイアウトに関するファイル群をコミット、処理内容に関して変更したファイル群をコミットといった具合)。

最初の頃に困ったのは、master等の現在作業中のブランチ元が更新されたときのブランチの修正方法。 最初はもう一回クローンし直して、作業内容をコピペするとかいうアホなことをしていたが、ブランチ元を更新すれば簡単に修正できる。

  1. git pull <元のブランチ> masterが更新されたなら、自PCのmasterを更新する。
  2. git checkout <ブランチ名> ブランチの変更
  3. git merge <01のブランチ> 親ブランチの更新内容を現在のブランチにも反映

gitの初期設定

gitで管理するにあたって、最初の設定は非常に重要だと毎回思い知らされる。
特に、SwiftやUnityとかだとそれが顕著に表われてくる。 gitの設定をせずにそのまま管理し始めると、個人の設定ファイルもそのままコミットされて修正するのも大変だし、 GitHubにアップロードできるファイルサイズは決まっているため、ライブラリも管理させてしまうとアップロードできなくて詰む(抜け道はあるにはあるけど)。
gitには管理させたくない(作業内容として追加や変更をさせたくない)ファイルがあるときに使用するのがgitのリポジトリを作った際にできる .gitignoreである。 このファイルにgitに管理させないファイルのパスを書いとけば、それで設定終了である。 あと、何も設定をせずにgitの更新を指定しまって、後から管理させないようにするにはgitのキャッシュを消す必要が出てくる。
.gitignoreの書き方はGitHubに各言語やIDEごとにテンプレが存在する。
github.com

後、http://gitignore.io では指定した言語やIDEのテンプレを出力してくれるのでこれをコピペしてもOK。
SwiftだとCocoaPodsによって導入したライブラリをgitで管理しないように設定している。

Rから逃げるな!!----番外編:gfortranの依存関係

Rのライブラリtopicmodelsやtmをインストールしようとした際、あるエラーに躓いたので記録を残しておきます。

  • 起きた問題
  • 解決方法

起きた問題

install.pacakeg()でtopicmodelsやらをインストールしようとするとパッケージslamがないのでインストールしてとメッセージが。というわけでインストールしようとしてyesとしたら途中であるエラーが。

f:id:qvel:20180505162816p:plain

f:id:qvel:20180505162842p:plain

実際にエラーが確認できるのは2枚目の写真です。どうも、gfortranのライブラリにアクセスしようとしてもディレクトリがないらしい。

そこでgfortranを入れようと思ってググると、どうもgfortranがgccにひとまとめにされているらしいのでHomebrewでbrew install gccとしてみた。(これが完全なる罠である)

インストールも終わったので、解決できるだろうと踏んでいたが、同じエラーが出現。

Rはgfortranがgccにまとめられてもそこらへんの対応はまだしていないそうで。

解決方法

日本語では記事になっていなかったので英語で調べてみたらいいものがあった。

Rcpp, RcppArmadillo and OS X Mavericks "-lgfortran" and "-lquadmath" error - The Coatless Professor

こちらの記事でも同様にgfortranに関するエラーについて記述している。

こちらではRのバージョンに関しても考慮して書かれているのおすすめです。

結局の解決策(R3.4.*の場合)はgfortranを単体でインストールすること。

そのためには下記のリンクからgfortranを自身のOSにあったものをダウンロードしてインストールするだけ。

これだけでtopicmodelやtmのライブラリはインストールできました。

リモートでうどんを啜る

UDONPyという勉強会にリモートで参加しました。そういえば沖縄は勉強会やってるけど、香川は何かやってるっけ?となってConpassでちょっと調べてみました。

そしたら何とUDONPyなるものがあり、リモート枠もあったのでノリと勢いで参加してみることに。

udonpy.connpass.com

感覚としてはPythonBeginnersと同じもくもく会に似て、自分で設定した課題を勉強していました。ちなみに自分は機械学習の教科書を使ってNumpyの使い方をヒイコラしながら覚えてました。

余談

 勉強会とは直接関係はないですが、Python Boot Campというものを教えてもらって場所が確保できるならやらない?と声をかけてもらいました。321借りれるかなぁ?

enPitの感想?

enPitの修了式があったので、何で参加したのか振り返ってみる。

何で参加したっけ?

正直に言うとどこでenPitを知ったのかまるで覚えてない。知ったのは4月下旬ごろだったと思う(RyukyuFrogsと一緒に自習室にアホみたいに資料が積んでた)。

大学に入りたてだったので、(自分にとっては)編入生の懸念だと思うコミュニティ作りや大学生活に対して何の理由もなく異常に焦りを抱いてました。せっかく沖縄に来たのに何のイベントにも参加せず、適当に授業受けて単位を回収するだけなら何でわざわざこんな場所にきたんだ?(坂が多い、駐車場は埋まってる、暑いetc)と言うのが理由の一つ。チーム開発だ何だと載ってたのであわよくば知り合いを作れるんじゃね?というのがあって参加したと記憶してます。

参加理由は色々あるけれど、何で参加したの?と言われたらノリと勢いとしか言いようがない(計画性の欠片もない)。5年間同じ場所に篭っていたところから、沖縄という新天地に来たんだから保守的じゃなくてやりたい放題やっちまえ!!(頭にツノ生やしてる奴もいるし普通でしょ)と思って参加しました。

enPitに参加する前にしたこと?

情弱だからアジャイル開発なんて言葉、アの字すら聞いたことのなかったので、一応琉大のenPitのサイトを調べてみたし、文部科学省の公式サイトも調べてみた。

enPiT-BizSysD at IE-Ryukyu – Welcome to enPiT BizSysD at 琉球大学情報工学科.

bizsysd.enpit.jp

今でこそ琉大のenPitのサイトは情報が充実しているが、去年はサイトがあるだけで実際どんなスケジュールで行われるのか何も書いていなかった(学部生向けは去年が最初だったけ?)。さらに最悪なことに琉大が所属している分野がビジネスシステムデザイン分野という他の組み込みやビックデータ分野と比べて何やるんだよとなったことは覚えてます(とりあえず使うものとしてWebフレームワークとは書いてた)。

なので、プログラミング的なことに関して言えば、enPitの講義等が開始されるまで何もやってませんでした。

そんな頃にie-newsにJava Kücheでアジャイルのお話をしますというイベントがあるという情報が流れた。内容を見てみるとちょうどいいことに実際にアジャイルによる開発を行ったお話とenPit2の前身にあたる院生の方がenPitを通した発表をするとあって、アジャイルをenPitを知りたきゃこれに参加するっきゃねえ!!と思って参加しました(尚、このイベントが初参加で服装が分からずスーツで行ったのは黒歴史です)。

java-kuche.org

そのイベントで企業の開発体系の実態だったりとかなぜアジャイルという開発手法が生まれるようになったのかを知りました(モダンアジャイルの4つの原則の内、なぜSafetyではなくANZENなのか、それはセクシーだから)。 

そんなこんなで実際にenPitをやった人からどんな感じでやっていったのかも聞けたので(Fist to Five!!)いくらか何をやるのか分かった感じです。

最後に

結局やったのはイベントに参加するぐらいでenPit参加前はなにもやってません。参加しようかどうか迷ってるのなら参加してしまえ。大丈夫、一度踏み出してしまえば後は落ちるか進み続けるだけだ。

Rから逃げるな!!----第1回:基本操作から逃げるな!!

どうも,Rを使ってPythonに速攻で逃げたくなりました。でもRから逃げることができなかったので、備忘録的なものを残していきます。

とにもかくにもチートシートが欲しい

Rの基本操作が分からないのでまあ色々調べましたが、少し独特なのでコマンドのチートシートが欲しい。なので、動かすのに最低限必要なものをまとめていきたい。

コマンド 概要
x=c(要素1,要素2,・・・,要素n) ベクトルを代入(,で要素ごとに区切る)
x=matrix(要素11,要素21,要素12,・・・,要素N2,nrow=N[列数],ncol=2[行数]) 行列の作成(通常は要素が縦で挿入)
plot(x) ベクトルの二次元プロット
barplot(x) 棒グラフのプロット
install.packages("パッケージ名") パッケージのインストール
library(ライブラリ名) インストールされているライブラリの読み込み

とりあえず随時更新したい。

編入生の集いやら何とやら

サークルの勧誘を途中で抜け出して、ツイッターで突然回ってきた「編入生の集い」というものにスタッフとして参加しました。去年入学した時は六人の編入学生が出身校も取得科目も何もかも違ったので、自分たちで色々やらないといけなかったため、こういった集まりに顔を出しに行こうとは思わなかったなぁと。

何で行ったの?

参加した理由は上の編入学生と何の交流もなかったのと、この時期は不安定だったなということで参加してみました。去年であれば情報工から二人も来れば十分かなといった感じですが、今回は情報工から全員きてましたね。いやあ驚き驚き。

一応編入学生とは顔合わせはしていたけれど、今だに名前を名乗ったことすらなかったので今回ようやく自己紹介をした形になりました。後はこっちきてから何やっただとか困っただとかのまあ普通のお話を。

最後に

この時期はグループに混ざれるのか不安なのと勝手が分からなくてビクつくかもしれませんが、まあ6月にもなれば話す人も増えるので過剰に心配しなくてもいいかなぁと。

去年のB3の方には本当にお世話になったので、自分も少しでも役に立てたのなら嬉しいと思います。

余談

何でこんな企画を突然やり始めたのかと思ったら、九工大にいたことのある先生が協力したとのこと。 確かに九工大は受験前日にも編入生用の座談会とかで編入生サポートが他よりも充実していたから成る程なぁと。