SlideShare a Scribd company logo
1 of 33
Jupyter Notebookを
納品した話
2016/11/10
Acroquest Technology 株式会社
山本 大輝
自己紹介
1. 名前:山本 大輝(やまもと ひろき)
2. Twitter:@tereka114
3. Blog:のんびりしているエンジニアの日記
 http://nonbiri-tereka.hatenablog.com/
4. 専門:画像処理、異常検知
5. 普段はCV勉強会やPyData等で
活動しています。
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
2
目次
1. はじめに
2. Jupyter Notebookとは
3. Jupyter Notebookを選んだ理由
4. Jupyter NotebookのPlugin
5. Jupyter Notebookの罠
6. まとめ
3
こんなことありませんか?
1. 「データを分析して欲しい」と言われたけど、分析結果を
どんな形式で提出しようか悩んでいる。
2. 分析の思考過程とコードをバラバラに管理しており、後
から分析過程を追跡できなくなる。
 そのため、思考過程とコードを一緒に残したいが、コードを
Word等に貼り付けたくない。
3. コードの動作確認結果を可視化したいが、対話式に
確認ができない。(デバッガでは画像は面倒)
4
5
この問題全部解決できます!
6
そう Jupyter ならね
Jupyter Notebook
1. Jupyter Notebookは作成したコードやドキュメントを簡
単に共有できる。
① 様々な言語をサポート(Rも使えるよ!)
② Notebook自体の共有
③ インタラクティブな実行
2. 可視化したグラフを掲載できる。
3. Markdownを使える。
7
何ができるの?
1. コードを実行できる。基本はPythonですが、カーネルを追加
すれば他の言語も実行可能。
2. 当然、出力結果を可視化できる。
 %matplotlib inlineを記述すれば、Matplotlib(グラフ)も出力可能
3. Markdownで文章を記述できる。コードをドキュメントに組み
込める。
4. 様々なPluginを利用できる。
5. Githubが.ipynb(Jupyter Notebookの拡張子)に対応して
いる。
8
Jupyter Notebookの例
9
Markdown
図
ソースコード
Jupyter Notebookの例
10
Jupyterの
特殊コマンド
(Magic Command)
なぜ、Jupyter Notebook?
1. Jupyter Notebookは分析の過程を残せる。
 なぜ、そのコードを書いたのか、途中経過を残すことができる。
2. Jupyter Notebookは環境を整えれば再現が可能
① 環境を整えれば、同じ状況を再現をすることが可能できる。
② 手順を追実験できる。(手順書としても使える!)
3. Jupyter Notebookは結果をエビデンスとして残せる。
 これを納品しよう!
11
実際にJupyter Notebookの良かったところ
1. 実行結果を見ながら説明ができる。
 ソースコードの実行過程を見ながら説明ができる。
2. 実行結果を逐一確認できる。
 現状の実行結果を見て、次にどうするか思考できる。
3. アルゴリズムの検証結果を見ることができる。
4. 便利なPluginがある。
12
Jupyter Notebookの活用例
1. 分析レポートとして使う。
 今回の利用用途、過程とコードが一緒でわかりやすい。
2. アルゴリズムの過程を残す。
 画像処理のコードで処理後の結果を残す。
3. 手順書
 基本的にはその通りやれば動くので手順書として実行コマン
ド、結果、説明を同居させて残せる!
 例えば、Hadoopの構築手順書
https://github.com/NII-cloud-operation/Literate-computing-
Basics
13
Jupyter Notebookの例
14
出展:https://github.com/NII-cloud-operation/Literate-computing-Basics/blob/master/D03_KVM%20-%20Ready!%20on%20CentOS.ipynb
Jupyter Notebookの例
15
【説明】
コードややることに関す
る内容を記述できる
出展:https://github.com/NII-cloud-operation/Literate-computing-Basics/blob/master/D03_KVM%20-%20Ready!%20on%20CentOS.ipynb
【コード】
実際のコマンドが
わかりやすい
【実行結果】
説明と結果が
同時に見える
上から順に手順を
追える!
Plugin導入の方法
1. nbextensionsを使うと、よく使うPluginは入ります。
2. インストール方法
① git clone https://github.com/ipython-contrib/IPython-
notebook-extensions
② cd IPython-notebook-extensions
③ python setup.py install
④ sudo jupyter contrib nbextension install --user
今の日本語ページだと
あまりこの情報がない
16
nbextensions
17
nbextensions
Plugin一覧の
テーブル
Plugin名
18
おすすめのPlugin
1. Table of Contents (2)
 見出しから目次を作成して表示する。
2. Python Markdown
 MarkdownにPythonの変数等を埋め込める。
3. Hide input
 入力したセルを隠せる。
19
Jupyter Notebookいい面
いっぱいあるよね!
でも・・・・・
Jupyterで苦労したこともあります。
html出力時と見た目が異なることが発覚した
1. Pluginが使えない場合がある、Markdownが機能しない等、
問題が発生する。
2. Jupyter Notebookの機能にhtmlを出力する機能があるが、
出力結果がNotebookと異なる。
3. Table of Contents (2)の機能を使っていたが、ナンバリング
がなくなった。
4. 変数埋め込み機能が使えない。
etc
23
Table of Contents(2)の場合~notebook~
24
Table of Contents(2)の場合~html~
インデントがない
ナンバリング
されていない
25
その他いくつかの場合~notebook~
その他いくつかの場合~html~
Notebook上でhideに
したcellも、html出力
されてしまう
(Hide Cell)
埋め込んだ変数名が
可視化される
(Python Markdown)
27
印刷が難しい
1. WebページやNotebookのまま印刷しようとすると、グラ
フや表が画面から消える。
2. Jupyter Notebookをpdf化するために、LaTeXを必要と
するのが面倒。(印刷機能を使えば別の方法で可能)
28
印刷が難しい
横スクロールで
印刷が途切れる
29
ファイルの分割ができない
1. ファイルの分割が難しい要因は次の2つ
① ファイルの結合をサポートしていない。
Issueはありました。
https://github.com/jupyter/nbconvert/issues/253
② ソースコードが必要である。
2. 複数人開発の構成管理が難しい。
 複数人で開発すると必ずconflictが起こる状況へ・・
3. ファイル構成の設計が必要である。
① Notebook自体を分割した状況を作る。
② 結合するスクリプトを書く(できるかわからない。)
30
可能な限り情報は一つのファイルにまとめる
1. csvやExcel形式についてはpandasを使うと可視化可
能となるので、うまくコードを書いて埋め込むことが可能
2. 表示形式を表で出力したい場合はpandas.DataFrame
形式で変数を保持するのも良い。
3. あまりに長くなってくると見通しが悪化するので可能な
限り影響範囲は狭い方が良い。
4. (ちゃんと設計しましょう)
31
まとめ
1. Jupyter Notebookを使うとコードや過程、手順を
Notebookとして残せる。
 納品可能なレベル
2. ただし、プラグイン等のカスタマイズ機能を使う場合は
気をつける必要がある。
32
33
Jupyter Notebookを使おうぜ!
Infrastructures Evolution

More Related Content

What's hot

TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobileyusuke shibui
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Takami Sato
 
Mercari Image search 1st Anniversary
Mercari Image search 1st AnniversaryMercari Image search 1st Anniversary
Mercari Image search 1st Anniversaryyusuke shibui
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_patternyusuke shibui
 
Machine learning microservice_management
Machine learning microservice_managementMachine learning microservice_management
Machine learning microservice_managementyusuke shibui
 
Pythonを使った機械学習の学習
Pythonを使った機械学習の学習Pythonを使った機械学習の学習
Pythonを使った機械学習の学習Kimikazu Kato
 
ヤフー音声認識サービスでのディープラーニングとGPU利用事例
ヤフー音声認識サービスでのディープラーニングとGPU利用事例ヤフー音声認識サービスでのディープラーニングとGPU利用事例
ヤフー音声認識サービスでのディープラーニングとGPU利用事例Yahoo!デベロッパーネットワーク
 
Scikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行うScikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行うArata Honda
 
Quality of ml_system
Quality of ml_systemQuality of ml_system
Quality of ml_systemyusuke shibui
 
Twillio deadshot made me happy
Twillio deadshot made me happyTwillio deadshot made me happy
Twillio deadshot made me happyyusuke shibui
 
PyData入門(超初心者編)~野球のデータをカジュアルに可視化
PyData入門(超初心者編)~野球のデータをカジュアルに可視化PyData入門(超初心者編)~野球のデータをカジュアルに可視化
PyData入門(超初心者編)~野球のデータをカジュアルに可視化Shinichi Nakagawa
 
数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPythonYosuke Onoue
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方Kimikazu Kato
 
リファクタリング勉強会 第2回
リファクタリング勉強会 第2回リファクタリング勉強会 第2回
リファクタリング勉強会 第2回ikikko
 
Tensor flowを使った キュウリの仕分け あれこれ
Tensor flowを使った キュウリの仕分け あれこれTensor flowを使った キュウリの仕分け あれこれ
Tensor flowを使った キュウリの仕分け あれこれMakoto Koike
 

What's hot (20)

TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobile
 
Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門Scikit learnで学ぶ機械学習入門
Scikit learnで学ぶ機械学習入門
 
Mercari Image search 1st Anniversary
Mercari Image search 1st AnniversaryMercari Image search 1st Anniversary
Mercari Image search 1st Anniversary
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_pattern
 
Machine learning microservice_management
Machine learning microservice_managementMachine learning microservice_management
Machine learning microservice_management
 
Pythonを使った機械学習の学習
Pythonを使った機械学習の学習Pythonを使った機械学習の学習
Pythonを使った機械学習の学習
 
ヤフー音声認識サービスでのディープラーニングとGPU利用事例
ヤフー音声認識サービスでのディープラーニングとGPU利用事例ヤフー音声認識サービスでのディープラーニングとGPU利用事例
ヤフー音声認識サービスでのディープラーニングとGPU利用事例
 
Scikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行うScikit-learnを使って 画像分類を行う
Scikit-learnを使って 画像分類を行う
 
Quality of ml_system
Quality of ml_systemQuality of ml_system
Quality of ml_system
 
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
 
Twillio deadshot made me happy
Twillio deadshot made me happyTwillio deadshot made me happy
Twillio deadshot made me happy
 
PyData入門(超初心者編)~野球のデータをカジュアルに可視化
PyData入門(超初心者編)~野球のデータをカジュアルに可視化PyData入門(超初心者編)~野球のデータをカジュアルに可視化
PyData入門(超初心者編)~野球のデータをカジュアルに可視化
 
数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPython
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方
 
リファクタリング勉強会 第2回
リファクタリング勉強会 第2回リファクタリング勉強会 第2回
リファクタリング勉強会 第2回
 
14対話bot発表資料
14対話bot発表資料14対話bot発表資料
14対話bot発表資料
 
Rnncamp01
Rnncamp01Rnncamp01
Rnncamp01
 
Tensor flowを使った キュウリの仕分け あれこれ
Tensor flowを使った キュウリの仕分け あれこれTensor flowを使った キュウリの仕分け あれこれ
Tensor flowを使った キュウリの仕分け あれこれ
 
Tensorflow
TensorflowTensorflow
Tensorflow
 
S08 t0 orientation
S08 t0 orientationS08 t0 orientation
S08 t0 orientation
 

Similar to Jupyter Notebookを納品した話

Mackerel Anomaly Detection at PyCon mini Osaka
Mackerel Anomaly Detection at PyCon mini OsakaMackerel Anomaly Detection at PyCon mini Osaka
Mackerel Anomaly Detection at PyCon mini Osakasyou6162
 
Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2潤司 渡部
 
コンピュータ将棋・囲碁における機械学習活用
コンピュータ将棋・囲碁における機械学習活用コンピュータ将棋・囲碁における機械学習活用
コンピュータ将棋・囲碁における機械学習活用Takashi Kato
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾Ryutaro YOSHIBA
 
GoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブックGoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブックTakashi Sudou
 
Qiita上での人気Youtubeチャンネル動画.pptx
Qiita上での人気Youtubeチャンネル動画.pptxQiita上での人気Youtubeチャンネル動画.pptx
Qiita上での人気Youtubeチャンネル動画.pptxhero hero
 
tokyo_webmining_no51
tokyo_webmining_no51tokyo_webmining_no51
tokyo_webmining_no51Shu (shoe116)
 
S06 t1 python学習奮闘記#4
S06 t1 python学習奮闘記#4S06 t1 python学習奮闘記#4
S06 t1 python学習奮闘記#4Takeshi Akutsu
 
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発Eric Sartre
 
一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」
一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」
一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」雄哉 吉田
 
Hello Engineer World! 新人リケジョの1年
Hello Engineer World! 新人リケジョの1年Hello Engineer World! 新人リケジョの1年
Hello Engineer World! 新人リケジョの1年Satoko Shiroi
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話y-uti
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
パケットキャプチャの勘どころ Ssmjp 201501
パケットキャプチャの勘どころ Ssmjp 201501パケットキャプチャの勘どころ Ssmjp 201501
パケットキャプチャの勘どころ Ssmjp 201501稔 小林
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話Suguru Shirai
 
運用にモチベを求めるのは間違っているだろうか
運用にモチベを求めるのは間違っているだろうか運用にモチベを求めるのは間違っているだろうか
運用にモチベを求めるのは間違っているだろうかDaisuke Itou
 
Spark streamingを使用したtwitter解析によるレコメンドサービス例
Spark streamingを使用したtwitter解析によるレコメンドサービス例Spark streamingを使用したtwitter解析によるレコメンドサービス例
Spark streamingを使用したtwitter解析によるレコメンドサービス例Junichi Noda
 
Talking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data GatewayTalking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data GatewayShinya Sakakibara
 

Similar to Jupyter Notebookを納品した話 (20)

Mackerel Anomaly Detection at PyCon mini Osaka
Mackerel Anomaly Detection at PyCon mini OsakaMackerel Anomaly Detection at PyCon mini Osaka
Mackerel Anomaly Detection at PyCon mini Osaka
 
Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2Out systemsaichiusermeeting#5 lt2
Out systemsaichiusermeeting#5 lt2
 
コンピュータ将棋・囲碁における機械学習活用
コンピュータ将棋・囲碁における機械学習活用コンピュータ将棋・囲碁における機械学習活用
コンピュータ将棋・囲碁における機械学習活用
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
GoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブックGoogleAnalytics Tools クックブック
GoogleAnalytics Tools クックブック
 
Qiita上での人気Youtubeチャンネル動画.pptx
Qiita上での人気Youtubeチャンネル動画.pptxQiita上での人気Youtubeチャンネル動画.pptx
Qiita上での人気Youtubeチャンネル動画.pptx
 
tokyo_webmining_no51
tokyo_webmining_no51tokyo_webmining_no51
tokyo_webmining_no51
 
S06 t1 python学習奮闘記#4
S06 t1 python学習奮闘記#4S06 t1 python学習奮闘記#4
S06 t1 python学習奮闘記#4
 
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
 
Mishimasyk10 iwatobipen
Mishimasyk10 iwatobipenMishimasyk10 iwatobipen
Mishimasyk10 iwatobipen
 
4th tokushimaapp
4th tokushimaapp4th tokushimaapp
4th tokushimaapp
 
一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」
一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」
一生、エンジニアであり続けるために必要なこと「負けてからのエンジニアライフ」
 
Hello Engineer World! 新人リケジョの1年
Hello Engineer World! 新人リケジョの1年Hello Engineer World! 新人リケジョの1年
Hello Engineer World! 新人リケジョの1年
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
パケットキャプチャの勘どころ Ssmjp 201501
パケットキャプチャの勘どころ Ssmjp 201501パケットキャプチャの勘どころ Ssmjp 201501
パケットキャプチャの勘どころ Ssmjp 201501
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話
 
運用にモチベを求めるのは間違っているだろうか
運用にモチベを求めるのは間違っているだろうか運用にモチベを求めるのは間違っているだろうか
運用にモチベを求めるのは間違っているだろうか
 
Spark streamingを使用したtwitter解析によるレコメンドサービス例
Spark streamingを使用したtwitter解析によるレコメンドサービス例Spark streamingを使用したtwitter解析によるレコメンドサービス例
Spark streamingを使用したtwitter解析によるレコメンドサービス例
 
Talking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data GatewayTalking about Microsoft On-premises Data Gateway
Talking about Microsoft On-premises Data Gateway
 

Jupyter Notebookを納品した話