BigQuery-Daten in einem Jupyter-Notebook visualisieren

BigQuery ist ein Data Warehouse für Analysen im Petabytebereich, mit dem SQL-Abfragen für riesige Datenmengen nahezu in Echtzeit ausgeführt werden können.

Mithilfe von Datenvisualisierungstools können Sie BigQuery-Daten verständlich darstellen und interaktiv analysieren. Visualisierungstools helfen Ihnen, anhand Ihrer Daten Trends zu ermitteln, darauf zu reagieren und Prognosen zu erstellen. In dieser Anleitung verwenden Sie die BigQuery-Clientbibliothek für Python und Pandas in einem Jupyter-Notebook, um Daten in der BigQuery-Beispieltabelle natality zu visualisieren.

Ziele

In dieser Anleitung lernen Sie Folgendes:

  • Eine Umgebung zum Ausführen von Jupyter-Notebooks einrichten
  • BigQuery-Daten mit der BigQuery-Python-Clientbibliothek und Pandas abfragen und visualisieren

Kosten

BigQuery ist ein kostenpflichtiges Produkt. Beim Zugriff darauf werden von BigQuery Nutzungskosten berechnet. Bei BigQuery-Abfragen ist das erste TB pro Monat kostenlos. Weitere Informationen finden Sie auf der Seite "Preise" für BigQuery.

Hinweis

Bevor Sie mit dieser Anleitung beginnen, erstellen Sie in der Google Cloud Console ein Projekt oder wählen eines aus.

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. BigQuery ist in neuen Projekten automatisch aktiviert. Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu Aktivieren Sie die BigQuery API.

    Aktivieren Sie die API

    .
  4. BigQuery bietet eine Sandbox, wenn Sie für Ihr Projekt keine Kreditkarte angeben oder die Abrechnung nicht aktivieren möchten. Die Schritte in diesem Thema funktionieren für Projekte mit und ohne aktivierter Abrechnung. Wenn Sie die Abrechnung aktivieren möchten, lesen Sie die Informationen unter Abrechnungseinstellungen eines Projekts ändern.

Lokale Jupyter-Umgebung einrichten

In dieser Anleitung verwenden Sie ein lokal gehostetes Jupyter-Notebook. Mit den folgenden Schritten installieren Sie Jupyter, richten die Authentifizierung ein und installieren die erforderlichen Python-Bibliotheken.

  1. Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die neueste Version der BigQuery-Clientbibliothek für Python zu installieren, einschließlich der Pandas-Bibliothek, die für Funktionen erforderlich ist, die Pandas verwenden:

    pip install --upgrade 'google-cloud-bigquery[pandas]'
    
  2. Eine Installationsanleitung für Jupyter finden Sie in der Jupyter-Dokumentation.

  3. Standardanmeldedaten für Anwendungen richten Sie gemäß der Anleitung unter Erste Schritte bei der Authentifizierung ein. Zum Einrichten der Authentifizierung erstellen Sie ein Dienstkonto und legen eine Umgebungsvariable fest.

Übersicht: Jupyter-Notebooks

Ein Notebook bietet eine Umgebung, in der Code erstellt und ausgeführt werden kann. Ein Notebook ist im Wesentlichen ein Quellartefakt, das als .ipynb-Datei gespeichert wird. Es kann beschreibenden Textinhalt, ausführbare Codeblöcke und zugehörige Ergebnisse enthalten (als interaktive HTML-Ausgabe). Strukturell handelt es sich bei einem Notebook um eine Reihe von Zellen.

Eine Zelle ist ein Block von Eingabetext, der ausgewertet wird, um Ergebnisse zu erzeugen. Es gibt zwei verschiedene Typen von Zellen:

  • Codezellen: enthalten auszuwertenden Code. Alle durch das Ausführen des Codes generierten Ausgaben oder Ergebnisse werden sofort unter dem Eingabecode erzeugt.

  • Markdown-Zellen: enthalten Markdown-Text, der in HTML konvertiert wird, um Kopfzeilen, Listen und formatierten Text zu generieren.

Der folgende Screenshot zeigt eine Markdown-Zelle, gefolgt von einer Python-Codezelle. Die Ausgabe der Python-Zelle wird direkt unter dem Code angezeigt.

Screenshot: Markdown- und Codezellen in Jupyter

Jedes geöffnete Notebook ist einer ausgeführten Sitzung zugeordnet. In Python wird dies auch als Kernel bezeichnet. Diese Sitzung führt den gesamten innerhalb des Notebooks eingegebenen Code aus und verwaltet den Status (Variablen, deren Werte, Funktionen und Klassen sowie vorhandene Python-Module, die geladen werden).

BigQuery-Daten abfragen und visuell darstellen

In diesem Abschnitt der Anleitung erstellen Sie ein Datalab-Notebook, mit dem Daten in BigQuery abgefragt und visualisiert werden können. Für die Visualisierungen verwenden Sie die Daten aus der Beispieltabelle zur Geburtenrate (natality). Alle Abfragen in dieser Anleitung erfolgen in der SQL-Standardsyntax.

So erstellen Sie mit einem Jupyter-Notebook Abfragen und Visualisierungen für BigQuery-Daten:

  1. Wenn Sie Jupyter noch nicht gestartet haben, führen Sie auf Ihrem Terminal folgenden Befehl aus:

    jupyter notebook
    
  2. Jupyter sollte nun ausgeführt werden und in einem Browserfenster geöffnet sein. Klicken Sie im Jupyter-Fenster auf die Schaltfläche Neu und wählen Sie Python 3 aus, um ein Python-Notebook zu erstellen.

    Screenshot: neues Jupyter-Python 3-Notebook

  3. Klicken Sie oben auf der Seite auf Unbenannt.

  4. Geben Sie im Dialogfeld Notebook umbenennen einen neuen Namen wie z. B. BigQuery tutorial ein. Klicken Sie dann auf Umbenennen.

  5. Die BigQuery-Clientbibliothek für Python bietet einen magischen Befehl, mit dem Sie Abfragen mit minimalem Code ausführen können. Fügen Sie in die erste Zelle des Notebooks folgenden Code ein, um die magischen Befehle aus der Clientbibliothek zu laden:

    %load_ext google.cloud.bigquery
  6. Klicken Sie zum Ausführen des Befehls auf die Schaltfläche Ausführen oder drücken Sie SHIFT + ENTER.

  7. Die BigQuery-Clientbibliothek für Python stellt die Zellmagie %%bigquery zum Ausführen einer SQL-Abfrage bereit. Die Ergebnisse werden als Pandas DataFrame zurückgegeben. Geben Sie den folgenden Code in die nächste Zelle ein, um die Gesamtzahl der Geburten nach Jahr zurückzugeben:

    %%bigquery
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  8. Klicken Sie auf Ausführen.

  9. Die Abfrageergebnisse werden unterhalb der Codezelle angezeigt.

    Screenshot: Geburten nach Jahr

  10. Geben Sie im nächsten Zellenblock den folgenden Befehl ein, um dieselbe Abfrage auszuführen, aber speichern Sie die Ergebnisse dieses Mal in der neuen Variablen total_births, die als Argument an %%bigquery übergeben wird. Mithilfe der Ergebnisse können Sie anschließend weitere Analysen und Visualisierungen ausführen.

    %%bigquery total_births
    SELECT
        source_year AS year,
        COUNT(is_male) AS birth_count
    FROM `bigquery-public-data.samples.natality`
    GROUP BY year
    ORDER BY year DESC
    LIMIT 15
  11. Klicken Sie auf Ausführen.

  12. Sie haben jetzt einen Pandas DataFrame in der Variablen total_births gespeichert. Diese ist zur Darstellung bereit. Fügen Sie in die nächste Zelle als Vorbereitung auf die Darstellung der Abfrageergebnisse folgenden integrierten magischen Befehl ein, um die Bibliothek matplotlib zu aktivieren. Matplotlib ist die von Pandas für die Darstellung verwendete Bibliothek.

    %matplotlib inline
  13. Klicken Sie auf Ausführen.

  14. Geben Sie in die nächste Zelle folgenden Code ein, um die Abfrageergebnisse mithilfe der Pandas-Methode DataFrame.plot() als Balkendiagramm zu visualisieren. Weitere Informationen zur Datenvisualisierung mit Pandas erhalten Sie in der Pandas-Dokumentation.

    total_births.plot(kind="bar", x="year", y="birth_count")
  15. Klicken Sie auf Ausführen.

  16. Das Diagramm wird unterhalb des Codeblocks angezeigt.

    Screenshot: Balkendiagramm mit Geburten nach Jahr

  17. Fügen Sie anschließend die folgende Abfrage in die nächste Zelle ein, um die Anzahl der Geburten nach Wochentag abzurufen.

    %%bigquery births_by_weekday
    SELECT
        wday,
        SUM(CASE WHEN is_male THEN 1 ELSE 0 END) AS male_births,
        SUM(CASE WHEN is_male THEN 0 ELSE 1 END) AS female_births
    FROM `bigquery-public-data.samples.natality`
    WHERE wday IS NOT NULL
    GROUP BY wday
    ORDER BY wday ASC

    Da das Feld wday (Wochentag) Nullwerte zulässt, werden in der Abfrage Datensätze mit dem Wert null für wday ausgeschlossen.

  18. Klicken Sie auf Ausführen.

  19. Geben Sie in die nächste Zelle folgenden Code ein, um die Abfrageergebnisse in einem Liniendiagramm darzustellen.

    births_by_weekday.plot(x="wday")
  20. Klicken Sie auf Ausführen.

  21. Das Diagramm wird unterhalb des Codeblocks angezeigt. Beachten Sie, dass die Anzahl der Geburten sonntags (1) und samstags (7) drastisch abnimmt.

    Screenshot: Liniendiagramm für Geburten nach Wochentag

  22. Klicken Sie auf File > Save and Checkpoint oder klicken Sie in der Symbolleiste auf das Symbol zum Speichern. Wenn Sie einen Prüfpunkt erstellen, können Sie das Notebook in einen vorherigen Zustand zurücksetzen.

Pandas DataFrames

Mithilfe von magischen Befehlen können Sie mit minimaler Syntax mit BigQuery interagieren. Im Hintergrund verwendet %%bigquery die BigQuery-Clientbibliothek für Python, um die angegebene Abfrage auszuführen. Die Ergebnisse werden in einen Pandas DataFrame umgewandelt, optional in einer Variablen gespeichert und schließlich angezeigt. Wenn Sie die BigQuery-Clientbibliothek für Python direkt und nicht über magische Befehle verwenden, haben Sie mehr Kontrolle über Ihre Abfragen und können komplexere Konfigurationen verwenden. Durch die Einbindung der Bibliothek in Pandas können Sie deklarativen SQL-Dialekt mit imperativem Code (Python) kombinieren, um aufschlussreiche Datenanalysen, Visualisierungen und Transformationen durchzuführen.

BigQuery-Daten mit Pandas DataFrames abfragen und visuell darstellen

In diesem Abschnitt der Anleitung verwenden Sie Pandas DataFrames, um Daten in BigQuery abzufragen und zu visualisieren. Sie verwenden die BigQuery-Clientbibliothek für Python, um BigQuery-Daten abzufragen. Für die Datenanalyse mit DataFrames verwenden Sie die Pandas-Bibliothek.

  1. Geben Sie den folgenden Python-Code in die nächste Zelle ein, um die BigQuery-Clientbibliothek für Python zu importieren und einen Client zu initialisieren. Der BigQuery-Client wird zum Senden und Empfangen von Nachrichten von der BigQuery API verwendet.

    from google.cloud import bigquery
    
    client = bigquery.Client()
  2. Klicken Sie auf Run (Ausführen).

  3. Führen Sie mit der Methode Client.query() eine Abfrage aus. Geben Sie in die nächste Zelle folgenden Code ein, um die jährliche Anzahl von Mehrlingsgeburten nach Anzahl der Mehrlinge – 2 für Zwillinge, 3 für Drillinge usw. – abzurufen.

    sql = """
    SELECT
        plurality,
        COUNT(1) AS count,
        year
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(plurality) AND plurality > 1
    GROUP BY
        plurality, year
    ORDER BY
        count DESC
    """
    df = client.query(sql).to_dataframe()
    df.head()
  4. Klicken Sie auf Ausführen.

  5. Wenn Sie die im DataFrame enthaltenen Abfrageergebnisse in einem Diagramm darstellen möchten, geben Sie in die nächste Zelle folgenden Code ein. Die Daten werden dadurch gedreht und als übereinander angeordnetes Balkendiagramm mit der Anzahl der im Lauf der Zeit erfassten Mehrlingsgeburten angezeigt.

    pivot_table = df.pivot(index="year", columns="plurality", values="count")
    pivot_table.plot(kind="bar", stacked=True, figsize=(15, 7))
  6. Klicken Sie auf Ausführen.

  7. Das Diagramm wird unterhalb des Codeblocks angezeigt.

    Screenshot: übereinander angeordnetes Balkendiagramm mit Mehrlingsgeburten nach Jahr

  8. Mit der folgenden Abfrage in der nächsten Zelle rufen Sie die Anzahl der Geburten anhand der Anzahl der Schwangerschaftswochen ab.

    sql = """
    SELECT
        gestation_weeks,
        COUNT(1) AS count
    FROM
        `bigquery-public-data.samples.natality`
    WHERE
        NOT IS_NAN(gestation_weeks) AND gestation_weeks <> 99
    GROUP BY
        gestation_weeks
    ORDER BY
        gestation_weeks
    """
    df = client.query(sql).to_dataframe()
  9. Klicken Sie auf Ausführen.

  10. Fügen Sie in die nächste Zelle folgenden Code ein, um die im DataFrame enthaltenen Abfrageergebnisse in einem Diagramm darzustellen.

    ax = df.plot(kind="bar", x="gestation_weeks", y="count", figsize=(15, 7))
    ax.set_title("Count of Births by Gestation Weeks")
    ax.set_xlabel("Gestation Weeks")
    ax.set_ylabel("Count")
  11. Klicken Sie auf Ausführen.

  12. Das Balkendiagramm wird unterhalb des Codeblocks angezeigt.

    Screenshot: durchschnittliches Gewicht nach SSW

Nächste Schritte

  • Abfragen für BigQuery schreiben: In der BigQuery-Dokumentation wird unter Daten abfragen gezeigt, wie Sie Abfragen ausführen, benutzerdefinierte Funktionen (User-Defined Functions, UDFs) erstellen und vieles mehr.

  • BigQuery-Syntax kennenlernen: Der bevorzugte Dialekt für SQL-Abfragen in BigQuery ist Standard-SQL. Eine entsprechende Beschreibung finden Sie in der SQL-Referenz. Die an Legacy-SQL angelehnte BigQuery-Syntax wird in der Referenz zu Abfragen (Legacy-SQL) beschrieben.