Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

データ分析スクリプトのツール化入門 - PyConJP 2016

4,581 views

Published on

PyConJP2016トーク
Pythonによるデータ分析スクリプトのEXE化・GUI付与

Published in: Data & Analytics
  • Be the first to comment

データ分析スクリプトのツール化入門 - PyConJP 2016

  1. 1. データ分析スクリプトの ツール化入門 PyConJP 2016 どんあき @dondokono
  2. 2. 自己紹介 なまえ :どんあき @dondokono 何してる人 :金融機関でリスク管理 デリバティブ関連のデータ分析 バックグラウンド:素粒子理論やってました プログラミング得意じゃないです… Python歴 :1年とちょっと 社内で布教中 1 息子 可愛いです笑
  3. 3. 本発表の内容は 個人の見解であり、 所属する組織・団体の 公式見解ではありません また登場する人物は(ry 2
  4. 4. はじめに… 3 この分析業務効率化できそうだな せっかくなのでPythonで書いてみよう (豊富なパッケージですぐ作れるし)
  5. 5. 4 こんなの作ってみたけど どう? え?もうできたんですか!! でもこれどうやって 動くんですか? 私 同僚など
  6. 6. 5 えっと、、、 Pythonをインストールして… Python入ってませんよ 入れるの社内的に 結構面倒で… 私 同僚など
  7. 7. _人人人人人人人人_ > 入れるの面倒 <  ̄Y^Y^Y^Y^Y^Y^Y ̄ 6
  8. 8. 7 そのあと コマンドラインから実行… コマンドライン…? あの黒い画面ですか? なにそれ怖い! 私 同僚など
  9. 9. あの黒い画面 8
  10. 10. _人人人人人人人人_ > なにそれ怖い <  ̄Y^Y^Y^Y^Y^Y^Y ̄ 9
  11. 11. 10 お堅い社内で Python布教するなんて アカンかったんや…
  12. 12. その悩み(だいたい)解決できます! 11
  13. 13. 本日の流れ ・Pythonがインストールされてない環境で動かす Pyinstallerを主に使用します ・コマンドラインでなくGUI上から動かす PySide, QtDesignerを主に使用します 12
  14. 14. 注意点 (どの場合でも共通ですが) 各パッケージのバージョン情報に注意 ネット上の情報も古いものが多く、 記事や質問の日時をよく見ながら確認しましょう 13
  15. 15. Pythonが無い環境で動かす...? Windowsの場合、EXEにしちゃいます = フリージング こんな感じ Pythonインストールしてない環境でも Pythonで書いたものが動く! 14
  16. 16. Pyinstallerについて 15 • 最近でも頻繁にメンテされているフリージングパッケージ • Github: https://github.com/pyinstaller/pyinstaller • Python 2.7, 3.3-3.5まで対応 • Windows, Mac OSでも使用可能 フリージングしたプラットフォーム上でのみ動作 • メジャーなパッケージはバンドル Libraries like PyQt5, PyQt4, PySide, wxPython, matplotlib or Django are fully supported (公式より引用) pandas, scipy, scikit-learn, seabornなども動作 • Stackoverflowなどでの情報が多い ←これ重要
  17. 17. 他のPythonのフリージング関連パッケージ • Py2exe (2.7, 3.4) https://pypi.python.org/pypi/py2exe 元々Python2系で有名だったもの、軽量・高速 2014-10-21以降更新もなく辛い エラーでまくる • cx_freeze (2.7, 3.4) http://cx-freeze.readthedocs.io/en/latest/index.html 2014-12-26が最後のアップデート setup関連のscriptは頑張って書く必要がある印象 16
  18. 18. というわけで Pyinstallerが オススメです 17
  19. 19. 欠点もあります… • ファイルサイズがでかい… Importするパッケージを全部取り込む • 起動が遅い… EXE実行後、解凍処理が内部で走る importが多いと数十秒立ち上がるまでにかかることも… 18
  20. 20. インストール前準備 今回は下記環境での動作確認を行っています Windows 10 64bit Anaconda 4.1.1 (64bit) condaで仮想的な作業環境を構築することを推奨します あとnumpyとかscipy入れるの面倒 PySideの都合で3.4ですが3.5でもいけます… Mac OSでもフリージングしてアプリにすることもできます 本発表では説明しません (発表者Macなくせに) 19
  21. 21. インストール時の諸注意(Windows) 環境が汚くなる可能性があるのでcondaで別環境構築推奨 Anaconda利用時のsetuptoolsのバージョンに注意 19.2にダウングレード > conda install setuptools==19.2 ここではpipでなくcondaでやることがポイント レジストリ書換え要求が出ることがありますがスルーしても使えます 20
  22. 22. インストール時の諸注意(pyenv) Mac OS, Linux系でpyenvを使用されている場合 次でinstallしましょう https://github.com/pyinstaller/pyinstaller/wiki/FAQ > env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.5.X 21
  23. 23. Hello World! Helloと返してくるだけのスクリプト まずはこれをフリーズ! 22 hello.py
  24. 24. フリーズ3分クッキング スクリプトを用意して以下のコマンドでチーン > pyinstaller hello.py --onefile 23 ここに完成品
  25. 25. ほら、簡単でしょう 24
  26. 26. 補足 • 気長に固まるのを待ちます • import量によるけど数分から10分程 • exeが出来てても実行するとエラーが出たり… 根気よくエラー潰しが必要なパッケージも 25
  27. 27. 便利なオプション --onefile 単一のexeファイルになるようにまとめてくれる かさばらないけど、デカイ --noconsole コマンドプロンプトがデフォルトで表示されなくなる 黒い画面恐怖症の人向けにも安心 --clean 前回のフリーズ関連ファイルがある場合はこちらを使用 もしくは手でdist, buildファイルを消しておきましょう 26
  28. 28. 欠点:デカイ 27 • 先ほどのhelloスクリプト • パッケージ追加時 import pandasだけ追記した場合 で、デカイ なので手放しで使いまくれるわけでもなく…
  29. 29. 閑話休題 28
  30. 30. せっかくなので流行り物を試したい! よっしゃ! TheanoとPymc3をフリージングできれば Deep Learning でもMCMCでも やりたい放題や!! 29
  31. 31. 今回の調査で我々は… 30 何の成果も 得られませんでしたぁぁ!!
  32. 32. コンパイルを必要とするパッケージは鬼門… 31 誰か出来たら教えてください…
  33. 33. 32 入門レベルらしく Scikit-learn使います! それでも幾つかハマるポイントが…
  34. 34. データ分析スクリプト 33 http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_assumptions.html#example- cluster-plot-kmeans-assumptions-py k-meansのクラスタリングを行う例 • パラメータ:k • 2次元のインプットCSV を引数に取るスクリプト sklearn_example.py
  35. 35. こんな感じの結果が出ます 34 • 黒い画面から実行 • cluster数 = 3の場合の例 色で3種類に区分けされた右図が出る
  36. 36. それではフリーズ実行! 35 こちらも同様に > pyinstaller sklearn_example.py --onefile で…
  37. 37. 完成!?…のはずが • EXEを実行してみると幾つかエラー • typedefsモジュールが見つからない scikit-learnのclusters/neighbors/typedefs.pydのことを指してるらしい 組み込むときは事前にsklearn.neighbors.typedefs.pydにリネーム 場所→ /anaconda3/env/<env_name>/Lib/site_packages/sklearn/neighbors/ • Intel MKL XXXが見つからない 以下にあるmkl_XXX.dllを組み込む 場所→ /anaconda3/env/<env_name>/Library/bin/ 36
  38. 38. (よくある)エラー対策 • pyinstallerが見つけられないもの • (自動で作られる)specファイルに明示的に記載 onefileにするときに一緒にまとめてくれる • デバッグ時は--onedirオプションで確認するのをオススメ • 以下は今回の例 37 sklearn_example.spec
  39. 39. 無事起動 • specファイルに指定して実行する場合 > pyinstaller sklearn_example.spec で実行 通常は自動生成されoptionもここに埋め込まれる 38
  40. 40. やりました! 39
  41. 41. 40 何か忘れているような…
  42. 42. 41 そのあと コマンドラインから実行… コマンドライン…? あの黒い画面ですか? なにそれ怖い! 私 同僚など
  43. 43. GUIをつけてあげましょう • プログラミング出来ない人も安心! • なんか見た目がまぁまぁなツールが簡単に!! • Pyinstallerのnoconsoleオプションでもう怖くない!!! • モテる!!!!(といいな 42
  44. 44. PythonのGUI関連パッケージ • PySide • PyQt • Tkinter • Kivy などなど… 43
  45. 45. PySideについて • QtのPythonバインディング ただし、ライセンスが緩めてある • GUIを作るGUIツール「Qt Designer」が使える! プログラムからGUIをゴリゴリ書かなくて済む オブジェクトの配置をこなれた感じに楽にできる • Pyinstallerで固めることで使ってもらいやすい! 44
  46. 46. 他のGUIツール • PyQt Qtそのものなので凝ったものを作れる ライセンス・商業利用注意 • Tkinter デフォルトでついてるやつ 標準感ある • Kivy 現在発展中のGUI作成ライブラリ スマホ向けのGUIも作れる ドキュメント日本語化も進んでるみたいですよ! 45
  47. 47. PySideのインストール • 動作確認環境 Windows10 64bit Anaconda 4.1.1 Python3.4.5 (前半と同じ) • インストール方法(今回環境ではエラー) > pip install PySide • MSVC errorが出る場合 > pip install PySide –only-binary :all: でインストール可能 46
  48. 48. PySideのインストール(Mac OS X) • Macかつanacondaを使わない場合 > brew install qt でQtを事前に入れてからPySideを入れましょう 47
  49. 49. Qt Designer • 置いてある場所 PySideがインストールされた場所にあるはず /Anaconda3/envs/<env_name>/Lib/site-packages/PySide • 今回の使用バージョン QtDesigner v4.8.5 48
  50. 50. こんな見た目(初期設定) 49
  51. 51. こんな見た目(初期設定) 50 Layouts ベースと なるもの ボタンやら 箱やら なんやら かんやら Property 各オブジェクトの 詳細をいじる
  52. 52. お手軽GUI作成の流れ • Qt DesignerでWidgetを作る • Qt DesignerでSlotを作る • Pythonスクリプトを繋げる 51
  53. 53. ほら、簡単でしょう 52
  54. 54. お手軽GUI作成 –Widget編 ① ベースのDialogを決める ② Layoutsをレイヤーのように重ねてオブジェクトを配置 Layoutsにポイポイっとオブジェクトを放り込む spacerを入れるとそれっぽくなる ③ プロパティから細かいサイズや設定などは調整 53
  55. 55. って見た方が早いですね! Qt Designer イメージ 54
  56. 56. こんな感じ 55 ボタン テキストの箱 何となくのスペース 見栄えが 良くなる レイヤー
  57. 57. お手軽GUI作成 –Slot編 ① Edit Signal/Slotを選択 ② ボタンなどから矢印を引っ張る 特に他のオブジェクトと連携しなければ何もない場所を終端に ③ このSlot名を呼び出す箇所にやりたい動作を書く 56
  58. 58. こんな感じ 57 ボタン押した時 動作設定
  59. 59. お手軽GUI作成 –接続編 ① QtDesignerの.uiファイルを.pyファイルへ変換 > pyside-uic.exe -o hello_gui.py hello.ui 変換ツールが標準付属(pyside-uic.exe) anaconda3/envs/<env_name>/Scripts ② mainのスクリプトを書く ③ Slotがある場合はSlotの動作を書く 58
  60. 60. 安定のHello World ボタンを押すと コンソールに"hello” と出すだけ!! 59 hello_gui.py .uiから変換した .pyファイルを呼ぶ
  61. 61. ちょっと修正 • 設置したオブジェクトに"hello"を出力 slotの箇所を変更 • 値の埋め込み・値の取得もで可能 GUI側を修正した際は.pyファイルへ要変換 60
  62. 62. 実行! 61 押したら こんにちは
  63. 63. 実行! 62 押したら こんにちは まぁこんなもんです
  64. 64. Hello GUI tool! • これをpyinstallerで固めればOK > pyinstaller hello_gui.py --onefile – noconsole • Python環境不要でEXEファイルとして動作! 63
  65. 65. 完成! 64
  66. 66. 先ほどのデータ分析スクリプトをTool化 65 • 次をGUIで選択可能にしてみる • k-meansのcluster数 • inputのCSVファイル • outputの出力先フォルダ
  67. 67. データ分析スクリプトと接続① 66 • importしているパッケージ • これらを入れてもフリージング可能 sklearn_gui.py
  68. 68. データ分析スクリプトと接続② • Input及びOutputのファイル・フォルダ取得ダイアログ設定 67 ファイルPath取得 ダイアログ フォルダPath取得 ダイアログ
  69. 69. • k-meansクラスタリング部分 • 各パラメータ・ファイル関係をGUIから取得している データ分析スクリプトと接続③ 68 GUI上のテキスト 取得ダイアログ さっきの クラスタリング スクリプトを コピペ
  70. 70. データ分析スクリプトと接続④ • main部分 特に今回は変えてない 69
  71. 71. 最後にフリージング • 前半部で設定したspecファイルと同様に設定 • > pyinstaller sklearn_gui.spec specファイル内にて--onefile, --noconsoleオプション使用 • フリーズ完成 70
  72. 72. 実行フローイメージ 71 ① EXE実行 ② パラメータ 指定 ③ Calculation 実行 ④ 結果出力
  73. 73. 完成 Python環境不要 コマンドラインも出ない Pythonスクリプトが動作! 72
  74. 74. 【応用】さらにこじゃれた感じにするために • import logging 各スクリプトにloggerを用意してログ出力する機能をつける • import traceback エラー時のtracebackを出力 • Sphinxを用いてツール全体のドキュメントを作る ReadTheDocsのスタイルが個人的には好きです 73
  75. 75. 今度こそ、やりました! 74
  76. 76. 75 どこでも使える このPythonツールどやー 素敵! 皆さん 同僚など
  77. 77. まとめ • PyinstallerでPython環境無しでPython スクリプトを動作 特殊なパッケージを組み込む際は根気よく戦う • PySideなどGUIパッケージで誰でも使いやすく PySideだとQt Designerが使えてGUI初心者でも比較的楽 どちらも紹介した以上に豊富な機能を備えています Python普及の一助に 76

×