[PYTHON] Hohe Charts im Jupyter-Notizbuch

Was ist Highcharts?

Es hat die folgenden Funktionen / Merkmale. * Kein reines JavaScript-Plug-In erforderlich, funktioniert nur mit 2 JS-Dateien. * Verschiedene Diagrammtypen. * Gefaltetes Liniendiagramm. * Spline-Kurve

Es ist sehr raffiniert, aber für die kommerzielle Nutzung wird eine Gebühr erhoben.

Warum Highcharts?

wunderschönen

Wie Sie dem Beispiel auf der offiziellen Website entnehmen können, können Sie ohne Einfallsreichtum ein schönes und cooles Diagramm zeichnen.

Licht

Es ist explosiv. Zeichnen wir als Beispiel ein Streudiagramm, in dem 1000 Punkte, wie unten gezeigt, in 7 Gruppen farbcodiert sind.

import numpy as np
import pandas as pd

num = 1000
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c', 'e', 'f', 'g', 'h'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))

Vergleichen wir es mit den folgenden drei typischen Bibliotheken.

  1. Matplotlib
  2. Bokeh
  3. Plotly

Matplotlib

import matplotlib.pyplot as plt
groups = df.groupby('label')
colors = 'bgrcmyk'
for i, (name, group) in enumerate(groups):
    plt.scatter(group.x, group.y, color=colors[i])

Bokeh

from bokeh.charts import Scatter, output_notebook, show
output_notebook()
show(Scatter(x='x', y='y', color='label', data=df))

Plotly

from plotly.offline import init_notebook_mode, iplot
init_notebook_mode()
groups = df.groupby('label')
data = [{'x': group.x, 'y': group.y, 'mode': 'markers', 'name': name} for name, group in groups]
fig = {'data': data}
iplot(fig)

Highcharts

from highcharts import Highchart

groups = df.groupby('label')
options = {
    'chart': {
        'type': 'scatter',
    },
}
H = Highchart()
H.set_dict_options(options)
for name, group in groups:
    data = list(zip(group.x, group.y))
    H.add_data_set(data, 'scatter', name)
H

Das Ergebnis sieht so aus.

Einschließlich Import (Initialisierung)

benchmark01.png

Import (Initialisierung) nicht enthalten

benchmark02.png

Es gibt viele mögliche Gründe, aber es ist leicht.

%% html mit Magie implementiert

Highcharts ist eine JavaScript-Bibliothek, daher müssen Sie etwas Einfallsreichtum zeigen, um sie mit Jupyter-Notebooks verwenden zu können. Es gibt eine Möglichkeit, eine Template-Engine usw. zu verwenden. Als einfaches Beispiel verwenden wir jedoch %% html magic.

from IPython.display import HTML
%%html
    <script src="http://code.highcharts.com/highcharts.js"></script>
    <script src="http://code.highcharts.com/modules/exporting.js"></script>
    <div id="container" style="width:300px; height:200px;"></div>
    <script>
        plot = function () { 
            $('#container').highcharts({
                chart: {
                    type: 'line'
                },
                series: [{
                    data: [1, 2, 3]
                }]
            });
        };
        plot();
    </script>

htmlmagic.png

Implementiert mit Python-Highchart

In der oben erwähnten %% html-Magie schreiben Sie nur JavaScript, nicht Python. Wenn Sie mit Variablen umgehen möchten, müssen Sie außerdem eine Vorlagen-Engine usw. verwenden, was problematisch ist.

Verwenden wir also Python-Highcharts, die Highcharts von Python aus aufrufen können.

Installation

Sie können es mit pip installieren.

pip install python-highcharts

Liniendiagramm

Wenn Sie dasselbe Liniendiagramm implementieren, das von %% html magic implementiert wurde, wie oben mit Python-Highcharts beschrieben, sieht es wie folgt aus.

from highcharts import Highchart

H = Highchart(width=300, height=200)
H.add_data_set([1, 2, 3])
H

Es ist sehr sauber und jetzt kann ich in Python schreiben.

Diagrammoptionen

Übergeben Sie für das Erscheinungsbild des Diagramms einen Wörterbuchtypwert an "highcharts.Highchart.set_options ()". Mögliche Werte finden Sie in der Highcharts-Referenz (http://api.highcharts.com/highcharts).

from highcharts import Highchart

H = Highchart(width=300, height=200)
options = {
    'title': {
        'text': 'Überschrift'
    },
    'subtitle': {
        'text': 'Untertitel'
    },
    'xAxis': {
        'title': {'text': 'X-Achse'}
    },
    'yAxis': {
        'title': {'text': 'Y-Achse'},
        'lineWidth': 2
    },
}
H.set_dict_options(options)
H.add_data_set([1, 2, 3])
H

options.png

Es ist auch möglich, für jeden einzelnen Parameter eine Einstellung vorzunehmen. Dies ist möglicherweise besser lesbar.

from highcharts import Highchart

H = Highchart(width=300, height=200)
H.set_options('title', {'text': 'Überschrift'})
H.set_options('subtitle', {'text': 'Untertitel'})
H.set_options('xAxis', {'title': {'text': 'X-Achse'}})
H.set_options('yAxis', {'title': {'text': 'Y-Achse'}, 'lineWidth': 2})
H.add_data_set([1, 2, 3])
H

Das Erscheinungsbild des Elements wird mit highcharts.Highchart.add_data_set () festgelegt.

from highcharts import Highchart

H = Highchart(width=300, height=200)
H.add_data_set([1, 2, 3], dashStyle='ShortDash', color='plum', lineWidth=6)
H

glyph.png

Diagrammtyp

Geben Sie den Diagrammtyp im zweiten Argument von "highcharts.Highchart.add_data_set ()" an. Die Spezifikation jedes Positionsparameters ist wie folgt.

Positionsparameter Objekt Schimmel
1 Datensatz Liste, Taple
2 Diagrammtyp String
3 Name String

Im folgenden Beispiel gibt das erste Element ein ebenes Diagramm mit dem Namen "data1" aus, und das zweite Element gibt ein Balkendiagramm mit dem Namen "data2" aus.

from highcharts import Highchart

H = Highchart(width=300, height=200)
H.add_data_set([1, 2, 3], 'area', 'data1')
H.add_data_set([4, 5, 6], 'bar', 'data2')
H

bar.png

Aufreißen

Wenn Sie auf ein Diagrammelement klicken, wird ein weiteres Diagramm angezeigt ... und so weiter.

Übergeben Sie Wörterbuchdaten an jedes Element von highcharts.Highchart.add_data_set (). Setzen Sie den Wörterbuchschlüssel auf "Drilldown" und den Wert auf den Namen, der dem Drilldown entspricht.

Um das Element nach dem Drilldown anzugeben, geben Sie die drei Argumente des oben in highcharts.Highchart.add_drilldown_data_set () beschriebenen Positionsparameters an. Entsprechen Sie dem dritten Namen mit dem höheren Element.

from highcharts import Highchart

H = Highchart(width=400, height=200)
data = [{
    'y': 1,
    'drilldown': 'a'
}, {
    'y': 2,
    'drilldown': 'b'
}, {
    'y': 3,
    'drilldown': 'c'
}]
H.add_data_set(data, 'column')
H.add_drilldown_data_set([0.3, 0.4, 0.3], 'pie', 'a')
H.add_drilldown_data_set([4, 5, 6], 'line', 'b')
H.add_drilldown_data_set([7, 8, 9], 'area', 'c')
H

drilldown.gif

Bonus (Yakiu Hack)

Als Beispiel für die Verwendung von Drilldown erstellen wir ein Diagramm, in dem die Anzahl der Siege von 12 professionellen Baseballteams im Jahr 2016 in einem Balkendiagramm angezeigt wird. Klicken Sie auf jedes Element, um die Anzahl der Siege des Pitchers auszugeben.

import pandas as pd
from highcharts import Highchart


class Team:
    def __init__(self):
        self.team_names = ['Hawks', 'Fighters', 'Marines', 'Lions',
                           'Buffaloes', 'Eagles', 'Swallows', 'Giants',
                           'Tigers', 'Carp', 'Dragons', 'BayStars']
        self.urls = [self.make_url(x) for x in self.team_names]
        self.dfs = [self.load_pitcher_win_data(url) for url in self.urls]
        self.wins = [df['win'].sum() for df in self.dfs]
        self.team_data = [
            self.make_y_dict(team_name, wins)
            for team_name, wins in zip(self.team_names, self.wins)
        ]
        self.pitcher_data = [df.values.tolist() for df in self.dfs]

    def make_url(self, team_name):
        def join_url(x):
            return ''.join(('http://npb.jp/bis/2016/stats/idp1_', x, '.html'))

        if team_name == 'Buffaloes':
            return join_url('bs')
        elif team_name == 'BayStars':
            return join_url('db')
        else:
            return join_url(team_name[0].lower())

    def load_pitcher_win_data(self, url):
        tables = pd.read_html(url)
        df = tables[0].iloc[2:, [1, 3]]
        df.columns = ['pitcher', 'win']
        df['win'] = df['win'].astype(float)
        return df[df['win'] > 0]

    def make_y_dict(self, team_name, wins):
        return {'name': team_name, 'y': wins, 'drilldown': team_name}

t = Team()

options = {
    'chart': {
        'type': 'column'
    },
    'title': {
        'text': 'Anzahl der Siege im Jahr 2016'
    },
    'subtitle': {
        'text': 'Click the columns to view pitchers.'
    },
    'xAxis': {
        'type': 'category'
    },
    'yAxis': {
        'title': {
            'text': 'win'
        }
    },
    'legend': {
        'enabled': False
    },
    'plotOptions': {
        'series': {
            'borderWidth': 0,
            'dataLabels': {
                'enabled': True,
            }
        }
    },
    'tooltip': {
        'headerFormat':
        '<span style="font-size:11px">{series.name}</span><br>',
    },
}


H = Highchart(width=850, height=400)
H.set_dict_options(options)
H.add_data_set(t.team_data, 'column', "Team", colorByPoint=True)
for i, team_name in enumerate(t.team_names):
    H.add_drilldown_data_set(
        t.pitcher_data[i], 'column', team_name, name=team_name)
H

baseball.gif

Implementiert mit Pandas-Highcharts

Installation

Sie können es mit pip installieren.

pip install pandas-highcharts

Wie der Name schon sagt, werden Pandas DataFrames mit Highcharts gezeichnet. Sie können ein Diagramm ausgeben, indem Sie dieselben Argumente wie "pandas.DataFrame.plot ()" an "pandas_highcharts.display.display_charts" übergeben.

import pandas as pd
from pandas_highcharts.display import display_charts

df = pd.DataFrame([1, 2, 3], index=[list('abc')])
display_charts(df, figsize=(300, 200))

pandas01.png

Die Angabe des Diagrammtyps entspricht Pandas.

import pandas as pd
from pandas_highcharts.display import display_charts

df = pd.DataFrame([1, 2, 3], index=[list('abc')])
display_charts(df, kind='bar', figsize=(300, 200))

pandas02.png

In Bezug auf die Funktionalität sind Python-Highcharts häufiger vorhanden. Wenn Sie jedoch Pandas-Daten visualisieren möchten, ist dies einfacher.

Recommended Posts

Hohe Charts im Jupyter-Notizbuch
PDF auf Jupyter Notebook anzeigen
Führen Sie Jupyter Notebook unter Windows aus
Formatieren mit autopep8 auf Jupyter Notebook
Versuchen Sie, Jupyter Notebook auf einem Mac auszuführen
Schreiben Sie Diagramme in Echtzeit mit Matplotlib auf dem Jupyter-Notizbuch
Jupyter Notizbuch Memo
Einführung in Jupyter Notebook
Machen Sie Jupyter Notebook zu einem Dienst unter CentOS
Probieren Sie SVM mit scikit-learn auf Jupyter Notebook aus
Leistungsstarkes Jupyter-Notizbuch
Starten Sie das Jupiter-Notebook auf dem GPU-Server (Remote-Server).
Golang mit Jupyter
Klonen Sie das Github-Repository auf dem Jupyter-Notizbuch
Jupyter auf AWS
PC-GPU-Prüfung am Jupyter-Notebook
Histogramm / Streudiagramm auf Jupyter Notebook anzeigen
Erstellen Sie ein Jupyter-Notebook auf einem Remote-Server (CentOS).
Jupyter Notebook Passwort
Verwenden Sie vim-Tastenkombinationen in Jupyter Notebook, das mit Docker gestartet wurde
Jupyter Notizbuch Memo
Führen Sie Jupyter Notebook auf einem Remote-Server aus
Installieren Sie matplotlib und zeigen Sie das Diagramm in Jupyter Notebook an
[Jupyter Notebook / Lab] Drei Möglichkeiten zum Debuggen auf Jupyter [Pdb]
[Pythonocc] Ich habe versucht, CAD auf einem Jupyter-Notebook zu verwenden
Einfache Anzeige des Liniendiagramms auf dem Jupyter Notebook
Probieren Sie Apache Spark mit Jupyter Notebook (auf Local Docker) aus
Öffnen Sie das auf dem Server gestartete Jupyter-Notizbuch aus der Ferne
Jupyter Notebook beginnt nicht mit Fisch auf dem Mac
Hallo X3DOM auf Jupyter
Starten Sie Jupyter Notebook
3 Jupyter Notebook (Python) Tricks
[Cloud103] # 3 Jupyter Notebook wieder
Führen Sie Tensorflow von Jupyter Notebook unter Bash unter Ubuntu unter Windows aus
Überwachen Sie das Trainingsmodell mit TensorBord auf Jupyter Notebook
Probieren Sie grundlegende Operationen mit Pandas DataFrame auf Jupyter Notebook aus
EC2-Bereitstellung mit Vagrant + Jupyter (IPython Notebook) auf Docker
[Windows] [Python3] Installieren Sie Python3 und Jupyter Notebook (ehemals Ipython Notebook) unter Windows
So zeigen Sie den Fortschrittsbalken auf dem Jupyter-Notizbuch an, um den Fortschritt anzuzeigen
Installiere octave_kernel auf Jupyter [zusätzlicher Hinweis]
Tastenkombination für Jupyter-Notebook
Führen Sie Jupyter unter Ubuntu unter Windows aus
Einführung des Jupyter Notebook in CentOS7
Verwenden von Graphviz mit Jupyter Notebook
[Memo] Anzeige des Jupyter-Notizbuchs auf dem PC in gleicher Schrift (Mac)
HTML in Jupyter-Notizbuch anzeigen
Verwenden Sie pip mit Jupyter Notebook
Mehrfachverarbeitungsfehler in Jupyter Notebook
Laden Sie die Module reibungslos auf den Jupiter zurück
Anzeigen von Zeichenfolgen in IPython Notebook
Versuchen Sie, Jupyter Notebook dynamisch zu verwenden
[Super Basics] Über jupyter Notebook
Verwenden Sie Cython mit Jupyter Notebook
Homebrew, Pyenv, Anaconda, Jupyter Notebook
Spielen Sie mit Jupyter Notebook (IPython Notebook)
Beschriften Sie Bilder im Jupiter-Labor
[Komplette Ausgabe] Jupyter Notebook Shortcut
Tensorboard im Jupyter-Notebook auf Docker kann nicht angezeigt werden (gelöst)
Führen Sie IPython Notebook auf Docker aus
Eine sehr bequeme Möglichkeit, mit Jupyter Notebook zu präsentieren