web-dev-qa-db-ja.com

jupyterセルを新しいブラウザウィンドウにポップアウト/展開します

私は次のようなjupyterノートブックセルを持っています:

enter image description here

これを新しいブラウザウィンドウにポップ/展開する方法はありますか(出力がインラインで表示されません)?

基本的に、R/RStudioからView()関数を複製したい...これは可能ですか?

12
emehex

Javascriptを使用して、_IPython.display_からHTMLによって実行される新しいウィンドウを開くことができます。

_import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))
# Show in Jupyter
df

from IPython.display import HTML
s  = '<script type="text/Javascript">'
s += 'var win = window.open("", "Title", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=780, height=200, top="+(screen.height-400)+", left="+(screen.width-840));'
s += 'win.document.body.innerHTML = \'' + df.to_html().replace("\n",'\\') + '\';'
s += '</script>'

# Show in new Window
HTML(s)
_

ここで、df.to_HTML()は、多くの改行を含むデータフレームからHTML文字列を作成します。これらはJavascriptにとって問題があります。 Javascriptの複数行の文字列には、EOLでバックスラッシュが必要です。そのため、pythonはHTML文字列を次のように変更する必要があります。 .replace()メソッド。

JavaScriptの_.innerHTML_(document.write()の代わりに)の本当にすばらしい点は、新しいウィンドウを作成しなくても、いつでもテーブルを更新できることです。

_df /= 2
s  = '<script type="text/Javascript">'
s += 'win.document.body.innerHTML = \'' + df.to_html().replace("\n",'\\') + '\';'
s += '</script>'
HTML(s)
_

これは、開いたウィンドウのテーブルに即座に影響します。

enter image description here

RpythonからのView()エミュレータの簡単な提案を次に示します。

_def View(df):
    css = """<style>
    table { border-collapse: collapse; border: 3px solid #eee; }
    table tr th:first-child { background-color: #eeeeee; color: #333; font-weight: bold }
    table thead th { background-color: #eee; color: #000; }
    tr, th, td { border: 1px solid #ccc; border-width: 1px 0 0 1px; border-collapse: collapse;
    padding: 3px; font-family: monospace; font-size: 10px }</style>
    """
    s  = '<script type="text/Javascript">'
    s += 'var win = window.open("", "Title", "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=780, height=200, top="+(screen.height-400)+", left="+(screen.width-840));'
    s += 'win.document.body.innerHTML = \'' + (df.to_html() + css).replace("\n",'\\') + '\';'
    s += '</script>'

    return(HTML(s+css))
_

これは、次のように入力するだけでjupyterで機能します。

_View(df)
_

派手なトッピングとして、CSSを使用して開いたテーブルのスタイルを設定し、RStudioからわかるものと比べてはるかに見栄えが良くなります。
enter image description here

18
Martin