Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
PASONA TECH 歩いてっくセミナー
Pythonの魅力と
オープンソースの多様性辻 真吾(@tsjshg)2016.10.20
自己紹介❖ 1975年生まれ
❖ 東京大学先端科学技術研究センター 特任助教
❖ 研究室はがんとゲノム
❖ やっていることはPythonでデータ解析
❖ 昔はJavaでWeb開発とかしていましたが、10年ほど前から全部Python
❖ http://www.tsjshg.info/
みんなのPython勉強会
❖ connpassでイベント情報公開しています
❖ http://startpython.connpass.com/
❖ 誰でも歓迎なPython勉強会
❖ 18回目の次回は11/9(水)
19:00~の予定です
Udemy
https://www.udemy.com/python-jp/?couponCode=TSJSHG45D割引クーポンあります→
今日の構成❖ オープンソースと選択肢
❖ Pythonについて
❖ Pythonの特徴
❖ Pythonの環境構築
❖ Webアプリ開発からみたオープンソースの多様性
❖ AIと機械学習
❖ データサイエンスを支えるオープンソース
❖ インフラとしてのオープンソース
オープンソースは選択肢が多い
PC-UNIX
シェル
軽量言語
初勝利
考えられる可能性
❖ Pythonの可読性
❖ Cライブラリとの連携の良さ
❖ バージョン間の互換性
❖ Pythonも2と3は結構違う
❖ マルチプラットフォーム
どうしたらいいのか?
❖ 基本的には勝ち馬に乗れ
❖ 情報が充実している
❖ 開発コミュニティの大きさ
❖ 偶然が支配する部分は大きい
Pythonがインフラになりつつある
英語?
未来も明るい❖ 米国の大学Top10のうち、8校がPythonを計算機科学科の入門言語として採用
❖ Top39校中だと27校(約7割)
❖ データサイエンスの分野で存在感が増していることも影響している?
フランス語ではなく・・・
❖ 英国の小学生やその親御さんの多くが、第二言語としてフランス語よりPythonを希望
いろいろなプログラミング言語
汎用的目的 特化
簡単
難しいC++
Java
C
SQL(データベース)R(データ解析)
PythonRubyPerlJavaScript(Web)
PHP(Web)
TeX(組版)
C#
Shell
*個人の見解です
Pythonの生い立ち❖ 教育用に開発されたABCに影響をうけている
❖ 正統派C, C++からも影響を受けている
❖ つまり、入門しやすく、標準的なプログラミングのスタイルを採用
https://ja.wikipedia.org/wiki/Python
Wikipediaより
Pythonの環境構築
Pythonのインストール
❖ 2系と3系がある
❖ 後方互換性がありません
❖ 特に理由がなければ3を
❖ MacOSXやLinuxのOSにはじめからインストールされているのが2系(なのが残念)
www.python.org
Anacondaがおすすめ!
❖ Continuum Analytics社が配布するPython
❖ 標準のPythonにcondaをはじめとして多くの外部ライブラリを同梱
❖ 無料(メアド登録あり)
❖ データ解析環境の構築に最適https://www.continuum.io
豊富な外部ライブラリ
外部モジュールが豊富 91,068個(2016年10月20日)
ライブラリの追加方法
ファイルをダウンロードして解凍後$ python setup.py install
lib/python3.5/site-packagesのようなディレクトリにインストールされる
実際はpipが便利• Python3.4から標準装備
• PyPIから自動ダウンロード
• 削除にも対応
• 使い方(OSのシェルで)
• pip install -U django
• -U or --upgradeで最新版を取得
• pip freeze
• いまの状態を表示
しかし・・・❖ CやFORTRANで書かれたライブラリがその場でコンパイルされることがある
❖ Linuxは大丈夫
❖ MacOSXならXCodeのインストールで対応
❖ 開発環境を手軽に整えるのが難しいWindowsでこの問題は重い
condaが便利
❖ $ conda install django
❖ pipと同じような方法で、外部モジュールを追加
❖ PyPIではなく、Continuum Analytics社のレポジトリに接続し、Windowsでもコンパイル済みのバイナリをとってきてくれる
❖ PyPIのバージョンよりちょっと古いことも
condaで複数バージョン
❖ Python3.xとPython2.xの両方欲しいとき
❖ $ conda create python=2.7 -n my27env
❖ $ source activate my27env
❖ $ source deactivate my27env
Jupyter notebookが便利❖ 高性能なPythonインタラクティブシェルIPython
❖ コマンドラインでipython
❖ Webブラウザで利用できるJupyter notebook
❖ Jupyterという名前で、Python以外の言語も利用可能
❖ コードの入力、実行、結果の表示、保存などができる
❖ ノートブックをHTML形式に変換できる
Webアプリ開発からみた オープンソースの多様性
WSGI❖ Web Server Gateway Interface
❖ PythonのおけるWebアプリケーションのための標準仕様
❖ 標準モジュールにwsgiref(WSGI Utilities and Reference
Implementation)がある
❖ WSGIに準拠したWebアプリを標準モジュールだけで作れる
❖ 多くのPython製WebアプリフレームワークやWebサーバがこの仕様に準拠
たくさんある
https://ja.wikipedia.org/wiki/Web_Server_Gateway_Interface
PythonとWebアプリ開発
❖ 言語の哲学(やり方はできれば一種類がいい)と矛盾している?
❖ Webは用途が広いので、フレームワークの細分化は必要
❖ 「みんなのPython」柴田淳さん
代表例❖ Bottle (http://bottlepy.org/)
❖ 超軽量(なんと1ファイル)すぐ使える
❖ Flask (http://flask.pocoo.org/)
❖ Pyramid (http://www.pylonsproject.org/)
❖ Pylonsの流れをくむ
❖ Django (https://www.djangoproject.com/)
❖ フルスタックフレームワーク
フレームワークの構成
View
Controller
Model
Object-Relational MappingORM(OR Mapper)
• SQLAlchemy• peewee• SQLObject• Storm• Django
Template Engine
• Mako• Jinja2• Cheetah• Bottle• Django
多くのWebアプリケーションフレームワークは、これらの組み合わせDjangoは自前主義なので、考え無くていい
Webアプリ開発
Ruby on Rails Django
Webアプリケーション開発のフレームワークとして有名なRuby on RailsとDjangoを比較
Google Trends
Report Lab
❖ PythonでPDFを作れる
❖ 日本語ももちろんOK
❖ 位置を指定して、文字を流し込んだり、線を引いたりするコードを書く感じ
❖ オープンソースだが有料版も
小まとめ
❖ オープンソースには選択肢が沢山ある
❖ 大きな組織が面倒をみてくれるとちょっと安心
❖ condaやReport Lab
❖ 標準仕様があるとみんな作りたくなる?
❖ Webアプリフレームワーク
AIと機械学習
最近のAIを取り巻く話題
http://www.gizmodo.jp/2011/02/ibm_2.htmlhttp://www.nature.com/news/google-ai-algorithm-masters-ancient-game-of-go-1.19234http://japanese.engadget.com/2016/07/01/dvd/
IBM ワトソン
自動運転車の実現
Alpha GO
AIとは?❖ 人工知能(AI:Artificial Intelligence)
❖ 1956年米ダートマス大の会議で初めて使われた
❖ 強いAI(Strong AI)と弱いAI(Weak AI)
❖ 色々な定義がある模様
❖ 強いAI:人間と同じやり方で問題解決(まだ夢?)
❖ 弱いAI:特定の問題解決に特化
よくある例え
❖ 両方飛べるが、やり方がまったく違う
❖ ジェット機は滑走路がないと飛べないが、スピードは鳥より速い
❖ 特定の目的に特化して、生命体を凌駕
知能を形作る技術
検索
画像認識
知識ベース
AI
パンダ「竹が主食ってアホ?」
パンダ
なぜ今?❖ まだまだ、それぞれの技術を磨いているレベル
❖ 自然言語処理の分野など
❖ 機械学習革命
❖ Deep Learningの出現
❖ 玉石混淆
❖ 本質を見極める姿勢が重要(だと思います)
機械学習革命の本質
*Azureのブログに同じような図があります。パクりではありません。
データ 欲しい結果プログラム
(プログラマが作る)
従来のシステム
データ
(予備的な)欲しい結果出力
機械学習アルゴリズム
機械学習時代のシステム
プログラム
たとえば
❖ 自動販売機にコインをいれると、種類を判定してくれる
❖ 今は、センサーで取得したデータをもとに、プログラミングされている
❖ 機械学習アルゴリズムを使えば、コインとその種類の対応データを学習させれば良いだけになる
今の限界は・・・
❖ 機械学習アルゴリズムの入力や出力は数値
❖ 画像はRGBで数値化
❖ 自然言語は、単語の出現回数のようなデータ
❖ このあたりの研究が進むとさらなる進化が期待できるかもしれない
機械学習とデータサイエンス
いくつかの選択肢❖ SAS (www.sas.com)
❖ BIツールの代表格
❖ Matlab (jp.mathworks.com)❖ 数値シミュレーションなどに利用されている
❖ R
❖ RStudio(IDE)は便利
❖ Python
我田引水
オープン? 汎用言語?
SAS × ×
Matlab × ×
R ○ ×
Python ○ ○
データサイエンス分野での躍進
❖ SASからRへ
❖ オープンソースへの流れ
❖ データサイエンスの分野ではPythonの利用が伸びている
❖ (注)2016年からPythonが新たに選択肢に加わった
http://www.kdnuggets.com/2016/07/burtchworks-sas-r-python-analytics-pros-prefer.html
みんなPythonでできる
http://www.talyarkoni.org/blog/2013/11/18/the-homogenization-of-scientific-computing-or-why-python-is-steadily-eating-other-languages-lunch/
2013~
2011年前後
Pythonはglue(のり)言語
NumPy, SciPy
❖ Pythonでのデータ解析、科学計算の基礎となるライブラリ
❖ array(ベクトルや行列)の高速な演算を実現
❖ 基本的な統計関数や数値積分、最適化なども可能
Pandas
❖ データ解析なくてはならない超高性能ライブラリ
❖ エクセルのシートをイメージすると分かり易いかも
❖ データの入出力、加工、可視化など幅広く対応
matplotlib, seaborn
❖ データの可視化に使われる
❖ matplotlibはmatlabの代替を意識
❖ seabornはmatplotlibを基礎にして、使用しやすく、統計的な機能も取り込む
seaborn
ドキュメントが・・・
みんな、ごめんね。seabornのドキュメントは有料になったんだ。
ggplotがイイらしいから代わりに使って見たら?
scikit-learn
❖ 進化し続けるPythonの機械学習ライブラリ
❖ 豊富なドキュメントとコード例で、利用するには便利
❖ cheat sheetなどアルゴリズムを学べる資料も多数
Deep Learningは流行り❖ Caffe
❖ http://caffe.berkeleyvision.org/
❖ theano
❖ http://deeplearning.net/software/theano/
❖ Pylearn2
❖ http://deeplearning.net/software/pylearn2/
❖ Keras
❖ https://keras.io/ja/
❖ Chainer
❖ http://chainer.org/
❖ TensorFlow
❖ https://www.tensorflow.org/
分かり易さから、Keras、Chainerがおすすめです
Hype Cycle❖ 先端技術がたどる典型的な道筋
❖ 米国の調査会社Gartnerが提唱
過剰期待の頂
技術の引き金
幻滅の窪地
啓蒙の坂
生産性の台地
Gartner Hype Cycle 2015
http://www.gartner.com/newsroom/id/3114217
Gartner Hype Cycle 2016
http://www.gartner.com/newsroom/id/3412017
機械学習ライブラリの今後
❖ 機械学習はブームの絶頂
❖ 見極めるのが難しい
❖ PythonでDeep Learning以外は、結構落ち着いている
❖ NumFocus
❖ PyData
PyData
http://pydata.org/downloads.html
回帰(Regression)
❖ scikit-learnとstatsmodelsでできる
❖ 若干機能が違う
❖ statsmodelsが詳しい結果を出す
❖ PyDataのようなコミュニティがあるとよい方向へ行く?
目的変数
説明変数
インフラとしてのオープンソース
❖ Linuxなどインフラとして利用されているオープンソースは沢山ある
❖ 社会的責任が増している
❖ 金銭面を含め、オープンソースを支える仕組みが必要?
まとめ
❖ インフラになりつつあるPython
❖ オープンソースの選択肢
❖ 本質を見極めよう
❖ とりあえず勝ち馬に乗る
❖ オープンソースを社会が支える必要性
ありがとうございました