SlideShare a Scribd company logo
pythonで
become データマエショリスト
宮本 丈@第5回 WACODE勉強会
2016/8/6
自己紹介
• 国立癌センターで技術職員やってます。
• python歴は1年ほど
• プログラミングは2年ちょっと
• ダメ出し大歓迎です
資料はこちら
https://github.com/wacode5/python1
1. 言語の背景、対象、目的
2. 型について
3. 基本文法
4. パッケージングの作法
5. 実技
今日の内容
1. 言語の背景、対象、目的
2. 型について
3. 基本文法
4. パッケージングの作法
5. 実技
今日の内容
1. 言語の背景、
対象、目的
誰のための言語?
language for data scientist language for child
language for statistician
pythonが得意なもの
なんでもできるよ!
Pelican
HTMLレンダリング
Web開発
Webスクレイピング
アドホックデータ分析
統計処理
科学技術計算
HPC
Deep Learning
パイプライン管理
可視化
pythonが苦手なもの
1. CPUバウンドの処理 -> numpy, Cythonでなんとかなる
2. 並列・並行処理 -> asyncio, multiprocessingでなんとかなる
3. 組み込み -> なんとかならない
Python is Glue language
裏側はC++
python自体の優位性
• 「ユーザーインターフェイス」が優れている
• ほとんどの場合に「正しいやり方」が用意されている
• コミュニティがでかい
最初にならう言語として最適!
「the pythonic way」
後発の言語の多くはpythonを踏襲している
ので長く使える知識
pythonの歴史とJulia登場の背景
Guido van Rossum (BDFL)
が標準実装(Cpython)の開発開始
google初のプロダクトをpythonで開発
1989
「pythonのパラドックス」 2004
2005
Guidoがgoogleに移籍
(名実ともにGoogleの公用語に)
python3発表 2008
1996
pythonのパラドックス
ポール・グレアム著: 「ハッカーと画家」
pythonのパラドックス
要約: pythonistaはデキる奴が多い
注: 2004年時点の話です。
python3 … 後方互換性を捨てる
今日は3だけです。
2 3
prin文がstatementから
関数に
print “hoge” print(“hoge”)
イテレータ関係の関数
に違い
xrange(iter), imap(iter) range(iter), map(iter)
文字列の扱い strとunicode bytesとstrに統一
数値の扱い int / int がintを返す int / int がfloatを返す。
etc..
Global Interpreter Lock(GIL)
Cpythonでは同時にひとつのスレッド
しか実行できない。
マルチコアで処理を高速化したければ
インタプリタを別プロセスで起動(multiprocessing)し
それぞれでデータを共有させるしかない。
処理系のカオス化
Cpython
PyPy(JIT)
numba(JIT)
pythran
Cython
コンパイラの気持ちとか
考えたくない…
numpyが動かない…
これもう別の言語では?
python3サポートしてない…
ドキュメントが不親切で
デバッグできない
勝手に並列化されて
おそくなったのですが…
なぜpythonで機械学習
?
1. 豊富な高水準ライブラリ
2. numpy
3. Cython
4. multiprocessing
で99割は十分
実行速度を上げる前に
やるべきことがあるよね?
レポジトリ
デフォルトパッケージマネージャは
PyPIからダウンロード
githubから直接入れる場合は以下のコマンド
git clone <url>
python setup.py install
あるいは
pip install git+<url>
データサイエンス向けパッケージ全部入りPython
とりあえず入れておくと万能感に浸れる
https://www.continuum.io/downloads
ダウンロードはこちら
minicondaもあるよ!
参考図書
最初の1冊 狭義のデータサイエンスpandasとか 高速化の作法
正しい書き方について Webの仕組みを知りたい Webアプリ作りたい デザインパターン勉強したい
Dive into python3というサイトもチュートリアルとしてオススメ
統合開発環境
• pyCharm … web向けっぽい
• Jupyter … 言わずと知れた実行環境
ipython nbconvert —to script でスクリプトに変換できるので便利
• vim … いいぞ。
他にも色々あるけどvimとnotebookでいいんじゃないかな
1. 言語の背景、対象、目的
2. 型について
3. 基本文法
4. パッケージングの作法
5. 実技
今日の内容
2. データ型とデータ構造
基本データ型
動的型付けなので、覚えることは少ない
型名 リテラル 備考
文字列 r”hoge”, ‘fuga’
.joinや, .encodeなどの
メソッドをよく使う
数値 1, 2.5, 3 + 4j
バイト列 b”hoge”
.decode(“utf-8”)で文字列に変換
外部プロセスとやり取りする際に用いる
論理値 True, False Rと違って書き方に多様性はない
None None 値がないことを示す
複合データ型(コンテナ型)
名前 内部実装 リテラル
リスト ミュータブルな配列 [1, “hoge”, [2 , True]]
タプル イミュータブルな配列 (1, “hoge”)
辞書(Dictionary) ハッシュテーブル {key: value}
集合型(set) ハッシュ集合 {key}
複雑にネストした型を作る場合、辞書でも不可能ではないが
クラスを用いた方が保守性が高い
標準ライブラリの型
名前 パッケージを含めた絶対名 使うタイミング
ヒープキュー heapq.heapify
巨大なリストをソートし
つつ扱いたい時
名前付きタプル collections.namedtuple
タプルの可読性を
上げたい時
デフォルト辞書 collections.defaultdict
辞書の値にデフォルトの
型を指定したい時
キュー multiprocessing.queue
プロセス間で
データをシェアしたい時
頻出のもののみ
基本データ型
(numpy, scipy, pandas)
• 精度が固定
• 符号の有無がある
C互換性がある
pandasは因子型もある。
行列(numpy.ndarray)
今日はnumpy, pandasは使いません
行列中の型は統一されていなくてはならない
1. 言語の背景、対象、目的
2. 型について
3. 基本文法
4. パッケージングの作法
5. 実技
今日の内容
3. 基本文法
ipythonを起動
ipython notebook & … ノートブックを起動しブラウザからアクセス
jupyter notebook & … も大体一緒
ipython … コンソールからインタプリタを起動
引数なしのpythonコマンドでデフォルトインタプリタ
が起動するが、低機能なのでやめたほうがよい
Zen of python
の出力を音読しましょう(任意)
条件分岐
例外処理
繰り返し文
for文の例
リスト内包表記 (とても便利)
ジェネレータ内包や辞書内包も便利
繰り返し文
while文の例
プロデューサー
(キューに値を入れる関数)
と
ワーカー
(値を取る関数)
を分けて並行処理する際に使う
イテレータ
イテレータプロトコル
__iter__
を実装している型(iterable)
はなんでもイテレータになりうる
コンテナ型の要素を反復して参照するためのインターフェイス
特定ファイルの全行に対して何度も
イテレートするためのカスタム型
標準ライブラリのitertools
を用いるとイテレータを結合したり
無限にイテレートしたりできて便利
関数
1. defで定義
2. snakecaseで書く
例
ディレクトリ操作
ipython上なら ! を行頭につけると
シェルコマンドが使えて便利
スクリプト中ではosモジュールを使用する
ファイル操作、システム操
作1行ずつ読み込んで逐次処理する例
CSVパッケージを使用して書き込む例
ジェネレータ
• 値を複数回にわたって返す関数
つまり
• 実行を一時停止できる関数
つまり
• 値を受け取らないコルーチン
デコレータ
関数を取り、関数を返す関数
http://qiita.com/_rdtr/items/d3bc1a8d4b7eb375c368
詳しくはこの辺
実行時間を測ったり
型チェックしたり
といった使い方がある
配列操作
文字列操作
utf-8で統一するためにシェバング以下にこう書いておくと良い
文字列はイミュータブルなので、変更する操作は必ず
左辺で返り値を受け取る必要がある。
正規表現は標準ライブラリのreを用いる
オブジェクト指向(概念
)
乱暴に要約すると
「インターフェイスを統一しましょう」
という話。
きちんと設計するのは難易度が高いが、
大規模なフレームワークならば必須。
大抵は関数とモジュールで十分なので
下手に手をだすのはやめておきましょう
オブジェクト指向(文法
)クラス(データ型に関数がくっついたもの)
__init__が
デフォルトコンストラクタ
キャメルケースで書く
オブジェクトプロトコ
ル
pythonはすでに様々なインターフェイス規約がある。
以下の様な場合のインスタンスの挙動を定義する
• __init__(self) … デフォルトコンストラクタ
• __add__(self) … + 演算子に渡した時
• __iter__(self) … イテレータとして評価した時
• __getattr__(self) … 未定義のメンバ変数にアクセスした時
• __call__(self) … インスタンスを関数として評価した時
• __repr__(self) … コンソールでの見え方
• __subclasshook__ … isinstance()で評価した時
etc …
デバッグに便利なTIPS
obj.__class__でオブジェクトのクラスがわかる
obj.__dict__ で属性の一覧
dir(obj)でメソッドと属性の一覧
obj?? でソースコードを見る(ipython)
objという名のオブジェクトが合った時に
可視化
matplotlibがお手軽だが、plotlyを使っておくと
他の言語に移行しても楽っぽいのでオトクかも
matplotlib
Bokeh
Seaborn
ggplot2
plotly
探索的データ分析の時のデファクトスタンダード
matplotlibの見た目をブラッシュアップしたもの
なのでpandasと相性がよい
文法がRのそれと似ているので慣れている方には便利
イケてる
D3.jsのラッパ。インタラクティブに可視化できる
1. 言語の背景、対象、目的
2. 型について
3. 基本文法
4. パッケージングの作法
5. 実技
今日の内容
4. パッケージング
Rと比べて
ただのスクリプトとパッケージの差が少ない
従って覚えることが少なくて非常に楽
それだけに軽い気持ちで作り始めて泣きを見ることも
既存パッケージのインストー
ル
pip install パッケージ名
conda install パッケージ名
condaはanaconda,miniconda付属の
パッケージマネージャ
コンパイル済みのものをゲットできるので楽
ライブラリのサーチパス
1. sys.pathにappend,insert
2. $PYTHONPATHをexport
3. ディレクトリを移動
のいずれかの方法で追加できる。
このファイル
の存在するディレクトリ
と”..”を結合
したものの絶対パス
をサーチパスの最初に追加
仮想環境の作成
pyvenv
python -m venv
conda create
pyenv-virtualenv
いろいろあって現状カオス
依存パッケージの正確なバージョン
が知りたかったら必須だが、そこまで神経質に
ならなくても良いのでは派です。
setup.py
メタデータを記述するスクリプト
setuptoolsとかdistutilsとか紆余曲折合ったが
今はsetuptoolsで落ち着いている
詳しくはgithubを見てください
docstring
ソースコード中の文字列が
そのままユーザリファレンス
となるすぐれもの。
モジュール・クラス・関数
に対して書く
1. 引数と返り値を書くこと
2. numpy styleとGoogle styleがある。
3. どちらを用いても良いが、統一すること。
4. ReST記法を使うと吉
5. 引数と、返り値を、書くこと。
6. 例も書くと吉
Google Styleの例
doctestでお手軽TDD
モジュール最下部にこう書いておき、
スクリプトとして実行する。
先ほどの例のExamplesがそのままテストに!!
副作用のない関数を書く必要が出てくるので、設計にも好影響!
Sphinx、reST
ドキュメントをhtmlで
レンダリングしてくれる。
拡張モジュールでdocstring
も取り込める。
pip install sphinx && sphinx-quickstart
でテンプレートを作成してみよう!
ちょっと高級なMarkdown
みたいなもの
unittest
testsディレクトリ以下に置くのが慣習
JavaのJUnitっぽいテストスイート
python setup.py test
tests/以下のテストを実行
python setup.py build
パッケージのビルド
egg-infoというpypi用のメタデータを作成する
python setup.py install
site-packages以下にインストールする
Step.11 : 公開
• pypircに、tomlでメタデータを書く
• setup.cfgに配布に含めるドキュメントを指定
• python setup.py register -r <project_name>
で、審査待ちになるっぽいです。
1. 言語の背景、対象、目的
2. 型について
3. 基本文法
4. パッケージングの作法
5. 実技
今日の内容
5. 言語の特性を
生かした解析例
今日使うパッケージ
requests … httpでのやり取りを担当
lxml … xmlパーサ
BeautifulSoup … htmlパーサ。内部でlxmlを使用する
logger … 標準ライブラリ。ログ出力を行う
全体の流れ
次元圧縮(t-SNE)
可視化(Plots.jl)
Webスクレイピング(
Wikipedia)
文章のベクトル化
(word2vec)
可視化
(plot, igraph)
アルゴリズム開発
(DBSCAN)
次元1
次元50
・・
・
・・
・
・・
・
次元I
・・
・
次元II
クラスター
ラベル
次元I
次元II
全体の流れ
次元圧縮(t-SNE)
可視化(Plots.jl)
Webスクレイピング(
Wikipedia)
文章のベクトル化
(word2vec)
可視化
(plot, igraph)
アルゴリズム開発
(DBSCAN)
次元1
次元50
・・
・
・・
・
・・
・
次元I
・・
・
次元II
クラスター
ラベル
次元I
次元II
ここだけやります
Python, Juliaと比較して
(個人的な見解)
・十徳ナイフのような言語
・Rに比べて環境問題が面倒ではない
・データ分析の場合、OOPより関数型的な考え方の方が有用
・ググればたいてい情報が出てくる
・バイオはそんなに強くない(BioPythonは個人的にイマイチ)
解答例
リポジトリ内で
git checkout answer
すると解答例が見れます
https://github.com/wacode5/python1

More Related Content

PPT
Twitterテキストのトピック分析
PDF
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
PDF
Hadoop~Yahoo! JAPANの活用について~
PPTX
今さら聞けないHadoop セントラルソフト株式会社(20120119)
ODP
Hadoop for programmer
PPTX
黄色い象と共に生きる
PDF
トピックモデルの話
PPT
歯の発生によるEvo-Devoのシミュレーション
Twitterテキストのトピック分析
[db tech showcase Tokyo 2014] B22: Hadoop Rush!! HDFSからデータを自在に取得、加工するにはどうする? ...
Hadoop~Yahoo! JAPANの活用について~
今さら聞けないHadoop セントラルソフト株式会社(20120119)
Hadoop for programmer
黄色い象と共に生きる
トピックモデルの話
歯の発生によるEvo-Devoのシミュレーション

Viewers also liked (19)

PPTX
ピカチュウによるPythonオブジェクト入門2
PPTX
Why python
PPTX
SMX London 2012 presentation - Understanding Google Penalties
PPTX
久保研究室とは
PPTX
ピカチュウによるPythonオブジェクト入門
PPTX
Why python
PPTX
Hl20160929
PDF
Node boxで始めるジェネラティブ・アート#pyconapac
PPT
Gurobi python
PPTX
python基礎教學
PDF
160428 東工大「ロボット技術」授業資料
PDF
Python入門 コードリーディング - PyConJP2016
PPTX
暗号通貨読書会 #7: Bitcoin NG
PPTX
PythonでDeepLearningを始めるよ
PPTX
知識を紡ぐための言語処理と、 そのための言語資源
PPTX
Enigmaの解説
PDF
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
PDF
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
PPT
Introduction to Python
ピカチュウによるPythonオブジェクト入門2
Why python
SMX London 2012 presentation - Understanding Google Penalties
久保研究室とは
ピカチュウによるPythonオブジェクト入門
Why python
Hl20160929
Node boxで始めるジェネラティブ・アート#pyconapac
Gurobi python
python基礎教學
160428 東工大「ロボット技術」授業資料
Python入門 コードリーディング - PyConJP2016
暗号通貨読書会 #7: Bitcoin NG
PythonでDeepLearningを始めるよ
知識を紡ぐための言語処理と、 そのための言語資源
Enigmaの解説
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Introduction to Python
Ad

Similar to Wacode5thでのpython講義資料 (20)

PPT
おとなのテキストマイニング
PPTX
Recommend scala
PPTX
Perl で自然言語処理
PDF
LDA入門
PDF
言語資源と付き合う
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PPTX
Variational Template Machine for Data-to-Text Generation
PDF
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
PDF
サポーターズ勉強会スライド 2018/2/27
PDF
Rブートキャンプ
PPTX
Go言語ってどんな言語? 導入実績や気になるトレンド
PDF
PEP8を読んでみよう
PPTX
PubMedBERT: 生物医学NLPのための事前学習
PPTX
卒論執筆・スライド作成のポイント
PDF
Pythonのすすめ
PDF
Python界隈の翻訳プロジェクト
PPTX
文献データベースを使ったトレンドワード提示実験
PPTX
PHP基礎勉強会
PDF
HiroshimaR5_Intro
PDF
ソースコードリーディングの基礎
おとなのテキストマイニング
Recommend scala
Perl で自然言語処理
LDA入門
言語資源と付き合う
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Variational Template Machine for Data-to-Text Generation
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
サポーターズ勉強会スライド 2018/2/27
Rブートキャンプ
Go言語ってどんな言語? 導入実績や気になるトレンド
PEP8を読んでみよう
PubMedBERT: 生物医学NLPのための事前学習
卒論執筆・スライド作成のポイント
Pythonのすすめ
Python界隈の翻訳プロジェクト
文献データベースを使ったトレンドワード提示実験
PHP基礎勉強会
HiroshimaR5_Intro
ソースコードリーディングの基礎
Ad

Wacode5thでのpython講義資料