radioc@?

レディオキャットハテナ

【勉強会メモ】PyData Osaka Meetup #9

pydataosaka.connpass.com

  • 日時:2018/02/28(水) 18:30 〜 21:00
  • 場所:ヤフー株式会社 大阪グランフロントオフィス

データサイエンス関連のコミュニティで久々の開催とのことでしたが、個人的には初参加でした。専門分野ではないので前提知識が少ない状態で参加してしまいましたが、この分野はITサービスとしても欠かせない領域になってきておりデータを連携する側としても切り離せないものとして知識を深めたいと考えています。

今回のテーマは「PyDataツールの最新情報」とのことですが、Notebook系のツールやサービスはクラウドも絡めて広範囲に浸透しており、ここ1,2年でかなり充実していきている印象があります。また、Apache Arrowは今後使うケースが増えそうで特に期待値の高いツールだと感じましたが、データ連携という意味ではWeb側にとっても重要なツールなので本当に切り離せないものとして把握しておくべきと感じました。

最近のPySparkとPydata

玉川竜司さん( @tamagawa_ryuji

O'Reilly本の翻訳者さん

ヘルシープログラマ

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

長く健康に開発をするための本

SREサイトリライアビリティエンジニアリング

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

入門PySpark

入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム

入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム

Qiitaでも海外のブログ等を翻訳して公開

qiita.com

データサイエンスとデータエンジニアリング

  • データサイエンス…数学の世界
  • データエンジニアリング…デバイス、メモリ、CPU、コードなど

分散処理って必要ですか?

やらなくてすむならやらないほうがいい

  • ちゃんと使えばパフォーマンスは上がる
  • 落とし穴はたくさんある
    • サイエンス系は落とし穴をあまり意識しない
  • 落とし穴は縮小傾向にはある

ハードウェアの変化

  • メモリの低価格化
  • SSDの普及と大容量化
  • CPUのコア数の増大
  • ネットワークの高速化

⇒大々的に分散処理するまでもないケースが増加

  • Parquetのような圧縮のきくデータフォーマット
    • 従来はストレージが問題になるケースが多かった
    • CSVを使うことが多かった
  • ボトルネックがCPUになってきている

分散処理の難しさ

参考:「みんなが知っているべき数値 by Jeff Dean」P.4

www.slideshare.net

  • ZIP圧縮⇒時間かからない
  • HDDシークやNW経由のデータ通信⇒時間かかる

分散処理で問題になること

  • 気楽にやった操作が重くなることが多い
    • 非分散の場合メモリに乗っかってしまえばあまり考えないで良い

クラウドサービスは便利

Sparkへの移行が進む

  • 新規開発でHadoopを使う理由はなくなってきている

Sparkの使いどころ

  • メモリに収まるサイズならPyDataのツール群が有効(Pandasなど)
  • オンメモリに収まらないサイズならSparkが有効
    • 小規模のデータでも小回りがきく
    • Hadoopは違う(大きいサイズだけ)

※注意:Spark 1.2まではPySparkはめちゃくちゃ遅い

  • RDD⇒Sparkの基盤となるデータ構造
    • Javaのコレクションのようなもの
    • Python からRDD APIを使うと遅い
  • DataFrame⇒RDD基盤のデータ構造
    • Rのdata.frameに似ている
    • DataFrame APIScala/Javaと同じように速い

なのでPySparkではDataFrameを使いましょう

速度が遅くなる理由

  • RDD API
    • DriverがStorageから読み取ってデータを処理する際にPythonVMを使う(PythonVMにデータが流れる)
  • DataFram
    • PythonVMは処理の指示のみ
    • データの処理はJVMの中で行われる(Python VMにデータが流れない)
  • UDFを使うとPythn VMにデータが流れるので注意
    • Spark 2.3からVectorized UDFがサポート
    • Pandas UDFは早くなる

ファイルベースはParquetがオススメ

  • CSVJSONは効率が悪い
    • テキストなのでデータが大きい
  • 普通にPythonからも直接読み書きできるようになってきた
  • pandasにもto_parquetが入った(0.22)

⇒分散フアイルシステムがなくても事足りるケースも多い

Parquetの特徴

  • スキーマ付きのテーブルデータを保存
  • 列指向フォーマット
  • 高圧縮率
  • 指定したフィールドだけを読み取るI/O削減
  • 更新には向かない

インメモリのデータ変換の問題

  • pandas⇒Sparkはかなり遅かった
  • 2.2からArrowに対応して早くなった

Apache Arrow

  • インメモリ列指向データフォーマット
  • 無駄なデータコピー変換をすることなくツール間でデータをやり取り

参考:Arrowについての翻訳

qiita.com

SciPyの概要と各モジュール紹介

大橋宏正さん( @wrist

notebooks.azure.com

SciPyとは

なぜ1.0か?

  • プロダクション環境で使われるほどに成熟し安定したこと
  • 技術的な目標と組織的な目標の両方を達成

SciPyを学ぶ際のリソース

https://www.scipy-lectures.org/

1.5. Scipy: 高水準の科学技術計算 — Scipy lecture notes

Azure Notebookを使ってデモしながら解説

scipy.io

  • matlabの代わりに使える

scipy.special

scipy.linalg

numpyとの違い

scipy.fftpack

scipy.interpolate

  • 曲線の補間
  • 補間関数の生成
  • 補間値の算出

scipy.signal

  • 信号処理
  • フィルタ設計・フィルタリング
  • 畳み込み・時間相関計算
  • 窓関数
  • ホワイトノイズに対するローパスフィルタの適用

参考

qiita.com

scipy.optimize

scipy.stat

  • 統計や確率分布
  • 統計的検定

scipy.spatial

  • 空間データや距離を扱うためのモジュール
    • 距離行列を計算

scipy.misc

  • face…アライグマが描画できる

おまけのデモ

fftpackとsignalで音の信号処理

⇒ベースの音だけ抽出

Jupyter とコラボレーション

入江敦央さん

大規模ではない数人程度のチームでデータ分析を含むコラボレーションをJupyterベースで進める際に地味だけど起こりがちな問題を防止する

JupyterConからピックアップして紹介

conferences.oreilly.com

コラボレーションを阻害する要因

共同作業を問題なく進めるための共通基盤がない⇒ここにフォーカス

架空ケース:レコメンドAPIの企画

データの交換

前処理はつらい

Python同士での交換

  • バージョン違いでimportエラー
  • 通知計算の結果の扱いが変わる事がある

バージョン情報を記述

  • version_information
  • watermark

環境をコピー

  • pip+requirements.txt
  • conda+environments.yml
  • Anaconda Project+anaconda-project.yml

環境インストールだけでなく環境変数設定やサービスプロセスの開始なども面倒みてくれる

Notebook系サービスを使う

  • 小規模なら

プログラマーへの配慮

NotebookをHTML出力して配布

インタラクティブなNotebook

github.com

簡易なダッシュボードサーバ

⇒より深い洞察を得られる

分析ストーリーの共有化

  • 分析内容を図と文章で説明
    • コード実行だけが延々と続いているのはツライ
    • グラフだけもつらい
  • notebookはストーリーテリングツール
  • 分析ツールとして使うだけでなく物語る

変更管理

  • gitなどで変更を管理
    • .ipynbはJSONファイル
  • nbdime で変更を追いやすくなる
    • エクステンションとして追加

システム担当との共闘

  • 製品デプロイまで面倒をみる
  • Notebookから定番クラウドへモデルデプロイ

aws.amazon.com

notebooks.azure.com