【勉強会メモ】PyData Osaka Meetup #9
- 日時:2018/02/28(水) 18:30 〜 21:00
- 場所:ヤフー株式会社 大阪グランフロントオフィス
データサイエンス関連のコミュニティで久々の開催とのことでしたが、個人的には初参加でした。専門分野ではないので前提知識が少ない状態で参加してしまいましたが、この分野はITサービスとしても欠かせない領域になってきておりデータを連携する側としても切り離せないものとして知識を深めたいと考えています。
今回のテーマは「PyDataツールの最新情報」とのことですが、Notebook系のツールやサービスはクラウドも絡めて広範囲に浸透しており、ここ1,2年でかなり充実していきている印象があります。また、Apache Arrowは今後使うケースが増えそうで特に期待値の高いツールだと感じましたが、データ連携という意味ではWeb側にとっても重要なツールなので本当に切り離せないものとして把握しておくべきと感じました。
最近のPySparkとPydata
玉川竜司さん( @tamagawa_ryuji )
O'Reilly本の翻訳者さん
ヘルシープログラマ
ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack
- 作者: Joe Kutner,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/07/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る
長く健康に開発をするための本
SREサイトリライアビリティエンジニアリング
SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
- 作者: 澤田武男,関根達夫,細川一茂,矢吹大輔,Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/08/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
入門PySpark
入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム
- 作者: Tomasz Drabas,Denny Lee,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/11/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
Qiitaでも海外のブログ等を翻訳して公開
データサイエンスとデータエンジニアリング
- データサイエンス…数学の世界
- データエンジニアリング…デバイス、メモリ、CPU、コードなど
分散処理って必要ですか?
やらなくてすむならやらないほうがいい
- ちゃんと使えばパフォーマンスは上がる
- 落とし穴はたくさんある
- サイエンス系は落とし穴をあまり意識しない
- 落とし穴は縮小傾向にはある
ハードウェアの変化
- メモリの低価格化
- SSDの普及と大容量化
- CPUのコア数の増大
- ネットワークの高速化
⇒大々的に分散処理するまでもないケースが増加
分散処理の難しさ
参考:「みんなが知っているべき数値 by Jeff Dean」P.4
www.slideshare.net
- ZIP圧縮⇒時間かからない
- HDDシークやNW経由のデータ通信⇒時間かかる
分散処理で問題になること
- 気楽にやった操作が重くなることが多い
- 非分散の場合メモリに乗っかってしまえばあまり考えないで良い
クラウドサービスは便利
Sparkへの移行が進む
- 新規開発でHadoopを使う理由はなくなってきている
Sparkの使いどころ
- メモリに収まるサイズならPyDataのツール群が有効(Pandasなど)
- オンメモリに収まらないサイズならSparkが有効
- 小規模のデータでも小回りがきく
- Hadoopは違う(大きいサイズだけ)
※注意:Spark 1.2まではPySparkはめちゃくちゃ遅い
なのでPySparkではDataFrameを使いましょう
速度が遅くなる理由
- RDD API
- DriverがStorageから読み取ってデータを処理する際にPythonVMを使う(PythonVMにデータが流れる)
- DataFram
- UDFを使うとPythn VMにデータが流れるので注意
- Spark 2.3からVectorized UDFがサポート
- Pandas UDFは早くなる
ファイルベースはParquetがオススメ
⇒分散フアイルシステムがなくても事足りるケースも多い
Parquetの特徴
インメモリのデータ変換の問題
- pandas⇒Sparkはかなり遅かった
- 2.2からArrowに対応して早くなった
Apache Arrow
- インメモリ列指向データフォーマット
- 無駄なデータコピー変換をすることなくツール間でデータをやり取り
参考:Arrowについての翻訳
SciPyの概要と各モジュール紹介
大橋宏正さん( @wrist )
SciPyとは
- NumPyの上に作られた数学的なアルゴリズムや便利なサブモジュール
- SciPy 1.0⇒2017/10/25にリリース
- 最初のリリース2001年⇒16年( 「SciPy 1.0」リリース、最初のリリースから16年 | OSDN Magazine )
なぜ1.0か?
- プロダクション環境で使われるほどに成熟し安定したこと
- 技術的な目標と組織的な目標の両方を達成
SciPyを学ぶ際のリソース
https://www.scipy-lectures.org/
1.5. Scipy: 高水準の科学技術計算 — Scipy lecture notes
Azure Notebookを使ってデモしながら解説
scipy.io
- matlabの代わりに使える
scipy.special
- 特殊関数が含まれる
- cythonバインディングも存在
scipy.linalg
- 線形代数関連の操作
numpyとの違い
scipy.fftpack
- 高速フーリエ変換、離散コサイン変数
- 周波数を取る
scipy.interpolate
- 曲線の補間
- 補間関数の生成
- 補間値の算出
scipy.signal
- 信号処理
- フィルタ設計・フィルタリング
- 畳み込み・時間相関計算
- 窓関数
- ホワイトノイズに対するローパスフィルタの適用
参考
scipy.optimize
- 各種最適化アルゴリズム
- 曲線フィッティング
- 最小値を見つける
scipy.stat
- 統計や確率分布
- 統計的検定
scipy.spatial
- 空間データや距離を扱うためのモジュール
- 距離行列を計算
scipy.misc
- face…アライグマが描画できる
おまけのデモ
fftpackとsignalで音の信号処理
⇒ベースの音だけ抽出
Jupyter とコラボレーション
入江敦央さん
大規模ではない数人程度のチームでデータ分析を含むコラボレーションをJupyterベースで進める際に地味だけど起こりがちな問題を防止する
JupyterConからピックアップして紹介
コラボレーションを阻害する要因
共同作業を問題なく進めるための共通基盤がない⇒ここにフォーカス
架空ケース:レコメンドAPIの企画
データの交換
前処理はつらい
- Apache Arrowを使う
Python同士での交換
- バージョン違いでimportエラー
- 通知計算の結果の扱いが変わる事がある
バージョン情報を記述
- version_information
- watermark
環境をコピー
- pip+requirements.txt
- conda+environments.yml
- Anaconda Project+anaconda-project.yml
環境インストールだけでなく環境変数設定やサービスプロセスの開始なども面倒みてくれる
- JupyterHubによる中央管理
- 参照: Zero to JupyterHubのチュートリアル
Notebook系サービスを使う
- 小規模なら
非プログラマーへの配慮
NotebookをHTML出力して配布
- インタラクティブなHTML
- Plotly やJavaScriptベースのプロット用ライブラリ
- nteract …ipynbファイルのビュワー
- 閲覧とテキスト編集レベルは可能
インタラクティブなNotebook
簡易なダッシュボードサーバ
⇒より深い洞察を得られる
分析ストーリーの共有化
- 分析内容を図と文章で説明
- コード実行だけが延々と続いているのはツライ
- グラフだけもつらい
- notebookはストーリーテリングツール
- 分析ツールとして使うだけでなく物語る
変更管理
システム担当との共闘
- 製品デプロイまで面倒をみる
- Notebookから定番クラウドへモデルデプロイ