読者です 読者をやめる 読者になる 読者になる

りあるふぁいとぷろぐらまー

IT系の技術ネタと格闘技(ブラジリアン柔術)ネタを徒然なるままに綴る予定。

由比ヶ浜での開発合宿でTensorFlowを使って競馬の着順予想に挑戦した話

久しぶりすぎるブログを更新です。 前回の開発合宿以来です。 2月10日(金)〜 2月12日(日)までの3日間で由比ヶ浜で開発合宿をしてきました。

発表資料

資料の補足

  • DeepLearningで競馬の着順予想に挑戦(競馬ど素人&DeepLearningど素人)
    • やったことは資料のとおりで、ベーシックな感じ
    • 前処理むずい
    • ちゃんとやれば面白そうだから、引き続き継続してやってみる
  • サトノクラウンかヤマカツライデンを1着予想
    • 結果、サトノクラウン1着
    • 馬券は買ってない(買っておけばよかった。。。)
    • リアルタイムでレースを見ていたが、ちょっとドキドキした(マカヒキの恐怖)
    • コード見直したら、丸めミスってた。。。

(追記) スライドの最後のほうに書いてますが、こちらで明記してませんでした。

サトノクラウンかヤマカツライデンを1着予想

順位づけの際の丸め処理をミスったため、厳密にいうと ヤマカツライデンを1着、サトノクラウン2着予想ということになってます。 誤解を招いて、申し訳ありません。

成果発表風景

f:id:RealFightProgrammer:20170213214707j:plain

開発合宿雑感

  • 開発合宿はアウトプット最優先
    • 2泊3日しといて「何の成果も得られませんでした!」って言えない
    • リファクタリング諸々は終わってから
  • pythonが内輪でブーム
    • 参加者7人中3人(自分含めて)がpython機械学習
    • pythonいいのがなんとなくわかった気がした

お宿

光と水の邸宅[一休.com]

広いお部屋で集中して開発に専念できました。

近くに海

綺麗でした(入ってない) f:id:RealFightProgrammer:20170212212658j:plain

エフェクトかけてみる f:id:RealFightProgrammer:20170212212718j:plain

f:id:RealFightProgrammer:20170213214716j:plain

エフェクトかけてみる f:id:RealFightProgrammer:20170213214728j:plain

最後に

今回はベーシックな機械学習に挑戦してみた。 まだ色々できそうなことがあると思うので、引き続き頑張る。

京都での開発合宿でOSSコミッタになった話

久しぶりすぎるブログを更新です。 8月11日(木)〜 8月13日(土)までの3日間で京都で開発合宿をしてきました。

発表資料

資料の補足

  • 今回VSCodeVimにコントリビュートした
    • コミッタが大歓迎してくれて、すごいありがたかった
    • すべてのOSSがこんなに優しくしてくれるわけではないのかもしれない
    • 実は運がよかったかも
    • でも、それ以上にいろんなモノに触れられるチャンスがあって世界が広がる

開発合宿雑感

  • 開発が捗りやすい環境
    • 最後に成果発表の時間を設けることによる程よいプレッシャー
    • みんなガリガリ開発しているから、自分も頑張らないといけなくなるという雰囲気(自分は好きです)
    • 近くにコンビニがあるから、RedBullいつでも買いに行ける
  • 事前準備大事
    • ある程度やりたいことを決めとくといい具合にスタートダッシュが切れる
  • みんなポケモンGOしすぎwww

お世話になった宿?お家?

Airbnbで予約。 www.airbnb.jp

印象は

  • 駅から近くで便利
  • 近くにスタバある
  • 近くにコンビニ(サークルK)があるから、いつでもRedBull買いに行ける
  • ちょっと歩けば、鴨川見れる
  • 16人で寝れなくもないけど、9人で一杯一杯

こんな感じ。

ご飯

京都のご飯はことごとく旨い!!!

tabelog.com

f:id:RealFightProgrammer:20160813212528j:plain

tabelog.com

f:id:RealFightProgrammer:20160813212749j:plain (写真にそばが写ってませんが、そばめっちゃ美味しかったです)

tabelog.com

まんまるの月はリーズナブルでかつ、うまかった。

f:id:RealFightProgrammer:20160813212541j:plain f:id:RealFightProgrammer:20160813212602j:plain f:id:RealFightProgrammer:20160813212554j:plain

風呂

www.kyo1010.com

昔からありそうな古の銭湯。 東京にはないいい雰囲気でした。

夜は?

ちはやふる上映会

f:id:RealFightProgrammer:20160813211849j:plain

番外編:近江神宮ちはやふるごっこをしてきた

f:id:RealFightProgrammer:20160813212250j:plain

っていうだけです。

最後に:京都での開発合宿は?

誘惑が多すぎる。 開発合宿をするのなら、鉄の意志が必要ですので、あしからず。 カモネギがいるらしい

第1回ペパボテックカンファレンス参加レポート

渋谷のセルリアンタワーGMO Yoursにて第1回ペパボテックカンファレンスが開催されたので、参加レポートです。

開会の辞

なぜ、開いたか

あんちぽくんさんより

  • 色んな会社が自社のテックカンファレンスをやっているので、やってみたかった
  • 領域が広い → 普段やっていることを話せば面白いかも

これからのペパボの技術 by あんちぽくんさん

speakerdeck.com

  • ペパボがなにを考え思いエンジニアリングしているのか
  • これからどうエンジニアリングするのかを話していく

これまでやってきたこと

  • 技術基盤の改善
    • 基本事業部制で縦割りだったのを技術基盤チームを作ったことで横につなげた
    • 技術的な改善&エンジニアが言うことを聞き入れてくれる組織作り

CTOとは

  • 経営をすることのみ
  • それ以外はない
  • 経営の中で技術を担う

今後の技術的展望

1.マイクロサービシーズ化

  • 色んな言語で細分化して小回りがきくようにする
  • 一つの大きいモノリシックなサービスを分割する
  • 移り変わる環境に対して、柔軟に対応できるように
  • 一つの言語技術に依存するのはリスキー

2.インフラのクラウド

  • 今までオンプレ環境
  • 機動的にする

3.次世代ホスティングサービスの提供

  • ペパボはロリポップから始まった
  • 大きい事業の一つ
  • 使いやすくて、わかりやすくて、安全なサービスの提供していく

4.モバイルシフト

  • minneアプリをきっかけにネイティブにも注力

ペパボのエンジニア

  • エンジニアに関する制度は面白かった。
  • 評価制度
  • 半期ごとにぐるぐるまわす
  • エンジニアを評価するのはエンジニア
  • 全てが公開されたプロセスで行われる
  • プルリクベースで行われる
  • WIP でやることをあげる
  • レビュー
  • プルリクに対する評価
  • 半期中にコミットを重ねて行く

ペパボで働くということ

  • 多種多様な自社開発サービスを提供している
  • そこにいるだけで成長できる環境が理想
  • 学習におけるタイプ

Nyah ~ ポチポチするためにニャーニャーしよう ~ by ボブさん

www.slideshare.net

  • Nyah とは
    • 名前に遊び心を感じる
  • 仮想インフラ基盤(Iaas) プライベートクラウド
  • 2014年夏にオープンスタックやることに
  • PackStack試してみたけど、簡単そうにみえてめちゃ大変だった
    • etc/init.d/open がカオス
  • 2014 年秋
  • GMOインターネットの人に聞いた
  • グループシナジーがステキ
  • AWS とOpenstack
  • AWSでできることはOpenstackでできることもある

Consulは全自動オーケストレーションの夢を見るか? by udzuraさん

www.slideshare.net

  • Consulとは
    • サービスディスカバリ
    • ヘルスチェック
  • Raft Consensus Algorithm

Q:Consul 入門から始めるにはどこから手をつければいいのか?

A:Getting Started - Consul

www.consul.io

  • Docker でやるとめんどい
  • Vagrant でお互いみえるようにするかAWS使った方がいいかも

自分自身、インフラ周りに疎いことを痛感しつつ、あまり理解できず、メモれてなかっただけにこの質問は大変ありがたかった。。

Angular JS の継続的バージョンアップ by nessyさん

www.slideshare.net

  • 検索キーワードで人気らしいけど。。。
  • Angular は難してググらないとわからないwww
  • 「止まっているのはそれだけでバグ生んでるのと一緒」
  • Angular のバージョンアップするにすべきこと
    • バージョンアップを見据えた実装
    • テスト
    • 他技術のキャッチアップ
  • Angular2について
    • 一番恩恵を受けれそうなのはTypeScript
    • Coffeeはちょっと負債になりつつある?

ECサービスの負荷テスト by おいちゃんさん

speakerdeck.com

事の発端

  • 何かが来た。。。
    • 正体は大型店舗のタイムセール
    • Twitterで告知が盛り上がった
  • エラーの内容が怖すぎる。。。
  • 商品購入できない、ページが重いなどの障害も発生
  • 今回は負荷テストにフォーカスを当てて話す。

負荷テスト(準備)

  • 負荷テスト用の環境の構築どうする??
    • 本番環境のアクセス数が少ない時間帯で慎重に実施
    • 負荷試験中止の閾値を設定
  • ツールたくさんあるけど、どうする??
    • gatlingってのがあるらしい。
    • Scala
    • テストシナリオをコードでかける
    • ブラウザでの操作を記憶する機能がある
    • JMeterよりイケてそう

Gatling Project, Stress Tool

負荷テスト(実施)

  • 改善前に負荷テストを実施し計測結果をいくつか計った
    • 1回目:瞬間的にあげてった
    • 2回目:継続的にユーザー数をあげてった
    • テストパターンを変えて計測していくところは当然っちゃ当然だけど、大事な工夫
  • 改善後
    • 継続的な負荷をかけていった

まとめ

  • Gatlingよさげ
  • 実施環境は考えるべき
  • 負荷試験といっても、負荷のかけ方は2パターンある
    • 瞬間的
    • 継続的

おから(仮)~ngx_small_lightとngx_mrubyで作る動的画像変換サーバー~ yano3さん

動的画像変換とは

  • 従来のよくある画像変換
  • アップロード時にいくつかサイズをリサイズ済みの画像を作成(静的)
  • 画像サイズの変更を伴うデザインの変更が柔軟にできる

動的画像変換サーバ おから(仮)

  • 幅・高さを指定してリサイズ
  • 画像形式の変換
  • ngx_small_lightは動的画像変換モジュール
    • これだけで画像変換できるけど、問題点はいくつかある
    • URLの仕様を変えたい
    • 悪意のあるユーザーへの対策
  • ngx_mrubyはmrubyを使ってnginxを生業
    • mrubyは軽量なRuby
    • nginxの設定だけだとちょっとつらい
    • mrubyなら楽々かける

BitcoinとRippleの共存について by わっかむさん

www.storyboards.jp

  • BitCoinとはインターネット上でやりとりされる価値を持ったデータ
  • BitCoinの特徴:P2P
  • Ripple
  • 仮想通貨・法定通貨を送るためのプラットフォーム
  • ちょっと内容がロックすぎて、あまりメモとれてなかった。。。

WebGLを社内で勉強し始めた by imoさん

  • WebGLの話
  • 社内でWebGL勉強会始めた
  • wgld.org をベースに読書会

wgld.org

終盤になり、集中力切れてます。。。

見積もりと計画づくりの技術 by kenchan さん

speakerdeck.com

  • 見積もりと計画づくりの目的
  • 読み・書き・そろばんができて当たり前
    • 読み → コードリーディング
    • 書き → コーディング
    • そろばん → 見積もり
  • 見積もりができるとは??
    • 問題領域が理解できている
    • 自分の能力を理解している
  • 不確実性のコーン
    • プロダクトの初期の時点では見積もりの振れ幅が大きい
    • おわりに近づくほどわかる
    • 最後にならないとわからない
  • 正確性と労力の関係
    • やるだけ無駄になっちゃうのは良くないね
  • 正解にたどり着けない見積もりと計画づくりは無駄なのか??
    • 誰が主体となり何のために行うのかを明確にする必要がある
  • 相対規模見積もりがいいとされているのは「人間が相対的な比較が得意」だと言われているから??
  • ストーリーの分割
    • ストーリーに分割
    • タスクに分割
  • pivotaltracker で計画作り

www.pivotaltracker.com

すごいいい話なんだけど、アジャイルなどを一通り理解して実践してれば、もっと理解できるのだろうな。。。

私の半生~ものづくり人生~ by nakajijapanさん

speakerdeck.com

  • エンジニアのタイプ
    • 書くまでのプロセスが好きな人 -ものを作るのが好きな人
  • プロダクトドリブン
    • 手段の目的化上等
  • フィードバックループ
    • 欲しい技術に目をつける
    • 作る
    • リリース
    • 振り返る
  • 作りきる
  • アウトプット

hubotを用いたChatOps入門 by じっぱーさん

www.slideshare.net

  • ちょっと弄ったことのあるHubot
  • Hubotの構成とかは意識してなかったので、整理できた

MySQLを4.0から5.0を経由して5.6へバージョンアップした話 by ぼいらーさん

www.slideshare.net

  • 1テーブル200GBって。。
  • インフラ周りのめっちゃすごい人とデキるテスターをすごい推してたけど、ちゃんと順を追って?考えて?地道にやってたんだろうな
  • 周りの開発メンバーに注意喚起しているところとかは「うんうん」って感じですた

雑記

  • 長い修行だった。。。
  • 最後の方は完全に集中力きれてました。ごめんなさい。
  • 多様なサービスを提供しているからか、話の内容も多岐に渡っていて、面白かったです。
  • 個人的にはおいちゃんさんの負荷テストの話が身近なところに感じた。
    • Gatlingよさげ
  • 普段、触らない分野の話も聞けたので、新鮮だった。

こんな感じ?? また、何かあれば追記します。

Docker で Selenium Grid による並列実行環境を構築

前提

  • Docker インストール&設定済み

Docker 超入門 〜 Boot2Docker 導入から HelloWorld まで〜

Docker Image 取得

View Public Profile | Docker Hub Registry - Repositories of Docker Images

から selenium/hub と selenium/node-chrome-debug をとってくる

$ docker run -d -p 4444:4444 --name selenium-hub selenium/hub
$ docker run -d -v /dev/urandom:/dev/random -P --link selenium-hub:hub selenium/node-chrome-debug:

でHub と Node を起動

boot2docker ip確認

$ boot2docker ip

コンテナ確認

$ docker ps

CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                     NAMES
e5cb8aa82960        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   25 hours ago        Up 5 seconds        0.0.0.0:49154->5900/tcp   gloomy_sinoussi
d495bfc3d1dd        selenium/hub:latest                 "/opt/bin/entry_poin   25 hours ago        Up 4 minutes        0.0.0.0:4444->4444/tcp    selenium-hub

ポート確認

$ docker port e5cb8aa82960

5900/tcp -> 0.0.0.0:49154

下記へアクセス

http://<boot2docker-ip>:4444/grid/console

f:id:RealFightProgrammer:20150411162837p:plain

VNCへ接続する

Macでのboot2docker は VNCクライアントが既に入っているので SafariかAlfredで下記にアクセス

vnc://<boot2docker-ip>:49154

パスワードが聞かれるので、デフォルトは「secret」を入力すると、こんな画面がでてくる。

f:id:RealFightProgrammer:20150411180914p:plain

selenium grid上で seleniium webdriver を動かしてみる

サンプルスクリプトはこんな感じ

# google.rb

require 'rubygems'
require 'selenium-webdriver'
 
driver = Selenium::WebDriver.for :remote, url: 'http://<boot2docker-ip>:4444/wd/hub', desired_capabilities: :chrome

driver.navigate.to "http://google.com"
driver.save_screenchot "google.png"

driver.quit

ruby google.rb で実行!!

f:id:RealFightProgrammer:20150412183415p:plain

スクショとれてますよ〜。感動!!

ノード数を増やして、並列実行やってみる

figを使ってみる。

brew install fig

yaml形式です。

# docker-compose.yml

hub:
  image: selenium/hub
  ports:
    - "4444"

node:
  image: selenium/node-chrome-debug
  ports:
    - "5900"
  links:
    - hub

起動してみる

$ fig up -d

Creating seleniumgrid_hub_1...
Creating seleniumgrid_node_1...

ノード数を増やしてみる

$ fig scale node=10

Creating seleniumgrid_node_2...
Creating seleniumgrid_node_3...
Creating seleniumgrid_node_4...
Creating seleniumgrid_node_5...
Creating seleniumgrid_node_6...
Creating seleniumgrid_node_7...
Creating seleniumgrid_node_8...
Creating seleniumgrid_node_9...
Creating seleniumgrid_node_10...
Starting seleniumgrid_node_2...
Starting seleniumgrid_node_3...
Starting seleniumgrid_node_4...
Starting seleniumgrid_node_5...
Starting seleniumgrid_node_6...
Starting seleniumgrid_node_7...
Starting seleniumgrid_node_8...
Starting seleniumgrid_node_9...
Starting seleniumgrid_node_10...

増えてる。増えてる。
コンテナ確認

$ docker ps


CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                     NAMES
848cfbfea229        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   27 seconds ago      Up 21 seconds       0.0.0.0:49165->5900/tcp   seleniumgrid_node_10
aefd6e22fc38        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 22 seconds       0.0.0.0:49164->5900/tcp   seleniumgrid_node_9
31a5deab92f6        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 23 seconds       0.0.0.0:49163->5900/tcp   seleniumgrid_node_8
9a1f2b57d2fd        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 24 seconds       0.0.0.0:49162->5900/tcp   seleniumgrid_node_7
e8248a7f54f1        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 25 seconds       0.0.0.0:49161->5900/tcp   seleniumgrid_node_6
3ffe25779686        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 25 seconds       0.0.0.0:49160->5900/tcp   seleniumgrid_node_5
112ab5748233        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 26 seconds       0.0.0.0:49158->5900/tcp   seleniumgrid_node_3
1cd0614af078        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 27 seconds       0.0.0.0:49157->5900/tcp   seleniumgrid_node_2
f205fe9716a0        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   28 seconds ago      Up 26 seconds       0.0.0.0:49159->5900/tcp   seleniumgrid_node_4
04690c0dcea8        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   56 seconds ago      Up 55 seconds       0.0.0.0:49156->5900/tcp   seleniumgrid_node_1
64cecc30b7b2        selenium/hub:latest                 "/opt/bin/entry_poin   57 seconds ago      Up 56 seconds       0.0.0.0:49155->4444/tcp   seleniumgrid_hub_1
e5cb8aa82960        selenium/node-chrome-debug:latest   "/opt/bin/entry_poin   26 hours ago        Up About an hour    0.0.0.0:49154->5900/tcp   gloomy_sinoussi
d495bfc3d1dd        selenium/hub:latest                 "/opt/bin/entry_poin   26 hours ago        Up About an hour    0.0.0.0:4444->4444/tcp    selenium-hub

増えてる。増えてる。

$ docker port seleniumgrid_hub_1

4444/tcp -> 0.0.0.0:49155

http://<boot2docker-ip>:49155/grid/console

へアクセス。
増えてる。増えてる。

f:id:RealFightProgrammer:20150412185517p:plain

並列実行する際は

driver = Selenium::WebDriver.for :remote, url: 'http://<boot2docker-ip>:49155/wd/hub', desired_capabilities: :chrome

にして実行すれば流れる感じっすね。

Special Thanks

Docker Hub の Selenium Hub/Node イメージ + fig で Selenium Grid 構築してみた - Thanks Driven Life

Docker で Selenium Grid の環境構築をもっと楽に! | Cybozu Inside Out | サイボウズエンジニアのブログ

View Public Profile | Docker Hub Registry - Repositories of Docker Images

Docker 超入門 〜 Boot2Docker 導入から HelloWorld まで〜

boot2docker インストール

brew install boot2docker

初期化やら設定やら

boot2docker init
boot2docker start
$(boot2docker shellinit)

とりあえず、Hello World

docker run ubuntu echo hello world

hello world

番外編:こんなエラー出たら?

FATA[0000] Post http:///var/run/docker.sock/v1.16/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

環境変数の初期化を忘れてましたね。。。

$(boot2docker shellinit)

で解消。

Special Thanks

Mac OSXでDocker(インストール編) - そごうソフトウェア研究所

雑記

これぐらいの内容でエントリ書くなよって感じが満載ですが、これは次のエントリを書くための前準備になるので、一応記事として残しますた。。。 こんな記事でもお役にたてれば幸いです。。。

PyData.Tokyo Tutorial & Hackathon #1 参加レポート

2015/03/07(土)に渋谷クロスタワーのデンソーアイティーラボラトリで開催されたPyData.Tokyo Tutorial & Hackathon #1に参加してきたので、そのレポートです。

環境構築編

Tutorial & Hackathon #1 - pydatatokyo site

anacondaを使って導入する方法も紹介されてましたが、pipを使いたかった気分だったので、下記で環境構築しました。

Macなので

brew install pyenv
brew install pyenv-virtualenv

インストールリストを確認

pyenv install -l

python3.4.2を導入

pyenv install 3.4.2
pyenv global 3.4.2

あとは必要なライブラリをpip install しようとしたら

pip install ipython[notebook]

で下記のエラーがでたので、軽く調べてみた。

no matches found: ipython[notebook]

依存ライブラリをpip install する必要があったのね。

pip install pyzmq
pip install jinja2
pip install tornado
pip install jsonschema
pip install ipython

下記のコマンドを実行してhttp://localhost:8888/が起動されればOK

ipython notebook

PyData.Tokyoについて シバタ アキラさん

PyData.Tokyoの活動内容の紹介etc

下記の本の紹介がされてました。 pythonやデータ解析をやっていく上で、これから参考になるかも。

チュートリアル第一部「Data Handling」池内 孝啓さん

PyDataTokyoTutorial_DataHandling

  1. Pandasによるデータの読み込み、前処理、集計の方法
  2. maptloblibによるデータの可視化
  3. Pandasとmatplotlibを利用して、今回利用するデータの性質の考察

ちょろっと紹介されたhttp://nbviewer.ipython.org/のmatplotlibのグラフがかっこいい。
前処理大事なんだろうなぁっていうところがちょこっとわかった気がしました。
前処理のスペシャリストを前処理ストというらしい

チュートリアル第二部「Machine Learning」田中 秀樹さん

pydatatokyo_tutorial_ml

  1. ライブラリのインポートとデータの準備
  2. ジェンダーモデルによる生存者推定、推定値の評価
  3. ロジスティック回帰による生存者推定
  4. 交差検証(クロスバリデーション)
  5. 決定木(Decision Tree)による生存者推定
  6. グリッドサーチ

過学習あたりから理解度が怪しくなってきたので、もう一度見直す必要ありっすね。

トレーニングデータと同様に、Kaggleに投稿するテストデータからも生存者を推定する所の演習問題の回答は下記

x_test = df_test['Sex']
y_test_pred = x_test.map({'female': 1, 'male': 0}).astype(int)

Kaggle初投稿には感動を覚えた。

懇親会

  • そこそこセミナーや勉強会に行ってるのに、初のビール&ピザのビアバッシュ
  • ゆるい雰囲気の中、ハッカソン組のプレゼンを聞けて、勉強になりました
  • チュートリアルで簡単にAccuracyを出してましたが、自力じゃ絶対無理だなと再認識

雑感

  • バージョン違いとかで苦しんでた人がいたみたいなので、環境構築ちゃんとやっといてよかったぁ
  • ipython便利や
  • セキココよかった。誰がどこに座っているのかがわかるし、話しかけやすかったです
  • エンジニア以外にも学生・院生・研究者の方が多くて面白かったです
  • コレをきっかけにして、python/機械学習を勉強していきたい

おまけ

会場のデンソーアイティーラボラトリのオフィスが面白かったので、何枚か撮ってきました。

f:id:RealFightProgrammer:20150309015803j:plain f:id:RealFightProgrammer:20150309015918j:plain f:id:RealFightProgrammer:20150309015957j:plain

Pythonによる機械学習〜環境構築編(MacOS X)〜

先日のCROSS2015のpythonセッションにて機械学習って面白そうじゃんと思い、とりあえず環境周りを整えてみたので、めもです。

先日のCROSS2015の記事はコチラです。

概要

  • python機械学習ができる環境を構築すること
  • 大したことやってないのでブログにあげる必要ないかなと思いつつ、個人的に色々ハマったので、一応あげます。

前提

もろもろのインストール

$ brew update
$ brew upgrade
$ brew install python

一応、バージョン確認

$ python -V 
Python 2.7.5

pip

$ pip install --upgrade setuptools
$ pip install --upgrade pip

.bash_profileにパスを設定。忘れてた。。 これをやらないと、scikit-learnをインポートする際に下記のエラーが出る。

ImportError: No module named sklearn

っていうことで.bash_profileにパスを追加。

export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/share/python:$PATH

上記を.bash_profileに追加したら、更新。

source ~/.bash_profile
  • もろもろの数学系ライブラリをインストール
$ pip install numpy
$ pip install scipy
$ pip install matplotlib
$ pip install scikit-learn
$ pip install pandas
$ pip install pydot
$ pip install rpy2
$ pip install ipython
$ pip install pyzmq
$ pip install tornado
$ pip install jinja2

rpy2をインストールする際に下記のエラーに出くわした。

$ pip install rpy2
Collecting rpy2
  Using cached rpy2-2.5.5.tar.gz
    Error: Tried to guess R's HOME but no R command in the PATH.
    Complete output from command python setup.py egg_info:
    Error: Tried to guess R's HOME but no R command in the PATH.

    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/jl/h7wk98516f1_tj7zg87r08b00000gn/T/pip-build-Cs7fDa/rpy2

Rをインストールしていないからですね。。そりゃそうや。。
MacOSXにRをインストールする方法は下記を参考にしました。ありがたや。ありがたや。
MacOSX に homebrew で R をインストール けっこうハマった。。

雑感

  • python機械学習で注目されている理由がなんとなくわかった気がする
    • 数学・工学・統計学系のライブラリが豊富だから?
    • Rubyとかはこんなにあるのかな?ちゃんと調べていないからなんとも言えないが。。
    • rpy2やpandasでR絡みのライブラリを呼べるのは大きい
    • Scipyやscikit-learnがあるのもPythonの特徴なのかな?
  • これで箱ひげとかヒストグラム、回帰分析、クラスタ分析etcができる環境が整った
  • そういえば学生時代、統計学的なことをやってたなと思い出し、少しノスタルジックな気分になった。。。
  • 上記以外にも、よさげなライブラリがあれば、教えて欲しい次第です。
  • やっぱり、ブログに書くほどの内容でもなかったかな。。

参考