Erstellen von Graphen und Plots mithilfe von SQL und R (exemplarische Vorgehensweise)

Gilt für: SQL Server 2016 (13.x) und höhere Versionen

In diesem Teil der exemplarischen Vorgehensweise lernen Sie Techniken zum Erstellen von Plots und Karten mithilfe von R und SQL Server-Daten kennen. Sie erstellen zunächst ein einfaches Histogramm und anschließend eine komplexere Kartenzeichnung.

Voraussetzungen

Dieser Schritt setzt eine laufende R-Sitzung voraus, die auf den vorherigen Schritten in dieser Anleitung basiert. Es werden die Verbindungszeichenfolgen und Datenquellenobjekte verwendet, die in diesen Schritten erstellt wurden. Die folgenden Tools und Pakete werden zum Ausführen des Skripts verwendet.

  • Rgui.exe zum Ausführen von R-Befehlen
  • Management Studio zum Ausführen von T-SQL
  • googMap
  • ggmap-Paket
  • mapproj-Paket

Erstellen eines Histogramms

  1. Erstellen Sie die erste Zeichnung mithilfe der rxHistogram -Funktion. Die rxHistogram-Funktion bietet ähnliche Funktionen wie Open-Source-R-Pakete, kann aber in einem Remoteausführungskontext ausgeführt werden.

    # Plot fare amount on SQL Server and return the plot
    start.time <- proc.time()
    rxHistogram(~fare_amount, data = inDataSource, title = "Fare Amount Histogram")
    used.time <- proc.time() - start.time
    print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2), " seconds, Elapsed Time=", round(used.time[3],2), " seconds to generate plot.", sep=""))
    
  2. Das Bild wird im Grafikgerät von R für Ihre Entwicklungsumgebung zurückgegeben. Klicken Sie zum Beispiel in RStudio auf die Registerkarte Plot. In R-Tools für Visual Studiowird ein separates Grafikfenster geöffnet.

    Verwenden von rxHistogramm zum Darstellen von Fahrpreisen

    Hinweis

    Sieht Ihr Graph anders aus?

    Dies liegt daran, dass inDataSource nur die ersten 1000 Zeilen verwendet. Die Anordnung der Zeilen bei Verwendung von TOP ist ohne ORDER BY-Klausel nicht deterministisch, daher ist zu erwarten, dass die Daten und das resultierende Diagramm variieren können. Dieses bestimmte Bild wurde mithilfe von ca. 10.000 Datenzeilen generiert. Wir empfehlen daher, mit einer unterschiedlichen Anzahl von Zeilen zu experimentieren, um verschiedene Diagramme zu erhalten. Beachten Sie, wie lange es dauert, bis die Ergebnisse in Ihrer Umgebung zurückgegeben werden.

Kartendiagramm erstellen

Datenbankserver blockieren in der Regel den Internetzugriff. Dies ist möglicherweise unpraktisch, wenn R-Pakete verwendet werden, die zum Generieren von Plots Karten oder andere Bilder herunterladen müssen. Es gibt jedoch eine Problemumgehung, die Sie beim Entwickeln einer eigenen Anwendung möglicherweise als hilfreich erachten. Im Prinzip generieren Sie die Kartendarstellung auf dem Client und legen anschließend die als Attribute in der SQL Server-Tabelle gespeicherten Punkte über die Karte.

  1. Definieren Sie die Funktion, die das R-Plotobjekt erstellt. Die benutzerdefinierte Funktion mapPlot erstellt ein Streudiagramm anhand der Taxi-Abholorte und stellt die Anzahl der Fahrten dar, die von jedem dieser Orte aus begonnen haben. Die Funktion verwendet die Pakete ggplot2 und ggmap, die bereits installiert und geladen sein müssen.

    mapPlot <- function(inDataSource, googMap){
        library(ggmap)
        library(mapproj)
        ds <- rxImport(inDataSource)
        p <- ggmap(googMap)+
        geom_point(aes(x = pickup_longitude, y =pickup_latitude ), data=ds, alpha =.5,
    color="darkred", size = 1.5)
        return(list(myplot=p))
    }
    
    • Die benutzerdefinierte Funktion mapPlot hat zwei Argumente: ein vorhandenes Datenobjekt, das Sie zuvor mit RxSqlServerData definiert haben, sowie die Kartendarstellung, die vom Client übergeben wurde.
    • In der Zeile, die mit der Variablen ds beginnt, wird rxImport verwendet, um Daten aus der zuvor erstellten Datenquelle inDataSource in den Arbeitsspeicher zu laden. (Diese Datenquelle enthält 1000 Datensätze. Wenn Sie eine Karte mit mehr Datenpunkten erstellen möchten, können Sie eine andere Datenquelle ersetzen.)
    • Wenn Sie Open Source-Funktionen von R verwenden, müssen Daten in Datenrahmen im lokalen Arbeitsspeicher geladen werden. Jedoch können Sie durch Aufrufen der Funktion rxImport im Arbeitsspeicher des Remote-Compute-Kontexts ausführen.
  2. Ändern Sie den Computekontext in „lokal“, und laden Sie die zum Erstellen der Karten erforderlichen Bibliotheken.

    rxSetComputeContext("local")
    library(ggmap)
    library(mapproj)
    gc <- geocode("Times Square", source = "google")
    googMap <- get_googlemap(center = as.numeric(gc), zoom = 12, maptype = 'roadmap', color = 'color');
    
    • Die Variable gc speichert mehrere Koordinaten für den Times Square, NY.

    • Die Zeile, die mit googmap beginnt, generiert eine Karte mit den angegebenen Koordinaten in der Mitte.

  3. Wechseln Sie zum SQL Server-Computekontext, und rendern Sie die Ergebnisse, indem Sie die Plotfunktion in rxExec wie hier dargestellt umschließen. Die rxExec-Funktion wird im RevoScaleR-Paket eingeschlossen und unterstützt die Ausführung beliebiger R-Funktionen in einem Remotecomputekontext.

    rxSetComputeContext(sqlcc)
    myplots <- rxExec(mapPlot, inDataSource, googMap, timesToRun = 1)
    plot(myplots[[1]][["myplot"]]);
    
    • Die Kartendaten in googMap werden als Argument an die remote ausgeführte mapPlot-Funktion übergeben. Da die Karten in Ihrer lokalen Umgebung generiert wurden, müssen sie an die Funktion übergeben werden, damit der Plot im Kontext von SQL Server erstellt werden kann.

    • Wenn die Zeile, die mit plot beginnt, ausgeführt wird, werden die gerenderten Daten serialisiert in die lokale R-Umgebung zurückgeschrieben, sodass Sie sie in Ihrem R-Client anzeigen können.

    Hinweis

    Wenn Sie SQL Server in einem virtuellen Azure-Computer verwenden, wird an dieser Stelle möglicherweise ein Fehler angezeigt. Ein Fehler tritt auf, wenn die Standardfirewallregel in Azure den Netzwerkzugriff durch R-Code blockiert. Ausführliche Informationen zum Beheben dieses Fehlers finden Sie unter Installieren von Machine Learning (R) Services auf einer Azure-VM.

  4. Die folgende Abbildung zeigt das Ausgabediagramm. Die Taxi-Abholorte wurden zur Karte als rote Punkte hinzugefügt. Ihre Abbildung sieht möglicherweise anders aus, je nachdem, wie viele Standorte in der von Ihnen verwendeten Datenquelle enthalten sind.

    Plotten von Taxifahrten mithilfe einer benutzerdefinierten R-Funktion

Nächster Schritt