#author("2018-08-28T22:48:27+00:00","","")
* Jupyter Notebook [#x9f0f4ea]
#mynavi()
#setlinebreak(on)

* 目次 [#aca986db]
#contents
- 関連
-- [[Python]]
-- [[Python覚え書き]]
-- [[IPythonの使い方メモ]]
-- [[matplotlibでグラフ作成]]

#TODO

* インストール [#n8186efa]
#html(<div style="padding-left:10px">)
https://www.anaconda.com/download/
#html(</div>)

* 起動 [#ncfccf39]
#html(<div style="padding-left:10px">)
#myterm2(){{
jupyter notebook
}}
#html(</div>)

* マジックコマンド [#nca4ac2a]
#html(<div style="padding-left:10px">)
基本的に IPython のマジックコマンドが分かってれば大丈夫。
※[[IPythonの使い方メモ]] 参照
#html(</div>)

* jupytext のセットアップ [#m48f351e]
#html(<div style="padding-left:10px">)

jupytext を入れておくと、必要に応じて py への自動変換もできるので楽。
#myterm2(){{
pip install jupytext
}}

#html(</div>)

* キーボードショートカット [#dbcb880e]
#html(<div class="pl10">)

コマンドモードとエディットモードの切り替え。
[Enter] と [Esc] でコマンドモードとエディットモードの切替を行う事ができる。

以下に、コマンドモード時に使用できるキーボードショートカットを記載する。

| キー | 動作 |h
| [Enter] | エディットモードに変更する |
| ↓ | 下のセルに移動する |
| ↑ | 上のセルに移動する |
| [Ctrl] + [Enter] | セルを実行する |
| a | 現在のセルの上にセルを追加する |
| b | 現在のセルの下にセルを追加する |
| c | 現在のセル内容をコピーする |
| v | コピーしたセルと同じ内容のセルを下に追加する |
| [Shift] + v | コピーしたセルと同じ内容のセルを上に追加する |
| x | 現在のセルを削除する |
| m | マークダウン用のセルに変更する |
| Shift + m | 下のセルと結合する |
| h | キーボードショートカットのヘルプを表示する |
など

#html(</div>)

* マークダウンの記述 [#kfc21d98]
#html(<div class="pl10">)

対象のセルに移動して[Esc] を押してコマンドモードにした後に [m] を押下する事で、マークダウン用のセルにする事ができる。
※もしくはヘッダのプルダウンから「Markdown」を選択。

https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Working%20With%20Markdown%20Cells.html#Markdown-Cells

一般的なマークダウンの他、LaTeX式の算術式を記述する事ができる。

例)
#mycode2(){{
#### 分散の数式
$$s^2 = \frac{1}{n}\sum_{i=1}^n (x_i - \overline{x})^2$$
}}

結果
#ref(variance.png,nolink)

#html(</div>)


* Tips [#s7748688]
#html(<div style="padding-left:10px">)

** 全ての変数等を整形して表示する [#h137d758]
#html(<div class="pl10">)

変数名を書くだけで表示
#mycode2(){{
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

df1 = .......
df2 = .......

df1
df2
}}

display による表示
#mycode2(){{
from IPython.display import display

  :
display(df1)
display(df2)
}}

#html(</div>)

** 自作モジュールを自動リロードする [#c969f77c]
#html(<div class="pl10">)

以下を行っておくと import 済みのモジュールが実行の度にリロードされる為、モジュールを修正した場合の読み込み直しの手間が減る。

#mycode2(){{
%load_ext autoreload
%autoreload 2
}}

#html(</div>)


** データフレームの表示行数 または 列数を設定する [#fc8fa079]
#html(<div class="pl10">)

pandas のデータフレームを表示する際に 行数 または 列数が多い場合は途中が省略して表示されるが、以下の通り最大表示数を設定する事ができる。

#mycode2(){{
import pandas as pd
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
}}

#html(</div>)


** 共通のスタートアップスクリプト(その1) [#hb3a8458]
#html(<div class="pl10">)

各ノートブック共通で行う初期設定などは ~/.ipython/profile_default/startup 配下にファイルを設置する事によって自動で行う事ができる。

※jupyter ではなく ipython の仕組みの模様。
※ファイル名順に読み込まれる為、ファイル名の接頭文字に連番を付与して読み込み順を制御する事が可能。

例) ~/.ipython/profile_default/startup/00-init.ipy
#mycode2(){{
# オブジェクトの自動表示
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

# オブジェクトの表示用
from IPython.display import display

# 実行する度に自作モジュールを自動リロードする
%load_ext autoreload
%autoreload 2

# グラフを常にインライン表示
%matplotlib inline

# 最大列数、行数の設定
import pandas as pd
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
}}
#html(</div>)

** 共通のスタートアップスクリプト(その2) [#o6370453]
#html(<div class="pl10">)

別のやり方として  ~/.ipython/profile_default/ipython_config.py に書く方法もある。

まずプロファイルを生成。
#myterm2(){{
ipython profile create
[ProfileCreate] Generating default config file: '/ユーザのホームディレクイトリ/.ipython/profile_default/ipython_config.py'
}}

生成されたプロファイルを以下の様に修正する。

例) &#126;/.ipython/profile_default/ipython_config.py
#mycode2(){{
  :
# 実行するコマンドを1行ずつ指定
c.InteractiveShellApp.exec_lines = [
    'import numpy as np',
    'import pandas as pd'
]

# 読み込むファイルのPATHを相対 または フルPATHで指定
c.InteractiveShellApp.exec_files = [
    'settings.ipy',
    '/xxx/xxxxx/settings.ipy'
]
  :
}}

#html(</div>)

** 他のノートブックを読み込む [#q1f087ee]
#html(<div class="pl10">)

やり方はある様だが・・・
https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Importing%20Notebooks.html

たぶん普通にマジックコマンドで  %run するのが、いちばんシンプル。
#mycode(){{
%run other_notebook.ipynb
}}

#html(</div>)

** HTMLを出力する [#q3640c91]
#html(<div class="pl10">)

IPython.display.HTMLを使用してHTMLを出力する事ができる。
これを利用して、ノートブックに動的な機能を付加する事も可能。

以下のサンプルでは最終セルの出力結果のみを表示するボタンを追加している。
※jQueryが利用できる状態のようなので、そのまま利用している。

#mycode2(){{
from IPython.display import HTML

HTML("""
<script>
var show_status = true;
function toggleCells(){
    if (show_status) {
        // 最後のセルの出力結果だけ表示
        var len = $(".rendered").length;
        $(".rendered").hide()
        $(".rendered").eq(len-1).show();
        $(".rendered").eq(len-1).find(".input").hide();
        // ヘッダを非表示
        $("#header").hide();
    } else {
        // 全てのセルを表示
        var len = $(".rendered").length;
        $(".rendered").show();
        $(".rendered").find(".input").show();
        // ヘッダを表示
        $("#header").show();
    }
    show_status = !show_status;
}
toggleCells();
$("body").append('<input type="button" value="表示切替" onclick="toggleCells()" style="position: fixed; top: 20px; right: 20px; z-index: 999;">');
</script>
""")
}}

html(</div>)





#html(</div>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS