More Related Content
Similar to Python札幌201406
Similar to Python札幌201406 (20)
More from Shinya Okano (10)
Python札幌201406
- 2. お前、誰よ?
• 岡野 真也 (tokibito)
• 住んでた場所: 大阪→和歌山→北海道(北見)→北海道(札幌)→東京
• 株式会社ビープラウド
• 受託開発(Webシステム、Android/iOSアプリなど)
• システム開発コンサルティング
• プログラミング研修
• Pythonは8年ぐらい使ってます
• Djangoは7年ぐらい使ってます(0.95~)
↑ ビープラウドが作ってる
- 9. 2系と3系の違い
• print
• 2.x: print "hoge"
• 3.x: print("hoge")
• 文字列型(str)
• 2.x: "日本語" ← !!!
• 3.x: "日本語".encode('utf8') # 2系のstr型に相当するものはbytes型
• 文字列型(Unicode)
• 2.x: u"日本語"
• 3.x: "日本語" ← !!! # 2系のunicode型に相当するのはstr型
• 3.3以降では u"日本語" が使えるようになった
• 除算
• 2.x: 5 / 2 # => 2
• 3.x: 5 / 2 # => 2.5
- 10. 2系と3系の違い
• 辞書のitemsメソッド
• 2.x: {"a": 1}.items() # => [('a', 1)] というリストが返される
• 3.x: {"a": 1}.items() # => dict_items([('a', 1)]) というイテレータが返される
• 標準モジュールのUnicode対応
• 2系では入力がstr型(非Unicode)だったものが、3系のstr型(2系のunicode型
相当)に対応した
• csvモジュール
• 標準モジュールのAPI変更
• パッケージ名が変更されていたり
• urllib
• 2.x: urllib.urlopen()
• 3.x: urllib.request.urlopen()
• 他多数
- 15. 3系に対応するには
• 2系に対応しない場合
• 3系の文法に書き換える
• 3系の標準モジュールに対応させる
• 2系と3系で動くようにする場合
• 2系と3系で動く文法に書き換える(2系の古いバージョンを切り捨てる)
• try .. exceptなど
• 3.0~3.2に対応しようとすると大変なので切り捨てても良い
• 互換性を吸収するモジュールを用意する(compat)
• 2to3やsixを使う
- 16. 2系から3系への移行に便利なツール
• 2to3
• Python2のコードをPython3対応に変換する
• 変換したコードが必ず正しく動く保証はない
• 変換に時間がかかるため開発時のテンポが悪い
• six
• Python2とPython3の差異を吸収するためのAPIや定数を提供
• 型の差異(例. Python2: int & long, Python3: int)
• 文法の差異(例. metaclass,)
• バイナリ列と文字列の扱い
• tox
• マルチバージョンでのテスト実行(コマンド一発で復数のvirtualenv作成)
• GitHub+TravisCIで使うとさらに良い
- 23. 最近のリリースのペース
• Django 1.3 (2011/05)
• Django 1.4 (2012/03)
• Django 1.5 (2013/02)
• Django 1.6 (2013/11)
9~11ヶ月ぐらいでリリースされてる
→リリースから2年程度でメンテナンス終了する可能性が高い
- 28. デフォルトのプロジェクトレイアウトを変更
• 旧
• project/manage.py
• project/settings.py
• project/urls.py
• project/app/models.py # アプリケーションのレイアウトは変更無し
• 新
• project/manage.py
• project/project/settings.py
• project/project/urls.py
• project/project/wsgi.py
• project/app/models.py
• PYTHONPATHが重なる問題が解消した
- 34. Django1.7 (開発中のバージョン)
• スキーママイグレーション
• アプリケーションロードのリファクタリング
• カスタムクエリセットのメソッドをマネージャから呼び出し可能に
• Python 2.6サポートを削除
• Python 3.4正式サポート
• その他
• https://docs.djangoproject.com/en/dev/releases/1.7/
- 35. スキーママイグレーション
• migrate, makemigrationsコマンドの追加
• Southの統合(KickStarterでの募金により17,952ユーロ(245万円程度)集まっ
た)
• Southからの移行についてもドキュメントに書かれている
• https://docs.djangoproject.com/en/dev/topics/migrations/
syncdbコマンドは非推奨となりmigrateに置き換えられた
$ python manage.py migrate # マイグレーションの実行
$ python manage.py makemigrations # マイグレーションの作成
- 48. Python対話モードで操作
>>> sc # 対話モードで起動すると有効になっているコンテキスト変数
<pyspark.context.SparkContext object at 0x182c150>
# HDFS上のファイルからデータセットを作成
>>> textFile = sc.textFile('/tmp/ken_all_utf8.csv')
# データセットに対して操作
>>> textFile.filter(lambda row:u'札幌' in row).count()
823
- 49. スクリプトファイルで実行
# coding: utf-8
from pyspark import SparkContext
def main():
sc = SparkContext('local', 'MyApp')
textFile = sc.textFile('/tmp/ken_all_utf8.csv')
result = textFile.filter(lambda row: u'札幌' in row)
print result.count()
if __name__ == '__main__':
main()
- 50. データセットを操作するAPI
• Transformations
• map(func) # 行単位でfuncを実行してデータを変換、加工
• filter(func) # 行単位でfuncを実行してデータをフィルタ
• join(otherDataset, [num Tasks]) # データセットを結合
• …
• Actions
• reduce(func) # データセットをfuncで集約
• count() # 行数を返す
• saveAsTextFile(path) # データセットをHDFSへ保存
• …
• http://spark.apache.org/docs/latest/programming-guide.html
• これらのAPIを使ってデータを処理、分析する