Lean Baseball

Engineering/Baseball/Python/Agile/SABR and more...

Rubyでデータ分析するためのPython環境構築(なお野球) #tqrk11

※2017/7/29 16:40 wRAAの解説(リンクだけですが)を追加

TokyuRuby会議11の補足資料となります.

speakerdeck.com

おしながき

前提条件

  • MacOS
  • Python 3.6.2,venvを利用
  • Ruby 2.4.1, rbenv + rbenv-gemsetを利用
  • ${HOME}/work/tokyu 配下に環境を作る前提です(他で作りたい場合は読み替えて).

Python環境を作る

Python 3をインストールした後,Jupyter,pandas,matplotlib,seabornをインストール

$ brew install python3
$ python3 -m venv ~/work/tokyu
$ python3 -m venv ~/python_venv/tokyu
$ source ~/python_venv/tokyu/bin/activate
(tokyu) ~/work/tokyu pip install jupyter matplotlib pandas seaborn

Ruby環境(Jupyter+iruby+daru)

(tokyu) ~/work/tokyu $ brew install rbenv ruby-build rbenv-gemset
(tokyu) ~/work/tokyu $ rbenv install 2.4.1
(tokyu) ~/work/tokyu $ rbenv gemset create 2.4.1 tokyu
(tokyu) ~/work/tokyu $ rbenv gemset list
2.4.1:
  tokyu
(tokyu) ~/work/tokyu $ echo >.rbenv-gemsets tokyu
(tokyu) ~/work/tokyu $ rbenv gemset active
tokyu global
(tokyu) ~/work/tokyu $ brew install libtool autoconf automake autogen
(tokyu) ~/work/tokyu $ gem install iruby rbczmq daru mysql2 nyaplot 

起動する

jupyter notebook

やったこと

コードはこちら.

データは…自分で取ってください(ぇ

Ruby

gist.github.com

Python

gist.github.com

wRAA #とは

こちらを御覧ください

shinyorke.hatenablog.com

細かい話は後ほど追記.

本気でプログラミングを覚えるならこの夏はPyQをやりきってみてはどうだろう?

Pythonista(Python使い)の中で有名かつプロフェッショナルが集まる強者集団(株)ビープラウドさん*1が満を持してリリースされたPythonのオンライン学習サービス「PyQ」を試してみました.

pyq.jp

佐藤社長のご厚意で利用アカウントをいただき,実際利用してみました.*2

簡単ではありますが,利用した時のレポートとサービスの感想,「どんな方々にオススメか?」的なレビューを簡単に書きたいと思います.

この夏,プログラミングを覚えたい(特にPython)という方は是非ご一読ください!

で,PyQどうなのよ?

  • 下手な本を読んだり勉強会参加するマンになるぐらいだったら,PyQを一ヶ月集中してやり切ったほうが絶対いい!この夏に(2,980円はお買い得).
  • 学習コンテンツの粒度・写経をベースに覚える思想・操作感が良い(一部改善して欲しいところはあるが)
  • 「実務で通用するレベルに」「90日間でプログラマーに」という価値提案どおりになるかどうかは学習するあなた次第

読んで欲しい方

どれかに当てはまる方,特にゼロからプログラミングを覚えたい方は是非!

  • これからプログラミング, 特にPythonをゼロから覚えたいみなさま(若者・ベテラン限らず)
  • プログラミングの学習(覚える)もしくは教育(教える)の観点で,オンライン学習サービスが気になっているみなさま
  • PyQどうなん?と気になっているPythonistaのみなさま

おしながき

【レビューの前に】レビュアー(私)のプログラミング・Pythonレベル

簡単ではありますが,レビュアー(私)のプログラミング・Pythonレベルを簡単に.

  • Python歴6年,プログラマー歴17年(仕事)
  • 他の言語はJava, Javascript, Ruby, PHPあたりは仕事で使えるレベルまで
  • PythonはWebアプリ,データ分析,Infra as a codeなどなど,思いつく作業ほぼ全てPythonでやってる
  • 上記に加え,勉強会やイベントで発表やアウトプット多数
  • その他,イベントや個別の依頼などでプログラミング(主にPython)を教えています

PyQが想定しているユーザー層には合致しないプロが書いている文章,と思っていただければ幸いですw

が,それなりにプロなので学習するまでのノウハウや勘所についてはそれなりにレビューできるんじゃないかと思っています.

PyQ is 何?

PyQは「本気でプログラミングを学びたいあなた」がお手持ちのPCでブラウザを立ち上げ,ポチポチコードを書きながら覚えていくオンライン学習サービスです.

トップページ(https://pyq.jp/)の記載に従うと,以下の特徴・強みがあるそうです.

※すべてトップページからの引用です(2017/6/22現在)

初心者でも1から

プログラミングを全く知らない初心者の方でもPythonを学べます。

実務で通用するレベルに

書籍などで学べる基本や文法だけでなく製品の作り方、ユニットテストの良い書き方やログの良い書き方など実践的で、中級者向けの内容も学べます。

90日間でプログラマーに

  • 実際の仕事のように、仕様書からプログラムが作れるようになります。
  • フレームワークを利用したWebアプリケーション開発に新人として参加できます。

作りながら学べるので、プログラミングを体で覚えられます

  • 知識だけでない、プログラミングをする実力が身につきます。
  • こんなプログラムを作れると自信を持って証明できます。
  • プログラミングでできることと、不向きなことを理解できます。

実務に近い学習コンテンツと模範解答で、仕事の感覚が掴めます

  • 「プログラミング」という仕事の感覚を掴めます。
  • 仕事で通用するレベルの高い品質のプログラミングを学べます。
  • 初心者向けでなく、中級者向けのより高度な内容も学べます。

PyQを使ってみて

ここからは実際使ってみた感想です.

なお,私は「Pythonはじめの一歩」という初心者向けのクエストを二つほど実施しました.

画面(実際使ってる所)

実際の画面はこちらになります.

左手に問題と解説,写経用のサンプル.

右手にエディタというシンプルな構成です.

f:id:shinyorke:20170622230631p:plain

なお,今のところPCブラウザのみでスマホには対応していません.

が,サービスの特性上キーボードは必須なのでPCとタブレットで使えればまあいいよねという感じがします.

感想(よいところ)

各クエストの始まりが「写経」で,動くものをすぐ体験できる

各クエストの始まりが,「具体的なアプリを写経してつくる」ところからはじまっており,

まずは完成品を真似して作って動かす→安心を得てから少しずつ必要なことを覚える

という流れが一貫しているところがとても良いと思いました.

どうも中級のクエストからは一部違う所もあるっぽいですが(すいませんこの辺まだ試していないです),「なんだずっと書いてばかりで動くもの(成功体験)無いじゃん!」で挫折・離脱するリスクが少ないのは学習する方・サービスを提供する側双方に幸せな作りだなと思いました.

クエスト設問の粒度

「Pythonはじめの一歩」クエストの例で言うと,

  • 完成品を写経する
  • 変数を使う
  • 数値を計算する
  • 変数に代入して使ってみる
  • 変数同士で計算する
  • 完成品を自分で作る

ぐらいの粒度で設問少しずつかつ,多すぎず少なすぎずのいい感じな量で進んでいくのでとてもやりやすいと思いました.

動作が速い・イライラしない

動作はとにかく早く,キビキビしていてストレスが全く無いです.

流石ビープラウドさんのクオリティーといった感じです.

改善して欲しいな,と思ったところ

一方,使ってみて改善して欲しいなあと思う所もいくつか.

実行例外が出たら多分ハマる

私は元から知ってるので問題ないのですが,写経にしくじったり動かすのに失敗した時の例外がまんま実行例外なので,ハマっちゃうんじゃないか?と思いました.

例えばこんな感じ.

f:id:shinyorke:20170622233915p:plain

やってる人はビビると思う&変にググったりすると,「写経で覚えよう」の所から多少外れると思うので,

  • 実行時例外が出た時の追い方
  • よくある例外(例えばSyntaxError)との付き合い方

みたいな解説があるとより優しいのかなと思いました.

まあ,例外の答えを教える必要は無いと思いますが.

もうちょっと詳しい解説が欲しい

写経して,設問とクエストをサクサク進めて…という点ではやりやすくていいなと思いつつ,

  • 設問ごとのテーマ(何を覚えて次に進むのか)
  • 設問の内容についての解説
  • 設問が終わった後に何を得るのか?

が直感的にわかりにくいのはもったいないなあと思いました.

本みたいに細かく書く必要はないと思いますが,個人的にはA Tour of Goくらいの内容があっても良いのかなと思ったり.*3

値段的にどうなん?

ライト(2,980円/月)で体験できるコンテンツは十分過ぎると思います!

大抵の技術書が3,000円前後,一人で読みながら覚えるのと同じ金額・労力でポチポチやりながらDjangoのWebアプリを作るところまで覚えら得るのは相当おいしいと思います.

なお,特定商取引法に基づく表記によると,

お支払済みの料金については、解約時点の残期間につき、日割り計算によりご返金いたします。

とのことなので,

集中して学習して早く終わらせれば更にお買い得,という事になります!*4

PyQでどこまで「プロ」になれるのか?

あくまでも個人的な感想ですが,

  • Pythonを使ったプログラミングとWebプロダクト作り「だけ」を覚えるならPyQ素晴らしい!
  • 「90日間でプログラマーに」は,PyQ以外の努力も必要
  • 本気で「実務に通用するレベル」までなりたい方はメンター(29,800円/月)以上の投資をする or PyQ以外の所で頑張るべき

というのが正直な感想です.

Pythonを使ったプログラミングとWebプロダクト作り「だけ」を覚えるならPyQ素晴らしい!

使用レポートに記載のとおり,クエストや設問の粒度・サクサク進められるプロダクトの素晴らしさも相まって,

  • プログラミングを覚える(中級レベルまで)
  • Webプロダクトを作る

といった基本部分はPyQに2,980円と学ぶ時間とやる気があれば覚えられそうです.

私自身も実際体験して「ああ,15年前くらいにあったら良かったなあ」と思ったくらい,使っていて感動した&クオリティには間違いはないと思いました.

「90日間でプログラマーに」は,PyQ以外の努力も必要

一方,「90日間でプログラマーに」という価値提案については,

ホントに90日間でプログラマーになれるかは本人の努力次第じゃね?

と思いました.

例えばDjangoでアプリの作り方を覚えたとしても,実際のサービスにする場合は,

  • AWSやらGCPやらでServerを準備する
  • ApacheやnginxでWebServerを立てる
  • そういえばデータベースってどうやって(ry
  • その他ドメインとかSSLとかetc…

と,実際のプログラマー(いや,ここまで来るとエンジニアですが)の仕事は多岐に渡るので,PyQで学べる範囲では限界がある(≒90日間じゃ足りない?)と思いました.

本気で「実務に通用するレベル」までなりたい方はメンター(29,800円/月)以上の投資をする or PyQ以外の所で頑張るべき

これは私の想像ですが,

実務で通用するプログラマーを目指すなら,メンターやプレミアムサポートでコミュニケーション取りながらなろうぜ!

というメッセージが隠れているのでは?と思っています.

上記の90日で〜,と同じ文脈ですが,単にPythonとDjangoを覚えただけでプロとは言えませんし,そもそも仕事探しどうするとか,そもそもの実戦経験は!?という話に絶対なるので,

  • PyQで頑張る.メンター(29,800円/月), プレミアム(98,000円/月)に投資してガッツリサポートをもらって成長する*5
  • PyQ以外で頑張る.PyQで得た知識をインターンやバイト,コミュニティの中で鍛えてホントの実践力を鍛える

といったことが必要なんじゃないかと思いました.*6

PyQ後に踏み込むべき世界(プロになりたければ,の話)

PyQというより,私の体験&オススメという形になります.

PyQ以外で頑張る.PyQで得た知識をインターンやバイト,コミュニティの中で鍛えてホントの実践力を鍛える

ここで頑張ろう!と思った方は以下の観点で次のアクションを考えると良いのでは?と思います.

Pythonでプロダクトを作ってるスタートアップ・ベンチャーに週末JOINする

Pythonに限らず,

実務で動くプロダクトを作ってフィードバックもらうならスタートアップが一番かと思います!

エンジニアが1〜2人しかいないベンチャーに週末もしくは夜だけJOINする.

上手く絞ればローリスクハイリターンで良い経験が積めるかと思います.*7

なお,誰でも入れる・出来るわけではないこと*8,この方法は社会人の場合お勤めの会社の副業規則などをしっかりチェックの上,プライベートや体調などに気をつけながらやりましょう.

自分でプロダクトを作ってローンチしてみる

明確なテーマ,作りたいものがある方におすすめです.

月額のサーバー費用とドメインの取得費用,時間があれば可能です.

欲張らなければかかるお金はせいぜい3,000〜5,000円/月くらいなので,十分可能性はあるかと思います.

この方法のメリットは作った暁にはポートフォリオとして残せること,デメリットは継続に必要な努力はプログラミングを覚える以上に大変ということぐらいです.

その他

勉強会やイベントで事例を発表しまくる,スタッフとして参加する…という方法もあります.

が,磨かれるスキルが限定的になること,コミュニティのスタッフ経験は厳密にはポートフォリオには載せられても評価の対象としては実戦経験に劣るので(個人の感想です),自腹を切ってプロダクトを作ったり,お金をもらいながら仕事で経験するのと並行して行うことをオススメします.

結論

色々と書きましたが,

本気でプログラミングを覚えるならこの夏はPyQをやりきってみてはどうだろう?

が一番言いたいことでした!

気になる方は是非PyQでPython覚えてみましょう!

*1:佐藤さんをはじめ,メンバーの皆さまにはホントお世話になっていますし,個人的には憧れのエンジニア集団でもあります.

*2:佐藤さんありがとうございます!

*3:個人的にはA Tour of Goがオンラインのプログラミング教育コンテンツとして最も完成度が高いと思っています.

*4:これは結構大盤振る舞いな設定だと思います.

*5:今回は試していない…というより私に試すようなニーズはないので誰か試してレポートしてほしいな

*6:すべて想像ですが大きく外していない自信だけはある

*7:時間さえ捻出できれば経験とお金,人脈が残るので良いと思うよ?

*8:人手がいないベンチャーでも選考はしっかりやるので誰でも入れるわけではないです&アッサリ入れるところはそれなりにリスクが有ることを覚悟しましょう

プロ野球全12球団の得点力を可視化してみた〜 #DevLOVE 野球の続き

日ハムが連敗中で心が痛い私ですこんばんは.*1

先日公開して好評だった, こちらのエントリーの最新版を作ったので簡単に紹介したいと思います.*2

shinyorke.hatenablog.com

Starting Member

要約すると

  • 広島強すぎ
  • パ・リーグの下位チームは特定の打者に依存しすぎている(ロッテ,日ハム)
  • そろそろ各球団のキャラ?傾向づけができてきている(気がする)

計算のルールと数字の読み方

  • データは6/4試合終了時点のもの
  • 前回同様,wRAAを利用
  • 計算式に使われる「リーグ平均wOBA」は.320で固定
  • 50打数以上の選手を対象
  • 得点力(打撃)のみ評価,走塁と守備は評価できないのであくまでも目安程度

背景や数字の詳しい意味は前回のエントリーwOBA (野球) - Wikipediaをご参照ください.

wRAAの読み方

10以上

リーグを代表するクラスの得点力

プラス(1-9)

スタメンとして十分過ぎる得点力

ゼロ

リーグ平均クラスの得点力

マイナス

守備で貢献していない場合,スタメンから外すことを検討すべき

プロ野球全12球団得点力グラフと考察

簡単な考察を踏まえて紹介します.

掲載順は察してくださいw

パ・リーグ

ロッテ

f:id:shinyorke:20170608012508p:plain

ますます鈴木大地依存が強くなっている…というより角中離脱の影響が強すぎますね.

ウィリー・モー・ペーニャの加入でどこまで変わるか見ものです.

(衰えの心配があるとはいえ)個人的には理にかなった補強だと思いました.*3

日本ハム

f:id:shinyorke:20170608012812p:plain

先月は近藤の孤軍奮闘状態でしたが,レアードがついにエンジンかかりはじめたこと,大田泰示が北の大砲として開花したことにより先月より状況が好転している用に見えます.

が,主に先発が投壊しちゃってるので打線の優位性が完全に消されていますね…去年並みに投手陣が働けば普通に3着争いなのにorz

オリックス

f:id:shinyorke:20170608013337p:plain

T-岡田withバファローズ感ありますw

交流戦首位キープは少し不思議な感じがありますが,交流戦の荒波を上手く乗りこなしている感はあります.

西武

f:id:shinyorke:20170608013519p:plain

秋山凄い!

今年は長打も連発とライオンズの顔として十分な成績を残しています.

そして「日本一過小評価されている」セカンド浅村もさすがの数字.

ちょっと湿りがちなおかわり君のバットに火がついたら面白いことになりそう.

あとやっぱり源田は楽しみ多いですね(試合で見てみたい).

ソフトバンク

f:id:shinyorke:20170608013740p:plain

内川,ギータが安定して数字を叩き出している一方,若手ホープの上林はちょっと数字落としています.

ちなみにギータと上林の数字を比較すると,

ギータ .304/13HR/46RBI

上林 .316/8HR/26RBI

と一見するとさほどさがない数字なのですが,上林は異常に四球を選ばない&三振が多く,どこかで数字をガクッと落とさないか心配です.*4

楽天

f:id:shinyorke:20170608014147p:plain

大きなマイナスがいないどころかほぼ全員プラスとかなり好調なイーグルス.

やはり注目は生え抜き初二桁本塁打をキメた茂木ですかね.

ショートという守備重視のポジションでキメたこともかなり価値あると思います.

岡島や島内,嶋らがプラスに持っていけてるのがとても良いです.

セ・リーグ

ヤクルト

f:id:shinyorke:20170608014349p:plain

山田哲人の状態が中々上がらないのが不安ですね…

BB/K(一個三振するあたり何個四球を選ぶか)の数字が0.82ちょいなので,極度な不振ではないと思っていますが,一体何があったのか気になります.

巨人

f:id:shinyorke:20170608014653p:plain

歴史的な12連敗中の巨人です.

得点力がなさすぎて連敗している現状がわかるようなグラフになっています.

マギーと坂本勇人がいてもこれって…

中日

f:id:shinyorke:20170608014842p:plain

首位打者大島と本塁打王ゲレーロが引っ張って先月よりだいぶ良くなっている印象あります.

ビシエドも流石のパフォーマンス,平田が復調したら面白いことになりそうです.

DeNA

f:id:shinyorke:20170608015055p:plain

ここも助っ人ロペスと主力の梶谷がよくやってますね.

一方筒香はもっと頑張れと言いたい,これってWBC病なんですかね?

阪神

f:id:shinyorke:20170608015212p:plain

このグラフ「だけ」見ると糸井嘉男の補強は大成功なのかもしれません.

守備力で多分マイナス多いですが,鳥谷の復調,上本謎の覚醒が大きいことがわかります.

案外なのは高山,もっと頑張れと言いたい(守備含め).

広島

f:id:shinyorke:20170608015408p:plain

鈴木誠也凄い,他の選手も本来のパフォーマンスを取り戻しつつある印象です,特に菊池.

安部の開花ってのも大きいですね,この好調を交流戦でもキープできたら連覇は普通にあると思います.

総評

そろそろシーズンエンドを覚悟するチームも出てきてもおかしくないかな?という差が出始めました.

とはいえこの後故障から戻る選手などもいる(例えば大谷翔平)ので,なんとかオールスターまでは楽しみたいなと思いました.

来月もこの数字は披露したいと思います,ありがとうございました!

【オマケ】今回のネタをエンジニアな背景を踏まえてDevLOVEで発表しました

今回出したデータと考察は,DevLOVEというエンジニアコミュニティの勉強会で披露するために算出しました.

devlove.doorkeeper.jp

発表のスライドはこちらになります.

www.slideshare.net

技術やプロセスの使い所や考え方を披露しつつ,実例として楽天・巨人・日ハム(近藤)の紹介をさせてもらいました.

反応も上々でなかなか楽しかったです,今後もこの手のノウハウや考え方をちょいちょい発表していきたいと思います.

最後までお読み頂きありがとうございました!

*1:斎藤佑樹と杉谷拳士が同時に先発する日はなんとなく試合が見られない(察し)

*2:感想・反響嬉しかったです,誠にありがとうございました

*3:こんだけ状況が酷いとどんな手を打ってもプラスになりそうな予感しか無い

*4:ストライクゾーンを支配できていない,いまはバットを振れば当たる状態っぽい.多分どこかで成績悪化が発生しそう