[PYTHON] Führen Sie pandas-highcharts display_charts in einer anderen Umgebung als jupyter aus

Hintergrund

Es scheint, dass Leute, die Datenanalysen durchführen, häufig Jupyter verwenden. Vielleicht ist Python allein nicht gut darin, Daten sofort als Grafik zu zeichnen, daher denke ich, dass dies im Browser erfolgt. Anzeigemethoden (HTML-Zeichnung) wie die Anzeige sind jedoch nur für Jupyter verfügbar und können in anderen Umgebungen nicht ausgeführt werden. Selbst wenn Sie sich auf den Artikel zur Datenanalyse von Qiita beziehen, funktioniert dieser möglicherweise nicht gut, wenn es sich bei der Zeichnungsumgebung um Ihre eigene Umgebung handelt. Dieses Mal habe ich einen Artikel verfasst, weil es notwendig war, die Grafik zu sehen, die von Pandas-Highcharts aus der Pycharm-Umgebung angezeigt wird.

Methode

Ich habe die folgende Funktion unter Bezugnahme auf den Quellcode von pandas-highcharts ausgeführt. Da display_charts von pandas-highcharts so eingestellt wurde, dass es bei Rückgabe angezeigt wird, lautet der Rückgabewert None. Kurz zuvor habe ich das Gefühl, dass ich es in eine HTML-Vorlage einbette und zurückkehre. (Referenz) https://github.com/gtnx/pandas-highcharts/blob/master/pandas_highcharts/display.py

def my_display_charts(df, chart_type="default", render_to=None, **kwargs):
    from pandas_highcharts.core import serialize
    from pandas_highcharts.display import _generate_div_id_chart
    if chart_type not in ("default", "stock"):
        raise ValueError("Wrong chart_type: accept 'default' or 'stock'.")
    chart_id = render_to if render_to is not None else _generate_div_id_chart()
    json_data = serialize(df, render_to=chart_id, chart_type=chart_type, **kwargs)

    content = """
    <div id="{chart_id}"</div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.1/highstock.min.js"></script>
    <script type="text/javascript">{data}</script>
    """

    html = """
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <title>My Result</title>
    </head>
    <body>
        {content}
    </body>
    </html>
    """
    return html.format(content=content.format(chart_id=chart_id, data=json_data))

Die Verwendung ist wie folgt.

import pandas as pd
import webbrowser
import os

def my_display_charts(df, chart_type="default", render_to=None, **kwargs):
    from pandas_highcharts.core import serialize
    from pandas_highcharts.display import _generate_div_id_chart
    if chart_type not in ("default", "stock"):
        raise ValueError("Wrong chart_type: accept 'default' or 'stock'.")
    chart_id = render_to if render_to is not None else _generate_div_id_chart()
    json_data = serialize(df, render_to=chart_id, chart_type=chart_type, **kwargs)

    content = """
    <div id="{chart_id}"</div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.1/highstock.min.js"></script>
    <script type="text/javascript">{data}</script>
    """

    html = """
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <title>My Result</title>
    </head>
    <body>
        {content}
    </body>
    </html>
    """
    return html.format(content=content.format(chart_id=chart_id, data=json_data))

df = pd.DataFrame([1, 2, 3, 5, 4], index=[list('abcde')])
html_data = my_display_charts(df, chart_type="stock", title="Mt Result", figsize=(640, 480), grid=True)
path = 'index.html'

with open(path, mode='w') as f:
    f.write(html_data)

webbrowser.open_new_tab('file:///' + os.getcwd() + '/' + path_w)

Hoffentlich wird es im Standardbrowser Ihres PCs so gezeichnet. Es ist ärgerlich, dass der Browser jedes Mal geöffnet wird, aber ich kann es vorerst sehen. Das Diagramm ist umständlich, da es sich um einen ordnungsgemäß generierten Datenrahmen handelt.

コメント 2020-06-10 204410.png

Erwägung

Warum ist die horizontale Achse standardmäßig der Zeitstempel? Es wäre großartig, wenn das HTML-Element als Zeichenfolge an den Webbrowser übergeben werden könnte, aber anscheinend gibt es nur eine Möglichkeit, den Pfad zu übergeben. Deshalb habe ich ihn diesmal als index.html geschrieben. Auf die gleiche Weise können IPython.display und python-higchart auf die gleiche Weise angezeigt werden, solange das HTML-Element extrahiert werden kann. Dieses Mal musste ich nur highstock.min.js laden, aber in einigen Fällen kann auch highchart.js benötigt werden. Was highstock.min.js betrifft, wusste ich nicht, wo die Formel war, also habe ich sie aus dem Folgenden mitgebracht. https://cdnjs.com/libraries/highcharts

Klicken Sie hier für die offizielle Seite https://www.highcharts.com/

Recommended Posts

Führen Sie pandas-highcharts display_charts in einer anderen Umgebung als jupyter aus
Führen Sie Eclipse in einer Docker-Umgebung (noVNC) aus.
Errichtete eine Umgebung für Anaconda & Jupyter
Lernen Sie maschinelles Lernen jederzeit und überall in der bedarfsgesteuerten Jupyter Notebook-Umgebung
Verwenden Sie Tensorflow in einer wurzellosen Umgebung
Erstellen Sie die Embulk-Konfiguration und führen Sie sie in Jupyter aus
Erstellen einer virtuellen Umgebung in einer Anaconda-Umgebung
Installieren Sie das Paket in einer Offline-Umgebung
Senden Sie eine E-Mail mit einem anderen Benutzer als EMAIL_HOST_USER, der in den Einstellungen in Django geschrieben wurde
Führen Sie PIFuHD in der Windows + Anaconda + Git Bash-Umgebung aus
Erstellen einer Umgebung, die Python mit Eclipse verwendet
Angeben des Jupyter Notebook-Browsers in einer Windows-Umgebung
Installieren Sie das Python-Paket in einer Offline-Umgebung
Installieren Sie LightGBM in einer virtuellen OSX-Umgebung