Sublime Text 2をWindowsに入れてごにょごにょ
宗教論争には飽き飽きしたので(嘘)、これからはSublime Text 2を使おうと思います。
すでにSublimeTextの情報は満ち溢れてて、今更ここに詳しく書いたって人様の役に立たないと思うんであくまで自分用に、簡単にメモ。
パッケージ管理システム(Package Control)の導入
http://wbond.net/sublime_packages/package_control/installation
ここを参考に。
自分の環境だと何故かCtrl + Shift + @でコンソール開けなかったので、メニューから View > Show Console で開く。
開いたら上記ページに書いてあるやつをコピペ。すると再起動求められるので一旦閉じて開き直し。
インラインで日本語入力できるように
IME Supportとかいうのを入れればいいらしい。上で入れたPackage Controlを使います。
Ctrl + Shift + p でパレット開いて「Package Control: Install Package」を選択。「IME Support」を選んでインストール。
エディタ設定いじる
Preference > Color Scheme から選べる。
とりあえず「Solarized (Light)」にしといた。
Preference > Setting User で設定ファイル開く。
とりあえず
"ignored_packages": [], "font_face": "VL Gothic", "translate_tabs_to_spaces": true
だけ入れといた。
Ubuntu 12.04にpipでmatplotlibを入れようとしたら詰まった件
タイトルの通りです。Pythonのバージョンは2.7.3
pip install matplotlib
したらなんかエラー吐きやがりました。よく見たら
src/ft2font.h:16:22: 致命的エラー: ft2build.h: そのようなファイルやディレクトリはありません
とか言いやがります。
ft2build.hってなんやねん。
調べたらFreeType2とかいうやつのヘッダファイルらしいです。なんなのかよくわかりませんが。
てなわけで
sudo apt-get install libfreetype6 libfreetype6-dev
すればおk
今年のカープはなんで点が取れなかったのか検証してみた
「広島東洋カープ Advent Calendar 2012」の12月21日担当です。
なんか一人だけ空気読まずにガチでコード書いてもにょもにょしてますが、まあスルーの方向でw
2012年、例によって9月に大失速して4位に終わったカープですが、シーズン通しての敗因として「得点力不足」が挙げられると思います。野村なんて防御率1点台なのに9勝ですよ!! あやまれ打撃陣!!! あやまれ!!!!
てなわけで、なんで今年こんなに点取れなかったのか分析しましょう。
1. 得点推定モデルをつくる
一般的に、あるチームの得点力が少ない原因として「出塁できない」「長打が出ない」「機動力が使えない」「チャンスに弱い」などさまざまな要因が考えられます。これをきちんと分析するには、主観じゃなくてしっかりデータで客観的に捉えないといけません。
で、普通に各種チーム成績(チーム打率とかチーム本塁打とか)を平均と比べて、「カープはチーム打率が低いから点が取れんのだ!」とか言ってもいいんですが、もうちょっと面白いことをやりましょう。
てなわけで、今回は重回帰分析により安打数や本塁打数、盗塁数などがチームの得点にどれくらい寄与しているかを明らかにします。これによって「盗塁が1つ増えるとチーム得点が0.2点増えるのに対し、ホームラン1本だと1点増える。つまり盗塁5個とホームラン1本の価値は等しい」みたいなことがわかるので「松井とイチローどっちが凄い?」的な質問にも答えられるわけです。
1-1. データの収集
NPB公式サイトで取ってこれる、2005年〜2012年のチーム別個人成績を使います。手入力だと死んでしまうので、クローラーとスクレイパー書いて自動でcsv化しました。
設定ファイル
https://gist.github.com/4353340
クローラー
https://gist.github.com/4353334
スクレイパー
https://gist.github.com/4353286
ベイスターズがああなって球団名が変わった関係で、URLが一部変わってるのに注意ですね。
1-2. サンプルの単位は?
取得したデータをもとに、得点が従属変数、安打・二塁打・三塁打、、、が独立変数として重回帰をやります。当たり前ですが得点は個人で取るものではなくチームで取るものなので、サンプルは個人単位ではなくチーム単位です。
「2005年のカープのチーム打撃成績は安打が1374本で二塁打が221本で、、、」が1サンプルなので、サンプル数は8年×12チームで96となります。
1-3. 計算しよう!
PandasというPythonのものすごいライブラリを使えば一瞬です。
コードはたったのこれだけ
https://gist.github.com/4353349
結果はこれです。
-----------------------Summary of Estimated Coefficients------------------------ Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5% -------------------------------------------------------------------------------- 安打 0.4170 0.0430 9.70 0.0000 0.3327 0.5012 二塁打 0.4232 0.1257 3.37 0.0012 0.1769 0.6695 三塁打 1.1368 0.4284 2.65 0.0095 0.2971 1.9765 本塁打 0.9864 0.0936 10.54 0.0000 0.8030 1.1698 盗塁 0.2402 0.1065 2.26 0.0267 0.0316 0.4489 -------------------------------------------------------------------------------- 盗塁刺 -0.3303 0.3275 -1.01 0.3163 -0.9722 0.3117 犠打 -0.0435 0.0905 -0.48 0.6323 -0.2208 0.1339 犠飛 0.9788 0.4034 2.43 0.0174 0.1881 1.7695 四球 0.3236 0.0543 5.96 0.0000 0.2172 0.4299 死球 0.1745 0.1943 0.90 0.3717 -0.2063 0.5554 -------------------------------------------------------------------------------- 三振 -0.0654 0.0335 -1.95 0.0546 -0.1311 0.0004 併殺打 -0.1494 0.1843 -0.81 0.4199 -0.5105 0.2118 intercept -275.8241 59.6665 -4.62 0.0000 -392.7704 -158.8778 ---------------------------------End of Summary---------------------------------
つまり、「ヒット1本はチーム得点を0.42点上げるのに貢献する」「盗塁1つはチーム得点を0.24点上げるのに貢献する」といった意味です。
一見したところ、安打と二塁打がほぼ同じだったり、三塁打が本塁打より上だったり、犠打がマイナスだったり、犠飛がやたら高かったりといろいろ怪しいところがあって、そのうちのいくつかは説明できるんですが、ここでは割愛します。
2. で、結局のところカープは何がいけなかったのか
モデルができたので、本題に入りましょう。まずは12球団平均の打撃成績の平均とカープの打撃成績を比べてみます。
得点 | 安打 | 二塁打 | 三塁打 | 本塁打 | 盗塁 | 盗塁刺 | 犠打 | 犠飛 | 四球 | 死球 | 三振 | 併殺打 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
12球団平均 | 469 | 1166 | 186 | 20 | 73 | 82 | 40 | 141 | 31 | 390 | 50 | 898 | 91 |
カープ | 427 | 1077 | 192 | 13 | 76 | 79 | 39 | 175 | 26 | 374 | 57 | 912 | 86 |
差 | -42 | -89 | +6 | -7 | +3 | -3 | -1 | +34 | -5 | -16 | +7 | +24 | -5 |
平均より40点も得点が少ないですね。このマイナス40点にノムスケや(シーズン序盤の)バリントンは泣いたわけです。カープは投手陣がいい(と言われている)ので、チーム得点が平均並みになれば十分Aクラス入りは可能なはずです。じゃあ、得点を40点増やすにはどうすればいいんでしょう?
1. ヒットを100本増やす
ヒットが1本増えるとチーム得点がちょうど0.4点増えるので、チーム得点が40点増えるにはヒットが100本増えればいいです。ちなみに今季のカープのチーム打率は.233ですが、打数が同じでヒットが100本増えたと仮定すると、チーム打率は.255になります。これは今季の巨人とほぼ同じ水準。
2. ホームランを40本増やす
ホームラン1本はほぼ1点の貢献度です(本当はもっと大きいのですが、理由は割愛、、)なんで40本増えればOKですね。
ちなみに40本もチーム本塁打増えたら12球団でダントツの本塁打数になりますね、、、
えーっと、なんつーか、まともな分析になってませんねw データ集めて重回帰やったところで力尽きましたww(Pandasまともに触ったの初めてだったので)
他に気になるデータとしては
といったあたりでしょうか。今回、数字出してみて意外だったのは、純粋な長打の数では他球団に決して劣ってない、というところですね。二塁打、本塁打は平均上回ってますし。ただしヒットの数が圧倒的に少ない。
犠打に関してはセイバーな方々の間でも意見が別れるところです。ですが「ヒットは少ないけど長打はそこそこ出る」チームなら、バントで塁進めるよりランナー溜めて長打に期待した方が点取れそうな気がするんですが。どうなんでしょうノムケンさん。
Ubuntu 12.04にYesodを入れた
「すごいH本」こと『すごいHaskellたのしく学ぼう!』を読み終えたので、今度はHaskellのWebフレームワークであるYesodをやってみようと思います。
手元にはASUSのZenbookを買って速攻Windows消してUbuntu入れたやつがあるので、こいつにYesodをインストールします。
まあ公式見れば一発なんですがw
apt-get install haskell-platform
は既にしてある前提で、
cabal install yesod-platform
と叩けばインスコ完了です。大量のライブラリをインストールしてるんで、結構時間かかります。
インストールされたYesod本体は、デフォルト設定だと~/.cabal/bin以下にあるんでパス通しておきましょう。でもって
yesod init
を叩くと、プロジェクト名と使用するDBを聞かれます。適当に答えるとプロジェクト出来上がるので、プロジェクトのフォルダに移動して
cabal install && yesod devel
でサーバ立ち上がります。http://localhost:3000にアクセスするとなんか出てるはずです。
最後だけ微妙に公式のチュートリアルと違うんですが、どうやらinitで答えたDBを操作するためのライブラリが最初は入ってないんで cabal install する必要があるっぽいです。2回目以降は yesod devel だけでおk
PyCon Jp 2012 の「Top of Pythonista」で2位になりました!
PyCon JP 2012内で開催されたTop of Pythonista決定戦にて、なんと2位になってしまいましたw
単純に「スコア効率(単位面積当たりのスコア)の高い順に左上から配置」するだけで、もろもろ洗練されてなくてすっげー重いコードなんですが、まあ実装した者勝ちということでw
てなわけで恥ずかしいですがコードを
# -*- coding: utf-8 -*- import json import random import sys def arrange(area, item): for i in range(len(area)): for j in range(len(area[0])): if area[i][j] == 0: judged = judge(area, item,i, j) if judged[0]: put(area, item, i, j) return {'id': item['id'], 'x': j, 'y': i} elif judged[1]: continue else: print('break!') break return None def judge(area, item, i, j): if not (len(area) > (i+item['height']) \ and len(area[0]) > (j+item['width'])): return (False, False) for y in range(i, i+item['height']): for x in range(j, j+item['width']): if area[y][x] == 1: return (False, True) return (True, False) def put(area, item, i, j): for y in range(i, i+item['height']): for x in range(j, j+item['width']): area[y][x] = 1 def efficiency(item): return 1.0 * item['score'] / (item['height'] * item['width']) ifname = sys.argv[1] ofname = sys.argv[2] width = int(sys.argv[3]) height = int(sys.argv[4]) items = json.load(open(ifname)) items = sorted(items, key=lambda x: -efficiency(x)) area = [[0 for j in range(width)] for i in range(height)] result = [] for item in items: matchItem = arrange(area, item) if matchItem: result.append(matchItem) json.dump(result, open(ofname, 'w'))
The Zen of Python, by Tim Peters ...中略... Flat is better than nested. ...後略...
ごめんなさいネストしまくりですorz
Twitterのエゴネットワーク描いてみた
Twitterのfriends間のフォロー関係をAPI叩いて取得(今回はTweepyを使用)。
networkxとmatplotlib使って描画します。
コードはここよ
https://github.com/who-you-me/twitter-friends-network
描画するだけでもアレなんで、中心性指標も計算してみました。
まずは次数(無向グラフなんで入次数+出次数)
なまえ | 次数 |
---|---|
@knighthalt | 131 |
@NHK_PR | 122 |
@shuumai | 106 |
@HikaruIjuin | 96 |
@Holly_carp_10 | 95 |
@shuzo_matsuoka | 95 |
@nurenure_opanty | 92 |
@Mr_Mikan00 | 88 |
@faridyu | 86 |
@yukari_tamura | 82 |
入次数
なまえ | 入次数 |
---|---|
@NHK_PR | 121 |
@shuumai | 105 |
@shuzo_matsuoka | 95 |
@HikaruIjuin | 89 |
@yukari_tamura | 80 |
@buzztter | 80 |
@faridyu | 79 |
@TMR15 | 73 |
@KITAxERI | 63 |
@twj | 58 |
出次数
なまえ | 出次数 |
---|---|
@knighthalt | 88 |
@Mr_Mikan00 | 58 |
@Holly_carp_10 | 57 |
@kabutoyama | 55 |
@nurenure_opanty | 54 |
@Musha_360 | 49 |
@yumeto_sft | 47 |
@yumeto_hmc | 45 |
@hirokira | 43 |
@dOsOn711 | 40 |
近接中心性
なまえ | 近接中心性 |
---|---|
@knighthalt | .412 |
@Musha_360 | .362 |
@esehara | .355 |
@Musha360 | .354 |
@ecoloji | .354 |
@nurenure_opanty | .353 |
@dOsOn711 | .352 |
@hirokira | .350 |
@kabutoyama | .349 |
@foxnumber6 | .348 |
媒介中心性
なまえ | 媒介中心性 |
---|---|
@knighthalt | .114 |
@Holly_carp_10 | .062 |
@esehara | .061 |
@h_ototake | .058 |
@Baseball_LAB | .055 |
@python_alert_ja | .054 |
@Carp_Jikkyo | .045 |
@nurenure_opanty | .043 |
@Gafu_UW | .042 |
@twj | .040 |
固有ベクトル中心性
なまえ | 固有ベクトル中心性 |
---|---|
@knighthalt | .224 |
@yumeto_sft | .187 |
@nurenure_opanty | .184 |
@yumeto_hmc | .177 |
@Holly_carp_10 | .167 |
@MataAnimeMiteru | .166 |
@wigglen | .161 |
@52sauaa | .159 |
@kotoki_ | .152 |
@Musha_360 | .151 |
『オープンソースで学ぶ社会ネットワーク分析』を読むための環境設定(Windows7 64bit)
勉強会やってます。『オープンソースで学ぶ社会ネットワーク分析』という本の読書会です。
社会ネットワーク分析勉強会 #1 : ATND
社会ネットワーク分析勉強会 その2 : ATND
何でもそうですが、最初の環境設定が一番面倒ですよね。
というわけで、Python初心者がこの本のサンプルコードを実行できるようになるための環境設定です。当方の環境はWindows7 Professional 64bitですが、Windowsならだいたい同じかと。
Pythonのインストール
http://www.python.org/download/
から各自の環境に合ったものを落としましょう。Pythonのバージョンには二系統(2.x系と3.x系)あるのですが、現状では2.x系の方が無難です。
なんで、この場合は
「Python 2.7.3 Windows X86-64 Installer」
を落としましょう。
落としたファイルを実行するとインストーラが立ち上がるんで、適当にポチポチ押してインスコしてください。
コマンドプロトンプトを起動して「python」と入力します。
C:\Users\hoge>python Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
と表示されればインスコ成功です。
easy_installのインストール
これから必要なライブラリのインストールに移るわけですが、その前にPythonのパッケージ管理ツールであるeasy_installがあると便利です。
http://peak.telecommunity.com/dist/ez_setup.py
上のリンクを右クリック→「名前をつけて保存」で適当な場所に保存します。
保存したら再びコマンドプロンプトを立ち上げ、保存場所に移動しましょう。そうしたら
C:\Users\hoge>python ez_setup.py
で実行するとインストールされます。使い方は、コマンドプロンプトから(Pythonのインタラクティブシェルじゃないので注意!)
C:\Users\hoge>easy_install (パッケージ名)
と打ち込むだけです。簡単ですね!
(C:\Python27\Scripts にパスを通す必要があったような……パスの設定の仕方は自分で調べてね☆)
IPython, networkxのインストール
easy_installで一発です。それぞれ
C:\Users\hoge>easy_install ipython
C:\Users\hoge>easy_install networkx
でOK
numpy, matplotlibのインストール
上の2つはPythonのみで書かれたライブラリなんで簡単にインスコできますが、numpyとmatplotlibに関してはCで書かれたライブラリなので、インストールする際にはコンパイルする必要があります。
ですがWindowsは糞なのでデフォルトだとコンパイル環境がありません。糞です。氏ねばいいのに。
自前でコンパイルできる環境を整えることもできなくはないんですが、アホみたいに面倒くさいです。幸いにもコンパイル済みのバイナリが提供されてるんでそっちを使いましょう。
matplotlib
matplotlibは公式でWindows用バイナリを提供してます。
http://sourceforge.net/projects/matplotlib/files/matplotlib/
から適当なのを探します。執筆時の最新バージョンはこいつ
http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-1.1.1/matplotlib-1.1.1.win-amd64-py2.7.exe/download
exeなのでダンロードして実行すればインストーラ立ち上がります。
numpy
numpyは残念ながら公式でWindows 64bit用のバイナリを提供してません(32bitはあるんですが)。
なので野良ビルドを使いましょう。
http://www.lfd.uci.edu/~gohlke/pythonlibs/
ここにあります。
numpy-MKL-1.6.2.win-amd64-py2.7.exe
が執筆時の最新版です。
以上です。あとはPythonを楽しむだけです。