KEMBAR78
Python for Data Analysis第1回勉強会(+git入門) | PDF
統計勉強会第一回 12/4 
かわの まこと
今日やること 
• Git ~ソースコードをうまく管理しよう~ 
• 第一章 ~PythonDe統計のための準備~ 
2
Gitって? 
複数人でプロジェクト開発するときにつかう 
• プロジェクト開発に必要なのは: 
• コミュニケーション能力 
• 仕様書 
• 共同開発環境 
3
Gitって? 
複数人でプロジェクト開発するときにつかう 
• プロジェクト開発に必要なのは: 
• コミュニケーション能力 
• 仕様書 
• 共同開発環境 ここでGitの登場 
4
Gitって? 
複数人でプロジェクト開発するときにつかう 
• プロジェクト開発に必要なのは: 
• コミュニケーション能力 
• 仕様書 
• 共同開発環境 ここでGitの登場 
5 
バージョン管理(ソースコードの共有)をして幸せになろう
プロジェクト開発の流れ 
6 
Start 
メンバー間で仕様を共有 
実装担当の割振・把握 
未実装部分の確認 
がりがり実装 
実装をメンバーに共有 
実装終わった? 
Yes 
End or 振り出し 
No
プロジェクト開発の流れ 
7 
Start 
メンバー間で仕様を共有 
実装担当の割振・把握 
未実装部分の確認 
がりがり実装 
実装をメンバーに共有 
ここ重要No 
実装終わった? 
Yes 
End or 振り出し
バージョン管理って 
ソースコードの変更ログを残しながら保存 
• ファイルの変更点やディレクトリ構造の 
スナップショットをとるイメージ 
• サーバに保存しておくとPCが逝っても大丈夫 
8
バージョン管理めんどい 
「◯◯の機能が出来たから添付したソースをプロジェ 
クトに追加しておいて」 
• 手間がかかる 
• プロジェクトが大きくなるにつれてつらい 
「追加・改修したら動かなくなった」 
• どこを戻せばいいのかわからなくてつらい 
「デモよろしく」 
• 作業中で今動かなくてつらい 
9
バージョン管理めんどい 
Dropboxでよくね? 
10
結局Gitってなんなん? 
ファイルの変更点をタイムスタンプや 
ログコメントと共にDBに保存するシステム 
• ローカルマシン・遠隔サーバ上のリポジトリ 
(ファイルDB)にファイルを集約できる 
• 複数の人間が編集したファイルを自動的に結合 
(マージ)してくれる 
11
リポジトリとかマージって何 
リポジトリ(Repository) 
• ファイル管理を行うプロジェクトディレクトリ 
• ローカルに個人用リポジトリがあったり,サーバに共有リポジトリがある 
ブランチ(Branch) 
• リポジトリの枝 
• 安定版・開発版・レガシー版などリポジトリを分岐させる 
コミット(Commit) 
• ソースコードの変更箇所をリポジトリに保存してバージョニングするこ 
と 
12
リポジトリとかマージって何 
マージ(Merge) 
• 変更ファイルの結合 
プッシュ(Push) 
• 共有リポジトリに自分のコミットをマージすること 
プル(Pull) 
• リポジトリからファイルなどをローカルにコピーすること 
13
バージョン管理システムには2種類ある 
中央集約型管理システム 
• リポジトリがプロジェクトに1つだけ 
• 開発者はリポジトリからローカルにコピーして作業 
分散型管理システム(←Gitはこっち) 
• 開発者がそれぞれでローカル環境にリポジトリをもつ 
• 共有リポジトリとローカルリポジトリを同期する 
14
バージョン管理システムには2種類ある 
中央集約型管理システム分散型管理システム(Git)
改めてGitって 
Linus / Torvalds氏が開発した分散型バージョン管理 
• 彼が開発していたOSのバージョン管理に使うためGit 
誕生 
大規模プロジェクトでも安心の速度で動作 
• Google Codeやら某IT企業でも導入されてます 
16
Gitのいいところ 
Githubっていう神サービスがある 
• https://github.com/ 
• 無料! 
ネットワーク環境がなくてもコミット可 
• スタバでドヤる時に 
• 中央集約型だとネットワーク環境ないとダメ('ω'乂) 
Branch, Reset, Mergeが高速 
• ふーん 
17
ここから手動かすよ
インストール 
macだし,homebrew入ってるよね? 
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 
sudo brew install git で一発! 
19
準備(ローカル編) 
ユーザ情報の設定 
• ユーザ毎にログイン名や連絡先を登録 
• Githubに合わせると楽かもしれない 
ローカルリポジトリを作成 
20 
% git config --global user.name “<your_name>” 
% git config --global user.email your@mail.address 
% cd <your_directory>/ 
% mkdir python_analysis_code 
% cd python_analysis_code 
% git init
さっそく 
まずファイルつくろ? 
状態statusを見てみよう 
• Untracked files:にREADMEがあるはず 
• お初なファイルだからgitも驚いてる 
21 
% touch README 
% git status
さっそく 
ファイルをaddする 
statusを見る 
• Changes to be committed:に入ったはず 
• ステージに乗ったとか言うはず 
(今後gitが追跡してくれる) 
22 
% git add README 
% git status
さっそく 
commitする 
• コミットログは短く,わかりやすいものを 
statusを見る 
• nothing to commit, working directory clean 
とか出てたらOK 
23 
% git commit -m “first commit” 
% git status
ここからちょっと難しい 
ブランチ覚えてる? 
• 作業を分岐させる 
% git branch issue1 
% git checkout issue1 
ブランチを見てみよう 
• できてたでしょ? *は今自分がいるブランチ 
24 
% git checkout -b issue1 
or 
% git branch
結局ブランチ何 
masterブランチ 
issue1ブランチ 
25
結局ブランチ何 
26
ブランチ体験 
まずブランチを戻そう 
確認 
• ちゃんとmasterに*ついてる? 
27 
% git checkout master 
% git branch
ブランチ体験 
さっきのREADMEに書こう 
さっそくadd / commitする 
そういえば今までどんなことしたっけ? 
28 
% vim README 
さいこうだよ!かっこいいよ! 
% git add README 
% git commit -m “READMEに1行追加” 
% git log
ブランチ体験 
さっきのブランチに切り替える 
• どうやるか覚えてる? 
29
ブランチ体験 
さっきのブランチに切り替える 
ファイルを更に編集しよう 
終わったらadd / commitしてね 
• もうだいじょうぶだよね? 
30 
% git checkout issue1 
% vim README 
さいこうだよ!かっこいいよ! 
でもわたしなんかだめだめだよ….
ブランチ体験 
さっきのブランチに切り替える 
ファイルを更に編集しよう 
終わったらadd / commitしてね 
もうだいじょうぶだよね 
31 
% git checkout issue1 
% vim README 
さいこうだよ!かっこいいよ! 
でもわたしなんかだめだめだよ…. 
% git add README 
% git commit -m “返事した”
ブランチ体験 
issue1ブランチの変更点をmasterブランチに 
マージしよう! 
…のまえに確認しよう 
• 一行しか書いてないよね? 
32 
% git checkout master 
% less README
ブランチ体験 
ついにマージする時がきた 
確認だッ!! 
• どうなったよ? 
33 
% git merge issue1 
% less README
ブランチ体験 
もうissue1ブランチとはお別れの時(削除) 
本当にもういないの…? 
34 
% git branch -d issue1 
% git branch
ブランチ実戦 
よくある問題isコンフリクト
ブランチ実戦 
まずブランチ2つ(issue2, issue3)つくろう 
• もういけるよね? 
36
ブランチ実戦 
まずブランチ2つ(issue2, issue3)つくろう 
もういけるよね? 
一応確認 
• issue2に*ついてるよね 
37 
% git branch issue2 
% git branch issue3 
% git checkout issue2 
% git branch
ブランチ実戦 
さらにファイルを編集 
add / commit しましょ 
38 
% vim README 
さいこうだよ!かっこいいよ! 
でもわたしなんかだめだめだよ…. 
そんなことないよ!僕よりイケてるよ! 
% git add README 
% git commit -m “励まされた”
ブランチ実戦 
issue3ブランチにチェックアウト 
確認してみる 
ファイルを編集しちゃおう 
39 
% git checkout issue3 
% less README 
% vim README 
さいこうだよ!かっこいいよ! 
でもわたしなんかだめだめだよ…. 
そうかも…ダメかもしれない…. 
% git add README 
% git commit -m “追い込まれた”
ブランチ実戦 
issue2ブランチをmasterにマージしちゃおう 
確認してみる 
• masterのREADMEにも励まされたのが入ってるよね 
40 
% git checkout master 
% git merge issue2 
% git log 
% less README
ブランチ実戦 
issue3ブランチをmasterにマージしちゃおう 
…あれ?3行目のとこどうすんの? 
41
ブランチ実戦 
とりあえずやってみよう 
ほらやっぱりコンフリクト(競合)おきた 
ファイルはどうなったん? 
42 
% git merge issue3 
Auto-merging README 
CONFLICT (content): Merge conflict in README 
Automatic merge failed; fix conflicts and then commit the 
result. 
% vim README
ブランチ実戦 
こんな感じだよね 
43 
さいこうだよ!かっこいいよ! 
でもわたしなんかだめだめだよ…. 
<<<<<<< HEAD 
そんなことないよ!僕よりイケてるよ! 
======= 
そうかも…ダメかもしれない…. 
>>>>>>> issue3 
←もともとあったやつ 
←マージしようとした奴に 
あったやつ
ブランチ実戦 
ここは直すしかない 
コンフリクトも修正したし,コミット 
44 
さいこうだよ!かっこいいよ! 
でもわたしなんかだめだめだよ…. 
そんなことないよ!僕よりイケてるよ! 
そうかも…ダメかもしれない…. 
% git add README 
% git commit -m “issue3ブランチをマージ”
Gitの動きはだいたいわ 
かったよね? 
【参考】サルでもわかるGit入門 http://www.backlog.jp/git-guide/ 
【Special Thanks】karasuさん できる!プロジェクト管理
そういえばGithubって? 
何回か出てきたサーバの共有レポジトリを無料で作れちゃうす 
ごいサービス 
• https://github.com 
詳しいことはまた今度. 
ちなみに,GithubはPublicにしかできないので, 
もし誰にも見られたくない,っていうのであれば, 
Bitbucketがオススメです. 
46
まとめ 
Gitを使えばかわいいは作れる! 
【参考】サルでもわかるGit入門 http://www.backlog.jp/git-guide/ 
【Special Thanks】karasuさん できる!プロジェクト管理 
47
つかれたから休憩 
このあとは統計だよ
Python for 
Data Analysis
What Is This Book About? 
Pythonでデータを操作・処理・整理・理解す 
るための基礎を教えてくれる 
• 実践的な科学計算 
• 手法の解説はしないよ 
50
Why Python for Data 
Analysis? 
近年アプリ・学問において科学計算で使われるようになっ 
てきた 
• データ分析・計算・可視化で優れてる 
• CythonとかでCやC++とのインターフェースが用意され,コ 
ンパイルも速くなってきてる 
• RやMATLABと違って科学計算だけでなくProductにも使える 
• JavaやC++には速度負けるけど,プログラミングの時間は短 
縮できるし,トレードオフでしょ(いけるならCとかのほうが 
いい) 
51
Essential Python Libraries 
NumPy 
• 配列とか高速に使える 
pandas 
• データ構造とかをよしなに扱える 
matplotlib 
• グラフとか可視化最強 
IPython 
• リッチなインタラクティブコンソール 
SciPy 
• いろいろな科学計算が入ってる 
52
ここからオリジナル
おすすめコンソール 
iterm2 
• http://iterm2.com/ 
• Preference>Profiles>Command 
• /bin/zsh 
~/.zshrcを作成,編集すると幸せになれる 
• 痒いところに手が届くようになるよ 
• 他人のを参考にするといい 
• https://gist.github.com/mollifier/4979906/ 
• http://shepherdmaster.hateblo.jp/entry/20110924/1316881131 
54
おすすめエディタ 
SublimeText3 
• http://www.sublimetext.com/3/ 
設定とかプラグイン 
• http://qiita.com/mattuso/items/ 
259f60b3d3bc46bf983c 
55
pyenv 
pythonには 
• 2系3系と言われるバージョンがある 
• いろいろなディストリビューションがある 
使い分けちゃおう!っていうのがpyenv 
56
pyenv インストール諸々 
インストール 
設定(~/.zshrc追記) 
使い方 
57 
% sudo brew install pyenv 
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi 
export PYENV_ROOT=/usr/local/opt/pyenv 
% pyenv install 2.7.8 
% pyenv install anaconda-2.1.0 
% pyenv global anaconda-2.1.0 
% pyenv local anaconda-2.1.0
ライブラリのインストール 
pip使えば世界は救われる 
matplotlibはちょっとだけ特殊 
58 
% pip install numpy scipy pandas ipython 
% brew install freetype 
% brew install libpng # 確かかなり重要 
% pip install matplotlib 
※sudoは適宜つけてくだしあ

Python for Data Analysis第1回勉強会(+git入門)